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

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

ビジネス実務の現場で有用な統計学・機械学習・データマイニング及びその他のデータ分析手法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が間接的に必要なものもあります

続きを読む

カイ二乗検定のメタアナリシスをやってみた(階層ベイズでも試してみた追記あり&タイトル変更済み)

記事タイトルに反して僕は実は統計的検定が大嫌いなんですが、皆さんいかがお過ごしでしょうか(笑)。ということで、今回はややマニアックなメタアナリシスの話題でもしてみようかと思います。「t-testのメタアナリシス」みたいな、いわゆるRosenthal's methodとして知られているような一般的な話題にもちょっとだけ触れています。

今回想定しているシチュエーション


例えばですが、「あるパーソナライズされた*1動線改善を4つの異なるeコマースサイトで行った」みたいなケースを想定してみます。それぞれのeコマースサイトは独立した事業者であるため、統一したアクセス解析はできないものと仮定します。で、動線改善は「お気に入り→購入」のところに施したとして、ここでA/Bテストを行ったと仮定します。この時、アクセス解析の結果からいわゆる2×2分割表として

サイトA

非CV CV
改善なし 250 125
改善あり 300 180


サイトB

非CV CV
改善なし 1500 650
改善あり 1200 620


サイトC

非CV CV
改善なし 600 300
改善あり 550 310


サイトD

非CV CV
改善なし 2200 1050
改善あり 1300 700


という集計データが得られたものとします。ついでなので、積み上げ棒プロットで図示してみるとこうなります*2


f:id:TJO:20160218213011p:plain


さて、この動線改善には本当にCVRを向上させる効果があったんでしょうか? 各々についてCVRを見てみると、以下のようになっています。


f:id:TJO:20160218223625p:plain


これを見る限りでは、常に「動線改善あり」のCVRの方が「なし」を上回っているようです。それゆえ、直感的にはこの動線改善には4つのサイトをまたいで共通したCVR向上効果があるように思われます。しかしながら、既に集計された(tabulated)データゆえ「8通り」「4組」のサンプルしか手元になく、どう見ても検定力が弱い≒サンプルサイズに物を言わせた分析方法は使えません*3。では、どうすれば良いのでしょうか?

*1:最近だと機械学習でやるところが増えてますね、実際に

*2:何となくコンサルっぽいですね笑

*3:つまりrepated measure two-way ANOVAみたいな、というかそもそもone-way ANOVAすら使えない

続きを読む

Stanで統計モデリングを学ぶ(7): 時系列の「トレンド」を目視ではなくきちんと統計的に推定する

何かこのシリーズめちゃくちゃ久しぶりなんですが(汗)、ちょっと最近問題意識を抱いている話題があるのでそれに関連した形でStanでやってみようと思います。


それは時系列の「トレンド」の扱い。ビジネスの現場では、時系列を意識しなくても良い*1クロスセクションデータでは普通に線形*2モデルを組んだりしますが、ことパネルなど時系列データとなると途端にモデルを組んだりせずに「手なり」で適当に近似曲線を引いてしまったり、みたいなことが少なくない印象があります。特に見た目にそれっぽい「トレンド」がある場合は尚更。


ところがどっこい、最近このブログでも取り上げている動的線形モデルのように、時系列データであってもある程度はモデリングできるわけで、ならばいつまでも「見た目」でトレンドを憶測し「手なり」に近似曲線を引く、なんてことはせずにモデリングでズバリ推定するべきだと僕は思うわけです。


とは言え、内容としてはぶっちゃけこのシリーズ記事の2回前のものとほとんど同じなんですが(笑)、ちょっとデータを変えてやってみようと思います。

*1:無視してるとも言える

*2:正規・一般化問わず

続きを読む