セールイベントの需要拡散を「波紋」として可視化する

特定の商品を値引きしたとき、販売数量が変化するのは販促対象商品だけとは限りません。補完商品や代替商品、同じ利用場面で選ばれる商品へ需要変化が波及する可能性があります。しかも、その反応はすべて同時に起きるとは限りません。今回は、関連商品への需要波及を、時間差を伴って広がる「波紋」として可視化しました。

この図は何を表しているのか

中央の大きな点が販促対象商品です。その周囲に配置された点は関連商品を表します。

中心からの距離は、販促対象商品とのrelation distanceです。近い商品ほど強い関連を持つようSynthetic Dataを設計しています。

背景の色面と波紋状の等高線は、各商品の需要反応が最大になるpeak timingを表します。Scientific modeでは等高線に「1週」「2週」というlabelを付けています。点の大きさは最大需要upliftです。

したがって、中心付近の大きな点は「比較的早く、強く反応する関連商品」、外側の小さな点は「より遅く、弱く反応する商品」として読むことができます。

可視化から読み取れること

今回のSynthetic Dataでは、販促対象1商品と関連商品90商品を生成しました。

relation distanceとpeak lagのSpearman相関は0.95でした。中心から遠い商品ほど需要反応のpeakが遅くなる構造が確認できます。

一方、relation distanceと最大upliftのSpearman相関は-0.91でした。距離が離れるほど販促波及の強さが小さくなる方向の関係です。

近距離20%の商品ではpeak lag中央値が1.37週、最大uplift中央値が48.6%でした。遠距離20%では、それぞれ5.27週、12.1%でした。

この構造をどう解釈するか

今回の可視化では、商品間のrelation distanceを需要波及の伝播距離として扱っています。距離が大きいほどpeak timingを遅らせ、uplift amplitudeを減衰させるGround Truthを設定しました。

ただし、波紋は完全な同心円ではありません。Core、Complement、Substitute、Meal Pairing、Impulse、Premiumというカテゴリごとにpropagation speedとaffinityを変えているため、同じ距離でも反応時期と強さが少し異なります。

そのため、図の歪んだ波紋は装飾ではなく、カテゴリごとに異なる伝播構造を反映したものです。

可視化の仕組み

まず、販促対象商品を関係空間の中心へ配置します。関連商品はカテゴリごとの方向を持ちながら、relation distanceに応じて中心から離れた位置へ配置します。

次に、各商品についてpeak lagとmaximum upliftを生成します。peak lagはrelation distanceとcategory-specific propagation speed、upliftはdistance decayとcategory affinityに依存します。

週次需要反応は、peak timingを中心とする非対称Gaussian pulseとして生成しました。需要が立ち上がる側と減衰する側で幅を変えることで、反応後の尾が少し長く残る構造にしています。

最後に、商品pointのpeak lagをGaussian kernelで空間補間し、連続したfieldと等時線を作っています。

なぜこの可視化方法を選んだのか

今回のテーマでは、販促効果の大きさだけでなく「どの商品へ、どれくらい遅れて届くか」を同時に見せる必要があります。

商品ごとの時系列を並べれば個別の反応は確認できますが、商品間の関係と時間差を一つの全体構造として捉えるには別の表現が必要です。

Temporal demand ripple mapでは、商品関係を空間距離、時間差をwavefront、反応強度をpoint sizeとして重ねられます。そのため、販促効果を一つの商品から外側へ伝わる波として見ることができます。

実データへの応用可能性

実データでは、販促対象商品と関連商品の週次販売数量、共購買関係、カテゴリ情報などを組み合わせることで、同様の需要波及構造を探索できる可能性があります。

たとえば、販促対象商品の売上増加と同時に補完商品が増えるのか、数週間後に代替商品へ変化が現れるのか、といった仮説を探索できます。

ただし、販売数量の時間差が見えること自体は、販促による因果効果を意味しません。季節性、在庫、他のキャンペーン、価格変更、広告などを追加で確認する必要があります。

データと分析方法

今回はSynthetic Dataを使用しています。商品数は91、関連商品は90商品です。販促前2週から販促後10週までを観測し、合計1183件の週次データを生成しました。乱数シードは260926です。

商品ごとにrelation distance、category affinity、propagation speed、peak lag、maximum upliftを設定しました。週次需要反応は非対称Gaussian pulseで生成し、観測値には小さなノイズを加えています。

このVisualization Studyの限界

今回の需要波及はSynthetic DataのData Generating Processとして設計したものです。実データで同じ距離減衰や同じ伝播速度が存在するとは限りません。

また、商品関係空間の位置もlatent structureに基づくもので、実データでは共購買network、商品embedding、カテゴリ情報などから関係性を構築する必要があります。

さらに、fieldはproduct pointのpeak lagをGaussian kernelで補間しているため、商品が存在しない領域の値は直接観測されたものではありません。今回は低密度領域をmaskすることで、その誤解を抑えています。

まとめ

今回は、特定商品の販促効果が関連商品へ時間差を伴って広がる構造をTemporal demand ripple mapとして可視化しました。

中心から外側へ進むにつれて反応が遅く、弱くなる一方、カテゴリごとの伝播速度の違いによって波紋は方向ごとに異なる形を取ります。

この見方は、実データでも販促イベント後の関連商品の変化を一つの時空間的な構造として探索し、追加分析につながる仮説を形成するために利用できます。