購買バスケットの移行を「流れ」として可視化する

顧客の購買行動を分析するとき、「この顧客は生鮮中心」「この顧客は簡便商品中心」といったように、一時点の特徴からタイプを捉えることがあります。しかし、購買バスケットは時間を通じて固定されているとは限りません。今回は、6期間にわたるbasket stateの変化をalluvial networkとしてつなぎ、顧客がどのような複数経路をたどるかを可視化しました。

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

左から右へ時間が進みます。各縦列は一つのperiod、色の付いたnodeはその時点のbasket stateです。

nodeの高さは、そのperiodにそのstateへ属している顧客数を表します。node同士を結ぶribbonは、前periodから次periodへ移動した顧客です。太いribbonほど、多くの顧客がそのtransitionを経験しています。

ribbonの色は遷移元stateに対応します。そのため、一つのstateから複数方向へ分かれる分岐と、異なるstateから同じstateへ集まる合流の両方を見ることができます。

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

今回のSynthetic Dataでは、顧客600人を6期間観測し、合計3000件のperiod間transitionを生成しました。

6期間のうち一度以上basket stateを変更した顧客は97.3%でした。1顧客が経験した異なるstate数は平均3.15です。

一方、個々のtransition単位では45.9%が同じstateへの残留でした。つまり、一定の安定性を保ちながらも、複数期間を通して見ると多くの顧客が少なくとも一度は別のstateへ移っています。

6期間を通じたpathは555種類観測されました。最も多かった単一pathでも全顧客の0.8%にとどまり、特定の一本の経路だけが全体を代表する構造にはなっていません。

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

今回のSynthetic Dataでは、顧客をStable、Migrating、Explorerという3つのlatent customer typeへ分けています。

Stableでは同じbasket stateに留まる確率を高く設定しています。Migratingではstate維持を少し弱め、複数stateへの移行を増やしました。Explorerでは自己遷移をさらに弱め、Exploratoryなど別のstateへ移る確率を高めています。

さらに、中盤ではExploratoryへの流入を少し増やし、後半ではPremiumとFamilyへの弱い収束を設定しました。このため、図中には残留、分岐、合流が同時に現れます。

可視化の仕組み

まず、各顧客について6期間それぞれのbasket stateを用意します。隣接するperiodのstateを組み合わせることで、source stateからtarget stateへのtransitionを作ります。

次に、同じsource–target pairを通った顧客数を集計し、その人数をribbon thicknessへ変換します。

各state nodeの内部では、transitionごとのribbonを積み上げています。source側とtarget側の幅を同じ顧客数に対応させ、3次Bezier curveでつなぐことで、顧客flowが連続した帯として見えるようにしています。

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

今回の目的は、「各periodで何人がどのstateにいたか」だけではなく、「その人たちが前後のperiodでどこから来て、どこへ向かったか」を見ることです。

transition matrixは各期間間の移行量を正確に確認するのに適していますが、複数periodを連続したpathとして読むには別の表現が必要です。

Alluvial networkでは、時間方向を維持したまま、残留、分岐、合流を一つのflow structureとして表現できます。そのため、顧客の購買バスケットが時間とともに複数経路をたどる今回のテーマに適しています。

実データへの応用可能性

実データでは、顧客ID付きPOSデータ、EC注文履歴、会員購買履歴などから、期間ごとのbasket stateを定義することで同様の構造を探索できます。

たとえば、生鮮中心だった顧客が簡便商品中心へ移る経路、探索的な購買を経てプレミアム商品へ移行する経路などを仮説として探索できます。

ただし、transitionが見えること自体は、その移行を引き起こした原因を示しません。価格、キャンペーン、ライフイベント、季節、商品供給などを追加で確認する必要があります。

データと分析方法

今回はSynthetic Dataを使用しています。顧客数は600、period数は6、顧客×period観測数は3600です。乱数シードは260926です。

basket stateはEssentials、Fresh、Convenience、Family、Premium、Exploratoryの6状態としました。顧客にはStable、Migrating、Explorerのlatent typeを設定し、typeおよびperiodによってtransition probabilityを変化させています。

生成に使用した期待transition probabilityと実際のempirical probabilityを比較した平均絶対誤差は0.029でした。

このVisualization Studyの限界

今回のbasket stateとtransition structureはSynthetic Dataとして設計されたものです。実際の顧客行動が同じ6状態や同じtransition probabilityを持つとは限りません。

実データでは、basket stateをどのように定義するかが結果へ大きく影響します。dominant categoryを使う方法、カテゴリ構成比からclusteringする方法、埋め込み表現を使う方法などで異なるstructureが得られる可能性があります。

また、alluvial representationは全体のflowを読むのに適していますが、細いribbonが増えると個々の顧客pathを追跡しにくくなります。今回の図も個人追跡ではなく、aggregate transition structureを読むことを目的としています。

まとめ

今回は、顧客の購買バスケットが時間を通じてどのように移行するかをBasket transition alluvial networkとして可視化しました。

同じstateへ留まる太い流れだけでなく、複数方向への分岐や、異なるstateからの合流を同時に描くことで、購買行動を固定的なカテゴリではなく時間的なflowとして捉えています。

この見方は、実データでも主要なbasket transitionを探索し、顧客行動の変化について次の分析仮説を作るための入口として利用できます。