
【第605回】Personalization:Affinity に応じた WPM レコメンドを設定する
これまでの記事では、TrailNest のカテゴリごとの Affinity を使って Hero Banner を切り替え、API で取得したおすすめ商品を Web サイトへ表示しました。
今回は、顧客が最も興味を持つカテゴリの中から、過去 2 週間に商品詳細をよく見られた商品を選ぶ構成へ進みます。
例えば、Apparel への興味が最も高い顧客には、Apparel の中で閲覧回数が多い商品をおすすめします。本人がまだ見ていない商品も候補になります。
商品を選ぶ設定をこの回で用意し、次回の記事では Web Personalization Manager(WPM)を使って、商品詳細ページに表示します。
なお、トップページと注文完了ページでは、これまでの API によるレコメンドを継続します。公開中の表示を保ちながら、商品詳細ページのみに今回の表示方法を追加します。
Personalization 基礎シリーズ
Sitemap Builder シリーズ
Data 360 設定シリーズ
Personalization 設定シリーズ
今回の商品の選び方
今回は以下のように商品を選びます。
興味のあるカテゴリが分かる顧客:最高スコアのカテゴリの商品を選ぶ。
まだ興味のあるカテゴリが分からない顧客:全カテゴリから商品を選ぶ。
商品の順位:全ユーザーの商品詳細閲覧回数の降順。
集計期間:Calculated Insight の実行時点から過去 14 日間。
表示件数:最大 4 商品。
WPM の表示場所:商品詳細ページのみ。
カテゴリを決めるのは、その顧客の Affinity です。カテゴリ内で商品を並べるのは、サイト全体の 商品閲覧回数です。この 2 つは別の指標です。
今回は、正の raw_affinity_score がある顧客を「興味のあるカテゴリが分かる顧客」として扱います。Affinity のレコードがない場合や、正のスコアがない場合は、全カテゴリの人気商品を選びます。
閲覧人数ではなく、閲覧イベントの件数を数えます。同じ人が別の閲覧イベントで 3 回見れば、3 回として数えます。購入確率を AI で予測する構成ではありません。
過去 2 週間という期間は、商品閲覧回数の集計に適用します。 カテゴリへの Affinity は、これまでの設定を使用します。
① 商品詳細の閲覧データを確認する
Data 360 のデータエクスプローラーで、Product Browse Engagement に TrailNest の商品詳細閲覧が取り込まれていることを確認します。

今回の TrailNest の Sitemap は、Product Detail ページで ViewCatalogObject を送信する構成です。イベントの interactionName は View Catalog Object になります。
集計に使う項目は、次のとおりです。
Product Browse Engagement ID(ssot__Id__c)
閲覧イベントの IDProduct(ssot__ProductId__c)
閲覧した商品の IDEngagement Date Time(ssot__EngagementDateTm__c)
閲覧が発生した日時Engagement Channel Action (ssot__EngagementChannelActionId__c)
閲覧などの行動名Product View URL(ssot__ProductViewURL__c)
閲覧したページの URL
② 過去 2 週間の商品閲覧回数を集計する
Data 360 の Calculated Insights を開き、新規作成します。
作成方法:SQL
Name:TrailNest Product View Count
API Name:TrailNest_Product_View_Count
次の SQL を設定し、スケジュールを有効にし、定期的に再集計される状態にしてください。
SELECT
ssot__GoodsProduct__dlm.ssot__Id__c AS Product_Id__c,
COUNT(ssot__ProductBrowseEngagement__dlm.ssot__Id__c) AS View_Count__c
FROM ssot__GoodsProduct__dlm
INNER JOIN ssot__ProductBrowseEngagement__dlm
ON ssot__GoodsProduct__dlm.ssot__Id__c =
ssot__ProductBrowseEngagement__dlm.ssot__ProductId__c
WHERE ssot__ProductBrowseEngagement__dlm.ssot__EngagementChannelActionId__c =
'View Catalog Object'
AND ssot__ProductBrowseEngagement__dlm.ssot__ProductViewURL__c LIKE
'https://mcxkknz3m0zj3jqsxn4hm3dp3q-4.pub.sfmc-content.com/f0sn3uhu0p0?view=product%'
AND ssot__ProductBrowseEngagement__dlm.ssot__EngagementDateTm__c >=
SECOND_SUB(NOW(), 1209600)
AND ssot__ProductBrowseEngagement__dlm.ssot__EngagementDateTm__c <= NOW()
GROUP BY ssot__GoodsProduct__dlm.ssot__Id__c
この SQL は、次の処理をしています。
商品マスタと閲覧イベントを、商品 ID で結び付ける。
TrailNest の商品詳細閲覧だけに絞る。
集計実行時点から過去 14 日間の閲覧に絞る。
商品ごとに閲覧イベントを数える。
SECOND_SUB(NOW(), 1209600) で、集計を実行した時点の 14 日前を求めます。1209600 とは、14 日 × 24 時間 × 60 分 × 60 秒のことです。未来の日付のイベントは上限条件で除外します。
「今週と先週」という暦の 2 週間ではなく、実行時刻から遡る 14 日間です。例えば 10 月 5 日 10:00 に実行すれば、9 月 21 日 10:00 から 10 月 5 日 10:00 までが対象になります。
出力は、Product_Id__c が集計の単位(Dimension)、View_Count__c が閲覧回数(Measure)です。顧客 ID でグループ化しないため、全ユーザーの閲覧を合算します。
URL 条件は、現在の TrailNest の ?view=product&id=... という構成に合わせています。Query String の順序やページ URL が異なる場合は、実際に取り込まれた Product View URL に合う条件へ変更してください。WPM のプレビューで商品詳細を開いたときの閲覧も、同じ条件に一致すれば集計されます。
初回の集計処理が完了したら、Calculated Insight の結果を確認します。同じカテゴリの複数商品を異なる回数だけ閲覧しておくと、並び順の確認に使えます。

③ Item Data Graph に閲覧回数を追加する
前回までの記事で作成済みの TrailNest Item Data Graph を編集します。

Goods Product を起点とするグラフに、今回作成した TrailNest Product View Count を追加し、次の項目を選択します。
Product_Id__c
View_Count__c

Calculated Insight を Data Graph に追加するには、グラフの DMO の主キーが、Calculated Insight の Dimension に含まれている必要があります。今回、Goods Product の ID を Product_Id__c として出力するのは、この商品との対応付けにも使用するためです。
④ 閲覧回数順の Recommender を新規作成
Personalization アプリの Recommenders を開き、新規作成します。
Profile Data Graph:TrailNest Profile
Item Data Graph:TrailNest Item Data Graph
Recommender Name:TrailNest Category Popular Recommendations
Recommender API Name:TrailNest_Category_Popular_Recommendations
Fallback Recommender:無効

次の設定では、Rule-Based Recommendations を選択します。

並び順を設定する
Data Graph Resource:先ほど作成した Calculated Insight
Calculated Insight:TrailNest Product View Count
Sort Measure / 並び替えに使う指標:View_Count__c
Sort Order:Descending(降順)

カテゴリの Filter を設定する
Filters の Include 側に、次の条件を追加します。
Take Action When:All Conditions Are Met
Item Data Graph Resource:Direct Attributes > Category
Filter Type:Profile Data Graph
Operator:Match Any
Profile Data Graph Resource:Calculated Insights > TrailNest Category Affinity Category > Category
ここで Category を選ぶと、その下に WHERE の条件が表示されます。次のように指定します。
Metric:raw_affinity_score
Operator:Is Top
Value:1

Is Top の 1 は「上位 1 カテゴリ」を選ぶための指定です。Match Any だけを指定すると、複数の Affinity カテゴリに一致する商品が候補になります。今回は WHERE の Is Top:1 と組み合わせることで、最高スコアのカテゴリに絞ります。
保存し、Recommender の処理が完了したことを確認します。
⑤ Simulate で商品の絞り込みを確認する
今回の Filter は、リクエストで渡す独自変数ではなく、顧客の Profile Data Graph を参照します。Recommender の Simulate で、顧客に応じた商品の選択を確認します。
Sample Recipient:対象顧客の Unified Individual ID
Anchor Item ID:今回は指定しません

ここでの Simulate の表示件数と、Point が返す最大件数は別です。 Web の表示件数は、後の Point と WPM のプレビューで確認します。
⑥(初回訪問向けの)全カテゴリが対象の人気 Recommender を作成する
Affinity がない顧客にも商品を表示するため、カテゴリで絞らない Recommender を、もう 1 つ新規作成します。
Profile Data Graph:TrailNest Profile
Item Data Graph:TrailNest Item Data Graph
Recommender Name:TrailNest All Popular Recommendations
Recommender API Name:TrailNest_All_Popular_Recommendations
Fallback Recommender:無効
Recommendation Type:Rule-Based Recommendations
Calculated Insight:TrailNest Product View Count
並び替えに使う Measure:View_Count__c
Sort Order:Descending
カテゴリの Filter:追加しない

この Recommender は、顧客の Affinity に関係なく、全カテゴリから過去 14 日間の閲覧回数が多い商品を選びます。
これを Fallback Recommender にしない理由
Fallback Recommender は、メインの商品の件数が足りないときに不足分を補う設定です。今回は、Apparel が最高スコアなら、Apparel が 2 商品しかなくても 2 商品を返します。Backpacks などで残りを埋めません。
そのため、全カテゴリの人気商品は Fallback として追加せず、Affinity がない顧客向けの別 Decision で選択します。
⑦ 既存の Content Schema を確認する
商品レコメンド用の Content Schema は、既存の TrailNest Category Recommendation Content を使用します。
Personalization Type:Recommendations
Data Model Object:Goods Product
Selected DMO Fields に、次の項目が含まれていることを確認します。
商品 ID:ssot__Id__c
商品名:ssot__Name__c
商品カテゴリ:Category__c
価格:UnitPrice__c
画像 URL:ImageUrl__c
商品ページ URL:Link_URL__c

Content Schema は、選ばれた商品の、どの情報を返すかを決めます。価格順か閲覧数順かは Recommender の設定なので、今回も同じ Schema を使用できます。
ちなみに Add Attribute の設定とは、商品情報とは別に、Decision で設定する見出しなどを追加する場所です。今回はページにある「You May Also Like」を使うため、見出し用の追加項目などは作成しません。
⑧ WPM 用の Personalization Point と Decision を設定する
Personalization Points を開き、New → Manual Setup で作成します。
Profile Data Graph:Real-Time > TrailNest Profile
Name:TrailNest WPM Category Popular Recommendations
API Name:TrailNest_WPM_Category_Popular_Recommendations
Personalization Type:Recommendations
Content Schema:TrailNest Category Recommendation Content
Maximum Number of Recommendations to Return:4
Authentication Required:未チェック

この Point には、2 つの Decision を作成し、紐づけます。
Affinity がある顧客用
Affinity がない顧客用
① Affinity がある顧客用
Decision Name:TrailNest WPM Category Popular Recommendations Decision
Decision API Name:TrailNest_WPM_Category_Popular_Recommendations_Decision
Decision State:Live
Recommender:TrailNest Category Popular Recommendations
Targeting Rules:以下を設定します。
まず Take Action When を「Any Condition Is Met(OR 条件)」にします。 6 カテゴリのどれか 1 つに正のスコアがあれば、この Decision の対象とするためです。
そして、最初の条件を、次のように設定します。
Resource:Calculated Insights > TrailNest Category Affinity Category > raw_affinity_score
Operator:Is Greater Than
Value:0
WHERE の Resource:Category
WHERE の Operator:Is Equal To
WHERE の Value:backpacks
WHERE は、どのカテゴリのスコアを調べるかを指定する欄です。この画面では Category の入力が求められるため、NULL にはできません。
条件右側にある「複製」アイコンを使い、同じ条件を合計 6 つ作成します。各条件の WHERE の Value だけを、次の値に変更します。
backpacks
tents
sleeping
apparel
footwear
accessories

これで、「Backpacks の raw スコアが 0 より大きい、または Tents の raw スコアが 0 より大きい、または……」という判定になります。
② Affinity がない顧客用
同じ Point(TrailNest WPM Category Popular Recommendations)に、もう 1 つ Decision を追加します。

Decision Name:TrailNest WPM All Popular Recommendations Decision
Decision API Name:TrailNest_WPM_All_Popular_Recommendations_Decision
Decision State:Live
Recommender:TrailNest All Popular Recommendations
Targeting Rules:Always

Decision の一覧で、Affinity 用を上、全カテゴリ用を下にします。両方に該当する顧客には、優先度の高い Affinity 用が選ばれるようにします。

いかがでしたでしょうか。
今回は、顧客の Affinity を Recommender から直接参照し、最も興味を持つカテゴリの商品を、過去 2 週間の閲覧回数順で選ぶ構成を紹介しました。
興味のあるカテゴリがまだ分からない顧客には、別の Decision で全カテゴリの人気商品を返します。
次回は、Experience Template と WPM を使い、商品詳細ページに商品カードを表示します。トップページの API レコメンドを継続しながら、WPM の表示を追加していきます。
今回は以上です。