文系エンジニアが0からベイズ統計モデリングを学習するときに読むべき資料まとめ

# TL;DR
「Qiitaで炎上するタイトルのつけ方」というテーマを書くのに失敗したので、諦めて最近学習している「ベイズ統計モデリング」に関するメモや書籍をまとめた。

記事のタイトル通り、文系エンジニアが数学知識0からベイズ統計モデリングを勉強するときに読んだ方がいい本や資料を網羅したつもりです。

もしオススメ資料とかあったら追記するので教えてもらえると嬉しいんだな〜(｀・ω・´)


## 前提条件
* 中学生レベルの数学知識
* Pythonが少しでもわかるエンジニア力
* （Rがわかるともっと捗る）

## ポイント

* 書くこと
	* ざっくりな説明とコメント
	* オススメ資料
* 書かないこと
	* 正確な説明
	* 細かい説明


# そもそも（ベイズ）統計モデリングとは？
すでにあるデータを使って未知の値を推定したりするやつです。ざっくり言うと統計と機械学習を合体して最強なやつです（にこり）

詳しくは [StanとRでベイズ統計モデリング (Wonderful R)](https://amzn.to/2Ja56sJ) の最初の方読んでください(｀・ω・´)

以下ブログでも例題を含めて少し説明しています。

* ブログ: [統計モデリング - pythonで『StanとRでベイズ統計モデリング』](https://yukinagae.hatenablog.com/entry/2018/11/02/120441)
* ブログ: [Chapter 1 統計モデリングとStanの概要 - pythonで『StanとRでベイズ統計モデリング』](https://yukinagae.hatenablog.com/entry/2018/11/05/083311)


# 読者タイプ別最初に読むべき本
## 具体的に何ができるか知りたい（エンジニア向け）

* 書籍: [Pythonで体験するベイズ推論 PyMCによるMCMC入門](https://amzn.to/2VRZTvv)

ほぼ数学抜きで具体的に説明している。Pythonでの実例が多いので、具体的にどういうことができるのかイメージしやすい。

以下、英語版はgithubで公開されているので、英語が読める人はこっちの方でもいいかも（と言いつつもやはり日本語版がオススメです）

* [GitHub - CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers)](https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers)


## 全体像や理論を理解したい（理論派向け）

* 書籍: [データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC](https://amzn.to/2Jw5Ozy)

ちまたでは「みどり本」と呼ばれる緑色の本。たぶん全体的なプロセスや理論をまず理解したい人にとっては一番わかりやすいと思います。ある程度の数学知識（確率や統計など）を前提としているので、わからないところは後述の本を参照するとよいかも。コードは基本的にRのため、Rがわかると捗る(｀・ω・´)


# カテゴリ別おすすめ資料

# 数学
この4冊読んでおけば必要な知識はすべて身につくはず。特に最初の2冊がよい。

* 書籍: [プログラミングのための確率統計](https://amzn.to/2VuAOqY): 確率ならこれ
* 書籍: [プログラミングのための線形代数](https://amzn.to/2Jw5WPy): 行列ならこれ
* 書籍: [数学ガールの秘密ノート/微分を追いかけて](https://amzn.to/2JxqZ4n): 癒やされたいときに読む本
* 書籍: [数学ガールの秘密ノート/積分を見つめて](https://amzn.to/2vQz8J6): 癒やされたいときに読む本


# 統計モデリング
もう少し実践的な（ベイズ）統計モデリングをやりたいならこの本がオススメ。

* 書籍: [StanとRでベイズ統計モデリング (Wonderful R)](https://amzn.to/2VYvOKH)

補足資料としては以下をさらっと読んでおくとよいかも。

* ブログ: [「統計モデリングとは何なのか」をいま一度整理してみる](https://tjo.hatenablog.com/entry/2014/06/05/201115)
* 質問: [What exactly is statistical modeling? - Quora](https://www.quora.com/What-exactly-is-statistical-modeling)
* 質問: [What Is The Difference Between Machine Learning & Statistical Modeling](https://www.analyticsvidhya.com/blog/2015/07/difference-machine-learning-statistical-modeling/)


# MCMC
ベイズ統計モデリングのプロセスで重要なMCMCというサンプリング手法の説明。適当にまとめているので、後で修正したい(｀・ω・´)

* ブログ: [MCMC sampling for dummies](http://twiecki.github.io/blog/2015/11/10/mcmc-sampling/): Pythonのコードで説明している。動くぞ(｀・ω・´)
* ブログ: [可視化で理解するマルコフ連鎖モンテカルロ法(MCMC) - ほくそ笑む](http://hoxo-m.hatenablog.com/entry/20140911/p1): 可視化で説明している。動くぞ(｀・ω・´)
* [Markov Chain Monte Carlo (MCMC) — Computational Statistics in Python 0.1 documentation](https://people.duke.edu/~ccc14/sta-663/MCMC.html)
* [MCMC講義（伊庭幸人） 難易度★★ - YouTube](https://www.youtube.com/watch?v=-H28H1unn0M)
* [Monte Carlo theory, methods and examples](http://statweb.stanford.edu/~owen/mc/)
* [Markov Chain Monte Carlo for Bayesian Inference - The Metropolis Algorithm | QuantStart](https://www.quantstart.com/articles/Markov-Chain-Monte-Carlo-for-Bayesian-Inference-The-Metropolis-Algorithm)
* [Markov Chain Monte Carlo in Python – Towards Data Science](https://towardsdatascience.com/markov-chain-monte-carlo-in-python-44f7e609be98)

# ベイズ関連
* PDF: [Think Bayes – Green Tea Press](http://greenteapress.com/wp/think-bayes/): ベイズを理解するのに必要な基礎知識を説明してくれる。日本語版もあるが、訳がよくないので英語版をオススメしている


後でまとめる(｀・ω・´)

* 書籍: [Pythonによるベイズ統計モデリング: PyMCでのデータ分析実践ガイド](https://amzn.to/2vNyiwV): 読んでないけど最近でた翻訳本
* ブログ: [作って遊ぶ機械学習。](http://machine-learning.hatenablog.com): いつも読んでます(｀・ω・´)
* 書籍: [機械学習スタートアップシリーズ ベイズ推論による機械学習入門](https://amzn.to/2VZqVkq): 「作って遊ぶ機械学習。」と同じ人。「入門」というのは嘘だと思ってる。
* 書籍: [岩波データサイエンス Vol.1](https://amzn.to/2VUT5NC): 買って読んだ
* 書籍: [基礎からわかる時系列分析 ―Rで実践するカルマンフィルタ・MCMC・粒子フィルター](https://amzn.to/2Hda3i4): 買ったけどまだ読んでない
* 書籍: [ベイズ統計モデリング: R, JAGS, Stanによるチュートリアル](https://amzn.to/2vOKOvQ): 読んでないけど有名な本
* 書籍: [パターン認識と機械学習 上](https://amzn.to/2HbukV4): 読んでないけど有名な本
* 書籍: [ベイズ統計の理論と方法](https://amzn.to/2VsZr7x): 読んでないけど良さそうな本
* ブログ: [従来の推定法とベイズ推定法の違い | Sunny side up!](http://norimune.net/708)


# オンラインコース
動画で勉強するのが好きな人にはやっぱりCourseraがオススメ。他のコースでもいいとは思います。

* [Probabilistic Graphical Models  | Coursera](https://www.coursera.org/specializations/probabilistic-graphical-models): 長すぎて途中でやめてしまった(｀・ω・´)


# OSSライブラリ
自分がメインでPythonを使ってるので、現状はPythonのライブラリだけまとめました。

本当はRやStanについてもまとめたいが自分があまりわかってないので必要であれば追記する(｀・ω・´)

## Python

* [GitHub - pymc-devs/pymc3](https://github.com/pymc-devs/pymc3): 現状とりあえずこれ使っとけばいいと思ってます
* [GitHub - pymc-devs/pymc4](https://github.com/pymc-devs/pymc4): alpha版なのでまだ使っちゃダメ乁( ˙ ω˙乁)
* [GitHub - tensorflow/probability: Probabilistic reasoning and statistical analysis in TensorFlow](https://github.com/tensorflow/probability): 天下のgoogleだけど書くのが結構辛いんだな〜
* [GitHub - uber/pyro: Deep universal probabilistic programming with Python and PyTorch](https://github.com/uber/pyro): uber製で書きやすそうなんだな〜