見出し画像

エンジニア不在のビジネス部門でMA運用が進む理由 ~顧客フォローの最適化~



■自己紹介

・小売業をフランチャイズ展開しているチェーン店本部にて販促やイベント企画、CRMシナリオ構築、会員分析を担当
・中高大と運動部&ゴリゴリの文系(会社に入ってから初めてExcel触った)
・CRMシナリオ構築をコスパ良く運用すべくプレパレーションツールを導入し活用をするも、廃盤が決定し急遽Tableu Prepへリプレイス
・リプレイスが完了し、BI機能の活用を社内推進すべく2024年4月22日よりDATASaber挑戦(Tableau Desktopを触れたのも同日)

■はじめに

BtoCの小売業をフランチャイズ展開している本部にてSQLもわからないビジネス部門がTableu Prepを使ってMA(Salesforce Marketing Cloud※以下SMC)のシナリオ実装を自己完結する運用についてご紹介します。
以下のような課題を抱えている方は、ぜひ参考にしてください。
・MAの運用をアウトソーシングしている
・新規シナリオ構築/PDCAに時間とコストがかかっている
・Tableau Prepをあまり活用できていない

■CRMの難しさ

小売業の売上は 客数×客単価×回数 が基本となります。
その指標を向上させるために、キャンペーンによる誘致やクロスセルアップセル、次回クーポン等様々な施策を考えると思いますが、コストをかけずに購買につなげられる施策はなかなか難しいです。
今回はそんな施策の一つである、リピート購買促進策のオファータイミング最適化についてPrep処理交えて解説出来ればと思います。
この処理をPrepで実施すれば副産物としてDesktopでもリピートされやすい商品や購買サイクルの分析が可能になりますので合わせてご紹介いたします。

■オファータイミング?

例えば日用品等で、そろそろなくなるタイミングで商品のオファーが来たらどう感じますか?
中には気持ち悪いと思う人もいるかと思いますが、日用品のようなものの消耗加減に意識を使いたくないですよね!
”お使いのシャンプーそろそろなくなりませんか?”といったオファーが来てシャンプーを確認すると確かにあと少しでなくなりそう!買っとかないと!といったシーンになるよう、その人に合わせたタイミングでオファーを出す事が大事(パーソナライゼーションの第一歩)と私は考えます。

■じゃあTableau Prepでどうやるの?

対象の商品の顧客毎購買サイクルをランク関数を使って出していきます。
Prep処理での概要は以下です。
①商品毎の購買日ランクを作る(降順)
②そのランクに+1をする
③同じデータソースを分岐させてPrep内で自己結合するんですが、ポイント購買日ランクと購買日ランクに+1したものを結合値にすること!
④自己結合したデータから日付の差を取る
⑤日付差の平均や中央値を取るとこで対象商品の購買サイクルが算出可能
⑥商品の最終購買日と照らし合わせてサイクルに該当する人へオファー!
といった形ですが、文字で書いてもわからないので画面キャプチャで解説します。

①商品毎の購買日ランクを作る
②そのランクに+1をする

会員・商品毎に購買日の新しい順にランクを付けます。
-----------------コピペ用---------------------
//商品毎購買ランク
{ PARTITION [会員ID],[商品コード]:{ ORDERBY [売上日]DESC:RANK()} }

-----------------コピペ用---------------------
//商品毎購買ランク+1
[商品毎購買ランク]+1

最新がランク1で附番出来ている、横にはランクに+1した値もあるがこの後に活きてきます

③同じデータソースを分岐させてPrep内で自己結合

ランクに+1し自己結合することで、前回の購買がわかるようになります!
同じ会員で同じ商品を3回購買した例だと

日付差を見ると前回と今回の購買日数差が出せる
※左結合をすると上記のようにNULL行が出来るので本番では内部結合にする

④自己結合したデータから日付の差を取る

前回と今回の購買日日数差をDATEDIFF関数で出す
※同一カラム名等はわかりやすく書き換える
-----------------コピペ用---------------------
DATEDIFF('day',[前回売上日],[売上日])

縦に並んでいた日付が横持ちになり、DATEDIFFによって購買差がわかる!
001の会員はマカエキスを200日の購買サイクルで購入

⑤日付差の平均や中央値を取るとこで対象商品の購買サイクルが算出可能

3回以上購買がある場合は日数差が2種類以上出るのでレコードをユニークにする意味も込めて集計にて会員ID・商品の一意化と日数差の中央値を集計
●グループ化したフィールド
・会員ID
・商品コード
・商品名
●集計フィールド
・売上日(MAX)
・購買日数差(MEDIAN)

集計ステップでデータをマージしつつ日数の適正化
処理後は会員IDに対し商品が一意となり日数の中央値が返ってきている

⑥商品の最終購買日と照らし合わせてサイクルに該当する人へオファー!

上記画像の売上日は対象商品の最終購買日(MAXで返してるので)なのでDATEADDで日数差を足して今日の日付と比較するとオファー対象が明確に!
-----------------コピペ用---------------------
//オファー対象
//今日を起点に1週間以内に交換サイクルが来る対象者を算出
IF
[売上日]+[購買日数差]>=TODAY()
AND
[売上日]+[購買日数差]<=DATEADD('day',7,TODAY())
THEN '対象'
ELSE NULL
END

※サンプルデータなのでブログ記載の6月14日時点でうまく対象が出ない為、6月14日を起点に20日以内に購買サイクルが来るように関数を調整済

以上でオファータイミングの最適化が図れました!
次にDesktopで購買サイクルに関する分析をしてみましょう!
Prepで処理したデータをDesktopで可視化すると

Tableau散布図(商品別の購買日数差と購入会員UU数)

上記のように商品毎のサイクルと買われていいる人数の関係が見えたのでどの商品を押していくかがわかりやすくなったのではないでしょうか?

■最後に

パーソナライズすることは重要だと認識しつつもなかなか現場で最適化することは難しいです。
なのでまずPrepで試しながらやってみる!が大事かと思いますので皆さんもチャレンジ&Prep活用してみてください!
Prepフローをダウンロードして自社データに置き換えて使ってみてください!


この記事が気に入ったらサポートをしてみませんか?