チョコボール統計

チョコボールの秘密を統計解析で明らかにしていく。おもちゃのカンヅメ欲しい。

チョコボールに学ぶ実践的ベイズ統計モデリング入門 #1

【概要】

  • 2/9に表題のセミナーを開催しました
  • セミナーの資料と資料に書ききれなかったことなどを補足します
  • 第2回も開催予定なので、是非お越しください

f:id:hippy-hikky:20190212115414j:plain

【目次】

はじめに

2019/02/09に下記のセミナーを実施しました。 私は、2時間枠でのセミナーというのは初体験だったもので、 最後ちょっと駆け足になってしまったかなと反省しております。

ml-for-experts.connpass.com

この記事では、セミナーのフォローアップを目的として、 資料や資料の中で言い足りなかったことなどを補足します。

【トップに戻る】

資料

当日使用した資料は下記Slideshareにアップしています。 なお、公開用に一部修正を加えています。

ハンズオンで使用したコードは下記のGithubリポジトリに上がっております。 MITライセンスの範囲で自由に利用していただいて構いません。

github.com

【トップに戻る】

統計モデリングの目的

統計モデリングとは何か?

「統計モデリング」とは?という疑問に対して、明確な定義は無いように見受けます。 Googleで検索するといくつかヒットしますが、 私自身は「統計学の手法を使ってシステムを理解するための枠組み」と捉えています。

「物事を理解する」というのには色々やり方があると思いますが、 特に「活用*1」をするために、 統計学の手法(確率分布)を利用するのだと考えています。 純粋に楽しいというのはあるにしろ、 活用が出来なければビジネスとしては利用価値が無いと考えます。 そのため、過度に複雑なモデルを作ることにはあまり意味がなく、 できる限りシンプルなモデルの方が利用効率が高いと思っています。

具体的な活用の仕方という点については、当然ながら問題によってケースバイケースです。 モデリングの結果から、異常値の定義のようなものを直接導いても良いですし、 ニューラルネットワークを使うという判断をする場合もあると思います。

「AI」と統計モデリング

上記では、統計モデリングの結果は分類や予測などの問題に活用すると述べてきました。 このような問題は「AI」を使って解決できると言われていますが、 「AI」と統計モデリングの関係について考えてみます。

結論から言うと、「AI」と言う技術は存在せず、統計モデリングだって「AI」系の技術の一つです。 データの構造を推定すると言う点で、統計モデリングはこのような問題を考える上で最も基礎となる考え方です。 ニューラルネットワークなど注目されている技術は、 データ構造を明示的に推定する部分を飛ばして、 前節で言うところの「活用」を直接行なっているものと考えています。
この部分については、私がやっている別のブログの記事でも言及しておりますので、 よければこちらも読んでいただけたらと思います。

データの性質を理解する - 機械と学習する

セミナー資料で識別境界の例を載せていますが、 こちらはirisデータセットのうち2種(versicolor, virginica)を分類するために NN*2を使って学習した境界線です。 この図の計算も上記のGithubリポジトリに上がっていますので、 よければ参照ください*3

ここまでの参考資料等

ここまでを理解するための資料として、 統計学入門統計学についてかっちりと書かれているのでおすすめです。 これがちょっと難しい場合には、道具としてのベイズ統計など易しめの本を一読すると理解が進むと思います。

モデリングや活用についての具体的なイメージについては、その問題、数理モデルが解決しますがとても イメージしやすくて良いと思いました。

ハンズオンでも利用する「ベイズ統計」について、 成り立ちや利用シーンについて、異端の統計学 ベイズを一読されることをおすすめします。 この書籍は、理論書ではないので数理的な話はありませんが、活用されてきた場面を知ることで、 どのような問題に適しているのかがイメージできると思います。

【トップに戻る】

最尤推定ハンズオン

今回のセミナーでは、モデリングの具体的な問題としてチョコボール銀のエンゼルの出現率(含有率)を推定する問題を扱います。

問題設定

銀のエンゼルの出現はベルヌーイ試行*4であると仮定しています。 ベルヌーイ試行を仮定することで、エンゼルの出現を二項分布でモデル化できます。 当たり外れのような2値の問題でも、ベルヌーイ試行を仮定できない場合はあると思いますが、 そのような場合にはモデルを工夫する必要があります。 操作できるならデータは取得段階でランダム化した方が良いですし、どこかでランダム性を仮定することが必要になります。

最尤推定とは

最尤推定とは、推定対象のパラメータ\thetaを変数に持った「尤度関数」を定義し、 尤度関数L(\theta)を最大化する\thetaを求める方法です。 尤度関数L(\theta)とは、モデル(二項分布などの確率分布)に具体的なデータXがどのくらい当てはまるかを定める関数です。

f:id:hippy-hikky:20190211220652p:plain:w350
最尤推定のイメージ。横軸がパラメータθ、縦軸が尤度。

今回は単純な二項分布をモデルにしているので、最尤推定量は解析的に計算ができて、標本平均となります。 モデルが複雑で最尤推定量を解析的に計算できない場合には、 勾配法などの探索的なアルゴリズムを利用してパラメータを推定します。

ここまでの参考資料等

ここまでを理解するための資料としては、前章で述べた以下の2冊が参考になります。

また、Googleなどで検索してもたくさん出てきます。

【トップに戻る】

ベイズ推定ハンズオン

前章で、銀のエンゼルの出現は二項分布でモデル化することにしました。 ここでは、二項分布のパラメータ\theta(エンゼルの出現確率)をベイズ推定することを試してみます。

ベイズ推定とは

最尤推定では、推定値(エンゼルの出現確率)は一つの値として得られました(結局、標本平均でした)。 一方ベイズ推定では、推定結果は事後分布と言う関数(分布)で得られます。

推定結果が分布になると理解が難しいと感じるかもしれませんが、 データが10個しかない場合と1,000個ある場合で、 推定結果の信頼性はどっちが上かと問われたら当然後者であると理解できるかと思います *5。 結果が分布で得られるとは、結果の信頼性がどのくらいあるのかを併せて推定していることになります。 こうしてみると、分布で結果が得られるとは、人間の直感に適合するように感じられるかと思います。

ベイズ推定の具体的な計算

ベイズ推定の計算は、最尤推定のように単純に平均を出すようには行きません。 解析的に解く方法と数値計算的に解く方法の二つがあります。

解析的に解くためには、尤度と事前分布の組み合わせを工夫する必要があります。 エンゼルの含有率推定では、二項分布をモデルに選択したので、ベータ分布を事前分布にすることで、 事後分布はベータ分布になります(当然、ベータ分布のパラメータはデータによって事前分布のパラメータとは異なる)。 このような事前分布を共役事前分布と呼んでおり、尤度として選ぶ関数(確率分布)毎に共役事前分布が決まっています。

尤度と共役事前分布のペアを利用すれば解析的に事後分布が計算できるのですが、 事前分布を複雑にしたり*6、共役ではない事前分布を選びたい場合があると思います。 そのような場合に、MCMC(マルコフチェーンモンテカルロ)と呼ばれる手法を利用することで、数値計算的に事後分布を推定できます。

事後分布の活用

MCMCの結果は、事後分布からサンプルしたデータの集合になります。 そのため、サンプル系列のヒストグラムを見れば事後分布の形が想像できますし、 平均は事後分布の期待値になります。 信用区間を計算するのも、2.5%点と97.5%点(パーセンタイル)を求めれば95%信用区間を得ることができます。

統計モデリングの「活用」としては、期待値や最頻値を使って点推定と同様の活用ができます。 分布の広がりを考慮して信用区間の幅を活用することもできます。 エンゼルの含有率では、90%信用区間は3%〜8%と推定されました。

f:id:hippy-hikky:20190211173054p:plain:w350
MCMCサンプルのヒストグラム(KDEでスムージング)。横軸はパラメータθ、縦軸は正規化された頻度。

この結果を利用して、5個のエンゼルを得るまでに必要な外れチョコボールの個数を予測したところ以下となりました。

f:id:hippy-hikky:20190211173206p:plain
5個のエンゼルが得られるまでに必要な外れの数の推定。負の二項分布を利用。左は期待値での負の二項分布。右は負の二項分布の累積確率で黄色の幅は95%信用区間

この結果から、 エンゼル5個を50%の確率で得るまでに平均的には77個買えば良いが、 リスクを考慮すると130個程度買えば良いであろうと言うことが読み取れます。

ここまでの参考資料等

ハンズオンではPythonを利用し、Pythonの確率プログラミング言語であるpymc3を利用しました。 pymc3を利用した参考書としては、Pythonによるベイズ統計モデリングが参考になるかと思います。 こちらは理論的な解説も載っているので、まずこちらの書籍を利用して触りながらベイズ統計を理解すると良いかもしれません。

ベイズ統計の実践的参考書としてはPythonで体験するベイズ推論もあり、 こちらは事例が豊富で参考になるシーンは多いかと思います。 しかし、こちらの書籍ではpymc2を利用しているため、コードの記述方法を多少読み替える必要があります。

【トップに戻る】

終わりに

実は、当初はモデリング対象を2つ用意していたのですが、 「どう考えても2時間では収まらない」という助言をもらったので、 今回はエンゼルの含有率の推定のみを扱いました。 実際、2時間のセミナーではこのボリュームでちょうど良かったです。

せっかく作ったし、また、二項分布のパラメータ推定の問題だけでは現実問題をカバーしきれないので、 第2回も開催します。 第1回に来れなかった方も是非参加いただけたらと思います。

ml-for-experts.connpass.com

【トップに戻る】

参考文献

  1. 統計学入門

    統計学入門 (基礎統計学?)

    統計学入門 (基礎統計学?)

    有名な統計学の入門書。かっちり書いてあるので、統計学を学ぶにはすごく良い。

  2. 道具としてのベイズ統計

    道具としてのベイズ統計

    道具としてのベイズ統計

    とりあえず使ってみてから理論的なことを勉強しようという場合にはちょうど良いかも。 初学者向け。

  3. その問題、数理モデルが解決します

    その問題、数理モデルが解決します

    その問題、数理モデルが解決します

    モデリングの考え方が物語として(事例ベースで)書かれている。 とても理解しやすいので、モデリングとは何かを知りたい場合におすすめ。

  4. 異端の統計学 ベイズ

    異端の統計学 ベイズ

    異端の統計学 ベイズ

    どのような場面でベイズ統計が使われてきたのか、歴史的な背景などを記した読み物。 ベイズを扱うか扱わないかに関わらず、是非一読してほしいオススメの書籍。 読めばベイズ推定を利用したくなると思います。

  5. Pythonによるベイズ統計モデリング

    Pythonによるベイズ統計モデリング: PyMCでのデータ分析実践ガイド

    Pythonによるベイズ統計モデリング: PyMCでのデータ分析実践ガイド

    pymc3を使った入門書。 理論面も多少書かれており、こちらで手を動かしながら学習するのが良いと思う。

  6. Pythonで体験するベイズ推論

    Pythonで体験するベイズ推論 PyMCによるMCMC入門

    Pythonで体験するベイズ推論 PyMCによるMCMC入門

    pymcを利用した事例ベースの参考書。 事例が豊富で参考になるシーンは出てくるかもしれないが、階層モデルについては記載がない。 また、ptmc2なので、pymc3と記法が少し違うので注意。

【トップに戻る】

広告

Amazonの欲しいものリスト作ってみました。 チョコボールのカンパ募集中です。
チョコボールをカンパする

森永製菓 チョコボール<ピーナッツ> 28g×20箱

森永製菓 チョコボール<ピーナッツ> 28g×20箱

【トップに戻る】

*1:クラス分類や回帰(予測)など分析結果を実際に使う場面

*2:単層パーセプトロン、つまり、線形判別モデルです。

*3:Introduction/introduction.ipynb

*4:エンゼルはランダムに発生し、試行ごとに独立であるとの仮定

*5:特に、異常率のようにクラス毎のデータにばらつきがある場合は特に

*6:階層モデルなど