Playground 10:顧客ベース分析の実験室
計量経済学II(ブラウザ上でRが動きます)
- このページのRコードは、あなたのブラウザの中で動いている(WebAssembly + webR)。インストールは一切不要。
- 初回だけ、ページ読み込みに30秒〜1分かかる(R本体とパッケージのダウンロード)。2回目以降はキャッシュで速くなる。
- 各セルのコードは自由に書き換えて「Run Code」で実行できる。何をどう壊しても誰にも迷惑はかからない。おかしくなったらページを再読み込みすれば元に戻る。
- 元ネタは講義ノート(
lecture10.html)。ここでは「数値をいじって挙動を体感する」ことに集中する。
実験1:BG/NBDの4つのツマミ — 顧客ベースの形を決める
BG/NBDは、顧客ベース全体の姿をたった4つの数で記述する。\(r, \alpha\) が個人の購買率 \(\lambda_i\) のGamma分布を、\(a, b\) が離脱確率 \(p_i\) のBeta分布を決める。
\[ x_i \mid \lambda_i \sim \text{Poisson}(\lambda_i T), \qquad \lambda_i \sim \text{Gamma}(r, \alpha), \qquad p_i \sim \text{Beta}(a, b) \]
なお、この回の \(\alpha\) はGamma分布のrateパラメータ(scaleではない)であり、第2〜4回の需要推定で使った価格係数 \(\alpha\) とは無関係である。4つのツマミを回して、購買回数の分布がどう変形するかを体感しよう。
alpha <- 1.5; r <- 0.2にしてみよう。平均購買率 \(r/\alpha\) はほぼ元のまま(約0.133)なのに、x=0の山と右の尻尾が同時に膨らむ。平均が同じでも、異質性の大きさが分布の形を決める——これが過分散の正体。a <- 2; b <- 1(平均離脱確率 \(a/(a+b) = 2/3\) の「離脱が早い市場」)にすると、分布のどこが削れるか。元の値と見比べよう。- 問い:ヘビーユーザーの尻尾を最も素直に伸ばすツマミは4つのうちどれか。仮説を立ててから、1つずつ動かして検証しよう。
実験2:P(alive)の直感 — 沈黙は何のシグナルか
パラメータが手に入れば、顧客ごとの \((x, t_x, T)\) という3つの数字だけから「この顧客はまだ生きているか」の確率が閉形式で計算できる。\(x > 0\) のとき
\[ P(\text{alive} \mid x, t_x, T) = \left[ 1 + \frac{a}{b+x-1} \left( \frac{\alpha+T}{\alpha+t_x} \right)^{r+x} \right]^{-1} \]
であり、\(x = 0\) のときは常に1とする(一度も買っていない顧客に「離脱した」という証拠は存在しない)。1人の顧客のプロフィールをいじって、判定がどう動くかを見よう。
tx <- 40のまま、x <- 2とx <- 20でP(alive)を比べよう。同じ12週間の沈黙が、ライトユーザーには「いつも通り」、ヘビーユーザーには「ほぼ死亡宣告」になることを数値で確認する。「たくさん買っていた顧客ほど、沈黙が続くと死亡判定が早い」のである。x <- 20のままtx <- 52(観測終了の直前に購買)にすると、P(alive)はほぼ1に戻るか。曲線の右端の跳ね上がり方を、xを変えながら見比べよう。- 問い:なぜ頻繁に買う顧客ほど同じ長さの沈黙が強い離脱シグナルになりうるのか。多い購買回数が\(\lambda\)と\(p\)の事後分布をそれぞれどう更新し、「生存したまま沈黙」と「最後の購買後に離脱」の相対尤度をどう変えるか説明してみよう。
実験3:自作MLEの真値回収 — 観測期間はどれだけ必要か
講義の核心手順の再演。自分で決めた真値から顧客ベースを生成し、自作の対数尤度をoptim()で最大化して、真値が戻ってくるかを確かめる。尤度は「Tまで生きている経路」と「\(t_x\) で死んでいた経路」の確率の和で、\((x, t_x, T)\) だけで書ける。ここでは\(T\)が全顧客で共通なので、顧客間で変わる十分な要約はRFMのRとFになる、という講義の主張をコードで確認する場面でもある。
T_cal <- 26に半分にしてみよう。4つのパラメータのうち、SEの膨らみ方が一番激しいのはどれか。真値が信頼区間から外れる場面も出てくるはずだ。N <- 2000に倍増するとSEはおよそ \(1/\sqrt{2}\) 倍に縮むか。あわせてset.seed(1)などseedを変えて、推定値のブレ幅も体感しよう。- 問い:この設定で離脱パラメータ \(a, b\) の推定が購買率パラメータ \(r, \alpha\) より難しくなりやすいのはなぜか。離脱は直接観測されず、最終購買後の沈黙から間接的に推定していることを手がかりに考えよう。
実験4:将来予測のevent tree — 購買のたびに離脱判定する
calibration終了時点で生存している経路では、
\[ \lambda\mid x,T,\mathrm{alive}\sim\mathrm{Gamma}(r+x,\mathrm{rate}=\alpha+T),\qquad p\mid x,\mathrm{alive}\sim\mathrm{Beta}(a,b+x) \]
となる。1本の将来パスは「T時点で死亡なら0、生存なら待ち時間を引く → 期間内なら購買 → 購買直後に離脱判定 → 生存なら次の待ち時間」という小さなevent treeである。
H <- 104にすると、追加離脱を無視する誤差がどう広がるか確認しよう。a <- 0.2; b <- 5のように離脱確率を下げると、2つの予測は近づくか。alpha + T_obsで足してよいのは、\(\lambda\)が回/週、\(T\)が週だからである。日単位へ直すなら\(\lambda,\alpha,T,H\)を整合的に変換する必要がある。
次に読むもの
- 講義ノート本体:
lecture10.html(尤度の導出・P(alive)ヒートマップ・holdout検証・CLVの完全版) - coding課題:
assignment10.qmd(ネットスーパーの顧客ベースを題材に、真値回収からCLV試算までを自分で実装する)