概要:コラボレーター間のデータセットのマッチ率を最大化し、コラボレーションの成果を高めるために、ソースデータを適切に準備します。
データ準備について
AppsFlyerのData Collaboration Platform(DCP)は、複数のコラボレーターから提供される大規模なトランザクションデータ、ユーザーレベルデータ、またはその両方を取り込み・処理できるよう設計されています。データを取り込むと、DCPは共通の識別子(ハッシュ化されたメールアドレスや電話番号など)を使用してデータセット間でユーザーを照合し、そのデータに基づくコラボレーションのワークフローを実行できます。
この記事では、以下について説明します。
- DCPで処理できるデータの種類(トランザクションデータ、ユーザーレベルデータ、またはその組み合わせ)
- コラボレーター間のマッチ率を最大化し、アクティベーションパートナー側でも最適に照合できるようにするためのデータ構造
- 推奨されるデータ構造と、推奨されないデータ構造
- CSVファイルで複数値の識別子を扱う方法
データタイプの理解
コラボレーションで使用する多くのソースには、以下のいずれか、または両方のデータタイプが含まれます。
-
ユーザーレベルデータ(識別子データ)
- 目的:各ユーザーと、照合に使用する識別子を表現する
- 推奨構造:1ユーザーにつき1行
-
トランザクションデータ(イベントデータ)
- 目的:ユーザーの行動(購入、訪問、取引など)を表現する
- 一般的な構造:1ユーザーにつき複数行(1人のユーザーが複数のトランザクションを持つ場合があるため)
データ構造のガイドライン
このセクションでは、DCPでのデータ構造に関するガイドラインとベストプラクティスについて説明します。
推奨されるデータ構造
DCPへ効率的に取り込み、最大限の成果を得られるようソースデータを構成するには:
- ソースデータの形式要件を満たしていることを確認します。
- 最良の結果を得るため、識別子データは1ユーザーにつき1行で構成し、そのユーザーについて利用可能な識別子をすべて含めてください。詳細は、推奨される識別子の構造を参照してください。
- ユーザーが複数のメールアドレスや電話番号を持つ場合は、配列に対応した形式(Parquet、BigQuery、Snowflakeなど)を使用します。
- ハッシュ化のガイドラインに従っていることを確認します。
- トランザクションデータセット(および該当するその他のデータタイプ)では、DCPのData Viewツールを使用して、コラボレーションに適した、ビジネス用途を意識したプライバシー保護済みのデータサブセットを作成し、ローテーブルではなくそのData Viewを共有してください。 Data Viewが推奨される理由
他の構造も使用できますが、DCPを最大限に活用するうえでは最適でない場合があります。推奨されないデータ構造を参照してください。
推奨される識別子の構造
マッチ率を最大化するには、可能な限りユーザーレベルの識別子データを1ユーザーにつき1行で送信し、実際のユーザー情報の持ち方を正確に反映した構造で、利用可能な識別子をすべて含めることを推奨します。
オプション1:1ユーザーにつき1行、識別子タイプごとに1つの値
シンプルで効果的な構造です。
各ユーザーが、ハッシュ化されたメールアドレス、ハッシュ化された電話番号などをそれぞれ最大1つしか持たない場合に使用します。
例
| ユーザーID | ハッシュ化されたメールアドレス | ハッシュ化された電話番号 |
|---|---|---|
| 123 | 5d41402 | 152d234b70 |
| 456 | 7d793037 | |
| 789 | 0e6e5414 |
この構造が推奨される理由
- 準備と取り込みが最もシンプル
- 検証やトラブルシューティングが容易
- 識別子が完全かつ一貫している場合、コラボレーターのデータセットとの照合やアクティベーション先のメディアパートナーとの照合で高いマッチ率が期待できる
適したケース
- CSVベースのアップロードに最適
- Parquet/BigQuery/Snowflakeでも利用可能
オプション2:複数値フィールドで識別子の配列(リスト)を使用
ユーザーが複数のメールアドレスや電話番号を持つ場合に、精度を高めるのに最適な構造です。
1人のユーザーが同じ識別子タイプの値を複数持つ場合に使用します。例:
- 複数のハッシュ化メールアドレス
- 複数のハッシュ化電話番号
この構造はネイティブ配列として表現してください。
例
| ユーザーID | ハッシュ化されたメールアドレス | ハッシュ化された電話番号 | MAID |
|---|---|---|---|
| u_0001 | [a1b2 · c3d4 · e5f6] | [p1q2 · r3s4] | m001 |
| u_0002 | [z9y8 · x7w6] | m002 | |
| u_0003 | [t1u2 · v3w4 · x5y6] |
この構造が推奨される理由
- 識別子データが社内で実際に保存されている構造を反映しやすい
- 必要となる「メールアドレス列」の数を事前に想定する必要がない
- 継続的なスキーマ変更を避けられる
- 1ユーザーにつき複数の識別子を持たせることで、コラボレーターのデータセットやアクティベーション先のメディアパートナーとのマッチ可能性を最大化できる
適したケース
- Parquet(S3/GCS)
- BigQuery
- Snowflake
データ構造の実践チェックリスト
識別子データ(ユーザーレベルデータ)のチェックリスト
- 1行が1ユーザーを表していること。
- 利用可能な識別子(ハッシュ化メールアドレス、ハッシュ化電話番号、MAIDなど)をすべて含めること。
- 複数の値(複数のメールアドレスなど)がある場合は、可能な限りネイティブ配列を使用すること。
- セル内のリスト、「email_1/email_2/email_3」のような複数列、複数行にまたがる識別子データの構造は避けること。
トランザクションデータ(イベントデータ)のチェックリスト
- イベント/トランザクションの行は、元の構造のまま保持します。トランザクションデータの例を参照してください。
- 必要に応じてData Viewを使用し、コラボレーションに適したユーザーレベルのサマリーを作成します。
Data Viewのチェックリスト
- ビジネス用途を意識したData Viewを作成します(オーディエンス作成に適した、集約・標準化済みの構造)。
- 可能な限り、機密性の高いローデータのテーブルではなくData Viewを共有します。
- 共有するフィールドは、プライバシー保護とビジネス上の情報保護の観点から、必要なものだけに絞ります。
- 機密データへのアクセスを減らし、効率を高めるため、集約処理の活用を検討します。
対応する取り込み用クラウドサービスと形式
DCPでは、以下を含む複数のクラウドサービスからデータを取り込めます。
- AWS S3
- GCS(Google Cloud Storage)
- BigQuery
- Snowflake
形式に関するガイドライン
- 各ユーザーが識別子タイプごとに1つの値(メールアドレス1つ、電話番号1つなど)を持つ場合は、CSV(カンマ区切り)を使用します。
- ユーザーが同じ識別子タイプの複数の値(複数のハッシュ化メールアドレスなど)を持つ場合は、配列に対応した形式を推奨します。
- Parquet(ビッグデータで一般的)
- BigQuery(配列を標準サポート)
- Snowflake(配列を標準サポート)
注意:
- 「配列(Array)」とは、複数の値を1つのリストとして持つことを意味します。
- ParquetやBigQuery/Snowflakeの配列は標準的な機能であり、多くのデータチームで無理なく対応できます。
推奨されないデータ構造
DCPへの取り込みに適したデータ構造もあれば、適していない構造もあります。以下は、推奨されないデータ構造です。
避けるべき構造:同じ識別子タイプに複数の列を使用
「メイン/サブ/3つ目のメールアドレス」のように列を分ける構造は推奨されません。
避けるべき例
| ユーザーID | メールアドレスハッシュ1 | メールアドレスハッシュ2 | メールアドレスハッシュ3 |
|---|---|---|---|
| 123 | a1b2 | c3d4 | |
| 456 | z9y8 |
避けるべき理由
- ユーザーごとの値の数を事前に予測できない
- 列数が増え続け、スキーマの保守が複雑になる
避けるべき構造:1つのセルに「リスト」を自由形式のテキストとして格納
一見便利に見えますが、エラーが発生しやすい構造です。
避けるべき例
| ユーザーID | ハッシュ化メールアドレス(テキスト) |
|---|---|
| 123 | a1b2 · c3d4 · e5f6 |
避けるべき理由
- 実際の配列型ではない
- 形式やエスケープ処理の問題が起こりやすい
- わずかな表記の不整合でも取り込みに失敗する可能性がある
避けるべき構造:識別子データを1ユーザーにつき複数行に分割(ユーザーの識別子テーブルを作る場合)
識別子データを1ユーザー1行で保持できる場合は、複数行に分割しないでください。
避けるべき例
| ユーザーID | 識別子タイプ | 識別子の値 |
|---|---|---|
| 123 | hashed_email | a1b2 |
| 123 | hashed_email | c3d4 |
避けるべき理由
- ユーザー単位のデータを再構成するために追加処理が必要になる
- 重複や不整合が発生するリスクが高まる
- 大規模データでは処理効率が低い
注意:トランザクションテーブルでは1ユーザーにつき複数行になるのが一般的ですが、照合に使用する識別子データ(ユーザーレベルデータ)のテーブルには適していません。
追加情報
このセクションでは、関連するトピックについて、より詳しい情報を提供します。
トランザクションデータの例
トランザクション/イベントデータでは、1ユーザーにつき複数行になる場合があります。
| トランザクションID | ユーザーID | トランザクション日 | 金額 | カテゴリ |
|---|---|---|---|---|
| t_001 | 123 | 2025-12-01 | 120.00 | 食料品 |
| t_002 | 123 | 2025-12-15 | 45.00 | 薬局 |
| t_003 | 456 | 2025-12-20 | 300.00 | 家電 |
推奨
- トランザクションデータは、元の自然な構造のまま取り込みます。
- Data Viewツールを使用して、コラボレーションに適したユーザーレベルのビューを作成します(例:過去30日間の支出額、カテゴリ嗜好、直近購入日/購入頻度のサマリー)。
コネクタ別のサンプル(AWS S3、GCS、BigQuery、Snowflake)
「識別子の配列/リスト」とは?
1人のユーザーが複数のメールアドレスや電話番号を持つことがあります(個人用と仕事用のメールアドレスなど)。その場合、列を増やしたり、1つのテキストフィールドに無理に詰め込んだりするのではなく、複数の値をリストとして表現します。
| ユーザーID | ハッシュ化されたメールアドレス(リスト) |
|---|---|
| u_0001 | [a1b2 · c3d4 · e5f6] |
| u_0002 | [z9y8 · x7w6] |
1. AWS S3/GCSコネクタ(Parquet)
識別子データのサンプルに含める内容(スキーマ)
| フィールド | タイプ | 備考 |
|---|---|---|
| user_id | string | 1ユーザーにつき1行 |
| hashed_emails | 文字列の配列 | 複数値の識別子(推奨) |
| hashed_phones | 文字列の配列 | 複数値の識別子(推奨) |
| maid | string | 任意の追加識別子 |
Parquetはリストをネイティブでサポートしているため、ユーザーが複数のメールアドレス/電話番号を持つ場合に推奨されます。
2. BigQueryコネクタ(テーブルプレビューとスキーマのスクリーンショット)
識別子データのスキーマ例(BigQuery)
| フィールド | タイプ | モード |
|---|---|---|
| user_id | STRING | NULLABLE |
| hashed_emails | STRING | REPEATED(ARRAY) |
| hashed_phones | STRING | REPEATED(ARRAY) |
| maid | STRING | NULLABLE |
BigQueryでは、配列はネイティブ機能(REPEATEDフィールド)としてサポートされています。複数のメールアドレス/電話番号がある場合は、この方法を推奨します。
3. Snowflakeコネクタ(テーブルプレビューとスキーマのスクリーンショット)
識別子データのスキーマ例(Snowflake)
| フィールド | タイプ | 備考 |
|---|---|---|
| USER_ID | VARCHAR | 1ユーザーにつき1行 |
| HASHED_EMAILS | ARRAY | 複数値の識別子 |
| HASHED_PHONES | ARRAY | 複数値の識別子 |
| MAID | VARCHAR | 任意 |
Snowflakeは、リスト形式のフィールド(配列)をサポートしています。 email_1/email_2/email_3のように複数の列を作成するよりも、この方法を推奨します。
Data Viewが推奨される理由
Data Viewは、元のデータセットを変更することなく、既存のデータソースから作成できるカスタマイズ済みのデータサブセットです。 Data Viewでは、データを加工・精緻化・集約する処理を行い、コラボレーションに必要な情報だけを共有できます。共有データを明確かつ目的に沿った内容に保ちながら、それ以外のデータは非公開かつ安全な状態に維持できます。コラボレーションでData Viewを使用する理由:
ビジネス用途に適しており、コラボレーションしやすい
- Data Viewを使用すると、ローログや複雑なトランザクションスキーマではなく、「Customer Identity View」「Eligible Audience View」「Purchase Summary View」など、整理されたビジネス向けの構造でデータを提示できます。
- また、「アクティブユーザー」「過去30日間の総支出額」などの定義を標準化できるため、双方が同じ定義とロジックに基づいてデータを利用できます。
設計上、よりプライバシーを保護しやすい
- Data Viewはデータ最小化に対応しており、ローデータセット全体を公開するのではなく、コラボレーションに必要なフィールドと行だけを共有できます。
- 以下の方法でプライバシーリスクを抑えられます。
- 不要な属性を除外
- 粒度を制限(例:明細レベルのトランザクションではなく、集約済みの指標を共有)
- 照合に必要な識別子だけを共有し、追加の機密列は共有しない
機密性の高いビジネスデータを保護
- ロートランザクションテーブルには、詳細な購買行動、価格パターン、加盟店との関係、内部IDなど、機密性の高いビジネス情報が含まれる場合があります。
- Data Viewを使用すると、コラボレーションに必要な情報だけを共有できます。
- 例:商品単位の詳細ではなく、カテゴリ単位の集計値を共有
- 例:正確な明細ではなく、支出額のレンジやサマリー指標を共有
- これにより、競争上重要な情報や独自情報を意図せず開示してしまうリスクを軽減できます。
コスト効率とパフォーマンスを高められる
Data Viewを軽量で効率的な構造にすることで、以下を削減できる場合があります。
- スキャンするデータ量
- 処理時間
- コンピューティングコスト
コラボレーション向けのビュー(特に集約済みビュー)をあらかじめ構成しておくことで、コラボレーションをより迅速に進め、運用上の予測可能性を高められる場合があります。
プラットフォーム別:複数のID/キーのアップロードとマッチング動作
DCPの識別子アップロード
| パートナー/プラットフォーム | 対応する識別子タイプ | アップロードモード | アップロード時の動作 | 識別子の優先順位(単一タイプのみ対応するパートナー) |
|---|---|---|---|---|
| Meta | Email、Phone、IDFA、GAID、Android ID、First Name、Last Name、DOB、City、State、Zip、Country | 対応するすべてのタイプ | 対応するすべての識別子タイプをアップロード | 該当なし - すべてアップロード |
| Email、Phone、IDFA、GAID、Android ID、Customer ID | 単一タイプ | オーディエンスごとに1種類の識別子タイプをアップロード | 1. Email 2. Phone 3. Mobile IDs 4. Customer ID | |
| TikTok | Email、Phone、IDFA、GAID、Android ID | 対応するすべてのタイプ | 対応するすべての識別子タイプをアップロード | 該当なし - すべてアップロード |
| Email、Phone、IDFA、GAID | 単一タイプ | オーディエンスごとに1種類の識別子タイプをアップロード | 1. Email 2. Phone 3. Mobile IDs | |
| Infillion | Email、Phone、IDFA、GAID、MM-UUID | 対応するすべてのタイプ | 対応するすべてのタイプを最大3ファイルに分けてアップロード | 該当なし - すべてアップロード |
| TheTradeDesk | Email、Phone | 単一タイプ | オーディエンスごとに1種類の識別子タイプをアップロード | 1. Email 2. Phone |
| AppsFlyer Data Locker | 利用可能なすべての識別子 | すべてのタイプを統合 | すべての識別子を1つの統合ファイルで配信 | 該当なし - すべて配信 |
| プラットフォーム | 1ユーザーにつき複数のIDを送信できるか | いずれかのIDでマッチできるか | 複数のIDを組み合わせてマッチできるか | マッチングモデル(実運用) | 備考 |
|---|---|---|---|---|---|
| Meta | はい | はい | はい | 決定論的、いずれかのID/組み合わせ | Email、Phone、MAID、fbp/fbcをすべて評価。複数のIDのうちいずれかでマッチする仕組みが最も強力 |
| はい | 限定的 | いいえ | 決定論的、優先順位あり | 1つのIDでユーザーを特定します。複数のIDを組み合わせてマッチを成立させることはありません。 | |
| TikTok | はい | はい | はい | 決定論的、いずれかのID/組み合わせ | Metaと非常に近い仕組み。イベントではttclidが有効 |
| はい | 一部対応 | 限定的 | 決定論的、ID中心 | 主にEmailとMAIDを使用。複数IDによる補完効果は限定的 | |
| The Trade Desk(TTD) | はい | IDグラフ経由 | はい(グラフ経由) | IDグラフを利用した決定論的マッチング | UID2、MAID、CookieをEUID/UID2グラフ経由で解決 |
| Infillion | はい | IDグラフ経由 | はい(グラフ経由) | パートナーのIDグラフを利用した決定論的マッチング | OmniID/パートナーのID解決機能を利用 |
アクティベーション計画のポイント
-
MetaとTikTok
- 利用可能な識別子をすべて送信
- 複数IDのうち「いずれか」でマッチできる仕組みに対応
- 識別子が豊富なクリーンルームアクティベーションに最も適したプラットフォーム
-
Google
- カバレッジを広げるために複数のIDを送信
- 複数IDの組み合わせによる補完効果は期待しない
- Email/Phoneが中心
-
TTDとInfillion
- マッチング品質は、識別子の数よりIDグラフへの参加状況に左右される
- 生の識別子数より、UID2/OmniIDのカバレッジが重要
-
Pinterest
- MetaよりGoogleに近い動作
- Email+MAID以外のIDを追加しても得られる効果は限定的
要点
- 複数IDのうち「いずれか」でネイティブにマッチできるのはMetaとTikTokのみ
- Googleは決定論的ですが、1つのIDでユーザーを特定します。
- オープンWeb系プラットフォームは、生のIDではなくIDグラフを利用してマッチングします。
メディアパートナー別:ハッシュ化データの形式ガイドライン
共通の正規化ルール:
マッチ精度を確保するため、ほぼすべてのプラットフォームで、データをハッシュ化する前に以下の正規化処理が必要です。
- テキスト:小文字に変換し、先頭と末尾の空白を削除します。
- 電話番号:E.164形式に変換します(例:+15551234567)。
- ハッシュ化:業界標準はSHA-256ですが、一部のプラットフォームではMD5またはSHA-1も利用できます。
| メディアパートナー | メールアドレスのガイドライン | 電話番号のガイドライン | モバイルID(MAID)のガイドライン | プラットフォーム固有の注意点とマッチングロジック | 関連リファレンス |
|---|---|---|---|---|---|
| Google Ads/DV360 | 形式:小文字に変換し、空白を削除。ドメインを含めます。 Gmailルール:@gmail.com/@googlemail.comでは、「@」より前のピリオド(.)と「+」以降のサフィックスを削除します。ハッシュ化:SHA-256(16進エンコード)。 | 形式:E.164(例:+16505551212)。国番号を含める必要があります。ハッシュ化:SHA-256。 | 形式:IDFA(iOS)またはGAID(Android)。ハッシュ化:行いません。 | マッチングの優先順位:決定論的かつ優先順位あり(1. Email、2. Phone、3. Mobile IDs)。複数のIDを組み合わせてマッチを成立させることはありません(単一IDで解決)。 DV360 PAIR:DV360では、パブリッシャーと広告主のデータを安全に照合するためのPAIRプロトコルにも対応しています。 | Customer Matchの利用開始(Google Ads API) |
| Meta(Facebook/Instagram) |
形式:小文字に変換し、空白を削除。ハッシュ化:SHA-256必須。 注意:Metaでは、ハッシュ化前の正規化処理としてメールアドレスからピリオドを削除しません。 Meta向けには、ハッシュ化前に小文字化と空白の削除だけを行ってください。ピリオドを削除してハッシュ化したメールアドレス(DCPのソースマッピングでは「Hashed email (no dots)」)を送信すると、Meta側のハッシュ値と一致せず、該当するメールドメインのユーザーでマッチ率が低下します。この識別子バリエーションは、Google Adsなどピリオド削除が必要なパートナー向けであり、Meta/Facebookのアクティベーションには使用しないでください。 |
形式:記号、英字、先頭のゼロを削除します。国番号を含めます(例:16505551212)。ハッシュ化:SHA-256。 | 形式:IDFAまたはGAID。ハッシュ化:行いません。小文字に変換し、ハイフンは保持します。 |
マッチングロジック:複数IDのうち「いずれか」でマッチする仕組みを使用し、Email、Phone、MAIDなど複数のIDを組み合わせてユーザーを特定するため、ID間で強い補完効果が得られます。 CAPI:ブラウザでのマッチングには、ハッシュ化していないclient_ip_addressとclient_user_agentが必要です。 |
Customer Information Parameters - Conversions API |
| TikTok | 形式:小文字に変換し、すべての空白を削除。ハッシュ化:SHA-256。 | 形式:E.164(+[国番号][電話番号])。 「+」なしの形式にも対応しています。ハッシュ化:SHA-256。 | 形式:GAID(Android)またはIDFA(iOS)。大文字/小文字:すべて大文字、またはすべて小文字。ハッシュ化:SHA-256またはMD5。 |
マッチングロジック:Metaと同様に、複数IDのうち「いずれか」で決定論的にマッチする方式で、1つでも有効なIDがあれば照合できます。 オーディエンスサイズ:Custom Audienceをアクティベーションするには、マッチ済みユーザーが1,000人以上必要です。 |
カスタマーファイルを使用してCustom Audienceを作成する方法 |
| The Trade Desk(UID2) | 形式:Googleと同じ「Gmailルール」(ピリオド/「+」以降を削除)。エンコード:ハッシュの生バイトをBase64でエンコードします(結果は44文字)。 | 形式:E.164。ハッシュ化:SHA-256。エンコード:生バイトをBase64でエンコードします。 | 形式:AAID(小文字)/IDFA(大文字)。ハッシュ化:SHA-256、MD5、またはSHA-1。 |
マッチングロジック:IDグラフを利用した決定論的マッチング。マッチングは、生のIDのカバレッジではなくIDグラフへの参加状況に左右されます。 重要:ハッシュの生バイトをBase64でエンコードする必要があります。 16進文字列をエンコードすると失敗します。 |
|
| 形式:「@」を含める必要があります。ハッシュ化:SHA-256、MD5、またはSHA-1。 | 形式:E.164。特殊文字(スペース、ハイフン)を削除します。ハッシュ化:SHA-256、MD5、またはSHA-1。 | 形式:IDFAまたはGAID。ハッシュ化:SHA-256、MD5、またはSHA-1。 | マッチングロジック:「ID中心」。主にEmailとMAIDでマッチングします。 Metaと比べて複数IDによる補完効果が弱いため、その他のIDを追加しても得られる効果は限定的です。アップロード時の動作:オーディエンスごとに1種類の識別子タイプをアップロードします。 | DCPのデータ取り込みと構造化のガイドライン |