第2回BUGS/Stan勉強会を開催しました

新年、あけましておめでとうございます。今年もよろしくお願い致します。
さて、昨年末のことで遅くなってしまい大変恐縮ですが、第2回BUGS/Stan勉強会を開催致しました。


BUGS/Stanって何?
前回のBlogの繰り返しではありますが、BUGS/Stanとは何ぞやということを説明しておくとベイズ推定による柔軟なモデリングを実現するためのDSL言語です。
これでモデルを記述すると、非エンジニアなデータ解析屋のみなさんでも(比較的)簡単にデータ分析が出来ます!
このあたりの技術は日本語で枯れていないのでこの勉強会を通して色々と技術を枯らして行きたいと思います。
特にベイズモデリングは恣意性が高く、細かいテクニックと経験が必要なのでそういった悩みのあたりも共有できたらと思っています。


Togetterまとめ
xiangze750さんがTogetterで今回の勉強会に伴うつぶやきを纏めてくださっています。ありがとうございます。



1.「入門セッション(Stanチュートリアル2.0)」(発表者 @TeitoNakagawa)

最初は私の発表でしたが、初心者セッションです。特に前回と大きな変更点はないのですが、スライドに2点補足します。

  1. インストールについて・・・話題のStan2.0に関してですが、私の環境(Windows7、64bit)ではスムーズにインストール出来ました。普通にrstan1.Xをremove.packageで削除後、通常の手順で入れました。なお、聞いたところによるとMacでのPyStanのビルドに躓いている方が多いようです。こちらのITO Hriokiさんのblog記事が参考になると思います。
  2. 型変換について・・・質疑応答にありましたがStanではIntegerとRealの型変換ができません。この辺りがStanの使いづらさです。離散的な値などを多用するモデルではJAGS等の方がよいのかもしれません。


こちらのスライドは発表したものより古いです。Stan2.0やPyStanへの対応も含めて随時アップデートをかけていく予定です。


2.「とある病んだ院生の体内時計(サーカディアンリズム)」(発表者 @berobero11)


発表者コメント:睡眠時刻・起床時刻を扱った循環する変数の統計モデリングの話でした。
とある病んだ院生さんの593日間の記録を可視化した後にRStanの練習に使っています。
StanのHello Worldとも言える内容からvon Mises分布、そして累積時刻に変換して潜在変数のARモデルなどバリエーションに富む内容でした。
各変数の範囲が異なる場合に範囲を指定する方法が参考になると思います。
なお、データやStanコードはこちら(http://heartruptcy.blog.fc2.com/blog-entry-91.html)で公開されています。


berobero11さんの発表でした。とある大学院生の睡眠時間記録のデータに関してのモデリング例を4つほど、紹介して頂きました。
私にとっては珍しい(?)フォン・ミーゼス分布を使った例も出てきますが、後半の仮説検証的なモデリングになるにつれデータ前処理部そのものでのモデリングが増えるため、Stanでのモデリングテクニック⇒データ前処理テクニックということを教えられたような気がします。


最初のフォン・ミーゼス分布を使った時刻モデルから最後の時刻と時間のARを使った累積時刻のモデルへと昇華していく過程はデータ解析の仕事に就いた人が華々しい統計モデリングに挫折し、データ前処理の仕事に終始するようになり、みじめな気分を味わいながらも強く前向きに生きていく壮大な叙事詩、データ解析版のレ・ミゼラブルを見ているような気分にさせられます。
実際にはベイズ推定使おうが他の手法使おうが、前処理でほぼ決まります。このスライドはその泥臭い過程を初めて歩む方にとってのいいロールモデルになるのではないでしょうか。明るく前向きに前処理しましょう。


3.「PyStanで自然言語処理へ向けて」(発表者 @xianze750)


発表者コメント:Pystanで自然言語処理を行うにあたっての基礎的事実の紹介、特にLDAとノンパラメトリックなモデルに関する説明。


xianze750さんの発表でした。すみません、私の自然言語処理の知識が足らず途中までしか理解できませんでした。
発表の趣旨としては自然言語処理の階層Dirichletモデルに対してPyStan、JAGSで実装を試みるというものでした。
自然言語処理特有の離散的なデータの扱いはStanとは相性が悪いようです。Stanの今後の機能の改善が期待されます。


4.「『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた」(発表者 @berobero11)


発表者コメント:この世の中でありそうな売上の時系列データに対して、
いかにドメイン知識や経験を統計モデリングに組み入れるか、そして各パラメータがいかに簡単にMCMCサンプリングで推定できるかを示した発表になります。
Stanは時系列データに対して相性がよさそうとのことです。詳細(データ含む)はこちら(http://heartruptcy.blog.fc2.com/blog-entry-90.html)で公開されています。


またまた、berobero11さんの発表です。『予測にいかす統計モデリングの基本』の本に出てくる居酒屋の売上予測モデルをStanで実装してみた例です。
データおよびモデル共にberobero11さんの執念を感じるトレースっぷりです。
『予測にいかす統計モデリングの基本』は良書ですが、本にはコードが出てきません。
これを参考に本を読みながら、手元のデータをモデリングをするとマーケティング系の方には勉強になると思います。


5.「尤度フリーMCMCの紹介」(発表者 @kos59215)


発表者コメント:Stan を使えば尤度を勝手に処理してくれますが,複雑な系では尤度を自分で計算してやる必要があります。
今回は尤度が不要な推定手法の ABC を紹介しました。尤度がいらない手法なのに, Stan で使うために尤度の話ばかりになって混乱させてすみません。


kos59215さんの発表でした。ABCという手法により尤度関数の形が分からない状況でもベイズ推定(?)が出来るというお話でした。
ABCはイメージ的には尤度関数の代わりに、恣意的にモデリングしたシュミレーションと重みづけの調整可能なデータの類似度を用いたウェイトの2層をかませることによりパラメータを推定するベイズ推定の手法のようです。
最初の感想としては「これさらに恣意的だけどやって大丈夫なのか?」という感じがしました。
ただ、普段データの自明に持つ関係性がモデルに組み込まれていないことがあり、その関係性だけでも組み込めればと思うことがあります。
そういった状況において、うまくささる状況ではすごく活躍する可能性を秘めた手法なんだと思いました。
こういった手法を生態学という分野の方から教えて頂けるのはありがたいです。
xianze750さんの発表にもありましたが「生態学すごい」です。


補足ですが、Stan2.0では対数尤度の記載の仕方が大きく変わっており、スライドにもある通りlp__からvoid型のincrement_log_probという関数に変わっています。Stan1.Xから使用している方は一度、Stan2.0のマニュアルの23.2章を参照されると良いかと思います。


感想
会場は今回もドリコムさんの100人くらいは入る広い会場をお借りしました。ドリコムさんに感謝!!
参加者は全員で20名程度で、満員でした。主催者側が勉強会の内容に集中できるよう参加者は20人に限定して実施しています。


参加できなかった皆様、本当にすみません。


今回はアカデミック寄りの生態学系の研究者の方とマーケティング系の方が増えたかなという印象を持っています。
裾野が広がって参入障壁が減るといいのですが…


発表内容は今回も素人を寄せつけない、かなりディープな内容でした。


内容はかなりコアに見えますが、例えばberobero11さんの発表内容に関してベイズ推定を実務で応用していこうという初心者の方々には大変勉強となる内容です。
流し読みではなく、しっかり理解できるまでじっくり読むといいと思います。
学生の参加者の方もいらっしゃいましたが、上記の資料を踏み台(?)にして若い方々へ活用の輪が広がっていくと主催者としては感無量です。


次回予定
次回の予定ですが、恐縮ですが主催者側の都合により、スケジュールの決定が2月中旬くらいになりそうです。大変申し訳ありません。
3月か4月あたりの開催を目標にしていますのでよろしければみなさんのご参加、お待ちしております。


発表者募集しています
今回も、ほぼ前回と同じメンバーによる発表であったため、各方面からの発表を期待しています。
次回の発表を希望される方はTwitterで@TeitoNakagawaまで、ご連絡ください。


以上です。関係者の皆様、本当にありがとうございました。