渋谷駅前で働くデータサイエンティストのブログ

元祖「六本木で働くデータサイエンティスト」です / 道玄坂→銀座→東京→六本木→渋谷駅前

「統計モデリングとは何なのか」をいま一度整理してみる

もうタイトルを読んで字の如しなんですが、要は「統計モデリングってぶっちゃけ何なのよ?」という問題意識が最近非常に局所的ながら影響力の大きいところ*1から出てきておりまして。


で、僕もその議論にマターリ参加しながら「このもやもやしたものをどうやったらうまく表現できるかなー」と思っていて、何日かして自分なりにちょっと整理がついた気がするので、自分向けの備忘録も兼ねてちょっとブログにまとめてみることにしました。ちなみに@さんは既にこの議論についてまとめていらっしゃるようで。


そうそう、今回もお題はこちらの久保先生の緑本です。というかここから議論が始まったわけで。

今や参加者100名を超えるという巨大読書会までもが催されるという大人気の一冊になっているようで。。。これからはBUGSとか階層ベイズとか流行しちゃうんですかね?(笑)


統計モデリングとは「枠組み」である、「手法」ではない


端的に言い切ってしまいましたが、多分これに尽きるんだと思います。「統計モデリング」と言った場合に出てくるのは正規線形モデルとか一般化線形モデルとか混合効果モデルとかMCMCとかいう「手法」の名前ではなく、あくまでもデータを説明するモデルを構築しようとするあれやこれやを一連の流れとして実践していく「枠組み」であるべきだ、という。


裏を返すと、統計モデリングとは何ぞやということを学ぶ際にあまり「手法」にフォーカスし過ぎると全体像を見失うかもしれない?ということでもあるのでしょう。例えばシンプルな正規線形モデルを当てはめる際にMCMCを使うのはいくら何でもやり過ぎ(非効率)なわけで。


そういう意味で言うと、具体的には後述しますが要は

  1. 抱いた疑問に即した目的変数を選び
  2. 目的変数が従う分布を推定し
  3. 説明変数を持ってきたら当てはめたいモデルの複雑さを勘案し
  4. 様々な当てはめの原理&計算方法の中から目の前の変数たちに対してベスト(orよりマシ)のものを選び出し
  5. 実際に当てはめてみて
  6. 当てはめた結果をもとに最初の疑問に答えられたかどうかを議論する


という一連の流れを自分のものとして体得することが大事なのではないかなぁ、と。その中において、4番目のステップなんかはおそらく人によって得手不得手もしくは好みがあったりして、必ずしも完全に理想的なものが選ばれないケースもありそうなわけですが、そこでそういう細かいところは一旦置いといて全体の流れをきちんと作る。。。というのが重要なんじゃないかと思うわけです。


「モデル」には色々な解釈があるが、あえて言えば「物事を説明する」ためのもの


統計モデリングとは「枠組み」であるとは言っても、その次にじゃあ「モデル」って何だよ?という疑問が出てくるのが普通でしょう。この辺も@さんの記事で議論になっていましたが、僕はシンプルにこう表現したいと思います。

「モデル」とは、「物事を説明する」ためのもの


特にここで意図されているのは「回帰」と「予測」だと思うので尚更だと思うんですが、要はデータによって表される何かしらの物事を、どういう粒度のどういう方向性にせよ、とにかく「説明」するために「モデル」を当てはめるということだと個人的には考えています。その「説明」の向こう側に、例えばパラメータ推定とか予測とかがあるのだと思います。もっともこの辺についても@先生から以下のような指摘がありまして、



この辺は踏み込むと果てしない議論になるので、僕はあまり深入りしないようにしておきます(笑)。ただ、仰るように物理学者の考える「説明」と統計学者の考える「説明」はレイヤーが違うのかなという気はしますね。


大事なことは目的変数が従う確率分布への(ある程度)深い洞察


で、ここで話題になってる「統計モデリング」というのは今のところ大半が回帰モデルなので、畢竟どうしても目的変数が従う分布をきちんと踏まえてモデルを当てはめていかないとどうにもならないわけです。その辺を僕なりにまとめてみたのが以下の図です。ちなみにここでは例として正規分布ポアソン分布・二項分布の3つが挙がっていますが、もちろん他の分布にも言えることなので念のため*2


f:id:TJO:20140606125654p:plain


この図の横方向は「目的変数の分布のバリエーション」、縦方向は「モデルの複雑さ」です。前者はズバリ分布形状、後者は例えば固定効果・変量効果・空間相関といったところを思い出してもらえればよろしいかと。


はっきり言って、最初に目的変数がどんな分布に従うかさえ分かってしまえばその先はある程度自動的にやってしまえる部分が大きいです。一方で、例えば加法モデルみたいに当てはめが可能かどうかを度外視してどんどん別々の要因を足していくようなモデルを選んだ場合は、何もかも自分で手取り足取り決めていかなければならない*3という側面もあったりします。


先日の記事で挙げた例なんかはまさにそうでしょう。あの例だと線形モデル+トレンド過程、即ち

CV_t = Q_t + \displaystyle \sum trend_t

trend_t - trend_{t-1} = trend_{t-1} - trend_{t-2} + \epsilon_t

 Q_t = \alpha x_{1t} + \beta x_{2t} + \gamma x_{3t} + \epsilon_t

みたいなモデルになるわけですが、いかな基本となるモデルがただの正規線形モデルであったとしても、最小二乗法で当てはめられるはずもなく*4。。。結局MCMCなりの出番になるということなのかなと。左端の正規分布に従うケースであっても、一番下のMCMCのところまで伸びているのはそういう含みを持たせてますよ、ということで。


実は既に久保先生による分かりやすい見取り図があるんですが、どうやらそれでも何かが語り尽くされていないという指摘が局所的ながらあるようで*5。とは言え、基本的にはこういう感じに俯瞰すれば良いのではないかなぁと思います。


だが実務上は例えばRで言えばlm, glm, glmm, BUGS / Stanの使い分けの問題になる


というわけで四の五の言ってきたわけですが、ビジネスの現場で実務をこなす側としては「で、結局R / Pythonではどーやってそれをやればいいんだよ」という身も蓋もない疑問に帰着してしまうんですよね。


ということで先ほどの図にRで対応する関数&パッケージを書き足したのが下の図です。色々抜けてますけど、その辺は皆さん脳内補完して下さいねということで(笑)。


f:id:TJO:20140606125714p:plain


結局こういうtipsというかノウハウが欲しい!という人が多いんだと思いますが、ノウハウだけあっても正しく理解していなければ困ったことになるというのは昔書いた記事で指摘した通りです。大事なことは冒頭でも書いたように、きちんと一連の流れを体得し、チェックすべきポイントでしっかりチェックすることだと思ってます。


最後に、このエントリを書くことになったきっかけ


それは割と単純で、何気なく昼時にTLを眺めていたら@先生がこんなことを呟いていらっしゃるのを見かけたのでした。



そこで僕は何となくこんなことを呟いてみたわけですが、



その後も久保先生(@)と@さんとでこんなやり取りが続きまして。



呟きっぱなしだといい加減になるかなぁと思ったので、ブログでまとめてみることにしたのでした。ちなみにこの辺は基本的にはみどりぼん読書会が流行っていることを受けての流れだったりするという。。。

*1:最後の方にそのTwitterでのやり取り載せておきました

*2:でもぶっちゃけRのglm()ではfamily = gaussian / poisson / binomialしか使わない気がする

*3:ガチガチのベイジアンになってしまうので

*4:もちろんノーマルに反復重み付き最小二乗法で解く最尤法でも無理な話

*5:この記事の最後へどーぞ