StatModeling Memorandum

StatModeling Memorandum

StanとRとPythonでベイズ統計モデリングします. たまに書評.

『Pythonで体験するベイズ推論 ―PyMCによるMCMC入門―』の書評

特長

Pythonユーザが待ちに待ったPythonによるMCMC本ではないでしょうか。原著タイトルが『Bayesian Methods for Hackers』だけあって、プログラマ・エンジニア向きだと思います。数式はびっくりするほど出てこない代わりに、Pythonコードは非常にたくさんでてきます。そしてPyMCの使い方が基礎から説明してあって丁寧です。自分でコーディングする際は原著のGitHubリポジトリを活用しましょう(なんとStarが10000個を超えてる!)。

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

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

  • 作者: キャメロン・デビッドソン=ピロン,玉木徹
  • 出版社/メーカー: 森北出版
  • 発売日: 2017/04/06
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る
購入を迷っている人の一番の心配は、本書のPyMCのバージョンが1つ前のPyMC2であることだと思います。しかし、そこは気にせず、まずは安定でドキュメントも多いPyMC2で勉強したらいいと思います。なぜなら、MCMCを使ったモデリングに慣れていない人のボトルネックは、現象を数式やコードに落とすモデル化という営みそのものに慣れていないことだからです。モデル化に慣れてPyMC2に慣れたら、PyMC3に移行するのはエンジニアの方なら大して時間かからないでしょう。僕自身、BUGS言語(WinBUGS, JAGS)に慣れてからStanに移行しましたが、おおよそ1週間で移行できました。迷わずPyMC2でモデリングライフを開始したらいいと思います。なお、原著のGitHubリポジトリにはPyMC3のコードも含まれています。

ちなみに2015年10月刊行の岩波データサイエンス Vol.1では、渡辺さんの頑張りのおかげでPyMC3の解説(20ページ程度)になっております。ご参考までに。

本書で最高だった点

5章です。秀逸すぎる。この章では事後分布と損失関数を組み合わせて意思決定する、いわゆるベイズ決定を行います。著者の金融分野における経験が生かされていて、さまざまな損失関数が出てきて有益情報がいっぱいです。以下では例を挙げますが、この他にも多数あります。詳しくは本を読んでください。

政治評論家向きの損失関数

 L(\theta, \hat{\theta})=\frac{|\theta - \hat{\theta}|}{\theta (1 - \theta)}

ここで、 \theta \hat{\theta}はともに [0,1]の範囲です。真の値 \thetaが0,1に近い場合には、優柔不断(ハッキリ0/1で答えない)だと損失が大きくなるような損失関数になっているとのことです。

株価の予測における下振れリスクを表す損失関数

下振れリスクとは「符号の異なる間違った方向に大きく予測すること」で、上振れリスクは「正しい方向に大きく予測すること」。下振れリスクの方が避けたいので、符号をまたいだところから損失がぐっと増えるような非対称な関数形になっているとのことです。図5.5(p.158)参照。

その他にも良かった点

  • ベイズの定理や大数の法則などの基礎となる理論も独特の切り口で扱っていて勉強になりました。
  • 頻繁に出てくる例題が軽妙でよく練られていて面白いです。例を挙げます。
    • ベイズの定理の説明で、農村における性格がこまかい人が将来司書になるか農家になるか問題。
    • 導入の1章において、著者に送られてきたメッセージの数の日次データに対する変化点検出。
    • Kaggleのダークマターハローの座標を予測する問題。銀河のプロットも面白い!
  • 事前分布の選び方で、統計の知識が全くない人から信念を聞き出して分布にする方法(ルーレット法)。

少し残念だった点

  • これはPythonのデータ解析・機械学習の本にありがちですが、可視化のコードの分量がやや多い気がします。matplotlibのせいかもしれません。仕方ないのかもしれません。
  • ベイズ推定の本領発揮とも言える、階層モデルなどのやや高度なモデルは扱っていないのは少し残念です。
  • MCMCの収束に関してやや議論が甘いと思います。他のMCMCソフトウェアの収束判定では \hat{R}(アールハット)がよく使われており、かなりよい指標だと思いますが、PyMCはなぜかchainを複数流して \hat{R}を求めることはしません。そして、書籍からもそこは抜けており、いくつかの解析で収束が怪しそうなものがあります。