データモデリングのベストプラクティス
Experience Data Model(XDM)は、ダウンストリーム Adobe Experience Platform サービスで使用する共通の構造と定義を提供することで、顧客体験データを標準化するコアフレームワークです。XDM 標準に準拠することで、すべての顧客体験データを共通の表現に組み込み、顧客の行動から有益なインサイトを得たり、顧客オーディエンスを定義したり、パーソナライゼーションのために顧客属性を表現したりできます。
XDM は非常に汎用性が高く、デザインによってカスタマイズ可能なので、スキーマを設計する際には、データモデリングのベストプラクティスに従うことが重要です。 このドキュメントでは、カスタマーエクスペリエンスデータを XDM にマッピングする際に行う必要がある主な決定と考慮事項について説明します。
はじめに
このガイドを読む前に、XDM システムの概要を参照して、XDM の概要とExperience Platform内での役割を確認してください。
このガイドは、スキーマのデザインに関する主な考慮事項にのみ焦点を当てているので、このガイド全体で説明している個々のスキーマ要素の詳細については、 スキーマ構成の基本を読むことを強くお勧めします。
ベストプラクティスのまとめ summary
Experience Platform で使用するデータモデルを設計するための推奨されるアプローチは、次のように要約できます。
- データのビジネスユースケースを理解します。
- これらのユースケースに対処するために Platform に取り込む必要があるプライマリデータソースを特定します。
- 興味の対象となる可能性のあるセカンダリデータソースを特定します。 例えば、現在組織内の 1 つのビジネスユニットのみがデータを Platform に移植することに興味を持っている場合、同様のビジネスユニットが将来、同様のデータを移植することに興味を持つ可能性があります。これらのセカンダリソースを考慮すると、組織全体でデータモデルを標準化するのに役立ちます。
- 識別されたデータソースの高レベルのエンティティ関係図(ERD)を作成します。
- 高レベルの ERD を Platform 中心の ERD(プロファイル、エクスペリエンスイベント、ルックアップエンティティなど)に変換します。
ビジネスユースケースを実行するために必要な、該当するデータソースの特定に関連する手順は、組織によって異なります。 このドキュメント全体の残りの節では、データソースを特定した後の ERD の編成と構築の後半の手順に焦点を当てていますが、図の様々なコンポーネントの説明は、どのデータソースを Platform に移行する必要があるかについての決定に役立つ場合があります。
高レベル ERD の作成 create-an-erd
Platform に取り込むデータソースを決定したら、高レベルの ERD を作成して、データを XDM スキーマにマッピングするプロセスをガイドします。
次の例は、データを Platform に取り込む会社の単純化された ERD を表しています。この図は、顧客アカウント、ホテル、住所、いくつかの一般的な eコマースイベントなど、XDM クラスに分類する必要がある重要なエンティティをハイライト表示しています。
プロファイル、ルックアップ、イベントのカテゴリへのエンティティの並べ替え sort-entities
Platform に取り込む必要のあるエンティティを特定する ERD を作成したら、これらのエンティティをプロファイル、ルックアップ、イベントのカテゴリに並べ替える必要があります。
エンティティの並べ替えに関する考慮事項 considerations
以下の節では、上記のカテゴリにエンティティを並べ替える方法について詳しく説明します。
可変データと不変データ mutable-and-immutable-data
エンティティカテゴリ間で並べ替える主な方法は、キャプチャされるデータが可変かどうかです。
プロファイルまたはルックアップエンティティに属する属性は、通常、可変です。例えば、顧客の好みは時間の経過に伴い変化する可能性があり、サブスクリプションプランのパラメーターは市場のトレンドに応じて更新される可能性があります。
これに対し、イベントデータは通常不変です。 イベントは特定のタイムスタンプに添付されるので、イベントが提供する「システムスナップショット」は変更されません。例えば、イベントは、買い物かごのチェックアウト時に顧客の好みを把握でき、顧客の好みが後で変化しても変更されません。 イベントデータは、記録した後に変更することはできません。
要約すると、プロファイルとルックアップエンティティは可変属性を含んでおり、取得したサブジェクトに関する最新の情報を表しています。一方、イベントは特定の時点でのシステムの不変レコードです。
顧客属性 customer-attributes
エンティティに個々の顧客に関連する属性が含まれている場合、それはプロファイルエンティティである可能性が最も高くなります。顧客属性の例を次に示します。
- 個人の詳細(氏名、生年月日、性別、アカウント ID など)。
- 位置情報(住所や GPS 情報など)。
- 連絡先情報(電話番号やメールアドレスなど)。
時系列データの追跡 track-data
エンティティ内の特定の属性が時間的にどのように変化するかを分析する場合、エンティティはイベントエンティティである可能性が高いでしょう。例えば、買い物かごへの製品項目の追加を、Platform で addToCart イベントとして追跡できます。
セグメント化のユースケース segmentation-use-cases
エンティティを分類する場合は、特定のビジネスユースケースに対処するために、作成対象のオーディエンスについて検討することが重要です。
例えば、昨年 6 回以上購入したロイヤルティプログラムの「ゴールド」メンバーまたは「プラチナ」メンバー全員を企業が把握したいとします。このセグメントのロジックに基づいて、関連するエンティティの表現方法に関して、次の結論を下すことができます。
- 「ゴールド」と「プラチナ」は、個々の顧客に適用されるロイヤルティステータスを表します。セグメントのロジックは顧客の現在のロイヤルティステータスにのみ関係するので、このデータをプロファイルスキーマの一部としてモデル化できます。ロイヤルティステータスの時間的変化を追跡する場合は、ロイヤルティステータスの変化に関する追加のイベントスキーマを作成することもできます。
- 購入は特定の時刻に発生するイベントで、セグメント化ロジックは指定した時間枠内の購入イベントに関係します。したがって、このデータはイベントスキーマとしてモデル化する必要があります。
アクティブ化のユースケース activation-use-cases
セグメント化のユースケースに関する考慮事項に加えて、これらのオーディエンスのアクティブ化のユースケースを確認して、追加の関連属性を特定することもできます。
例えば、country = US
というルールに基づいて、企業がオーディエンスを作成したとします。次に、そのオーディエンスを特定のダウンストリームターゲットに対してアクティベートする際に、企業は、書き出されたすべてのプロファイルを居住地に基づいてフィルタリングしようとします。したがって、該当するプロファイルエンティティに state
属性も取り込む必要があります。
集計値 aggregated-values
データのユースケースと精度に基づいて、プロファイルまたはイベントエンティティに含める前に、特定の値を事前に集計する必要があるかどうかを判断してください。
例えば、企業が買い物かごの商品購入数に基づいてオーディエンスを作成するとします。タイムスタンプ付きの各購入イベントを独自のエンティティとして含めることで、最も低い精度でこのデータを取り込むことができます。ただし、これにより、記録されるイベントの数が急激に増える可能性があります。 取り込まれるイベント数を減らすために、1 週間または 1 か月の期間にわたる集計値 numberOfPurchases
を作成することもできます。 このような状況には、MIN や MAX などの他の集計関数も適用できます。
基数 cardinality
ERD で確立された基数は、エンティティの分類方法に関するヒントも提供してくれます。 2 つのエンティティ間に 1 対多の関係がある場合、「多」を表すエンティティはイベントエンティティである可能性が高くなります。 ただし、「多」側が、プロファイルエンティティ内の配列として提供される一連のルックアップエンティティである場合もあります。
エンティティの一般的な関係と、それらから導き出せるカテゴリの概要を次の表に示します。
様々なエンティティクラスの長所と短所 pros-and-cons
前の節では、エンティティを分類する方法を決定するための一般的なガイドラインをいくつか示しましたが、一方のエンティティカテゴリより他方を選ぶ場合はメリットとデメリットがあることが多いということを理解しておくことが重要です。ここでは、以下のユーザー事例を取り上げ、このような状況でオプションをどのように検討するかを説明します。
ある企業が、1 人の顧客が多数のサブスクリプションを持てる状況で、顧客向けのアクティブなサブスクリプションを追跡しているとします。また、同社は、サブスクリプションを実際に利用しているすべてのユーザーを検索するなど、セグメント化のユースケースにサブスクリプションを含めることも望んでいます。
このシナリオでは、同社には、顧客のサブスクリプションをデータモデルで表すために取り得る選択肢が 2 つあります。
アプローチ 1:プロファイル属性の使用 profile-approach
1 番目のアプローチは、顧客のプロファイルエンティティ内の属性としてサブスクリプションの配列を含めることです。この配列内のオブジェクトには、category
、status
、planName
、startDate
および endDate
のフィールドが含まれます。
長所
- セグメント化が、意図したユースケースに適しています。
- スキーマは、顧客の最新のサブスクリプションレコードのみを保持します。
短所
- 配列内のフィールドが変更されるたびに、配列全体を再記述する必要があります。
- 様々なデータソースやビジネスユニットが配列にデータをフィードしている場合は、更新された最新の配列をすべてのチャネルにわたって同期し続けることが困難になります。
アプローチ 2:イベントエンティティの使用 event-approach
2 番目のアプローチは、イベントスキーマを使用してサブスクリプションを表すことです。これには、サブスクリプション ID、顧客 ID、サブスクリプションイベントが発生したときのタイムスタンプを追加して、1 番目のアプローチと同じサブスクリプションフィールドを取り込む必要があります。
長所
- セグメント化ルールは、より柔軟に設定できます(過去 30 日間にサブスクリプションを変更したすべての顧客を検索するなど)。
- 顧客のサブスクリプションステータスが変更された場合、顧客のプロファイル属性内の長くて複雑になる可能性のある配列を更新する必要がなくなりました。これは、複数のソースから顧客のサブスクリプションリストが同時に変更されている場合に特に便利です。
短所
- 最初に意図したユースケース(顧客の最新のサブスクリプションのステータスを識別する)では、セグメント化がより複雑になります。オーディエンスには、顧客の最後のサブスクリプションイベントにフラグを設定してステータスを確認するための追加のロジックが必要になりました。
- イベントは、自動的に有効期限切れになり、プロファイルストアから消去されるリスクが高くなります。詳しくは、エクスペリエンスイベントの有効期限に関するガイドを参照してください。
分類されたエンティティに基づいてスキーマを作成する schemas-for-categorized-entities
エンティティをプロファイル、ルックアップ、イベントのカテゴリに並べ替えたら、データモデルを XDM スキーマへの変換を開始できます。次の図では、デモンストレーションの目的で、前に示したデータモデルの例を適切なカテゴリに並べ替えています。
エンティティが並べ替えられたカテゴリによって、そのスキーマのベースとなる XDM クラスが決定されます。繰り返し実行する手順は、次のとおりです。
- プロファイルエンティティには、XDM Individual Profile クラスを使用する必要があります。
- イベントエンティティには、XDM ExperienceEvent クラスを使用する必要があります。
- ルックアップエンティティには、組織で定義したカスタム XDM クラスを使用する必要があります。その後、プロファイルおよびイベントのエンティティでは、スキーマ関係を通じて、これらのルックアップエンティティを参照できます。
LoyaltyAccount
オブジェクトを含めて、各顧客の適切なロイヤルティフィールドを含めることもできます。ただし、関係が 1 対多の場合、「多」の側のエンティティは、その複雑さに応じて、別のスキーマまたはプロファイル属性の配列で表すことができます。以下の節では、ERD に基づいてスキーマを構築するための一般的なガイダンスを示します。
反復モデリングアプローチの採用 iterative-modeling
スキーマ進化のルールでは、スキーマが実装された後は、非破壊的な変更のみをスキーマに加えることができると規定されています。つまり、スキーマにフィールドを追加し、そのフィールドに対してデータが取り込まれると、そのフィールドは削除できなくなります。したがって、最初にスキーマを作成するときは、単純化された実装から始めて、時間の経過と共に徐々に複雑になる、反復モデリングアプローチを採用することが不可欠です。
特定のフィールドをスキーマに含める必要があるかどうかわからない場合は、除外することをお勧めします。後でフィールドが必要であると判断した場合は、スキーマの次の反復でいつでも追加できます。
ID フィールド identity-fields
Experience Platform では、ID としてマークされた XDM フィールドを使用して、複数のデータソースからの個々の顧客に関する情報を結合します。 スキーマには ID としてマークされた複数のフィールドを含めることができますが、スキーマを Real-Time Customer Profile で使用できるようにするには、単一のプライマリ ID を定義する必要があります。 これらのフィールドのユースケースについて詳しくは、スキーマ構成の基本の ID フィールドに関する節を参照してください。
スキーマを設計する際、リレーショナルデータベーステーブル内のすべてのプライマリキーがプライマリ ID の候補になる可能性があります。 該当する ID フィールドの他の例としては、顧客の電子メールアドレス、電話番号、アカウント ID、ECID などがあります。
Adobeアプリケーションスキーマフィールドグループ adobe-application-schema-field-groups
Experience Platform には、次のアドビアプリケーションに関連するデータを取得するための、すぐに使用できる XDM スキーマフィールドグループがいくつか用意されています。
- Adobe Analytics
- Adobe Audience Manager
- Adobe Campaign
- Adobe Target
例えば、Adobe Analytics ExperienceEvent Template フィールドグループを使用してAnalytics 固有のフィールドを XDM スキーマにマッピングできます。 使用しているアドビアプリケーションに応じて、これらのアドビが提供するフィールドグループをスキーマで使用する必要があります。
アドビアプリケーションフィールドグループは、identityMap
フィールドを使用してデフォルトのプライマリ ID を自動的に割り当てます。このフィールドは、個々の顧客の標準 ID 値をマッピングする、システム生成の読み取り専用オブジェクトです。
Adobe Analytics の場合、ECID はデフォルトのプライマリ ID です。ECID 値が顧客によって指定されない場合、プライマリ ID は代わりにデフォルトで AAID に設定されます。
データ検証フィールド data-validation-fields
データをデータレイクに取り込む場合、データ検証は、制約されたフィールドに対してのみ適用されます。 バッチ取り込み中に特定のフィールドを検証するには、XDM スキーマでフィールドを制約付きとしてマークする必要があります。 不正なデータが Platform に取り込まれないようにするために、スキーマを作成する際に、フィールドレベルの検証の条件を定義することをお勧めします。
特定のフィールドに制約を設定するには、スキーマエディターからフィールドを選択して フィールドプロパティ サイドバーを開きます。 使用可能なフィールドの正確な説明については、 タイプ固有のフィールドプロパティに関するドキュメントを参照してください。
データの整合性を維持するためのヒント data-integrity-tips
スキーマを作成する際にデータの整合性を維持するための推奨事項のコレクションを以下に示します。
- プライマリ ID を検討:Web SDK、Mobile SDK、Adobe Analytics、Adobe Journey OptimizerなどのAdobe製品の場合、
identityMap
フィールドは多くの場合、プライマリ ID として機能します。 そのスキーマのプライマリ ID として追加のフィールドを指定しないでください。 _id
を ID として使用しない:エクスペリエンスイベントスキーマの_id
フィールドを ID として使用しないでください。 これは、レコードの一意性を目的としており、ID として使用するためのものではありません。- 長さの制約を設定:ID としてマークされたフィールドに長さの最小値と最大値を設定することをお勧めします。 最大長と最小長の制約を満たさずに ID フィールドにカスタム名前空間を割り当てようとすると、警告トリガーが発生します。 これらの制限は、一貫性とデータ品質を維持するのに役立ちます。
- 一貫した値にパターンを適用:ID 値が特定のパターンに従っている場合は、「パターン」設定を使用してこの制約を適用する必要があります。 この設定には、数字のみ、大文字と小文字、特定の文字の組み合わせなどのルールを含めることができます。 正規表現を使用して、文字列のパターンを照合します。
- Analytics スキーマでの eVar の制限:通常、Analytics スキーマには、ID として指定されたeVarを 1 つだけ含める必要があります。 複数のデータを ID として使用する場合は、eVar構造を最適化できるかどうかを再確認する必要があります。
- 選択したフィールドの一意性の確保:選択したフィールドは、スキーマのプライマリ ID と比較して一意である必要があります。 そうでない場合は、ID としてマークしないでください。 例えば、複数の顧客が同じメールアドレスを指定できる場合、その名前空間は適切な ID ではありません。 この原則は、電話番号などの他の ID 名前空間にも適用されます。
- カスタム名前空間フィールドの制約トリガー警告:最小長と最大長の両方を指定せずに、カスタム名前空間でマークされたスキーマフィールドを警告のトリガーにする制約を設定します。 警告は、データの整合性を維持するための重要な注意事項として機能します。 特定のフィールドに制約を設定する方法について詳しくは、 タイプ固有のフィールドのプロパティドキュメントを参照してください。
次の手順
このドキュメントでは、Experience Platform のデータモデルを設計する際の一般的なガイドラインとベストプラクティスを説明しました。以下に要約を示します。
- スキーマを作成する前に、データテーブルをプロファイル、参照、イベントカテゴリに並べ替えて、トップダウンアプローチを使用します。
- 異なる目的でスキーマをデザインする際には、多くの場合、複数のアプローチやオプションがあります。
- データモデルは、セグメント化やカスタマージャーニー分析など、自身のビジネスのユースケースをサポートする必要があります。
- スキーマはできるだけ簡単なものにし、本当に必要な場合にのみ新しいフィールドを追加します。
準備が整ったら、UI でのスキーマの作成に関するチュートリアルで、スキーマの作成、エンティティに適したクラスの割り当ておよびデータのマッピング先となるフィールドの追加に関する手順を確認してください。