バナナでもわかる話

開設当初は計量経済学・統計学が専門の大学院生でした。今はデータを扱うお仕事をしています。統計学・経済学・投資理論・マーケティング等々に関する勉強・解説ブログ。ときどき趣味も。極力数式は使わずイメージで説明出来るよう心掛けていますが、時々暴走します。

順序選択モデルの数理と解釈~ベイズモデルの構成法~

今日は順序選択モデルというモデルについて書くことにします。

スポンサーリンク



具体例

例えば焼肉屋さんで、ライスを頼みたいと思ったとします。
この時に小ライスか、中ライスか、大ライスが選べるとします。

これ、この順序選択モデルを知らない人だと真っ先に「多項選択モデルを当てはめてみよう」という思考になるはずです。

そんでもって小ライスを0,中ライスを1,大ライスを2として、その選択を考えることになります。

しかし、これは少し不自然で、例えばこれがカルビを選ぶかサガリを選ぶか、それともミノを選ぶかみたいな選択だと0,1,2と割り当てれば良いわけですが、今回って選択肢に順序がありますよね。 小ライス<中ライス<大ライス といった具合です。

この場合何が起こるかというと、量に順序があるということは、人間の選択に順序が影響し始めます
「今は小腹が空いている程度だから、大ライスは頼めないなー」なんて考えて、大ライス未満の順位にあるライス、つまり中ライスか小ライスを選択するだとか、「とてもお腹が空いているから小ライスや中ライスのような下の順位のライスではなく、大ライスを頼もう」なんて考えたりだとか。

そういった状況なのだから、モデルを使うにあたっても順序を考慮したモデルを考えた方がより状況を反映した結果が得られるはずです。


「ん?0,1,2を割り当てた時点で、数字上0が1番小さくて2が1番大きいのだから、順序は考慮できているのでは?」

と思う方もいらっしゃるかもしれませんが、これは少々まずくて、数字上の距離を仮定してしまっています。
どういうことかというと、要は小ライスと中ライスの距離、中ライスと大ライスの距離が1であり、小ライスと大ライスの距離が2であるという仮定のもと大小を決めていますよね。量的変数ならまだしも、質的変数でこの仮定はあまり説得力がありません。

数理モデル

それではモデル化していきます。
J+1個の順序付けられた選択、0,1,....Jがあるとします。

ここで、選択を行う主体iが、何かしらの情報(説明変数、特徴量)を元に、主観的に自身の効用を最大にするような値 s_iを決定すると考えます。

つまり、次のような状況です。
 s_i = \beta X_i +\epsilon_i

更に、iが取る選択を y_iとし、適当な境界を持って選択判断をしていると考え、その境界に関するパラメータ \gammaを考えます。

 s_i <\gamma_1ならば y_i = 0
 \gamma_1< s_i <\gamma_2ならば y_i = 1

 \gamma_J < s_iならば y_i = J

といった具合ですね。
ただし、 \gamma_1<…<\gamma_Jです。


この時、例えば y_i = 0を取る確率は次のように考えることが出来ます。
 P(y_i = 0 |\beta ,X_i)=P(s_i <\gamma_1 | \beta,X_i)=P(\epsilon_i <\gamma_1-\beta X_i | X_i,\beta)

同様に、 y_i =1であれば、
 P(y_i = 1|\beta,X_i)=P(\gamma_1-\beta X_i <\epsilon <\gamma_2 - \beta X_i|\beta,X_i )

と得ることが出来ますね。

後は尤度としてPに正規分布を割り当ててやればプロビットとなりますし、ロジット分布を割り当てればロジットとなります。
標準正規分布の分布関数を \Phiと書くことにすると


 P(y_i = 0 |\beta ,X_i)=\Phi (\gamma_1-\beta X_i)
 P(y_i = 1 |\beta ,X_i)=\Phi (\gamma_2-\beta X_i)-\Phi (\gamma_1-\beta X_i)

と書けますね。


尤度

よって、尤度 l(\beta,\gamma,y,x)は次のように表せます。

 l(\beta,\gamma,y,x) \propto \sum_{j=0}^J 1_{y_i =j}(\Phi (\gamma_{j+1} -\beta X_i )-\Phi(\gamma_j - \beta X_i) )


まあ、比例記号で書いているところからお察しの通り、制約等々中々複雑なのでベイズを使うのが無難でラクチンです。


事前分布

ベイズを使うということで、 \gammaの事前分布はどうしましょうという問題が発生します。
制約として \gamma_1<…<\gamma_Jがあるので、例えば次のように考えてやります。


 \gamma_{j+1}-\gamma_jが非負であればよいと考え、各 \gamma_{j+1}-\gamma_jに対して独立にガンマ分布を仮定する。



こんな感じですね。ベイズだとそんなに難しくなく実装できるかなと思います。また今度、試せるデータもあれば、Stanでの実装例も書きたいと思います。