メタデータのタグ付けとユーザーのバケット化
Intelligent Recommendations を使用すると、エンド ユーザーが匿名であっても、関連性の高いパーソナライゼーションを向上させることができます。 パーソナライズされたメタデータのタグ付けエクスペリエンスを、顧客が店舗に統合できます。 このエクスペリエンスは、コンテンツ (執筆した記事、ポッドキャスト、ビデオ、小売製品など) のメタデータ タグを識別して、そのユーザーの好みに応じて類似するタグやコンテンツを推奨する機能を使用し、実現されます。 ユーザー メタデータは、次のような関連コンテンツをすべてのユーザーに推奨する際に威力を発揮します。
- 新規または不定期な顧客 (“コールド ユーザー” とも呼ばれます)。
- 一意のメタデータ タグ付けに基づいて、ユーザーを他のユーザーに結び付けます。
- 関連性するコンテンツとリードタイムが短いコンテンツの両方に、ユーザーを結び付けます。
メタデータのタグ付けを有効化すると、次のような新しい推奨シナリオをユーザーが作成できます。
- 自分に合わせて推奨されたメタデータ カテゴリ
- 他のユーザーはこれらのカテゴリにも注目しています
- 最近の活動に基づく最近のイベント
- 属性付きメタデータ タグに基づく類似の製品/コンテンツ
- ユーザーの行動バケットに基づくおすすめ
タグとは?
タグ は品目/コンテンツが含む関心事を表す記述子であり、これを使用してユーザーが移動します。また、エンドユーザーの活動に一意である必要があります。 たとえば、映画の世界では、ジャンル、キャスト メンバー、ムードなどが、すべて映画のタグと見なされる場合があり、エンド ユーザーが特別に好き/嫌いである要素も同様です。 有名なプレーヤー/ユーザー、記事のタイトル、ジャンル、製品カテゴリ、イベント、その他のコンテンツ用語を、タグに含めることもできます。 その目標は、自分の興味や好みに合った関連コンテンツを、利用できるメタデータに基づいてエンド ユーザーに推奨することです。
ーキテクチャの概要
アーキテクチャ図に示すようにメタデータのタグ付けを構成するには、前提条件は次のとおりです:
- 豊富なメタデータ タグ (カタログ) を含む信頼性の高いコンテンツ ストレージ。
- ユーザーによる操作の動作 (コンテンツのクリック数/使用状況)。 また、エンドユーザーのプロファイル情報も使用できる場合があります。
- タグとして表示されるユーザーの関心を理解するための、個別の Intelligent Recommendations アカウントとモデリング インスタンス。
- リアルタイム API クエリでパーソナライズされたタグに基づき、コンテンツをランク付けするコンポーネント。
有効にすると、サービスは以下に基づいてユーザー向けにパーソナライズされた「タグ」のモデルを生成します:
- ユーザーとのやり取りの履歴
- ”タグ” を使用したメタデータが豊富なコンテンツ
- ここでの前提は、タグがクリーン化されていることです (スペルミスがなく、タグは専門家によって事前に決定され、合理化されたセットであり、ランダムに作成または添付されていない) ということです。
データ コントラクトの構成
データ コントラクトを構成してメタデータのタグ付けに対応する際は、次の手順を実行します。ItemId
、TagId
、InteractionGroupingId
間の変更点に注意してください。
アプリケーションのセクション では、TagID
や BucketId
を導入することでデータ コントラクトの構成がどのように変わるかの例を見ることができます。 メタデータのタグ付けをテストする際は、Intelligent Recommendations アカウントとモデリング インスタンスを別に用意することをお勧めします。
IR 機能名 | カタログ データ エンティティ |
カタログ データ エンティティ フィールド |
対話 データ エンティティ |
対話 データ エンティティ フィールド |
---|---|---|---|---|
(すべての応答に必須) | Reco_ItemsAndVariants |
TagId としての ItemId Title |
||
フィルター処理機能 (すべてのリストに適用) |
Reco_ItemCategories | ItemCategories: ItemId (または TagId )、カテゴリ |
||
他の人はこちらもチェック | Reco_Interactions |
UserId としての InteractionGroupingId TagId としての ItemId UserId InteractionType: 購入 == 閲覧済み Timestamp |
||
おすすめ | Reco_Interactions | (以前と同じ) |
アプリケーションと例
次のセクションでは、メタデータのタグ付けが役立つ 2 つの一般的なユース ケースを説明し、それぞれのデモ データを使用した例をいくつか示します。
- コールド ユーザー向けに "おすすめの人気品目" を取得します。 例を確認する際は、"コールド ユーザー向けにおすすめの人気品目を取得する" というタイトルのセクションを参照してください。
- ユーザーのメタデータ値の機械学習マップを作成する方法。 例を確認する際は、"ユーザーのメタデータ値の機械学習マップを作成する" というタイトルのセクションを参照してください。
アプリケーション 1: コールド ユーザー向けに "おすすめの人気品目" を取得する
AI と機械学習の分野で一般的な問題は、新規顧客や使用頻度の低いユーザー (“コールド ユーザー” とも呼ばれる) に適切な推奨を提供する方法です。 前述したように、ここでの目的は、意味のあるカテゴリと利用可能な人口統計情報 (つまり、年齢と性別) に基づいていくつかの個別のバケットを作成することです。 次に、すべてのやり取りを使用して、すべてのユーザーを対応する顧客層情報バケットに関連付けます。これにより、モデルのトレーニング段階でバケットを品目に関連付けられます。 サービス提供段階では、コールド ユーザーの人口統計バケットを割り当てて、「ユーザー バケット別の最も人気のあるアイテム」などのアイテムを推奨することができます。
手順は次のとおりです。
- メタデータ情報を含むユーザーのバケット化を準備します。
- “Reco_Interactions.csv” データ ストレージ ファイルにモデルの関連付けを作成します。
- モデルをクエリして “ユーザー バケットごとの最も人気のある品目” API を取得します。
ステップ 1: メタデータ情報を含むユーザーのバケット化を準備します
バケットを作成する際のベスト プラクティスを次に示します。
- ユーザー メタデータは範囲付きバケットとして表現できます。 ビジネス ドメインとユース ケースにとって意味のあるメタデータの使用を検討してください。 たとえば、年齢データのバケットを作成する場合は、これらの値を使用できます: Age5To11、Age30To40 など。
- 一部のユーザー メタデータは、バケットで一緒に結合することもできます。 ご利用のビジネス ドメインとユースケースにとって意味のあるメタデータと組み合わせを使用することを検討してください。 たとえば、年齢と性別のデータを組み合わせて、次のようなバケットを作成できます: Age20To30Male、Age20To30Female、Age30To40Male、Age30To40Female など。
- バケットを作成したら、それぞれのバケットに一意の
BucketId
を割り当てる必要があります。
ステップ 2: “Reco_Interactions.csv” データ ストレージ ファイルにモデルの関連付けを作成する
バケットの数が 1000 を超えるか下回るかによって、データ コントラクトでデータを構成する方法が変わる場合があります。
バケットが 1000 未満の場合
各インタラクション行について、そのユーザーに対応する (あるいは最も適合する) ように、ChannelId
を BucketId
に設定します。 インタラクションの CSV 行は、InteractionGroupingID
、ItemId
、UserId
、BucketId
、ChannelId
に変更されます。 やり取りの CSV の例を以下に示します。
1000 バケット未満のサンプル CSV
やり取りの CSV ヘッダーは便宜上表示されるものであり、実際のデータの一部ではありません。
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Timestamp | Future Attribute | Future Attribute | Channel | カタログCatalog | 長所 | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
InteractionGroupingID |
ItemId |
UserId |
BucketId |
バケットが 1000 を超える場合
データのバケットが 1000 を超える場合は、BucketId
を使用してさらにインタラクション行を作成します。
ユーザーと品目の間の元の各やり取り行を、これらの 2 つの行にのみ固有である一意の InteractionGroupingId
を使用して 2 つの新しい別個の行 に変換します。 例を次に示します。
UserId
、ItemId
、UNIQUE_ID
としてのInteractionGroupingId
を使用した元のやり取り行。ItemId
としてBucketId
を持つ追加のやり取り行。
1000 バケットを超えるサンプル CSV:
やり取りの CSV ヘッダーは便宜上表示されるものであり、実際のデータの一部ではありません。
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Timestamp | Future Attribute | Future Attribute | Channel | カタログCatalog | 長所 | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
UNIQUE_ID |
ItemId |
UserId |
|||||||||
UNIQUE_ID |
BucketId |
UserId |
ステップ 3: モデルをクエリして “ユーザー バケットごとの最も人気のある品目” API を取得する
前述のモデル構築の概要を考慮してください。 コールド ユーザーとそのデモグラフィックバケットが決定された後、そのバケットに最も人気のあるアイテムを推奨するために、デモグラフィック フォーカスの BucketId
で 「Next Best Action」 (旧 CART) リストタイプを使用してサービングエンドポイントに問い合わせます。
バケットが 1000 未満の場合
ChannelId
のパラメーターを BucketId
値で置き換えたサンプル API クエリ リンクは、次のようになります。
<serving-endpoint>/Reco/V1.0/Popular?channelID=<BucketId>
例 1: バケットが 1000 未満の場合
最近 ItemId
=98005 の品目を購入した、カスタム割り当てられた BucketId
=Age30To40 を持つ、UserId
=100 であるユーザーを想定します。
この例では、"Reco_Interactions.csv" ファイルに、ユーザー (IR スキーマの UserId
で表される) に最もマッチする BucketId
(IR スキーマの ChannelId
フィールド) を使用する行を作成します:
- 元のやり取り情報:
InteractionGroupingId
=1、UserId
=100、ItemId
=98005 - この CSV の例では、
UserId
に最もよく一致した、関連するChannelId
が追加されていることに注意してください。 この例では、UserId
はBucketId
= Age30To40 と一致したため、変更されたインタラクションの行は次のようになります:
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Timestamp | Future Attribute | Future Attribute | Channel | カタログCatalog | 長所 | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
6 | 98005 | 100 | Age30To40 |
- API クエリと応答は、3 番目の位置に
ItemId
=43218 を含む、ItemId のリストを返します。これは、このカテゴリのユーザーに人気のアイテムです。
API クエリ
GET <serving-endpoint>/reco/v1.0/Popular?ChannelId=Age30To40
回答
{
"id": "Lists",
"name": "Lists",
"version": "v1.0",
"interactionsVersion": "20220104115104",
"items": [
{
"id": "65106",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62604",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "43218",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "63503",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62452",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Popular",
"longTitle": "Popular",
"titleId": 5,
"pagingInfo": {
"totalItems": 200
},
"status": "Success"
}
バケットが 1000 を超える場合
コールド ユーザーの ItemId
を BucketId
に置き換えた API クエリ リンクのサンプルは、次のようになります:
<serving-endpoint>/Reco/V1.0/Cart/<BucketId>?
例 2: バケットが 1000 を超える場合
最近 ItemId
=98005 の品目を購入した、カスタム割り当てられた BucketId
=Age30To40Female を持つ、UserId
=100 であるユーザーを想定します。
これで、元のやり取りデータを使用して、“Reco_Interactions.csv” ファイルの行を作成できます:
- 元のやり取り情報:
InteractionGroupingId
= NEW_UNIQUE_ID、UserId
=100、ItemId
=98005 - Intelligent Recommendations サービスが読み取る “Reco_Interactions.csv” ファイルが含むべき、作成されたやり取り情報の 2 つの行:
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Timestamp | Future Attribute | Future Attribute | Channel | カタログCatalog | 長所 | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
UNIQUE_ID |
98005 |
100 |
|||||||||
UNIQUE_ID |
Age30To40Female |
100 |
- API クエリと応答は、3 番目の位置に
ItemId
=43218 を含む、ItemId のリストを返します。これは、このカテゴリのユーザーに人気の製品です。
API クエリ
GET <serving-endpoint>/reco/v1.0/Cart/Age30To40Female?
回答
{
"id": "Lists",
"name": "Lists",
"version": "v1.0",
"interactionsVersion": "20220104115104",
"items": [
{
"id": "65106",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62604",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "43218",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "63503",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62452",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Cart",
"longTitle": "FrequentlyBoughtTogether",
"titleId": 5,
"pagingInfo": {
"totalItems": 200
},
"status": "Success"
}
アプリケーション 2: ユーザーのメタデータ値の機械学習マップを作成する
ユーザーとの直接的なやり取りの代わりにユーザー メタデータ “タグ” をモデル化することは、結果の生成が目標である場合に強力な変更となる可能性があり、それらのタグでユーザーがどのように関連付けられているか、どのタグが動作ごとに本当に類似しているかを示します。 使用できる効果的な各タグ (例: 年齢や性別などの顧客層情報、またはその他のメタデータ) に、サービスが TagId
として参照する一意の識別子を割り当てます。 モデルのトレーニング段階で、すべてのやり取りデータを使用して、UserId と TagId の間の関連付けを構築します。
提供段階で、システムは UserId
で “おすすめ” を呼び出すことでパーソナライズされたタグ リストを提供でき、TagId
で “その他のおすすめ” を呼び出すことで同様のタグを提供できます。
推奨に TagId を使用する方法:
- ユーザー メタデータ値 (タグ) のリストを準備して、それぞれに一意の
TagId
を割り当てます。 - モデルの接続を Reco_Interactions.CSV データ ストレージ ファイルに作成します。
- モデルをクエリして、“ユーザーごとにパーソナライズされたタグ” または “類似するタグ” API を取得します。
ステップ 1: ユーザー メタデータ値 (タグ) のリストを準備して、それぞれに一意の TagId を割り当てます
年齢データの値を構築する場合、依然としてバケット化は優れたアプローチです: Age5To11、Age12To18 など。
その他のメタデータ値に対して、それぞれに個別の TagId を作成します。 たとえば、家族の状態を示すカテゴリが必要な場合: Single、Couple、CoupleWithKids など。
ステップ 2: Reco_Interactions.CSV データ ストレージ ファイルにモデルの関連付けを作成する
ユーザーと品目の間の元の各やり取りを使用して、TagId
でやり取りデータの行を作成します。
[!注意:]
このアプローチに関する重要な注意事項:
- 新しく構築したデータのみを、モデルのやり取りデータ エンティティで使用します。
- ユーザーを TagIds に関連付けるやり取り行の作成は、必ずしもやり取りに基づく必要はありません。 ユーザーをモデルが含むタグに関連付けるために、やり取りを作成する方法を、この例で示します。
- 利用できる場合は、
InteractionGroupingId
に対して、元のやり取りを再利用することが合理的です。 利用できない場合は、UserId
ごとにグループ化を試みます。 モデルのトレーニング段階で、すべてのやり取りデータを使用して、異なる TagId 間、および UserID と TagId 間の関連付けを構築します。 さまざまなシナリオや使用パターンが異なる可能性があるため、さまざまなグループ化の方法を試してから、より関連性の高い結果をもたらす方法がどれかを確認することをお勧めします。
- 元のやり取り行:
UserId
、ItemId
、InteractionGroupingId
を含む。 上記のBucketId
の例とは異なり、この行を入力データセットに 絶対に含めないでください。- 新しいやり取り行:
UserId
、ItemId
としてのTagId
、InteractionGroupingId
としてのUserId
を含む。
データ コントラクトの例は次のようになります。
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Timestamp | Future Attribute | Future Attribute | Channel | カタログCatalog | 長所 | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
UserId |
TagId |
UserId |
ステップ 3: モデルにクエリを実行して、ユーザーごとにパーソナライズされたタグ、または類似したタグを取得します
慎重にモデルを構築すると、「おすすめ」リスト タイプと「人気ユーザーもいいね」リスト タイプを使用して Serving エンドポイント をクエリすると、望ましい結果が得られます。
指定した UserId
に対して推奨される TagId を返す "おすすめ" API クエリは、次のようになります。
<serving-endpoint>Reco/v1.0/picks?userId=<UserId>
シード品目パラメーターを対応する TagId
で置き換えた、"その他のおすすめ" API クエリ:
<serving-endpoint>/Reco/V1.0/Similar/<TagID-value>?
応答出力のサンプル
{
"id": "Picks",
"name": "Picks",
"version": "v1.0",
"items": [
{
"id": "68100",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62500",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "61504",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "65103",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "61401",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Picks for you",
"longTitle": "Picks for you",
"titleId": 6,
"personalizationConfidence": 1.0,
"pagingInfo": {
"totalItems": 139
},
"status": "Success"
}
例 3: デモ データで tagIds をクエリする
UserId
=100 を持つユーザーが、次のタグと連携していると考えます: 123 (“サッカー ファン” を表す)、Age30To40Female、FamilyWithKids。
元のやり取り行を使用して、“Reco_Interactions.csv” ファイルに次の行を作成できます: そのユーザーのタグごとに 1 つずつ存在する、新しい 3 行のインタラクション情報。Intelligent Recommendations サービスが読み取る “Reco_Interactions.csv” ファイルに含める必要があります。
![注意]
この例では
UserId
ごとのグループ化を選択し、InteractionGroupingId
をUserId
と等しく設定しました。 また、ItemId
はTagId
を表すことにも注意してください。
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Timestamp | Future Attribute | Future Attribute | Channel | カタログCatalog | 長所 | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
100 | 123 | 100 | |||||||||
100 | Age30To40Female | 100 | |||||||||
100 | FamilyWithKids | 100 |
おすすめのクエリと応答
構築した "おすすめ" 要求は次のようになります。
GET <serving-endpoint>/reco/v1.0/picks?UserId=100
Picks レスポンスは、最初の位置に TagID
=FamilyWithKids を含む 200 個の ItemId (タグ用) のリストを返します。
{
"id": "Picks",
"name": "Picks",
"version": "v1.0",
"items": [
{
"id": "FamilyWithKids",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "625",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "Sports",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "651",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "611",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Picks for you",
"longTitle": "Picks for you",
"titleId": 6,
"personalizationConfidence": 1.0,
"pagingInfo": {
"totalItems": 139
},
"status": "Success"
}
類似のクエリと応答
類似 API を使用して作成された "その他のおすすめ" 要求は次のようになります。
GET <serving-endpoint>/Reco/V1.0/Similar/FamilyWithKids?
「People also like」 レスポンスは、最初の位置に Age30To40Female、2 番目の位置に FamilyWithKids を含む 200 のItemIds (タグ) のリストを返します。
{
"id": "Similar",
"name": "Similar",
"version": "v1.0",
"items": [
{
"id": "Age30To40Female",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "FamilyWithKids",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "SportsParent",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "651",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "123",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "People also like",
"longTitle": "People also like",
"titleId": 6,
"pagingInfo": {
"totalItems": 200
},
"status": "Success"
}
サービスと対応するモデルの詳細については、モデリング ガイド をご覧ください。
関連情報
クイック スタート ガイド: IR アカウントを作成する
モデリングの Q&A
データ コントラクト ガイド
API 要求のサンプル