2013年9月19日木曜日

銀座で働くデータサイエンティストのモデル選択について

このエントリーをはてなブックマークに追加
Clip to Evernote
Pocket

今さら人に聞けない「重回帰分析の各手法の使い分け」 』と言うブログのエントリーがあって、一般化線形モデル(GLM)の使い分け(Rの関数glmとパッケージMASS)の説明がされているのだが、理系実験室から出てきた人のせいか、色々と怪しく感じる所がある。純粋文系プログラマとして問題点を指摘してみたい。

1. 離散データだから最小二乗法が使えないわけではない

全体として、モデルの説明がおかしい。推定モデルの使い分けが良く分かってい無い気がする。問題のエントリーには、『クリック数という「カウントデータ=離散値データ」』だから『普通の線形回帰』と表現されている一般最小二乗法(OLS)は正しく推定できない可能性があるので、ポアソン回帰モデルや負の二項分布回帰モデルにしようと言っている。しかし、離散データでもプロビットのような二項/多値選択モデルであったり、切り落としのトービット・モデルで無い限りは、OLSで大した問題は無いはずだ。

追記(2013/09/21 01:22):「非説明変数は離散だとOLSでは問題出るんじゃー無かったっけ。特殊な場合を除き一致性を失ったはず」とコメントがついていたのだが、中心極限定理を忘れているようだ。一般のモーメント母関数がある確率分布から観測値を取り出すと、その合計値は中心極限定理により正規分布に漸近する。二項分布やポアソン分布に従う観測値は独立試行の合計になっているため、観測値の平均が高い場合は正規分布を仮定して問題ないと言う事になる。

2. 正規分布?ポアソン分布?負の二項分布?

離散データであったとしても、被説明変数に制限がなく誤差項が正規分布するのであれば、何も特殊な推定方法を取る必要は無い。ポアソン回帰はポアソン分布する事が前提だ。ポアソン分布は一つのパラメーターで平均も分散も決まる分布で、観測値(ここでは被説明変数)が0、1、2・・・のように大きさが限られており、しかも観測数の歪度が偏っているときに有効になる。しかも観測値の平均値が30ぐらいになると、ほぼ正規分布と変わらない形状になる。負の二項分布は二項分布の拡張で、二つのパラメーターで平均と分散が決定されるが、やはり平均値が大きくなると正規分布に近づいていく。

3. ポアソン回帰モデルの推定の説明がおかしい

問題エントリーのポアソン回帰モデルの説明が「目的変数を対数変換したものに対して、通常の線形(重)回帰モデルを推定する」と言っているのだが、これは誤りだ。実際に推定してみれば分かるが、確率分布の仮定が異なるので、異なる推定値が出てくる。手を動かすのが面倒な場合は、「ポアソン回帰分析のメリット:シミュレーションによるOLSとの比較」の単純OLS、対数変換OLS、ポアソン回帰の比較を見てみよう。

4. dat1の分析をしなおしてみた

もともとは実践的な話なので、実際に公開されていたデータで3モデル(OLS、ポアソン分布、負の二項分布)を推定して、もっともらしい一つを選択してみよう。

まずは予測精度として残差平方和を見たのだが、8,185,177、8,158,399、8,923,612になり、ポアソン回帰の誤差が最小である事が分かる。ポアソン回帰が有力だ*1。問題エントリーでは負の二項分布回帰を採用していたが、その根拠が良く分からなくなった。

しかしポアソン回帰を採用する勇気は出てこない。over-dispersionの検定をしてみたところ、ポアソン回帰は棄却された。すると負の二項分布モデルとなりそうだが、赤池情報量規準が示唆するに説明力は高くない。恣意性が少ないと思われる正規分布と見なした方が無難に思える。

5. まとめ

元エントリーはモデル選択の説明がおかしく、実例も手元で検証した限りでは理解できない事になっている。基本的には一致性や有効性を気にしてモデルを選択すべきであり、あげられている最初のデータセットはOLSでの分析が適しているように思える。ちょっと変わった手法を選択したくなるわけだが、OLSでの分析に適したデータは数多くあり、今回もそういうケースだったのでは無いかと思われる。

追記(2013/09/20 09:38):問題に気付かれたようでブログ主が「自家製のサンプルデータが良くなかったんでしょうか。。。」と追記でつぶやいていた。dat1$clickの値が大きすぎるので、例えば以下のような値にすればポアソン回帰が良く当てはまる。

dat1$click <- c(4,3,9,3,9,5,6,5,7,17,6,7,6,3,9,4,16,1,11,5,4,1,8,5,2,6,18,10,3,6,9,3,4,2,5,3,8,23,10,7,8,18,13,5,16,6,3,15,17,20,25,11,9,6,6,17,5,21,24,6,23,20,8,15,14,9,4,11,13,9)

当てはまりすぎて、glm.nb関数の方に警告が出るようになるが。

*1glm()はどうもポアソン分布の場合は対数尤度を正確に出さないみたいなので、検定は省略した。

0 コメント:

コメントを投稿