Marketing Science Notes

日々勉強したこと。博士課程奮闘中

論文メモ:MMMのための人工データ生成過程 part 2

前回の続きです。

mks-nandemo.hatenablog.com

前回までで、セグメント間の遷移行列を以て各アクションを定義することを説明しました(参考)。ここからは各アクションを具体的に定義していきます。

k=1: 自然なMigration

マーケティングアクションなどの特殊な体験がなくても、ユーザーは市場に参加したり退場したりします。たとえば、夏になれば旅行に行きたくなるし、春になれば新学期グッズが売れるように、季節性やトレンドにより自然と市場環境は変化します。

最初のアクション k=1として、ユーザーのマーケット参加率(Category Market  s_1)における変化を定式化します。これを自然なMigrationと論文では呼んでいます。

時点 tにおけるマーケット参加率は、

 
r_{t,k} = \frac{n_{t,k,A}}{n_{t,k,S}} \quad {\rm where} \ A = \{\boldsymbol{s} \in S \mid s_1 = {\rm "in-market"} \}

で定義できます。ただし、時刻t、アクション k、セグメントグループ Aにおけるユーザー数を n_{t,k,A}としました。小難しく書いてありますが、要はin-marketなユーザーの割合のことです。

各時点でのマーケット参加率は、分析者がインプットするものです。 ベースラインとして、ユーザーのマーケット参加率の推移を規定してあげる必要があります。簡単のため、マーケット参加率をSeasonality項とTrend項に分けて


\rho_t = \rho^{(seasonality)}_t \times \rho^{(trend)}_t \quad {\rm for} \ t = 1,2,\ldots,T

とします。季節性やトレンド項を、例えばARモデル等で定義してインプットするのは分析者側の仕事です。

さて、想定マーケット参加率 \rho_tが規定されても、実際の参加率 r_{t,k}とは異なっているでしょう。自然なMigrationでは、 r_{t,1}が \rho_tに近づく方向へセグメント移動が発生すると仮定します。

想定よりマーケット参加率が小さい場合

つまり、 r_{t,1} \lt \rho_tの場合は、想定マーケット率へ落ち着くために S \setminus A \rightarrow A方向へユーザー遷移が発生します。

このとき、セグメント \boldsymbol{s} \in Sにおいて、セグメント遷移する可能性のあるユーザー(affected users)は


a_{t,1,\boldsymbol{s}} = n_{t,1,\boldsymbol{s}} \mathbb{1}(\boldsymbol{s} \in S \setminus A)

となります。ここで、 \mathbb{1}()は指示関数です。要するに、今現在out-of-marketであるユーザーが、in-marketに遷移する可能性があるということです。

この自然なMigrationにおいて、マーケット参加状況 s_1 \in \{{\rm in market}, {\rm out of market}\}とActivity State  s_3 \in \{{\rm inactive},{\rm exploratory},{\rm purchase} \}以外は変化しないものとします。

Activity Stateが変化する状況とはどのような場合でしょうか?それは、unsatiatedなユーザーがin-marketになった場合に、一定の割合でactiveに変化する場合です。逆に言えば、satiatedなユーザーがin-marketになろうとも、彼らは必ずinactiveになります。

以上から、セグメント \boldsymbol{s}の遷移先は


h_{s_3} (\boldsymbol{s}) = 
\begin{cases}
({\rm in market}, s_2, s_3, \cdots, s_6)^\top & s_2 = {\rm unsatiated}\\
({\rm in market}, s_2, {\rm inactive}, \cdots, s_6)^\top & {\rm otherwise}
\end{cases}

となります。

unsatiatedユーザーがin-marketになった場合のActivity Stateは、以下の割合で分配されるとします。これも分析者が与えるパラメータです。


\gamma = (\gamma_1, \gamma_2, \gamma_3)^\top \quad s.t. \ \sum \gamma_j = 1

以上から、 \boldsymbol{s} \in S \setminus A \rightarrow \boldsymbol{s'} \in Sへの遷移確率は


q^{(t,1)}_{\boldsymbol{s}, \boldsymbol{s'}} = \left(\frac{1 - \rho_t}{1 - r_{t,1}}\right)\mathbb{1}(\boldsymbol{s'} = \boldsymbol{s}) + \sum_{j \in s_3}\gamma_j \left(\frac{\rho_t - r_{t,1}}{1 - r_{t,1}}\right)\mathbb{1}(\boldsymbol{s'} = h_j(\boldsymbol{s}))

となります。ちょっと分かりづらいので解説すると、第一項目は遷移しない確率です。第二項目は遷移する場合に、どのActivity Stateへ遷移するかを表しています。私の理解用の図ですが、以下のようなイメージです。

これで遷移確率が定義できたので、この確率に従ってセグメント間の遷移を発生させることになります。具体的には、セグメント \boldsymbol{s}からの遷移先4つに対する多項分布でユーザーの移動数をシミュレートしていきます。

想定よりマーケット参加率が大きい場合

つまり、 r_{t,1} \gt \rho_tの場合は、想定マーケット率へ落ち着くために A \rightarrow S \setminus A方向へユーザー遷移が発生します。

この場合は、先のケースよりも簡単です。なぜなら、Activity Stateに場合分けが発生しないため、遷移先が


h(\boldsymbol{s}) = ({\rm out of market}, s_2, {\rm inacive}, s_4, s_5, s_6)^\top

の1つしかないためです。このとき、 \boldsymbol{s} \in A \rightarrow \boldsymbol{s'} \in S \setminus Aへの遷移確率は


q^{(t,1)}_{\boldsymbol{s}, \boldsymbol{s'}} = \frac{\rho_t}{r_{t,1}}\mathbb{1}(\boldsymbol{s'} = \boldsymbol{s}) + \frac{r_{t,1} - \rho_t}{r_{t,1}}\mathbb{1}(\boldsymbol{s'} = h(\boldsymbol{s}))

となります。こちらも同じく多項分布*1に従って遷移をシミュレートします。

k=2: De-Satiation

次のアクションは、需要の発生です。ユーザーがSatiatedな状態とは、ユーザーの需要が満たされており、新たな需要(購買)が発生しない状態を指します。たとえば、直近すでに購買したユーザーの需要は一時的に満たされている(Satiated)ため、すぐにまたもう1個買う確率は極めて低いわけです。

時刻 tにおいて、再び需要が発生する確率を \lambdaとします。大型家電など、数年に1度しか買われないような商品では、この \lambdaの値が非常に小さくなりますし、日用消耗品であれば大きくなります。これも分析者が与えるパラメータです。

「自然なMigration」と同様に、需要が発生したタイミングでActivity Stateも変化します。Unsatiatedユーザーの集合を Bとすると、Satiatedユーザー \boldsymbol{s} \in S \setminus Bの遷移先は


h_{s_3} (\boldsymbol{s}) = 
\begin{cases}
({\rm in market}, {\rm unsatiated}, s_3, \cdots, s_6)^\top & s_1 = {\rm in market}\\
({\rm out of market}, {\rm unsatiated}, {\rm inactive}, \cdots, s_6)^\top & {\rm otherwise}
\end{cases}

となります。翻訳すると、マーケットに参加中のユーザーにおいて需要が発生した時にActivity Stateも変化し得るということです。

以上から、 \boldsymbol{s} \in S \setminus B \rightarrow \boldsymbol{s'} \in Sの遷移確率は


q^{(t,2)}_{\boldsymbol{s}, \boldsymbol{s'}} = (1 - \lambda)\mathbb{1}(\boldsymbol{s'} = \boldsymbol{s}) + \sum_{j \in s_3}\gamma_j \lambda \mathbb{1}(\boldsymbol{s'} = h_j(\boldsymbol{s}))

です。Activity Stateの分布 \gammaは、 k=1のときと同じものを使っています。以上の確率から多項分布に従って、遷移するユーザー数をシミュレートします。

おわりに

以上で、自然なMigrationと需要の発生のアクション定義をしました。

が、想像以上に大変なのでぼちぼちやっていきます。。。

*1:厳密には、移動するかしないかの二値なので二項分布