About connecting the dots.

data science related trivial things

調査観察データにおける因果推論(1) - 無作為割り当てされていないことの問題

はじめに

これからしばらく,実データにおける因果関係の推定,についてまとめていきたいと思います.ちなみにネタ本は星野先生の「調査観察データの統計科学」です.基本的にこれから書く内容は,この本の受け売りになります.2000年代以降の応用統計学のひとつのエッセンスが詰まったとても良い本だと思います.

この「確率と情報の科学」シリーズですが,以前久保先生の「データ解析のための統計モデリング入門」について(終盤のベイズ部分は簡単に書くのが無理だったので省略しましたが)紹介しています.こちらも非常にわかりやすくまとまっており,線形モデルについて基礎から発展まで一通りの理解をしようとするときに,この本がベストだと思います.

1からみなおす線形モデル (1) - 一般線形モデル - About connecting the dots.1からみなおす線形モデル (2) - 一般化線形モデル - About connecting the dots.1からみなおす線形モデル (3) - 一般化線形混合モデル - About connecting the dots.

既刊はまだ4巻しかないですが,一覧をみる限り国内のスター統計学者の人たちが書きまくっているので,そのうち順に読んでいこうかと思ってます.

調査観察データとは

ソーシャルゲームのイベント効果検証

普段私たちが仕事で扱うデータというのは,必ずしも計画的にサンプル抽出を行ったり,条件分けを行ったりしている訳ではありません.むしろ実務的にはそうでないことのほうが多いんじゃないかと思います.

具体例を考えてみましょう.自社で運営しているソーシャルゲームがあったとして,そのゲームで大規模なイベントを開催したとします.イベントでは,そのゲームのことをもっともっと好きになってもらえるような企画をたくさん実施するので,イベントのあとにはゲームのほうにもっともっときてくれるようになるんじゃないかと考えました.

そこで実際に,イベントに来た人と,来なかった人のそれぞれについて,イベント後の訪問回数を比べることにしました.そうすると,イベントに来た人の方が訪問回数が多いことがわかりました.おお,やったねイベントの効果ありじゃん! といえそうな気がしますが,果たしてそうでしょうか? そもそもイベントに来てくれるような人は,もとから訪問日数が多かったり,いっぱい課金していたり,最近サービスに参加し始めたばかりでやる気があったり,というだけの話かもしれません.

でも,イベントに来てくれるかどうかというのは,ゲームの運営側でユーザに割り当てできる話ではありません.来てくれた人と来てくれなかった人の間で,どうにか上記のような共変量を調整して「実際の効果」を検出する必要があります.でも,その「共変量の調整」ってどうやってやればいいの? という問題が出てきてしまうわけです.

社会調査での研究例

実際,上記のような問題は社会調査のフィールドではよくある話だそうです.たとえば妊婦の喫煙が,子どもの知能に悪影響を及ぼすか,という問題があります.喫煙している妊婦と,していない妊婦について継続調査を行い,子どもの知能を測り続ければ,両群で知能指数の差が出るかはわかるでしょう.

でも,この「妊婦の喫煙」というのを政府がコントロールできるわけではありません.喫煙する母親の方が,相対的に本人の知能指数が低く,サポートしてくれる親類が周りに少なく,収入も少ない,といった別の要因が介在している可能性が十分にあります.これらの諸要因を調整しない限り,妊婦の喫煙が子どもの知能に影響するか,もし影響するとしてどの程度影響するかを正しく測定することはできません.

共変量調整の手法

上のような問題を,ぱっと思いつく感じで解決するやり方として,以下のようなものがあります.

マッチング

分析対象には,なんらかの実験処置を行った群と,行わなかった群の両方がいます(最初の例でいえば,イベントに来た群とこなかった群ですね).その両群について,イベント前の訪問日数,過金額,サービス開始時期がだいたい同じになるユーザを取り出して,それ同士でイベント後訪問日数を比較することで,上記の問題を解決できそうです.

しかしこのやり方だと,そもそも完全にマッチングできないペアがたくさんできることが予想されますし,共変量が多いとマッチングを実行するの自体が大変になってしまいます.さらにいえば,共変量の重なりがない場合には,そもそもマッチング自体できないという問題があります.

サブグループ解析

上記のマッチングについて,たくさん共変量があったとして,そのうちの主要な一部の変数について飲みマッチングを取る,ということもできます.そうすればマッチングもおおむね成功し,手間もかからないでしょう.しかしそもそも共変量の一部しか調整していない以上,結果の値にどれくらい意味があるのかが疑問です.

層別解析

完全にマッチングを取ろうとするから難しいので,いくつかの層にユーザを分けて,その中で比較する,というやり方も考えられます.しかしこのやり方も,そうの作り方が非常に恣意的だし,上で述べた問題が解決するわけではありません.

回帰分析

そこで考えられるのが,単純に回帰分析の独立変数に,処置の有無と合わせて共変量をすべてぶち込む,というやり方があります.これだとわかりやすいし良さげな感じがしますね.しかしこれも,予測変数と共変量に線形モデルを暗に仮定することになり,そもそもそれが妥当な仮定でなければ,推定値に大きなバイアスが生じます.また,得られる値も厳密には因果効果の推定値ではなく,回帰の結果の切片や推定値の差にすぎません.特に前者の推定誤差の大きさは,実務上大きな問題になります.

セミパラメトリックな解析法

これまでみてきたように,これらのやり方では,いずれも大きな推定誤差を生じさせる可能性が高いといえます.一見よさそうにみえる回帰分析の手法も,すべての共変量にパラメトリックな関係を仮定せざるを得ず,その部分に推定誤差の入り込む余地が大きいといえます.

そこでモデルの一部にのみ分布を仮定するようにして,それ以外は分布仮定を行わない手法が近年よく使われています.このような分布を一部使うやり方をセミパラメトリックといいます(パラメトリック,ノンパラメトリックという言葉の意味については,以前書いたエントリを参照してください).

このセミパラメトリックな手法として,傾向スコアやそれを応用したIPW推定量(Inverse Probability Weighting Estimator: IPWE),さらにその発展の二重にロバストな推定量(Doubly Robust Estimator: DRE)といったものがあります.次回はこれらの手法について説明して,Rコードでの実施例をみていきたいと思います.