
【第620回】Personalization:人気商品と興味に合う商品を A/B テストする
前回の記事では、TrailNest のトップページに、中央の商品を大きく見せるカルーセルを配置しました。
現在は、過去 2 週間の商品詳細ページの閲覧数を基に、全カテゴリの人気商品を最大 10 商品表示しています。

今回は、このカルーセルで表示する商品の選び方を、Salesforce Personalization の Experiment を使って比較します。
比較するのは、次の 2 つです。
A:全カテゴリの人気商品(10 商品)
B:顧客が最も興味を持っているカテゴリの人気商品(5 商品)
見た目や操作方法は共通にし、幅広く商品を紹介する場合と、興味のあるカテゴリに絞って紹介する場合で、顧客の反応がどう変わるかを確認します。
Personalization 基礎シリーズ
Sitemap Builder シリーズ
Data 360 設定シリーズ
Personalization 設定シリーズ
① 今回の A/B テストの内容
A:全カテゴリの人気商品
前回作成した、次の Recommender を使用します。
Recommender:TrailNest Home All Popular
対象商品:全カテゴリ
並び順:過去 2 週間の商品詳細ページの閲覧数が多い順
返却件数:最大 10 商品
B:最も興味があるカテゴリの人気商品
こちらは、顧客の Affinity を使います。
対象商品:raw_affinity_score が最も高いカテゴリの商品
並び順:そのカテゴリ内で、過去 2 週間の商品詳細ページの閲覧数が多い順
返却件数:現在の商品構成では最大 5 商品
例えば、Apparel への Affinity が最も高い顧客には、Apparel の商品を閲覧数の多い順で表示します。
② 前回の記事の設定を振り返る
次の設定は、前回の記事で作成済みのものを使用します。
Personalization Point:TrailNest Home Carousel
API Name:TrailNest_Home_Carousel
Profile Data Graph:TrailNest Profile
Content Schema:TrailNest Category Recommendation Content
Maximum Number of Recommendations to Return:10
通常配信用 Decision:TrailNest Home Popular Default
Experience Template:TrailNest Centered Product Carousel
WPM の表示対象:Current Page Type(Home)
表示場所:#home_wpm_recs
Engagement Destination:Product Engagement
今回は、この Point に Experiment を追加します。
③ B のカテゴリ別 Recommender を用意する
以前、商品詳細ページの WPM レコメンドで使用した TrailNest Category Popular Recommendations の設定を基に、トップページの実験用 Recommender を新規作成します。
Recommender Name:TrailNest Home Affinity Popular
Recommender API Name:TrailNest_Home_Affinity_Popular
Profile Data Graph:TrailNest Profile
Item Data Graph:TrailNest Item Data Graph
Recommendation Type:Rule-Based Recommendations
Fallback Recommender:無効
並び順には、A と同じ Calculated Insight の閲覧数を使用します。
並べ替え項目:過去 2 週間の商品詳細ページの閲覧数
Sort Order:Descending(降順)
カテゴリの Filter は、既存の WPM で動作確認できている、最高スコアのカテゴリに絞る設定にします。
① 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
③ WHERE:最高スコアのカテゴリに絞る条件
Metric:raw_affinity_score
Operator:Is Top
Value:1
この設定で、「その顧客の Affinity が最も高いカテゴリに一致する商品だけを選ぶ」構成になります。

④ 商品クリック用 Engagement Signal を作成する
続いて、Engagement Signals を開き、新規作成します。
Engagement DMO:Product Browse Engagement
Make Signal Available in Automation Event-Triggered Flows は、チェックしない
識別項目には、Product Browse Engagement の各項目を指定します。
User Identifier:Individual
Timestamp Identifier:Engagement Date Time
Item Identifier:Product
Event Identifier:Product Browse Engagement ID
カウント方法は、今回は各クリックイベントをそれぞれ数える設定にします。
Count each event as a discrete engagement signal
Filter は、次の両方を満たす条件にします。
Engagement Channel Action = catalog-object-click
Webpage Type = Home

そもそも、そのようなレコードが生成されるかは、Home のカルーセルをクリックして確認する必要があります。
SELECT
"ssot__Id__c",
"ssot__IndividualId__c",
"ssot__EngagementDateTm__c",
"ssot__EngagementChannelActionId__c",
"ssot__WebpageType__c"
FROM "ssot__ProductBrowseEngagement__dlm"
WHERE "ssot__EngagementChannelActionId__c" = 'catalog-object-click'
ORDER BY "ssot__CreatedDate__c" DESC
LIMIT 10;最後に名前などを登録します。
Name:TrailNest Home Recommendation Click
API Name:TrailNest_Home_Recommendation_Click
Signal を作成すると、標準で Count の Metric が作成されます。今回は、この Count Metric を主指標に使用します。
カート追加・購入の Metric
補助指標には、以前作成した次の Signal の Count Metric を使用します。
TrailNest Add To Cart
TrailNest Purchase
ただし、既存 Signal の集計単位によって意味は異なります。
例えば、注文ごとに 1 件なのか、注文明細ごとに 1 件なのかを確認し、その単位に合わせて結果を読み取ります。
これらは、推薦した商品そのものの購入を自動的に証明する指標ではありません。 今回は、実験参加者の後続行動を見るための補助指標として扱います。
⑤ Data Graph に Engagement Signals で使った項目を追加する
これは以外と盲点ですが、Engagement Signals で利用する Engagement DMO の項目は、すべて利用している Profile Data Graph で項目選択されている必要があります。そうしないと 次の Personalization Point で利用できないんですね。
これはサイレントエラーなので、エラーとしては表示されずにハマってしまいがちですので、気を付けてください。
これまでの記事の流れですと、「Webpage Type」が初登場だと思いますのでそちらを追加して、保存してください。

⑥ Personalization Point に Experiment を作成する
続いて、Personalization Points から、前回作成した TrailNest Home Carousel を開き、Related タブの Experiment セクションで、New をクリックします。

Experiment Name:TrailNest Home Popular vs Affinity
Experiment API Name:TrailNest_Home_Popular_vs_Affinity
Description:Compare all-category popular products with popular products from the customer's highest-affinity category.

次の画面で、Metric を選択します。
Primary Metric:TrailNest Home Recommendation Click の Count
Primary Metric は、実験の評価の中心となる指標です。

Secondary Metrics:
- TrailNest Add To Cart の Count
- TrailNest Purchase の Count

Metric が候補に表示されない場合は、Signal と Metric が使用する DMO・項目が、Point の Profile Data Graph に含まれているか確認してください。
⑦ Affinity がある顧客のみを実験の対象にする
今回は、Affinity がまだない顧客を、カテゴリ別レコメンドの比較に含めない方針にします。
Experiment の Targeting Rules では、TrailNest Profile から参照できる TrailNest Category Affinity Category を使用します。
今回の対象条件は、次の意味になるように設定します。
「カテゴリの Affinity があり、その最高 raw_affinity_score が 0 より大きい顧客」だけを実験の対象とする
Take Action When
Any Condition Is Met(OR 条件)にします。
各条件
Resource:TrailNest Category Affinity Category > raw_affinity_score
Operator:Is Greater Than
Value:0
WHERE:Category → Is Equal To → 各カテゴリコード
今回の TrailNest の商品カテゴリは、次の 6 種類です。
backpacks
tents
sleeping
apparel
footwear
accessories

Affinity がない顧客には何を表示する?
前回作成した、次の通常配信用 Decision を残しておきます。
Decision:TrailNest Home Popular Default
Recommender:TrailNest Home All Popular
Targeting Rules:Always
実験の対象にならない顧客には、この通常配信で全カテゴリの人気商品を表示する構成です。
⑧ 2 つの Cohort を設定する
Cohort は、実験で異なる内容を受け取る顧客のグループです。
今回は、対象となる顧客を 50%ずつに分けます。
A:Control
最初の Cohort は、比較の基準となる Control です。
識別用の名前:All Popular
Population:50%
Recommender:TrailNest Home All Popular
Defer response to the Personalization Decisions:無効
※ 有効にすることで、このグループでは Recommender を直接指定せず、Point にある通常の Decision に処理を任せるということになりますが、今回は専用の Recommender に処理させます。
B:Variation
もう 1 つの Cohort を設定します。
識別用の名前:Affinity Popular
Population:50%
Recommender:TrailNest Home Affinity Popular

設定を保存すると、Experiment は Created の状態になります。この時点では、通常の訪問者への実験はまだ開始していません。
Affinity がない人のフォールバックは、Experiment の外側で処理します。
先ほど設定した参加条件は「6 カテゴリのどれかのスコアが 0 より大きい」です。そのため、Affinity がない人は Experiment の対象外になり、通常の Decision である TrailNest Home Popular Default に進む構成です。
つまり、今回の流れは以下です。
Affinity あり → Experiment に参加 → A または B
Affinity なし → Experiment の対象外 → 通常の Decision → 全カテゴリの人気商品
⑨ WPM で両方の Cohort をプレビューする
トップページを開き、Web Personalization Manager を起動します。
?sf_personalization_wpm
使用するのは、既存の次の Experience です。
Point:TrailNest Home Carousel
Template:TrailNest Centered Product Carousel
Selector:#home_wpm_recs

同じ顧客で A と B を比較する
Affinity を取得できる顧客の Individual ID を指定します。
例えば、Accessories の raw_affinity_score が最も高い顧客を使用します。
WPM の Personalization Decisions and Cohorts から、それぞれの Cohort を選択して Preview を実行します。
A:All Popular
全カテゴリを対象とする人気商品が返る。
商品候補が十分にあれば、最大 10 商品になる。

B:Affinity Popular
Accessories の商品に絞られる。
現在の商品構成では最大 5 商品になる。
カテゴリ内で閲覧数の多い順になる。

出し分けには成功していることが確認できました。
⑩ Experiment を開始する
表示、リンク、計測が確認できたら、Salesforce 側で TrailNest Home Carousel の Related タブに戻り、Experiment のアクションメニューから、Start を選択します。

状態が Started になったことを確認します。

前回の WPM Experience は、Enabled のままですので、そのまま実験が開始されます。
注意:開始後は設定を変更できない
Experiment は、開始後に機能設定を編集できません。
また、Stop は一時停止ではなく、停止後にできる操作は Archive または Delete です。修正してやり直す場合は、新しい実験として実施します。
開始前に、Recommender、対象条件、Metric、配信割合を確認してください。
⑪ 通常の訪問で動作を確認する
WPM を終了し、パラメーターも外して、通常のトップページで確認します。ヒーローが同じアクセサリにも関わらず、レコメンドが異なるかを確認します。
A:All Popular の例

B:Affinity Popular の例

注意:A/B の割り当ては個人単位で維持されます
今回の 50%/50% は、ページの表示回数ではなく、実験の対象となる個人を振り分ける割合です。一度 A または B に割り当てられると、参加条件を満たす限り、実験期間中は同じグループに留まります。そのため、同じ顧客でページを再読み込みしても(F5 を押しても)、A/B は切り替わりません。
もし、両方の表示を確認したい場合は、⑨の Cohort プレビューを使用してください。
⑫ 実験結果を確認する
Experiment の Analytics タブから、今回の Experiment の分析ができます。
Experiment Analytics では、Started または Archived の実験結果を確認できます。
次の順で結果を確認します。
参加者数:各 Cohort に顧客が割り当てられているか。
商品クリック:主指標のデータが記録されているか。
カート追加:商品に対する次の行動につながっているか。
購入:購入行動にも違いがあるか。
50% ずつの設定でも、少人数の段階で人数が完全に同じになるとは限りません。クリックの合計だけを見て判断せず、参加者数や分析画面の指標を併せて確認します。
結果の読み方
例えば、B の商品クリックが多くても、購入に差がなければ、まずは「興味のあるカテゴリに絞ることで、商品詳細への移動が増えた可能性がある」と捉えます。
また、今回は A と B で商品数が異なります。結果には、カテゴリの関連性だけでなく、選択肢の数やスクロール量も影響します。
今回の結果を、そのまま「Affinity だけによる改善率」として説明しないことがポイントです。
⑬ 実験を終了する
実験が終わったら、Experiment の操作メニューから Stop を選択します。
※ 再開はできませんので注意してください。

結果を残す場合は Archive を使用します。

実験を終了した後は、実験を開始する前の設定(通常配信で全カテゴリの人気商品)に戻ります。

いかがでしたでしょうか。
今回は、前回作成した中央強調型カルーセルを使い、全カテゴリの人気商品と、顧客が最も興味を持っているカテゴリの人気商品を比較する Experiment を設定しました。
見た目や操作方法を共通にしながら、Cohort ごとに異なる Recommender を使用することで、商品の選び方による反応の違いを確認できます。
Personalization は、顧客ごとに表示を変えるだけでなく、その表示がどのような行動につながるかを検証するところまで活用できます。
今回は以上です。