決定ベースの派生データセットの使用例
派生データセットは、データレイクのデータを分析するための複雑なユースケースを促進します。データレイクは、他の下流のExperience Platformサービスで使用したり、リアルタイム顧客プロファイルデータに公開したりできます。
このユースケースの例では、Real-Time Customer Profile データで使用するデシルベースの派生データセットを作成する方法を示します。 このガイドでは、例として航空会社のロイヤルティシナリオを使用して、カテゴリ区切りを使用して、ランク付けされた属性に基づいてオーディエンスをセグメント化および作成するデータセットを作成する方法を説明します。
次の主要な概念を示します。
- Decile bucketingのスキーマ作成。
- カテゴリ別の意思決定の作成:
- 複雑な派生データセットの作成。
- ルックバック期間のデシルの計算。
- クエリの例。集計、ランキング、一意のIDの追加を示し、これらの決定バケットに基づいてオーディエンスを生成できるようにします。
はじめに
このガイドでは、Query Service🔗での クエリの実行とAdobe Experience Platformの次のコンポーネントに関する実用的な理解が必要です。
- リアルタイム顧客プロファイルの概要:複数のソースから集約されたデータに基づいて、統合されたリアルタイムの消費者プロファイルを提供します。
- スキーマ構成の基本: Experience Data Model (XDM) スキーマと、スキーマを構成するための構成要素、原則、ベストプラクティスの概要。
- リアルタイム顧客プロファイルのスキーマを有効にする方法:このチュートリアルでは、リアルタイム顧客プロファイルにデータを追加するために必要な手順の概要を説明します。
- カスタムデータタイプを定義する方法: データタイプは、クラスまたはスキーマフィールドグループの参照型フィールドとして使用され、スキーマ内の任意の場所に含めることができるマルチフィールド構造を一貫して使用できます。
目標
このドキュメントの例では、デシルを使用して、航空会社のロイヤルティスキーマからデータをランク付けするための派生データセットを構築します。 派生データセットを使用すると、選択したカテゴリの上位「n」 %に基づいてオーディエンスを特定することで、データの有用性を最大化できます。
意思決定ベースの派生データセットの構築
特定のディメンションと対応する指標に基づいてデシルのランキングを定義するには、デシルのグループ化を可能にするようにスキーマを設計する必要があります。
このガイドでは、航空会社のロイヤルティデータセットを使用して、様々なルックバック期間のマイル数に基づいてクエリサービスを使用してデシルを作成する方法を示します。
クエリサービスを使用したファイルの作成
クエリサービスを使用すると、カテゴリのデシルを含むデータセットを作成できます。そのデータセットをセグメント化して、属性のランキングに基づいてオーディエンスを作成できます。 カテゴリが定義され、指標が使用可能な場合は、次の例に示す概念を適用して、その他のデシレルバケットデータセットを作成できます。
航空会社のロイヤルティデータの例では、XDM ExperienceEvents クラス を使用しています。 各イベントは、クレジットまたはデビットのいずれかのマイレージのビジネス取引の記録であり、「フライヤー」、「頻繁」、「シルバー」、「ゴールド」のいずれかのメンバーシップのロイヤルティステータスです。 プライマリ ID フィールドはmembershipNumberです。
サンプルデータセット
この例の最初の航空会社ロイヤルティデータセットは「航空会社ロイヤルティデータ」で、次のスキーマがあります。 スキーマのプライマリ IDは_profilefoundationreportingstg.membershipNumberです。
サンプルデータ
次の表に、この例で使用する_profilefoundationreportingstg オブジェクトに含まれるサンプルデータを示します。 複雑な派生データセットを作成するためにデシルバケットを使用するためのコンテキストを提供します。
_profilefoundationreportingstgは、列名の名前空間の先頭から省略され、文書全体でその後のメンションが行われます。.membershipNumber.emailAddress.address.transactionDate.transactionType.transactionDetails.mileage.loyaltyStatus決定データセットの生成
上記の航空会社のロイヤルティデータでは、.mileageの値には、搭乗したフライトごとに会員が運航したマイル数が含まれます。 このデータは、生涯ルックバックと様々なルックバック期間の間に流れるマイル数のデシルを作成するために使用されます。 この目的のために、ルックバック期間ごとにマップデータタイプのデシルと、membershipNumberで割り当てられたルックバック期間ごとに適切なデシルを含むデータセットが作成されます。
「航空会社ロイヤルティ決定スキーマ」を作成して、クエリサービスを使用して決定データセットを作成します。
リアルタイム顧客プロファイルのスキーマを有効にする
Real-Time Customer Profileで使用するためにExperience Platformに取り込むデータは、プロファイル 🔗に対して有効になっているExperience Data Model (XDM) スキーマ に準拠している必要があります。 プロファイルでスキーマを有効にするには、XDM の個別プロファイルまたは XDM ExperienceEvent クラスのいずれかを実装する必要があります。
スキーマレジストリ APIまたは スキーマエディターのユーザーインターフェイス を使用して、リアルタイム顧客プロファイルで使用するスキーマを有効にします。 プロファイルのスキーマを有効にする方法の詳細な手順については、それぞれのドキュメントを参照してください。
次に、すべての決定関連フィールドグループに再利用するデータタイプを作成します。 デシルフィールドグループの作成は、サンドボックスごとに1回限りのステップです。 また、すべての決定関連のスキーマに再利用することもできます。
ID名前空間を作成し、プライマリ IDとしてマークします identity-namespace
デシルで使用するために作成されたスキーマには、プライマリ IDが割り当てられている必要があります。 Adobe Experience Platform スキーマ UI🔗またはSchema Registry APIを使用して、ID フィールドを定義できます。
クエリサービスでは、SQLを介してアドホックスキーマデータセットフィールドのIDまたはプライマリ IDを直接設定することもできます。 詳しくは、 アドホックスキーマ IDでのセカンダリ IDとプライマリ IDの設定に関するドキュメントを参照してください。
ルックバック期間のデイルを計算するためのクエリを作成します create-a-query
次の例は、ルックバック期間にわたって決定を計算するためのSQL クエリを示しています。
テンプレートは、UIのクエリエディターを使用するか、 クエリサービス APIを使用して作成できます。
CREATE TABLE AS airline_loyality_decile
{ WITH summed_miles_1 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 0))
GROUP BY 1,2
),
summed_miles_3 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 1))
GROUP BY 1,2
),
summed_miles_6 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 4))
GROUP BY 1,2
),
rankings_1 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_1
),
rankings_3 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_3
),
rankings_6 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_6
),
map_1 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth1
FROM rankings_1
GROUP BY membershipNumber
),
map_3 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth3
FROM rankings_3
GROUP BY membershipNumber
),
map_6 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth6
FROM rankings_6
GROUP BY membershipNumber
),
all_memberships AS (
SELECT DISTINCT _profilefoundationreportingstg.membershipNumber AS membershipNumber FROM airline_loyalty_data
)
SELECT STRUCT(
all_memberships.membershipNumber AS membershipNumber,
STRUCT(
map_1.decileMonth1 AS decileMonth1,
map_3.decileMonth3 AS decileMonth3,
map_6.decileMonth6 AS decileMonth6
) AS decilesMileage
) AS _profilefoundationreportingstg
FROM all_memberships
LEFT JOIN map_1 ON (all_memberships.membershipNumber = map_1.membershipNumber)
LEFT JOIN map_3 ON (all_memberships.membershipNumber = map_3.membershipNumber)
LEFT JOIN map_6 ON (all_memberships.membershipNumber = map_6.membershipNumber)
}
クエリのレビュー
サンプルクエリのセクションを以下で詳しく説明します。
ルックバック期間
デシル データ型には、1、3、6、9、12およびライフタイム ルックバック用のバケットが含まれます。 このクエリでは、1か月、3か月、6か月のルックバック期間を使用するので、各セクションには、ルックバック期間ごとに一時テーブルを作成するための「繰り返し」クエリが含まれます。
decileMonthAllの下で実行されます。集計
デシル バケットを作成する前に、共通テーブル式(CTE)を使用してマイレージを集計します。 これは、特定のルックバック期間の合計マイルを提供します。 CTEは一時的に存在し、より大きなクエリの範囲内でのみ使用できます。
summed_miles_1 AS (
SELECT _profilefoundationreportingstg.membershipNumber AS membershipNumber,
_profilefoundationreportingstg.loyaltyStatus AS loyaltyStatus,
SUM(_profilefoundationreportingstg.mileage) AS totalMiles
FROM airline_loyalty_data
WHERE _profilefoundationreportingstg.transactionDate < (MAKE_DATE(YEAR(CURRENT_DATE), MONTH(CURRENT_DATE), 1) - MAKE_YM_INTERVAL(0, 0))
GROUP BY 1,2
)
ブロックは、他のルックバック期間のデータを生成するために、日付計算を変更してテンプレート(summed_miles_3およびsummed_miles_6)内で2回繰り返されます。
クエリのID、ディメンション、指標の列(membershipNumber、loyaltyStatusおよびtotalMiles)に注意することが重要です。
ランキング
デシルを使用すると、カテゴリ分けのグループ化を実行できます。 ランキング番号を作成するには、NTILE関数を、loyaltyStatus フィールドでグループ化されたWINDOW内の10のパラメーターと共に使用します。 これにより、1から10までのランキングが表示されます。 WINDOWのORDER BY句をDESCに設定して、ディメンション内の 最大 指標に1のランキング値が与えられるようにします。
rankings_1 AS (
SELECT membershipNumber,
loyaltyStatus,
totalMiles,
NTILE(10) OVER (PARTITION BY loyaltyStatus ORDER BY totalMiles DESC) AS decileBucket
FROM summed_miles_1
)
マップ集計
複数のルックバック期間を使用する場合は、MAP_FROM_ARRAYS関数とCOLLECT_LIST関数を使用して、事前に決定バケットマップを作成する必要があります。 例のスニペットでは、MAP_FROM_ARRAYSはキー(loyaltyStatus)と値(decileBucket)の配列のペアを含むマップを作成します。 COLLECT_LISTは、指定された列のすべての値を含む配列を返します。
map_1 AS (
SELECT membershipNumber,
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonth1
FROM rankings_1
GROUP BY membershipNumber
)
一意の ID
すべてのメンバーシップの一意のリストを作成するには、一意のIDのリスト (membershipNumber)が必要です。
all_memberships AS (
SELECT DISTINCT _profilefoundationreportingstg.membershipNumber AS membershipNumber FROM airline_loyalty_data
)
membershipNumberによる集計を最終ステップで行うことができます。すべての一時データをつなぎ合わせる
最後の手順は、すべての一時データを、フィールドグループ内のデシルの構造と同じ形式に結合することです。
SELECT STRUCT(
all_memberships.membershipNumber AS membershipNumber,
STRUCT(
map_1.decileMonth1 AS decileMonth1,
map_3.decileMonth3 AS decileMonth3,
map_6.decileMonth6 AS decileMonth6
) AS decilesMileage
) AS _profilefoundationreportingstg
FROM all_memberships
LEFT JOIN map_1 ON (all_memberships.membershipNumber = map_1.membershipNumber)
LEFT JOIN map_3 ON (all_memberships.membershipNumber = map_3.membershipNumber)
LEFT JOIN map_6 ON (all_memberships.membershipNumber = map_6.membershipNumber)
生涯データのみが使用可能な場合、クエリは次のように表示されます。
SELECT STRUCT(
rankings.membershipNumber AS membershipNumber,
STRUCT(
MAP_FROM_ARRAYS(COLLECT_LIST(loyaltyStatus), COLLECT_LIST(decileBucket)) AS decileMonthAll
) AS decilesMileage
) AS _profilefoundationreportingstg
FROM rankings
GROUP BY rankings.membershipNumber
ランキング番号とパーセンタイルとの相関関係は、デシルの使用により、クエリ結果で保証されます。 各ランクは10%であるため、上位30%にもとづいてオーディエンスを特定するには、ランク 1、2、3をターゲットにする必要があります。
クエリテンプレートの実行
クエリを実行して、決定データセットを入力します。 また、クエリをテンプレートとして保存し、定期的に実行するようにスケジュールすることもできます。 テンプレートとして保存すると、クエリを更新して、table_exists コマンドを参照する作成および挿入パターンを使用することもできます。 table_exists コマンドの使用方法について詳しくは、SQL構文ガイド を参照してください。
次の手順
上記のユースケースの例では、意思決定ベースの派生データセットをリアルタイム顧客プロファイルで使用できるようにするための手順を示しています。 これにより、ユーザーインターフェイスまたはRESTful APIを介して、セグメンテーションサービスがこれらの決定的なバケットに基づいてオーディエンスを生成できるようになります。 セグメントの作成、評価およびアクセス方法について詳しくは、 セグメント化サービスの概要を参照してください。