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

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

「統計学と機械学習の違い」はどう論じたら良いのか

何かこんなメディア記事が出ていたようです。



これを読んで色々な人がツッコミを入れまくっている模様ですが、この記事の不思議なところは「完全に間違った説明というわけでもないのに何故か(両分野に詳しい)誰が読んでも猛烈な違和感を覚える」ところなんじゃないかなぁと。


正直、これはライター・インタビュアー・コメンテーター・編集者の誰のせいなのかは全く分からないんですが、ツッコミ入れられまくっている内容について色々あげつらってもあまり建設的でないので、ここでは記事中で本題として取り上げられている「統計学と機械学習の違い」についてちょっとコメントしてみようと思います。


あ、もちろん僕がこれから書くコメントも別に正しいとは全く限らないので、おかしいところや間違ってるところがあったらバンバン突っ込んでいただければ幸いです*1。そしてガチ勢向けのコメントでもないので何卒悪しからず。


統計学はデータを「説明」することにより重きを置く


昨年出版した拙著でも統計学的な分析の代表例として「検定」*2「回帰によるパラメータ推定」*3を取り上げたわけですが、一般に統計学はそのデータがどういうものであるかを「説明」することに重きを置くものだと僕は理解しています。


即ち「検定」であれば、例えば平均値の差に関するt検定であればA群*4とB群*5との差があるかどうかを「説明」することになるし、ANOVAであれば群をまたいで実験条件間*6での差があるかどうかを「説明」することになります。他の例えばカイ二乗検定にせよ、順位和検定にせよ、やはり何かしらを「説明」する手法です。


そして重回帰分析(正規線形モデル)を含む線形モデル族ではモデル推定の結果として偏回帰係数(パラメータ)が求まるわけですが、それらのパラメータは個々の説明変数*7にどれくらいの目的変数*8への影響度があるか*9を「説明」するものでもあります。


f:id:TJO:20150917134549p:plain


なればこそ、例えば線形モデル族では偏回帰係数が有意に0から離れた正負いずれかの値を取るか否かがよく論じられるわけです。要は上の図に出てくる個々のβの大小が重要ということで。


一方、線形モデル族では「目的変数+説明変数」の組み合わせでデータを扱うことから、特に説明変数が外生変数*10であれば純粋な「予測」も可能なわけですが、意外にも統計学の教科書はあまり予測について取り上げていないことが珍しくなく、例えば東大出版会の定番青本(自然科学の統計学 (基礎統計学))では一言も予測については触れておらず、緑本(人文・社会科学の統計学 (基礎統計学))でもほんの数ページほど回帰分析における予測について述べている箇所があるだけです*11。RやらPythonやらの統計分析系パッケージでは当然のように予測はできるんですけどね。。。


むしろ東大出版会青本・緑本とも偏回帰係数の検定などなどにページが割かれており、また「当てはめ」の良し悪しということについての記述も多く、そういうところから見てもやはり統計学は「説明」により重きを置く体系なのだなという印象を持っています。


実際、モデル評価にはどちらかというと学習データのみからでも計算可能な*12AICなどの指標などが多いということもあり、未知データへの適用よりも学習データに対する「説明」が重視されていると見て良さそうです。


機械学習はデータから「予測」することにより重きを置く


巷でよく言われるのが、機械学習と言えば「Yes/Noの二値や1, 2, 3...といったカテゴリに分類する」ためのモデルを作るもの、という理解かなと。かつてならスパム分類、今ならヒト・イヌ・ネコといったカテゴリへの画像分類といった事例が人口に膾炙しているせいもあり、多くの人々がそのように理解していても不思議ではないですね。ただ、それはあまり正確な理解ではない気がします。


教師あり学習


例えば多くの教師あり学習分類器は、目的変数をカテゴリ型から連続値を持つ数値型に替え、さらに損失(誤差)関数などを変更することで「回帰器」としても学習させることができます。SVMもランダムフォレストも一般には二値分類器としてばかり捉えられがちですが、どちらも回帰器として学習させることが可能です。もちろん今流行のDeep Learning (DNN)も、Xgboostも、回帰器を構築できます。なので、機械学習は常にYes/Noの二値のようなカテゴリ分類しか学習しない、回帰はやらない、というのは正しくないわけです。


そして重回帰分析とロジスティック回帰が多くの機械学習の教科書でも取り上げられているように、線形モデル族も基本的には機械学習の一分野としてカウントされ得ます。もちろん、その中では普通に偏回帰係数のようなパラメータの推定も行われます。そういう意味においては、機械学習でも手法によっては「説明」の要素を持っているとも言えます。それこそランダムフォレストやXgboostも変数重要度の計算をやれるわけで。


しかしながら、機械学習の最大の特徴はやはり「未来値の予測」にあると言って良いでしょう。


f:id:TJO:20150917135158p:plain


上の図で言えば、赤い点*13と青い点*14から成るデータに基づいて紫の線で描かれるような分類モデルを学習する、というのが機械学習の本義なわけです。この紫の線がうまく描ければ、新たなデータとして別の点*15が追加された時に、その点が赤or青のどちらか*16を正しく分類できるはず!というのが機械学習における「予測」の思想です*17。


ただ、線形モデル族のようにヒトが直感的に理解できる形でモデルが出来上がるとは限らないのが機械学習の特徴で、そこが統計学との大きな違いかもしれません。


例えばSVMであれば分離超平面はサポートベクターによって与えられ、そこには偏回帰係数のような綺麗に定式化されたモデルはありません。ランダムフォレストなら山のような決定木からなる「森」ですし、Deep Learningに至ってはレイヤーごとに表現が圧縮されてしまうので線形モデルのような定式化もへったくれもありません*18。


このように「説明」を多少犠牲にしてでも「予測」の精度を上げたい、というのがおそらく機械学習の思想なのだと僕は理解しています。


その究極形がいわゆる「オンライン学習(ストリーミング学習)」かな、と。学習データをまとめて読み込んでモデルを作る&新たにデータが加わった場合はまた一から読み込み直す「バッチ学習」とは異なり、「オンライン学習」では過去に計算したモデルを(例えば線形モデル族などの)パラメータのみで表現可能なようにしておき新たにデータが加わった場合はそのデータだけを読み込んでパラメータのみを更新する、というやり方をするわけです。イメージとしては、よく引き合いに出されるメールの「重要」ラベル分類かと*19。このやり方だと過去のデータは全部捨ててしまうこともできるため&現在のパラメータが最近のデータの影響を受けやすいため「説明」には必ずしも適さない一方で、「予測」を計算負荷を抑えた上でうまくできるということになります。


なお機械学習でのモデル評価というと、cross validationやhold-outのようにそもそも学習データとは別に(何かしらの方法で)テストデータを作ってその予測精度を見るというものが多く、この点でも機械学習は「予測」により重きを置く*20体系なのだなという印象があります。


余談ですが、同じような評価は教師あり「回帰」器でもできます。ただ、そもそも機械学習系の回帰器は統計モデリングによる回帰モデルに比べると様々なばらつき要因に対して弱いかなぁという印象も。。。*21


教師なし学習


これまで散々教師あり学習の話をしてきましたが、教師なし学習(クラスタリングや広義に見て因子分解系など)も実務上は最終的に「何かしらのクラスタに新たにやってきたデータを振り分ける」のが目的になりがちなので、やはり「説明」よりは「予測」に重きを置くという印象を持っています。


例えばK-meansのような手法で学習データ*22をk個のクラスタに割り振ってから、それぞれの特徴量*23に添えて改めて1,...,kなるカテゴリを学習データとして与え、これを教師あり学習の多クラス分類器にかけて分類モデルを作り、未知データ*24をk個あるクラスタのいずれかに割り振るという発想は、割と巷ではよく使われている印象です*25。


というわけで、教師なし学習であってもやはり「予測」に重きを置くことになるケースが多いというのが僕の理解です。ちなみに教師あり学習と組み合わせない場合でも、そもそも例えばクラスタリングであれば出たとこ勝負で目の前のデータをk個にまとめることになるし、レコメンドであれば新たにやってきたユーザーに対して何かしら好んでくれそうなアイテムを推薦することになるので、どのみち「予測」をやることになる気もしますが。


とは言え、統計学と機械学習の違いは基本的にはそれほど大きくないし互いに重なる部分だらけ


色々統計学と機械学習との違いをあげつらってきましたが、ぶっちゃけこの両者は「違う」というより「重なる」部分の方が多いというのが個人的印象です。


まず、統計学であろうと機械学習であろうと、モデルを構築するためには学習データが必要です。特に統計学の視点から線形モデル族を構築する場合と、機械学習の視点から学習モデルを構築する場合とでは、どちらであってもそれ相応に十分な量のデータを貯めてモデル推定に回さなければなりません。つまり、統計分析でも機械学習でもモデルを作りたければ学習データを大量に貯めなければいけないことに変わりはないわけです*26。


なので、統計分析と機械学習とでデータの扱いが異なるということはありません。ぶっちゃけ、システム基盤を組んでの実務の現場では、アドホック分析として統計分析を行う場合でも、システム実装として機械学習を実践する場合でも、いずれにせよ膨大なトランザクション*27から必要なデータを抽出してきてDBに貯め、これを分析のために適宜抽出して分析基盤に回すための仕組みが必ず求められます。そういうわけで、ITシステム基盤として見れば、どちらであっても必要なインフラにそれほど差はない気がしています。


次に、線形モデル族が統計学と機械学習の双方に重なっている点からも分かるように、数理的基礎という意味では両者はむしろ密接な関係にあると見るべきです。特に機械学習においては統計学に近い方法論に基づいてモデル推定などなどを行う手法は「統計的学習」と呼ばれ、そもそも『統計的学習の基礎』という機械学習の百科事典的大著までもがあるわけで。


統計的学習の基礎 ―データマイニング・推論・予測―

統計的学習の基礎 ―データマイニング・推論・予測―


統計学にせよ、機械学習にせよ、根底にあるのはひとまず「目の前にあるデータをモデリングすること」「そのために『ばらつき』をうまく扱うこと」の2点かな、と個人的には思っています。そのモデルを「説明」に使うのか、「予測」に使うのか、の思想が異なるのが統計学と機械学習の間の違いかなぁと。そこさえ分かっていれば概ねデータ分析の現場でもうまく使いこなせるようになるんじゃないでしょうか。


そう言えば僕は階層ベイズ以外ではあまりベイジアンは使わない(特に機械学習だと殆ど使ってない)のであまり知ったかぶりはできないんですが、ベイジアンは割と統計学と機械学習とで重なりが大きい領域かなぁと思ってます*28。ノンパラベイズの理論のところなんか読んでると尚更。


データ分析において大事なのは「統計学『も』機械学習『も』理解する」こと、ということで推薦図書など


ということで、統計学「も」機械学習「も」理解するように努めましょう!というのがこの記事で言いたかったこと。そこで推薦図書を紹介したいのですが、まず統計学をコードを書いて計算結果を見ながら学ぶにはこちら。Rで一通り試してみながら、一般的な統計学のイロハをやはり過不足なく学ぶことができるはずです。


Rによるやさしい統計学

Rによるやさしい統計学


一方、統計学はある程度勉強したという人が機械学習についても理解したいというのであれば、最低でもこちらの本を一通り読んでおくべきでしょう。先日このブログでも大絶賛したばかりですが、この本には初心者が機械学習を学ぶ上で必要な全てが過不足なく詰まっています。RでもPythonでも*29実践できるので、どの開発環境の方にとっても有益な本だと思います。というか、機械学習について知ったかぶりがしたいなら最低でもこの養成読本・機械学習入門編の特集1ぐらい読め!ってところですかね(笑)。


データサイエンティスト養成読本 機械学習入門編 (Software Design plus)

データサイエンティスト養成読本 機械学習入門編 (Software Design plus)


そう言えばバランス良く統計分析と機械学習の両方を同時に学べる本ってほとんどない気がするんですが、強いて言うならRで統計学+機械学習という一連の流れを学ぶにはこちらを。


手を動かしながら学ぶ ビジネスに活かすデータマイニング

手を動かしながら学ぶ ビジネスに活かすデータマイニング


はい、例の昨年出版した拙著ということで手前味噌でごめんなさい(笑)。基本的に説明が平易*30なので、まず拙著を通読&Rコード写経していただくというのが良いかなと。ある程度統計学・機械学習それぞれのコンセプトについても簡潔に説明してあるので、あくまでも導入としてお読みいただければ幸いです。

*1:いつも通りの炎上ラーニング

*2:3ç« 

*3:4ç« 

*4:例えばDB基盤Aの何かしらのレイテンシ

*5:DB基盤Bのレイテンシ

*6:例えばユーザーグループA, B, C, D, Eそれぞれにスマホ広告1, 2, 3, 4, 5を表示し分けるとか

*7:例えば広告企画a, b, c, d...

*8:CV数or売上高など

*9:「弾性率」みたいな捉え方をされることもありますね

*10:広告出稿数、広告予算など当事者の側が操作可能な変数

*11:その代わり計量時系列分析の項では予測に関してスペースを大きく割いているが、そもそも線形モデルではない

*12:尤度を用いて解析的に、という意味で

*13:例えばCVしたECサイトユーザー

*14:CVしなかったユーザー

*15:つまり説明変数は分かっているがまだCVするかどうか分かっていないユーザー

*16:CVするorしない

*17:もっともこれの元ネタはXORデータセットの単純3層NNによる分類で、しかもご覧の通り精度はかなり悪そう(笑)

*18:もっともCNNだとレイヤーごとに解像度ごとの表現が取れたりするので別の意味で綺麗という

*19:メールが新たに来るたびにモデルパラメータを更新し、それ以降過去のメールは参照しない

*20:CVが用いられることが多いという意味ではAICで評価するよりもさらに実際的に汎化性能の良し悪しをチェックしているとも言えます

*21:特にSVMだろうとランダムフォレストだろうと非線形トレンドのあるデータには機械学習回帰器はめっぽう弱い

*22:例えば広告面

*23:テキストから生成した素性

*24:新たに獲得した別の広告面

*25:オンライン中華レストラン過程みたいに未知データを次々と既存or新規クラスタに割り振っていく手法もあるにはありますが

*26:オンライン学習でも実務上は最初のステップではある程度学習データを貯めてモデル推定を行い、それなりに最初から予測精度の高いパラメータにセットしておく必要がある

*27:例えば会員制サイトの膨大な取引データや会員のアクションログなど

*28:Gibbs Samplerは統計モデリングでパラメータの事後分布を求めるためのMCMCでも、ノンパラベイズ系クラスタリング手法の逐次サンプリング更新でも使われたりする

*29:果てはJuliaやSpark MLlibでも

*30:単に数式を端折ったという意味で