これまで,検索閲覧時間やページ閲覧回数などの行動データの統計モデリングを行うときは,メインのプログラミング言語であるPythonではなくRを使っていた.具体的にはbrmsというパッケージを利用していた.Rとbrmsを使えば,確率モデルを数式チックに記述できる.また結果を可視化し分析するパッケージ群が豊富にあるということで,Pythonを手放してまでRを使っていた.
ところが,Rだと計算が遅い.Rでは並列化やGPU利用に少々難がある.何より,使い慣れたPythonで前処理から分析を行いたい.これら問題を解決するためのツールとして,Pythonでは確率的プログラミングのライブラリとしてTensorFlow ProbabilityやPyroが公開されている.しかし,これらはTensorの扱いに慣れていない軟弱な僕にはつらい.
諦めていたところ,最近NumPyroというライブラリがあることを知った.なんとTensorではなくnumpyのarray形式でデータを扱えるというではないか.開発もPyroと同じUber AI Labsによって行われているので,メンテナンスもしっかりしてそう.ということで,NumPyroの使い方を勉強してみることにした.
題材として,以前から気になっていた@muijpさんの「野球選手が本塁打を一番打てるのは何歳のときなのかPythonとStanで求める」をNumPyroで実装してみることにした.
以下は,NumPyroでの統計モデリングの実装方法に関する記事である.どうぞご笑覧ください(Github Gistコードへの直リンク).
4 Replies