[離散選択] 非集計データの購買行動

2014/06/12: データの加工方法を加筆

2014/06/14: 多項ロジット, 条件付き・混合ロジットを混同しないよう修正

離散選択が消費者の購買行動を分析するのにどう利用されているか, ということについて調べていたので, その要約を書いておく. 自分はマーケティングの方は専門的な勉強をしていないのであまり詳しくない. 経済学の用語が出てくるが, ある程度噛み砕いて*1説明する. ただし, 数学的な厳密さについては切りがないので省略するところもある. 言及するトピックは以下のような話.

  • 確率効用モデルの概念
  • 多項ロジット*2の適用
  • IIAの仮定
  • 多項ロジット以外の手法

多項ロジットに言及するブログは結構あるが, IIAの仮定までカバーしてるのは意外と少ない (教科書ならば多項ロジットが出れば必ず言及しなければなならいほど重要なトピックなのだが.) ので, これが今回の目玉商品だろうか?

確率効用モデル

まず, 「選択」という行動を数式で表現するためのフレームワークとして, 確率効用モデルを紹介する. 消費者が J 種類ある商品を選ぶとする. 以降, 各商品には  1,2,\cdots J と番号を割り当てておく. 消費者が商品を「買う」ということは, その商品を代金を払って入手することで得られる利便性, 満足感があるからだ. この利便性や満足の度合いを「効用」という.  J 種類の商品は, それぞれ購入することで得られる効用が存在するので, それを u_j と表す. さらに, この  u_j を2つの部分に分割する. 1つは, 商品の価格, 品質, といった商品の特徴, あるいは買い手の予算, 好みといった情報で説明できる部分  v_j, もう一方はそのような情報から説明できない部分である \varepsilon_j. 回帰分析で言う誤差項にあたる. よって, {\displaystyle
    u_j=v_j + \varepsilon_j
}

ということになる. つまりこれは, われわれは, いろいろな要素をもとにどの商品を買うべきか判断しているわけだが, それらの要素を結合して1つの数字の大きさで商品の価値を表せる,という発想にもとづくフレームワークである. ただし, この仮定が妥当かどうかは一旦保留し, 後ほど再び触れることにする.

消費者は商品ごとの効用 u_j を比較し, 最も効用の大きい商品を選ぶ. 効用の最大化という経済学の基本的な発想による仮定だが, 買い物という具体的な状況の話なので, 直感的に分かりやすい原理だと思う. 実際に選んだ商品を y とすると,

{\displaystyle
    y = \arg\max_j \{ u_{j}:\, j=1,2,\cdots,J \}
}

ということになる. ( \arg\max \cdots は最大値ではなく, 最大値をとるときの変数の値を意味する. ) ここで1つ注意が必要で, 商品の購入には, 「買う」以外にも「やっぱり買わない」という選択肢もありうる. いろいろ考えた結果, 代金に見合う商品がなければ買うのを諦めるだろう. そこで,  y 1,\cdots , J の他に, 「商品を買わなかった」を意味するゼロもとりうることにする. 商品を買うか, 買わないかで比較しているのだから, 買わないという選択肢に対しても効用が存在するはずだから, 新たにゼロの選択肢を足しても問題ない. よって,  y を次のように修正する.

{\displaystyle
    y =\arg\max_j \{u_j : j=0,1,\cdots , J\}
}

文献によっては,  y_1, y_2, \cdots, y_J と言うふうに J 個のダミー変数を定義し, 対応する商品を買えば1, 買わなければゼロとするケースもあるが, 最後に導く尤度関数の表記がかわるだけで, 本質的にはどちらもあまり変わらない. ただし, 実際に計算する上ではダミー変数の方が分かりやすいかもしれない (後述).

最後に, ここまでで簡略化のために省略してきた, 個人を識別するインデックス i を加える.

 {\displaystyle
u_{ij} =v_{ij}+\varepsilon_{ij} \\
y_{i} =\arg\max_j\{u_{ij}:j=0,\cdots,J\}
}

多項ロジットモデル

効用の  u_{ij} のうち, 説明可能な部分  v_{ij} をどう扱うかだが, これを説明変数のベクトル \boldsymbol{x}_{ij} で表せると仮定する. 単純に, 重回帰のような

 {\displaystyle
    v_{ij} = \boldsymbol{x}_{ij}^\prime \boldsymbol{\beta}_j
}

とおくと,

 {\displaystyle
    u_{ij} =  \boldsymbol{x}_{ij}^\prime \boldsymbol{\beta}_j + \varepsilon_{ij}
}

となる. ここで注意が必要なのは, 通常の重回帰と違い,  \boldsymbol{\beta}_j には  j が付いているということである. つまり, この係数は商品ごとに異なることもありうる. これはなぜかというと, 説明変数のうち, 商品の価格や品質といった情報は, 個人  i ごとに変わるのではなく, 商品  j ごとに変わるからである.

よって, 説明変数ベクトルの要素が K 個とすると, 推定しなければならないパラメータの数は  K\times J となる.  K\times (J+1) でないのは, いずれか一つのパラメータを基準にする必要があるためである (たいていはJ=0 を基準にする). よって, 多項ロジットのパラメータは, 商品を買わなかった場合との相対効果の大きさ, とも解釈できる.

ただし, 商品ごとに値がことなる説明変数に対しパラメータ  \boldsymbol{\beta}_j をそれぞれ当てはめるなら, 全ての商品に対し共通のパラメータも存在するはずである. つまり, 予算や好みといった, 買い手の特徴を表す説明変数に対しては, 商品ごとに異なるパラメータを与える必要はない. よって,  \boldsymbol{z}_i で表す買い手の情報の説明変数変数と対応するパラメータ \boldsymbol{\gamma} を加えて,

 {\displaystyle
    u_{ij} = \boldsymbol{x}_{ij}^\prime \boldsymbol{\beta}_j + \boldsymbol{z}_i^\prime \boldsymbol{\gamma} + \varepsilon_{ij} }

と表すことも多い.

つぎに, 選択確率について考える.  y=j ということは, j に対応する効用  u_j が他の全ての効用  u_1,\, u_2,\, \cdots より大きいということだから, (\boldsymbol{x} , \boldsymbol{z} が与えられた時に) 選択肢  j が選ばれる確率は,

\mathrm{Pr}(y=j|\boldsymbol{x} , \boldsymbol{z})=\mathrm{Pr}(u_j>u_1,\, u_2,\,\cdots)

となる (煩雑なので個人インデックス  i は省略). つまり, 効用  u_j は順序統計量なので, 誤差項  \varepsilon_j にはロジスティック分布よりも極値分布を仮定したほうが良いと考えられる.

ガンベル分布 (第1種の極値分布) とは,

 {\displaystyle
F(x; \mu, \theta) = \exp \left\{ -\exp \left[ \left( -\frac{x-\mu}{\theta } \right) \right] \right\}
}

という分布関数で表される確率分布で, 「いくつかの確率分布の中での最大値」がとりうる分布を表す. ただし, ここでは単に  \mu=0, \, \theta=1 とすることで,  F(x)=\exp(-\exp(-x)) とおく.

誤差項  \varepsilon_{ij} がガンベル分布に従うと仮定すると, ある人  i が商品  j を選ぶ確率は,

 {\displaystyle
    p_{ij} = \frac{\exp(u_{ij})}{1 + \sum_{j=1}^J \exp(u_{ij})}
}

と表せる. ただし, j=0 のときは

 {\displaystyle
    p_{i,j=0} = \frac{1}{1 + \sum_{j=1}^J \exp(u_{ij})}
}

である.  p_{i,0} から  p_{i,J} までを足せば必ず1になるはずである. この  p_{ij} と, 説明変数  \boldsymbol{x}_{ij}, \boldsymbol{z}_i を元に, 個人  i が選ぶ選択肢の確率分布を

 {\displaystyle
    \mathrm{Pr}(y_i|\mathbf{X}_i, \boldsymbol{z}_i) = \sum_{j} 1(y_i=j)p_{ij}
}

と表せる. ただし,  \mathbf{X}=\{\boldsymbol{x}_{i,1},\cdots,\boldsymbol{x}_{i,J}\} で, 1(\cdot) は指示関数である. よって, 全ての個人の条件付き確率の積として尤度関数を表せる. 対数尤度関数の形で表すと,

 {\displaystyle
    \ln \mathcal{L}(\boldsymbol{\beta}_{1},\boldsymbol{\beta}_2,\cdots, \boldsymbol{\beta}_J, \boldsymbol{\gamma}|\mathbf{X},\mathbf{Z}) = \sum_{i=1}^N \left(\sum_{j=0}^J 1(y_i=j)\ln p_{ij}\right)
}

である.

計算上の注意点をいくつか

以上から, ロジスティック分布ではなく極値分布を仮定したにも関わらず, 導き出された尤度関数は, 2項選択のロジットモデルとよく似たものであるとわかる. この性質は, 多項ロジットの強みとなっている. 一方で, 色違いのバスのパラドックスと呼ばれる問題点もこれに起因している.

多項ロジットの計算可能性

多項ロジットは尤度関数が単純なので, 通常の方法で最尤法の計算が可能である. 局所解が1つしかないため, 最適化アルゴリズムを用いなくても, 1階条件の解をニュートン法で求めることができる. また, 2項モデルのときにロジットとプロビットがあったように, 多項プロビットも存在する. ただし, こちらは多項になることで飛躍的に計算が複雑になるため, あまり用いられないようだ.

また, 先に被説明変数 y_iJ 個のダミー変数 y_{i1},y_{i2},\cdots,y_{iJ} に置き換えてもよいと言ったが, 実際の計算を意識するとむしろダミー変数と考える方が正しいかもしれない. なぜなら, パラメータは商品ごとに変わるから, 全てのパラメータを推定するために, 人数  \times  J+1 個のオブザベーションが必要になるからである. 例えば, 3種類の商品が選択肢として存在し, 商品ごとに変わる属性 \boldsymbol{x} には商品価格を, 個人ごとに変わる属性 \boldsymbol{z} には所持金があると考えると,

個人id y (どれを選んだか) z (所持金) \mathit{x1} (選択肢1の商品価格) \mathit{x2} (選択肢2の商品価格) \mathit{x3} (選択肢3の商品価格)
001 1 1000 100 120 200
002 3 2000 100 120 200
003 2 1200 100 120 200

という感じのデータがあるとして*3, これを

個人id 選択肢の番号 (計算には使わない) y のダミー z (所持金) x (商品価格)
001 1 1 1000 100
001 2 0 1000 120
001 3 0 1000 200
002 1 0 2000 100
002 2 0 2000 120
002 3 1 2000 200

というような行列にする必要がある. 被説明変数に当たる部分は2値のダミー変数なので, 結局のところ, 計算上はちょっと式を変形して確率の分母を変えた2値ロジットということになる.

ちなみに, 厳密には, 多項ロジットとは, 個人ごとの属性 (この例では所持金) だけを説明変数としたものを指す. 選択肢ごとの属性 (この例では価格) だけを説明変数としたものを条件付き (conditional) ロジット, それらの両方があるものを混合 (mixed) ロジットという. つまり, この記事でこれまで多項ロジットと言っていたものは, 実際は混合ロジットである. しかし, このデータテーブルの加工からも分かるように, 計算上はどれも同じになる. そのため, 多くの統計解析ソフトでも, これらを明示的に区別していることは少ない.

このデータへの加工の扱いは統計解析ソフトによってやり方がけっこう異なっていて, 例えば Stata (ver. 11) ならば, ダミー化した後者の形式でないとエラーが出る. terukun のブログ では入れ子ロジットの場合を例に Stata での加工方法を紹介している. ここではエクセルを使って処理しているが, 膨大なサンプルサイズになると大変*4なので, 各サンプルを選択肢の数だけ複製, その後yxi コマンドでダミー変数化して……と言うふうにすればよい. コードは

* 選択肢の数だけサンプルを複製
expand <選択肢の数>
* 見やすくするためにソート
sort id
* 説明変数をダミー化
xi i.<選択肢の変数> pre(y_) noomit
* 被説明変数 y にまとめる
gen y = y_1 + y_2 ...
drop y_1 y_2 ...

のような感じになる (環境がないのでうろ覚え).

R でも mlogit パッケージ (ver. 0.2-4) で多項ロジットの推定ができるが, これも後者の形式である必要がある. ただし, 変換するための mlogit.data() 関数も存在する (実際の加工はreshape()関数を使っているようだ). 今回の場合, 行がオブザベーション単位になっているので, shape='wide' を指定し, 被説明変数を表す列を choice='y' と指定する. さらに, 説明変数のうち選択肢ごとに変わる変数は varying= で指定する. ただし, これらの変数は x.<選択肢番号> のような名前にしておく必要がある (区切り文字のピリオドは sep= で変更できる).

になる必要がある. 元のデータフレームを df とすると,

df <- mlogit.data(df, choice ='y', shape='wide', varying=c('x1','x2','x3'), sep='')

とする. この結果, 元のデータセットがダミー化された上で, 元のオブザベーションの id とどの選択肢を選んだかの列が作られる. y は logical 型になる.

たぶん SAS も class で指定すればできる (未検証).

IIA の仮定

ただし, 多項ロジットについても弱点がある. それが IIA (independence from irrelevant alternatives) の仮定である. 選択肢  j=k,\, h のオッズ比とは, 確率の比であり,

 {\displaystyle
    \frac{p_k}{p_h} = \frac{\exp(v_k)}{\exp(v_h)} \\
     = \exp(v_k - v_h)
}

で表される. つまり, 多項ロジットでは,  j=k,\, h のオッズ比はk,\, h 以外の他の選択肢とは独立していることになる.

本当だろうか?

McFadden(1974) は, これについて「色違いのバスのパラドックス」という例で問題を解説している*5.

目的地へ行くための交通手段として, タクシーと赤いバスの2つがあるとする. この段階ではいずれを選ぶかは5分5分とする (自然に考えると, これも不自然だが, ここでは単に計算を簡単にするためである. 0.3 対 0.7 とかにしてもこれ以降の結果が変わるわけではない.). つまり, オッズ比は1である. では, 次に「青いバス」という選択肢が増えた場合はどうするか? 色の違いを除いて, 青いバスは赤いバスと全く同じである. 赤いバスと変わらないのなら, 赤いバスの確率を2分し, タクシー, 赤いバス, 青いバスの確率はそれぞれ  0.5,\, 0,25,\, 0.25 である, と直感的には考えられる. しかし, IIA の仮定では, 車と赤いバスのオッズ比は他の選択肢に影響を受けないことになっている. よって, IIA の仮定に従うなら, タクシー, 赤いバス, 青いバスの確率は  0.3\dot{3},\, 0.3\dot{3},\, 0.3\dot{3} となる.

図1: それぞれの確率

f:id:ill-identified:20140610004213p:plain

この例では, 直感的には, まず「車かバス」かを選択し, バスを選んだ場合さらに「赤いバスか青いバスか」という2段階の選択をしている. しかし, この例から分かるように, IIA の仮定はこのような階層状の選択を許可しない. よって, 階層状の行動選択を分析する際は多項ロジットは不適当ということになる.

図2: 選択構造の違い

f:id:ill-identified:20140610004311p:plain

多項ロジット以外の手法

IIA が成り立たない場合

階層状の選択行動は多項ロジットを適用できないことが分かった. これに対しては, そのまま入れ子 (nested) ロジットモデルというモデルを適用できる. 入れ子ロジットは, バスの例で言えば, まずバスのいずれかを選ぶ確率 \mathrm{Pr}(y \in \mathit{bus} | \boldsymbol{x})  を求める. ここでの  y\in \mathit{bus} は, バスのいずれかを選ぶという意味である. 次に, バスのうちどれかを選ぶことが確定した上での, バスの中でどれを選ぶかの条件付き確率 \mathrm{Pr}(y=j|\boldsymbol{x}, y\in \mathit{bus}) を求める. このように, 条件付き確率を段階的に求めていけば, それぞれの選択肢に対して選択確率を与えられるので, やはり尤度関数を定義できる.

また, 多項ロジットとは違う選択構造として, 選択肢に優先順位があるものが考えられる. 例えば, アンケートの設問で, 「○○は××だと思う」という問に対し, (1) 非常にそう思う, (2) そう思う, (3) そう思わない, (4) 全くそう思わない, のような選択肢があるとする. あるいは, 債券の格付けもよく例に挙げられる. ある債券に対し, ある程度信用できれば A+, あまり信用できなければ B, と言うふうに, 格付けを与えている. これは, 債権の信用度の大小に応じて, 格付けを選択していることを意味する. しかし, 信用度を具体的な数値で知ることはできないため, 信用度を被説明変数とした通常の回帰分析を行うのは不適当である. つまり格付けは, 大小の比較はできるが, 足し算引き算を行うことができない情報である. これらのケースで用いられるのが順序ロジットモデルである.

多項ロジットに対し, IIAの仮定が成り立つかを検定する方法も Hausman and McFadden (1984) によって提案されている. この検定によって, 多項ロジットを用いるべきか, 他の方法, 入れ子ロジットや順序ロジットを用いるかを判断できる. ただし, 今回はこれらについて詳しく解説しない. 元論文や, 離散選択に詳しい Amemiya (1985), Wooldridge (2010) を読むなどしてほしい.

また, 多項プロビットは, 多項選択だが, IIA の仮定は要求されない. ただし, 計算が複雑になるため, 選択肢4以上になると計算が実質的に困難になると言われている*6. ただ, これに関してはあまり詳しくないので, マシンパワーの足りない過去の話なのかもしれない.

慣性行動とバラエティ・シーキング

消費者が, 一旦ある商品を買うと決めた場合, 次の機会にも同じ商品を惰性的に買うことを慣性行動 (inertia) といい, 逆に同じ商品を買うことに飽きて, 刺激を求めるように別の商品を買うという行動をバラエティ・シーキング (variety seeking)という. ただし, 西原 (2012) によると, 多様な商品を買うことで効用を向上させる, というよりは, 探索的な行動であるとも. どちらにせよ, Bawa (1990) を始めとして, 同一商品を連続して購入した回数 r_{ij} の2次式を v_{ij} に盛り込んだ,

{\displaystyle
    v_{ij} = a_j + br_{ij}^2 + cr_{ij}^2
}

というモデルによる実証がなされている. 2次形式であるから,  b \geq 0 かつ  c &lt; 0 ならば凹関数なので, 連続購入回数 r_{ij} が増えるほど, 効用は上昇するため, 一旦商品を買うことを決めれば同じ商品を買い続けることになる. しかし, 頂点が存在するため, ある回数を超えると逆に効用が低下していく. よって, ある程度まで低下していけば, 他の商品を購入した場合の方が効用を上回るため, 別の商品を選択する確率が高くなる. このようなモデルで慣性行動とバラエティ・シーキングを捉えようというものであるらしい*7. ただし, このモデルには2つほど問題点がある.

  1. 購入商品を変えた直後に, それ以前の購入情報を反映した情報がない
  2. 連続購入回数が増えると効用が負の無限大に発散する可能性がある

効用関数 (基数的効用) の仮定は妥当なのか

前節では, 買い手は何次元もある商品の要素を, 効用という1次元の数値に落としこむことで, 商品の価値を比較しているという確率的効用モデルを導入したが, このような考え方は妥当だろうか. あらゆる要素を総合的に, かつ厳密に吟味するのは非常に難しいし, 実体験として, 値段だけを見てどれを買うか判断することもあるかと思う. よって, 買い手は考えるのに負荷のより少ないルールで選択しているかもしれない. 土田 (2010) の3.3節では, そのようなモデルをいくつか紹介している*8.

参考文献

Advanced Econometrics

Advanced Econometrics

Econometric Analysis of Cross Section and Panel Data (MIT Press)

Econometric Analysis of Cross Section and Panel Data (MIT Press)

*1:自分の思考を整理するためでもある

*2:ここでは最も一般性のある「混合 (mixed) ロジット」を多項ロジットと呼んでいる. 厳密な違いについては後述

*3:今回の例は, 価格は商品ごとに異なるだけだが, 学割や女性割引のように価格差別によって個人間でも価格が異なるような, もっと複雑な場合でもそのまま適用できる.

*4:当方は VBA エンジニアではない

*5:多項ロジットに言及するほとんどの授業, 教科書でもこの例が用いられる

*6:要出典

*7:Bawa (1990) 自体は入手できなかったので土田 (2010) からの孫引きになりました.

*8:ただし, 自分はまだカバーしきれてないので解説はしない.