ロジットとプロビットの使い分け

出力変数(被説明変数)がYes/Noみたいな2値で表されるようなモデルを学習させたい場合についてググるとロジスティック回帰とかプロビット回帰とか出てきて、

「どうやらロジスティック回帰を使うのが定石っぽいけど、プロビットっていう良くわからないのがいっつもくっついて説明されてて困るなぁ」

と思ったりするのは僕だけじゃないはず。そこで自分なりに違いを考えたのでシェアしてみます。

問題1(プロビットが合う)

「ある人の年齢Nを聞いたとき、その人が既婚者か」を確率P(N)で表わすという問題を考えてみます。

結婚という「変化のイベント」について考えると、なんとなく平均結婚年齢あたりにピークがあって、その前後ではなだらかに頻度が少なくなっているイメージがあります。なのでその分布を正規分布だとしましょう。そうすると、年齢Nを聞いたときにその人が結婚してるかどうかは、正規分布の累積分布関数P(N)、すなわちNを与えるとN歳以下で結婚してる確率(N歳現在既婚者である確率)で表せそうです。これがプロビットです。

別の方法として、Pを直接作る代わりに、年齢ごとに既婚者が独身者の何倍いるかを表す関数Q(N)を作ることを考えてみます。もしQが作れれば、既婚者である確率PはQ/(1+Q)ですから簡単です。このQの対数を取ったものlogQを年齢Nと比べることを考えます。このlogQがロジットと呼ばれる値です。対数の底2で考えてみましょう。ある年齢N'のときに既婚者と独身者ちょうど1:1になったとします。このときlogQ=0です。では2:1になるときにlogQはどうなるか?答えは当然1ですね。4:1にならばlogQ=2です。つまり既婚者の比が2倍になる年齢増加がいつも一定というわけです。仮に30歳で既婚者が1:1に、35歳で2:1(全体の6割7分が既婚)ならば、40歳になると4:1つまり8割が既婚者、45歳なら8:1、つまりこれは独身の割合が5歳ごとに半分になっていくというモデルで、なかなか良い気がします。逆に25歳なら1:2つまり既婚者は独身者の半分、20歳なら1:4, 15歳なら1:8(えっ?)、10歳なら(ryとなります。ロジットは正規分布を仮定したプロビットとくらべて年齢が高いほうも低いほうもサチりかたが甘いのが特徴です。

なんとなく違いは分かった気がしますが、印象としてはロジットは単純で分かりやすいもののプロビットのほうが理論としてはイケてるような気がします。理論的背景のあるプロビットのほうがいいんじゃないかと思えてきます。ところが、プロビットはロジットと違って正規分布の累積分布関数の逆関数を計算するのに数値計算アルゴリズムみたいのが必要で、ロジットみたいなlogを取ればOKみたいなお手軽さがないので計算が難しいらしいです。

なのでサチりが甘いという難点がそれほどシビアでない問題の場合はロジットで行こう、みたいなノリらしいです。

けど、ロジットが合う問題というのもあるみたいです。次節。

問題2(ロジットが合う)

「ある人の体重Wを聞いたとき、その人が男かどうか」を確率P(W)であらわすという問題を考えてみます。

まずこれをプロビット的に考えると、これは男性の体重分布と女性の体重分布の境界線をビシッと一つ例えば55キロとかに決めておいて、「各体重における男性の割合」がその55キロをピークとする正規分布になっていると仮定することになります。これはもう既に仮定自体が矛盾してます。本当は65キロくらいから男性の割合がグッと増えていくのに、女性との境界として設定した55キロ以降で男性の増分が減っていくと仮定するわけですから。

そういう、それぞれ別の分布を持つ母集団が説明変数をシェアしているだけであって母集団の要素が別の母集団の要素に変化したりしないときにはプロビットは使えなそうです。

これはロジットで考えるほうがマシになりそうです。55キロのときに男性と女性の比が1:1で、50キロだと1:2ならば、60キロにおいては2:1、40キロなら1:4だし、70キロなら4:1です。これはなかなか良いような気がします。少なくともプロビットが仮定として崩壊しているのとは雲泥の差です。

まとめ

どうも、説明変数の分布で考えるのがいい気がします。

  • 判別したい2値について、説明変数のとりうる値の分布が別々の場合 → ロジット
  • 説明変数のとりうる値の分布が共通の場合 → プロビット
    • ただしこっちは簡単のためロジットで代用することもまぁアリっちゃアリ

という理解でいいのだろうか。。適材適所で使いわけてるよーって人いましたら教えてくださると嬉しいです。