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

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

統計的因果推論(1): 差分の差分法(Difference-in-Differences)をRで回してみる

世の中様々な介入効果・施策効果を検証するためのexperimentが行なわれていると思うんですが、意外とその効果検証というのは難しいものです。特にいわゆる統計的因果推論の立場から見れば、web上で接触する一般ユーザーに対する介入や施策といったものの検証を完全にランダム化比較試験(Randomized Controlled Trial: RCT)として実施するのは困難です。


この問題について統計的因果推論の観点からは様々なソリューションを与えることが可能なようです。例えば傾向スコア(Propensity Score)は最近色々なところで取り上げられていますし、バックドア基準といったものも挙げられます。で、今回はその中でも差分の差分法(Difference-in-Differences: DID)を取り上げることにします。理由は単純で「どうしてもexperimentによって何かしらの介入・施策の効果の有無を明らかにしたい」というケースで特に有用だと個人的には思われるからです。


おおまかな概要については、『差分の差分法』Wikipedia記事が分かりやすいかと思います。また「差の差法」という呼称になっていますが、不肖僕も刊行委員として参画している岩波DS第3巻の山口慎太郎先生の解説で取り上げられています。

岩波データサイエンス Vol.3

岩波データサイエンス Vol.3


具体的なやり方についてはweb上の記事に良いものがいくつかあって、例えばこちらの記事は非常に分かりやすいです。

ということで、色々勉強しながらRで回すところまでやってみようかと思います。

Disclaimer

上記のreferencesしか読んでいないので、間違っているところが沢山ある可能性があります。もし間違っているところを見つけた方は、ぜひぜひツッコミを入れてくだされば幸いですm(_ _)m

続きを読む

p値を計算したくなる検定の数々を試しにStanによるベイジアンモデリングで代替してみた

この記事は、やたらはてブを稼いでしまった前回の記事の続きです。

ASAのプレスリリース及び声明の中には、確かに「p値に依拠しない新たなアプローチの例」として予測値を重視するアプローチ*5、ベイジアンモデリング、決定理論的アプローチ*6およびfalse discovery rate*7といったものを用いるべき、という趣旨のコメントが入っています。とは言え、重回帰分析とか機械学習のような多変量モデリング(なおかつサンプルサイズも大きい)を伴うテーマならともかく、統計学的仮説検定のようなサンプルサイズも小さい(データも少ない)シチュエーションでどうやるんだよ的な疑問を持つ人も多いのではないかと。


そんなわけで、実際にそれっぽい各種検定の数々をStanによるベイジアンモデリングで代替してみたので、この記事ではその結果をつらつら紹介してみようと思います。テーマは前々回のこちらの記事の1節で取り上げた2種。

とりあえず今回はt検定とカイ二乗検定だけ取り上げてみます。ANOVAはそもそも線形回帰モデルで代替可能なので、ここでは割愛しますよということで。

続きを読む

ビジネス実務の現場で有用な統計学・機械学習・データマイニング及びその他のデータ分析手法10+2選(2016年版)

そう言えば3年前にこんなまとめ的エントリを書いたのでした。この内容はそのままかなりの部分が2年前に刊行した拙著の原案にもなったということで、色々思い出深いエントリです。

なのですが。・・・この3年の間に統計学機械学習データマイニングの諸手法及びそれを取り巻くビジネスニーズには様々な進歩があり、そろそろこの内容にも陳腐化が目立つようになってきました。ということで、3年間の進歩を反映してアップデートした記事を書いてみようと思います。前回は「10選」でしたが、今回は「10+2選」に改めました。そのラインナップは以下の通り。

  • 統計学的検定(t検定・カイ二乗検定・ANOVAなど)
  • 重回帰分析(線形回帰モデル)
  • 一般化線形モデル(GLM:ロジスティック回帰・ポアソン回帰など)
  • ランダムフォレスト
  • Xgboost(勾配ブースティング木)
  • Deep Learning
    • 追記:MXnetのRパッケージ{mxnet}を用いたConvolutional Neural Networkによる例
  • MCMCによるベイジアンモデリング
    • 追記:ベクトル化したStanスクリプトの例
  • word2vec
  • K-meansクラスタリング
  • グラフ理論・ネットワーク分析
  • その他の有用な手法たち
    • LDA及びトピックモデル
    • 因子分解(SVD・NMFなど)
  • 統計学機械学習の諸手法について学ぶ上で確認しておきたいポイント
  • 最後に
  • 追記


前回よりだいぶ組み替わりましたが、それだけ実務の現場で用いられるデータ分析手法の領域が広がったということかなと勝手に考えております(笑)。また、利用するパッケージ・ライブラリの都合上今回はRだけではなくPythonのものも含めています*1。ただし基本的にはR上での実行例を紹介していく感じです。


一方、「補」をつけた2手法についてはデータ分析業界では広く使われているものの僕が普段実践していない手法であるため、そこだけは基本的には他の資料を参照しながらの紹介に留めています。ということで、以下ざっくり見ていきましょう。

Disclaimer

  • 今回も基本的には「ひとつの記事で大雑把に眺めたい」人向けの記事なので、ちょこちょこ細かいところで厳密性を欠いていたり、説明不足だったり、はたまた他に必要な資料の提示が欠けているところもあるかと思いますので、その辺は何卒ご容赦を。またスクラッチからの実装に必要な知識を提供するものでもありませんので、どうか悪しからず
  • 今回の記事ではそれぞれのデータ分析手法を紹介することに主眼を置いているので、個々のパッケージ・ライブラリ類及びそれらのビルドに必要なコンパイラ環境などのインストール方法などの詳細はほぼ割愛しております。インストールに際しては適宜リンク先の記事を参照するなり、ググるなりしてください
  • ただし、明らかに理論的に誤っている説明などがある場合は直ちに修正いたしますので、コメント欄なりSNS上でのコメントなりでTJOまで是非お知らせください

*1:Stanやxgboostのようにgcc / clangコンパイラが間接的に必要なもの、はたまたH2OのようにJavaが間接的に必要なものもあります

続きを読む