メインコンテンツへスキップ
見出し画像
Photo byakisuke0925

【第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)
      閲覧イベントの ID

    • Product(ssot__ProductId__c)
      閲覧した商品の ID

    • Engagement 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 は、次の処理をしています。

    1. 商品マスタと閲覧イベントを、商品 ID で結び付ける。

    2. TrailNest の商品詳細閲覧だけに絞る。

    3. 集計実行時点から過去 14 日間の閲覧に絞る。

    4. 商品ごとに閲覧イベントを数える。

    • 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 を作成し、紐づけます。

    1. Affinity がある顧客用

    2. 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 の表示を追加していきます。

    今回は以上です。


    次の記事はこちら

    前回の記事はこちら

    私の note のトップページはこちら

     
     
    Salesforce Marketing Cloud、Agentforce、Data Cloud、Salesforce 認定資格に関する実践的な情報を発信しています。これらの記事が、皆さまの学習や日々の業務に少しでもお役に立てば幸いです。