
【第599回】Personalization:Real-Time Calculated Affinity を設定する
前回の記事では、TrailNest の商品閲覧・カート追加・購入を、次の 3 つの Engagement Signal として設定しました。
TrailNest Product View
TrailNest Add To Cart
TrailNest Purchase
今回は、これらの行動から、顧客がどの商品カテゴリに興味を示しているかを計算する Real-Time Calculated Affinity を設定します。
今後、Backpacks や Sleeping への興味を、Hero Banner の出し分けに利用していきます。
Personalization 基礎シリーズ
Sitemap Builder シリーズ
Data 360 設定シリーズ
Personalization 設定シリーズ
今回計算する Affinity
Salesforce の公式ワークショップでは「特定カテゴリの商品を 5 回より多く閲覧したか」という閲覧件数を条件に、Hero Banner を出し分けています。
今回の TrailNest では、閲覧に加えて、カート追加や購入も取得しています。そこで、これらの行動に異なる重みを付け、カテゴリへの興味をスコアとして評価する Calculated Affinity を使用します。
対象は、Goods Product の Category です。
例えば TN-BP-001 の Category は backpacks です。この商品の閲覧・カート追加・購入を、backpacks への興味として評価します。
今回は、次の重みで設定します。
商品閲覧:Low / Positive
カート追加:Medium / Positive
商品購入:High / Positive
Salesforce の計算では、Low は 1 点、Medium は 3 点、High は 5 点の影響を持ちます。Positive は加算、Negative は減算です。今回は、すべて興味を示す行動として Positive を使用します。
「何回見たか」に加えて「どのような行動をしたか」も考慮し、その結果を Hero Banner の出し分けにつなげていきます。
なお、今回の初期実装ではカテゴリ一覧ページの閲覧は対象に含めず、商品に対する行動と、商品マスタの Category を使用しています。
① Calculated Affinity を開く
アプリケーションランチャーから Calculated Affinity を検索して開き、New をクリックします。

次の内容で設定します。
Name:TrailNest Category Affinity
Lookback Window *:30 日
Affinity Decay *:無効

* Lookback Window とは
Affinity の計算に使用する、行動の参照期間です。
今回は 30 日を指定し、直近 30 日間の行動を評価します。30 日は今回の PoC 用の設定であり、すべてのサイトに共通する推奨値ではありません。
* Affinity Decay とは
時間の経過に伴い、興味のスコアを減衰させる設定です。
今回は行動による変化を確認しやすくするため、無効にします。本番では、商品の購入周期や、興味が変わる速さに応じて検討します。
② Real-Time Profile Data Graph を選択する
次へ進み、以前に作成した TrailNest の Real-Time Profile Data Graph を選択します。
Affinity の対象を選択する
次の内容を指定します。
Object:Goods Product
Selected Fields:Category

今回使用するのは、商品 CSV の categoryCode を Mapping した、テキスト型のカスタム項目 Category(Category__c) です。
Goods Product が候補に表示されるには、選択した Profile Data Graph の行動 DMO との関連が必要です。 また、Category は Mapping 済みのテキスト項目である必要があります。表示されない場合は、この関連と Mapping を確認してから進めます。
③ Engagement Signal と重みを指定する
次へ進み、前回作成した 3 つのシグナルを追加します。
※ 最大 10 個のシグナルを設定できます。
TrailNest Product View
Strength:Low
Impact:Positive
TrailNest Add To Cart
Strength:Medium
Impact:Positive
TrailNest Purchase
Strength:High
Impact:Positive

もし Engagement Signal が候補に表示されない場合は
Engagement Signal を作成していても、Real-Time Profile Data Graph の選択項目が不足していると、Affinity の候補に表示されない場合があります。
※ Engagement Signal で使用する項目は、データグラフで選択している項目だけに絞られてはおらず、DMO でマッピングされている項目から選択しています。サイレントエラー状態となり気づきにくいので、表示されなければ、Real-Time Profile Data Graph の選択項目を見行くということで良いと思います。
④ 自動生成の Calculated Insight を確認する
Calculated Affinity を保存すると、しばらく Processing のステータスで 5 分~ 10 分程度待ちます。

これが終わると リアルタイムインサイト(リアルタイム計算済みインサイト)が自動生成され、Real-Time Profile Data Graph にも追加 されます。

※ アフィニティに作成時にエラーが出た場合は、上記の SQL の式に問題がある場合があります。この式を解消するような形で Engagement Signals を解消してください。Engagement Signals の設定は後に、割とサイレントエラーを起こしやすいです。
Calculated Affinity
↓
Calculated Insight
↓
Real-time Data Graph という処理が自動で行われます。
※ 何らか削除してやり直したい場合は、Calculated Affinity を削除するとすべてが自動的に消えます。
Raw Affinity Score と Base Affinity Score
生成されたリアルタイムインサイトには、次の 2 種類のスコアがあります。
Raw Affinity Score:上限・下限を設けないスコア
Base Affinity Score:0 〜 100 の範囲のスコア

⑤ 既存の行動におけるスコアを確認する
今回は、新しい Web 操作は行わず、これまで TrailNest から取り込んだ行動データを元に、カテゴリごとの Affinity が計算されているかを確認します。
Data 360 の Data Explorer を開き、次の内容を選択します。
Object Type:Calculated Insights
Object:TrailNest Category Affinity Category
画面では、次の項目が確認できます。
data_graph_dimension:対象となる Profile の識別子
Category:スコアの対象カテゴリ
affinity_score:その合計を 0 〜 100 の範囲に収めたスコア
raw_affinity_score:行動の重みを合計した素のスコア

同じ顧客のカテゴリ別スコアを確認する
data_graph_dimension を、前回確認した顧客の Unified Individual ID と照合します。
今回の例では、同じ顧客について、次の結果が確認できました。
apparel:31
sleeping:18

これで、同じ顧客でもカテゴリごとに異なる Affinity が計算されていることを確認できます。
今回の設定では、対象期間を 30 日間とし、商品閲覧・カート追加・購入を、それぞれ異なる重みで評価しています。スコアは単純な閲覧件数ではなく、これらの行動を組み合わせた結果です。
2 つのスコアが同じになる場合
今回の画面では、affinity_score と raw_affinity_score が同じ数字になっています。
これは正常です。今回生成された式では、raw_affinity_score を四捨五入し、0 〜 100 の範囲に、強制的に収めた値が affinity_score になります。
raw_affinity_score:9.4 → affinity_score:9
raw_affinity_score:9.5 → affinity_score:10
raw_affinity_score:101 → affinity_score:100
raw_affinity_score:1000 → affinity_score:100
raw_affinity_score:負の値 → affinity_score:0
したがって、101 でも 1000 でも、affinity_score は 100 です。ただし、raw_affinity_score には元の値が残ります。
今回の設定では、raw が 9.5 などの小数になることはありません。 Decay が無効で、整数の+1・+3・+5を足しているためです。Decay(時間経過による減衰)を有効にすると、小数になる可能性があります。
加算する重みは、Affinity の設定で各シグナルの Strength を選択して変更します。
Low:1 点
Medium:3 点
High:5 点
ここでは、既存の行動から計算結果が生成されていることまでを確認します。新しい行動によるリアルタイムの変化は、後ほど Hero Banner の表示とあわせて検証します。
⑥ Hero Banner への利用
今回作成した Affinity は、今後の Personalization の判断材料として利用します。TrailNest では、次のような Hero Banner を用意しました。
通常バナー

Backpacks バナー

Sleeping バナー

カテゴリへの Affinity を Personalization の Decision の条件に使用し、表示するバナーを判断します。
リアルタイムセグメントを作成して利用する方法もありますが、Affinity を使用するために、必ずセグメントを作成する必要はありません。
具体的なスコアの条件と、複数の条件に該当した場合の優先順位は、Hero Banner の設定時に決めます。
いかがでしたでしょうか。
今回は、商品閲覧・カート追加・購入の Engagement Signal を使用し、カテゴリへの Real-Time Calculated Affinity を設定しました。
自動生成されたリアルタイムインサイトが Profile Data Graph に追加され、既存の行動データからカテゴリ別のスコアが計算されていることまで確認できました。
次回は、この Affinity を Personalization の判断条件に使用し、TrailNest の Hero Banner の出し分けにつなげていきます。
今回は以上です。