課題6:短い購買履歴から需要を予測する

計量経済学II

作者

Kei Ikegami

提出するもの

Rコード、図・表、設問への回答をまとめたHTMLを提出する。講義ノートの関数を使ってよいが、データ生成部分は自分で書くこと。乱数シードは 2026062 とする。解答は自分の言葉で書き、真の係数を使う箇所と推定した係数を使う箇所を区別する。

Part 1:シミュレーション設計(40点)

飲料サービスが、無糖のお茶Aと甘いお茶Bを提案する場面を考える。顧客はA、B、購入しない(0)のいずれかを選ぶ。顧客数は300人、価格の単位は100円である。

\[ u_{iAt}=1.5-\theta_i-p_{iAt}+\varepsilon_{iAt},\qquad u_{iBt}=1.5+\theta_i-p_{iBt}+\varepsilon_{iBt},\qquad u_{i0t}=\varepsilon_{i0t}. \]

\(\varepsilon_{ijt}\) は互いに独立な標準Type I極値分布に従う。\(\theta_i\) は \((-1.2,0,1.2)\) のいずれかであり、その割合は \((0.2,0.3,0.5)\) とする。各価格は独立に \(U[1,2.5]\) から引く。同じ人の \(\theta_i\) は全期間で固定する。定数1.5、価格係数1、タイプの位置は推定でも既知とし、母集団の割合だけを未知とする。

問1:選択確率と生成コード(15点)

条件付き選択確率を式で示し、顧客ごとに一度だけタイプを引くコードを書け。各人12回の学習用候補データと、それとは別に20回の評価用データを生成せよ。両方で同じタイプを使うこと。推定に最初に使うのは、学習用のうち最初の3回だけである。

問2:データの確認(10点)

id, occasion, pA, pB, y を持つデータを作り、行数、選択割合、価格の範囲を確認せよ。学習用と評価用で価格や一時的ショックを引き直す理由を説明せよ。

問3:履歴の可視化(15点)

最初の3回にBを選んだ回数の分布を図示せよ。シミュレーションで保存した真のタイプ別にその分布を比較し、「Bを多く買った人なら必ず \(\theta_i=1.2\)」とは言えない理由を書け。真のタイプはこの診断だけで使い、推定には渡さないこと。

Part 2:推定・推論(60点)

問4:母集団のタイプ割合(15点)

履歴の尤度 \(L_i(\theta_k)=\prod_t P_{iy_{it}t}(\theta_k)\) を計算し、

\[ \hat\pi=\arg\max_\pi\sum_i\log\left\{\sum_{k=1}^3\pi_k L_i(\theta_k)\right\} \]

を推定せよ。割合が非負で合計1になるよう、講義のsoftmaxによるパラメータ化を使ってよい。推定値と真値を表にまとめよ。

問5:履歴による重みの更新(15点)

各人の重み \(w_{ik}=\hat\pi_kL_i(\theta_k)/\sum_l\hat\pi_lL_i(\theta_l)\) を計算し、行ごとの合計が1であることを確認せよ。また、全員を別々に扱い、\(\theta_i\in[-5,5]\) の範囲で個人の最尤推定値を求めよ。いくつの推定値が区間の端に近いか(\(|\hat\theta_i|>4.9\))を数えよ。

問6:予測評価(15点)

評価用20回の選択について、母集団の割合だけを使う予測、個人別最尤推定値を使う予測、履歴で更新した重みを使う予測を比べよ。指標は選ばれた選択肢の予測確率の負の対数(log loss)の平均とし、小さいほどよい。学習履歴を3回から12回へ増やした場合も比較せよ。

問7:顧客単位のブートストラップ(10点)

最初の3回のデータで、顧客を復元抽出して母集団の割合を80回推定し直せ。各割合の2.5、97.5パーセンタイルで区間を作れ。個々の選択行を独立に抽出してはいけない理由を説明せよ。

問8:経営への含意(5点)

「少ない履歴から極端な好みを推定し、そのまま商品を提案する」方法の問題を3行で述べよ。今回の予測比較だけで、実際に提案を送ることの売上効果まで分かるかにも触れること。

ノート実装のヒント

積を直接計算すると小さい値になりやすい。各タイプの対数尤度を先に計算し、行最大値を引いてから指数を取ると安定する。学習用と評価用のデータを別のオブジェクトにしておくと、評価用の選択を推定に混ぜずに済む。

講義ノートへ / Playgroundへ