ブランド選好度のベイズ推定(ざっくり)

ブランディングの数値化に向けてWinBUGSを使ったtoy modelを作ってみた。ECサイトの商品購入ログからユーザのブランド選好度を確率分布として出す、というもの。

RとWinBUGSのコード一式はChiral's Gistに置いてあります。

モデル化

商品閲覧/購入ログがN個あり、i番目のログが、

  • x_{i,1} : 価格, スカラー量(ドル)
  • x_{i,2} : 対象ブランドの有無, 0 or 1
  • y_i : 購入したかどうか, 0 or 1

で表されているとする。

で、商品購入モデルを

  • y_i \sim Bernoulli(p_i)
  • logit(p_i) = a + b_1*x_{i,1} + b_2*x_{i,2}

と仮定する。

見ての通りベイズロジスティック回帰モデルです。b_1が価格への反応度で、b_2がブランドへの反応度を表す。aはオフセットを補正する的なもの。

実験

極端な2つのデータセットを考える。

  • データセットA: ブランド選好度が高そうなAさん
  • データセットB: バーゲンセールが好きそうなBさん

以下のようなダミーデータを手で作った。(N=10)

i 1 2 3 4 5 6 7 8 9 10
価格 100 120 90 100 80 70 200 100 150 110
ブランド 0 1 0 1 0 0 1 0 0 0
購入(Aさん) 0 1 0 1 0 1 1 1 0 0
購入(Bさん) 1 0 1 0 1 1 0 0 1 1

結果

パラメータ推定結果。まずブランド好きな人のデータセットA

価格への反応度(b[1])がマイナスに振れて、ブランド反応度(b[2])がプラスに振れている。ワシは金に糸目は付けん!ブランドじゃ!!と言わんばかりですね。

続いてお買い得重視な人のデータセットB

データセットAとは逆にブランド反応度(b[2])はマイナスに振れています。価格反応度はゼロ付近で、オフセット(a)がプラスに振れてますね。
これはこのモデルが誤差項を含まず、偶然の変動成分を全部オフセットに押し付けているせいでそうなったんじゃないかな。

というわけで

「そうなるモデルにそういうデータを与えたらそう推定された」というトートロジー感にあふれるエントリでしたが、これを改良していって実データを使ってぜひモデルの洗練化などやってみたいです。

ダミーデータのtoy modelで出来ることとしては、これを階層ベイズモデルにするというのがありそう。最初階層ベイズモデルを試してみたのですがオーバーフローしたり収束しなかったりと、何も考えずにいると動かないことが分かったのでとりあえずシンプルな1階層のベイズロジスティック回帰でやりました。

続きが出たらまた書きます。ある程度のところで製品化(有料のWebAPIサービス)したいです。まだまだよちよち歩きという感じですが、ドメイン特化型のデータドリブンマーケティングという事業をやりたい。