SlideShare a Scribd company logo
1 of 21
Download to read offline
Copyright © 2019 Classi Corp. All Rights Reserved. 1
pymc3とpystanを比較してみた話
Classi株式会社 データAI部 小原
Copyright © 2019 Classi Corp. All Rights Reserved.
● 自己紹介
● pymc3/pystanを使おうと思ったきっかけ
● pymc3/pystanとは
○ 特徴
○ 使い方
○ 比較結果
● まとめ
アジェンダ
Copyright © 2019 Classi Corp. All Rights Reserved.3
◯ 高校への営業
◯ 学習支援アプリ開発
◯ 活用コンサルテーション
◯ プラットフォーム開発
◯ ネイティブアプリ開発
◯ 学校へのICT関連サポート
会社概要
ベネッセとソフトバンクのジョイントベンチャー
Copyright © 2019 Classi Corp. All Rights Reserved.
「Classi」は教育現場を支援する
クラウドサービス
• 国内No.1、全国の高校の
50%超が導入
• 利用者数83万人超
• 先生、生徒、保護者が繋がる
学習支援プラットフォーム
4
事業について
Copyright © 2019 Classi Corp. All Rights Reserved.
● 名前: 小原陽介(Twitter: @deerto_herajika)
● 所属: Classi株式会社 データAI部
○ 学校教育現場をICT活用で支援する会社です
● 職業: DataScientist
○ 元データ整備職人
○ 普段の業務
■ 学習データに関する分析・モデル開発/社内BI環境の構築/ etc
○ 使用している言語・ツール: Python(Jupyter Lab)/GCP/Tableau
■ 一昨年R→Pythonにチェンジしました
自己紹介
Copyright © 2019 Classi Corp. All Rights Reserved.
pymc3・pystanを触ろうと思ったきっかけ
● 業務でベイズ推定を行う必要が発生した
● 既存のパッケージでサクッと事後分布を取得したい
○ pymc3とpystanが良さそう
■ 両方試してみよう
● pymc3とpystanとは: MCMC法(マルコフ連鎖モンテカルロ法)を行うパッケージ
○ MCMC法: マルコフ連鎖に則りサンプリングを行うことで、解析的に解くことので
きない計算や分布を求める方法
Copyright © 2019 Classi Corp. All Rights Reserved.
pymc3の特徴
● 環境
○ python: >=3.5.4
○ Theano:>=3.3 and < 3.6
○ 3.6までは開発テスト済み
■ →3.5.4の環境で使用
● 使い方
○ with pm.model()でモデルを定義
し、確率分布を記述
Copyright © 2019 Classi Corp. All Rights Reserved.
pstanの特徴
● 環境
○ python: >=3.3
● 特徴
○ .stan(C++の確率的プログラミン
グ言語)でモデルを定義
○ 下記の3構造で構成される
■ data: 渡すデータ(dict)
■ parameters: 推定するパラ
メータ
■ model: モデル(確率分布)
Copyright © 2019 Classi Corp. All Rights Reserved.
使い方
● 流れ: モデルを記述→サンプリングを「iteration × chain」回実行→結果を取得
○ 推定結果のsummaryとplotが取得できる
summary
plot
Copyright © 2019 Classi Corp. All Rights Reserved.
使い方
● 「モデルを記述→サンプリング→結果を取得」の流れ
○ summary: 推定量のパラメータ毎に統計量が算出される
Copyright © 2019 Classi Corp. All Rights Reserved.
使い方
● 「モデルを記述→サンプリング→結果を取得」の流れ
○ summary: 推定量のパラメータ毎に統計量が算出される
平均・分散 収束結果
(r_hat < 1.1が目安)
Copyright © 2019 Classi Corp. All Rights Reserved.
使い方
● 「モデルを記述→サンプリング→結果を取得」の流れ
○ summary: 推定量のパラメータ毎に統計量が算出される
Copyright © 2019 Classi Corp. All Rights Reserved.
使い方
● 「モデルを記述→サンプリング→結果を取得」の流れ
○ summary: 推定量のパラメータ毎に統計量が算出される
カーネル密度推定結果
(色はchain)
サンプリング段階毎の
サンプル値
(ある近辺を蛇行してい
ればOK)
Copyright © 2019 Classi Corp. All Rights Reserved.
使用したシチュエーション
● 8つのカテゴリに所属する試行をN回行う
場合の確率を推定したい
● 事前情報も(後々)反映させたい
● データの確からしさも推定結果の表現に
入れたい
○ 下記のベイズモデリング
■ 尤度:多項分布
■ 事前/事後分布:ディリクレ分布
○ (まとめに繋がるが)そもそもMCMCす
る必要なかった。。。
ややこしい離散分布に関するまとめより
引用
Copyright © 2019 Classi Corp. All Rights Reserved.
使用したシチュエーション
● pymc3でMCMCの実行
○ pymc3の文法上、尤度(y)は 1
レコード文の尤度を記述する
● カテゴリ毎の確率を算出
○ 点推定ではなく、曖昧さを 定量
的に表現できる
Copyright © 2019 Classi Corp. All Rights Reserved.
pymc3とpystanの比較
● (社内データを出せないの
で)sklearn.datasets.load_wineに対し
て重回帰モデルを使って比較
● 相関の高い2つの変数を選択し、 下
記のモデルを定義
wine_dataのインポート
相関表
モデル式
Copyright © 2019 Classi Corp. All Rights Reserved.
pymc3とpystanの比較 ~pymc3~
カーネル密度推定結果 inputデータの定義
モデルの定義 説明変数の次元が2なのでshapeを入力
Copyright © 2019 Classi Corp. All Rights Reserved.
pymc3とpystanの比較 ~pystan~
データ・モデルの読み込み・サンプリング
モデルの定義(.stan)
カーネル密度推定結果
Copyright © 2019 Classi Corp. All Rights Reserved.
pymc3とpystanの比較
● 推定結果はだいたい同じ(ともに収束)
● pymc3の方が実行時間がかかったが、pythonっぽく書ける事はメリット
pymc3
pystan
Copyright © 2019 Classi Corp. All Rights Reserved.
まとめ
● pymc3とpystan(あくまで個人の感想です)
○ 実行スピード: pymc3 < pystan
○ 書きやすさ: pymc3 > pystan
○ ドキュメントの充実度: pymc3 < pystan
○ モデルの表現度: pymc3 < pystan (?)
■ pymc3で使っているtheanoの開発が終了しているのも気になるところ
● 業務のベイズ推定はそもそも解析的に解けるパターンだった
○ (ディリクレ分布 × 多項分布 = ディリクレ分布)
○ まずは解析的に解けるかどうか考える癖をつける
■ 解析的に解けない / 階層モデルを作る際に初めて選択肢に入れる
Copyright © 2019 Classi Corp. All Rights Reserved.
We are Hiring!
Classiでは一緒に働く仲間を募集しています
● Pythonエンジニア/データサイエンティスト/データエンジニア/…
● 詳細は採用ページにて https://hrmos.co/pages/classi

More Related Content

What's hot

グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
Kawamoto_Kazuhiko
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
Shuyo Nakatani
 
状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38
horihorio
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
 

What's hot (20)

階層ベイズとWAIC
階層ベイズとWAIC階層ベイズとWAIC
階層ベイズとWAIC
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布について
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
 
WAICとWBICのご紹介
WAICとWBICのご紹介WAICとWBICのご紹介
WAICとWBICのご紹介
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
 
合成変量とアンサンブル:回帰森と加法モデルの要点
合成変量とアンサンブル:回帰森と加法モデルの要点合成変量とアンサンブル:回帰森と加法モデルの要点
合成変量とアンサンブル:回帰森と加法モデルの要点
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
 
最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向
 
Stanコードの書き方 中級編
Stanコードの書き方 中級編Stanコードの書き方 中級編
Stanコードの書き方 中級編
 
ノンパラベイズ入門の入門
ノンパラベイズ入門の入門ノンパラベイズ入門の入門
ノンパラベイズ入門の入門
 
[DL輪読会]Deep Learning 第15章 表現学習
[DL輪読会]Deep Learning 第15章 表現学習[DL輪読会]Deep Learning 第15章 表現学習
[DL輪読会]Deep Learning 第15章 表現学習
 
「世界モデル」と関連研究について
「世界モデル」と関連研究について「世界モデル」と関連研究について
「世界モデル」と関連研究について
 
2 3.GLMの基礎
2 3.GLMの基礎2 3.GLMの基礎
2 3.GLMの基礎
 
[DL輪読会]ドメイン転移と不変表現に関するサーベイ
[DL輪読会]ドメイン転移と不変表現に関するサーベイ[DL輪読会]ドメイン転移と不変表現に関するサーベイ
[DL輪読会]ドメイン転移と不変表現に関するサーベイ
 
明治大学講演資料「機械学習と自動ハイパーパラメタ最適化」 佐野正太郎
明治大学講演資料「機械学習と自動ハイパーパラメタ最適化」  佐野正太郎明治大学講演資料「機械学習と自動ハイパーパラメタ最適化」  佐野正太郎
明治大学講演資料「機械学習と自動ハイパーパラメタ最適化」 佐野正太郎
 
状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38
 
深層生成モデルと世界モデル
深層生成モデルと世界モデル深層生成モデルと世界モデル
深層生成モデルと世界モデル
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
 

Similar to pymcとpystanでベイズ推定してみた話

Similar to pymcとpystanでベイズ推定してみた話 (20)

if-up 2019 | A2. クラウドにつながり始めたハードウェア
if-up 2019 | A2. クラウドにつながり始めたハードウェアif-up 2019 | A2. クラウドにつながり始めたハードウェア
if-up 2019 | A2. クラウドにつながり始めたハードウェア
 
タクシー×AIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて
タクシー×AIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについてタクシー×AIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて
タクシー×AIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて
 
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
 
JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活
 
Icml2018読み会_overview&GANs
Icml2018読み会_overview&GANsIcml2018読み会_overview&GANs
Icml2018読み会_overview&GANs
 
ディープラーニングによるユーザーの行動予測
ディープラーニングによるユーザーの行動予測ディープラーニングによるユーザーの行動予測
ディープラーニングによるユーザーの行動予測
 
エスキュービズムの考えるDXの取り組み
エスキュービズムの考えるDXの取り組みエスキュービズムの考えるDXの取り組み
エスキュービズムの考えるDXの取り組み
 
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
 
Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
 
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon PinpointAmazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
 
Batch Reinforcement Learning
Batch Reinforcement LearningBatch Reinforcement Learning
Batch Reinforcement Learning
 
<インフラ管理者向け>チームでのAI開発を支援するAI開発プラットフォームKAMONOHASHI
<インフラ管理者向け>チームでのAI開発を支援するAI開発プラットフォームKAMONOHASHI<インフラ管理者向け>チームでのAI開発を支援するAI開発プラットフォームKAMONOHASHI
<インフラ管理者向け>チームでのAI開発を支援するAI開発プラットフォームKAMONOHASHI
 
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
 
CData general proposal
CData general proposalCData general proposal
CData general proposal
 
時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証
 
入社半年での開発ストーリー - 千人規模の顔認証受付サービスを 1ヶ月で作った話 -
入社半年での開発ストーリー - 千人規模の顔認証受付サービスを 1ヶ月で作った話 -入社半年での開発ストーリー - 千人規模の顔認証受付サービスを 1ヶ月で作った話 -
入社半年での開発ストーリー - 千人規模の顔認証受付サービスを 1ヶ月で作った話 -
 
ポストAiを見据えた日本企業の経営戦略 加藤整 20171020_v1.2
ポストAiを見据えた日本企業の経営戦略 加藤整 20171020_v1.2ポストAiを見据えた日本企業の経営戦略 加藤整 20171020_v1.2
ポストAiを見据えた日本企業の経営戦略 加藤整 20171020_v1.2
 
『MobageのAnalytics活用したサービス開発』 - データマイニングCROSS2014 #CROSS2014
『MobageのAnalytics活用したサービス開発』 - データマイニングCROSS2014 #CROSS2014『MobageのAnalytics活用したサービス開発』 - データマイニングCROSS2014 #CROSS2014
『MobageのAnalytics活用したサービス開発』 - データマイニングCROSS2014 #CROSS2014
 
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
 
Tokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaTokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by Iida
 

pymcとpystanでベイズ推定してみた話

  • 1. Copyright © 2019 Classi Corp. All Rights Reserved. 1 pymc3とpystanを比較してみた話 Classi株式会社 データAI部 小原
  • 2. Copyright © 2019 Classi Corp. All Rights Reserved. ● 自己紹介 ● pymc3/pystanを使おうと思ったきっかけ ● pymc3/pystanとは ○ 特徴 ○ 使い方 ○ 比較結果 ● まとめ アジェンダ
  • 3. Copyright © 2019 Classi Corp. All Rights Reserved.3 ◯ 高校への営業 ◯ 学習支援アプリ開発 ◯ 活用コンサルテーション ◯ プラットフォーム開発 ◯ ネイティブアプリ開発 ◯ 学校へのICT関連サポート 会社概要 ベネッセとソフトバンクのジョイントベンチャー
  • 4. Copyright © 2019 Classi Corp. All Rights Reserved. 「Classi」は教育現場を支援する クラウドサービス • 国内No.1、全国の高校の 50%超が導入 • 利用者数83万人超 • 先生、生徒、保護者が繋がる 学習支援プラットフォーム 4 事業について
  • 5. Copyright © 2019 Classi Corp. All Rights Reserved. ● 名前: 小原陽介(Twitter: @deerto_herajika) ● 所属: Classi株式会社 データAI部 ○ 学校教育現場をICT活用で支援する会社です ● 職業: DataScientist ○ 元データ整備職人 ○ 普段の業務 ■ 学習データに関する分析・モデル開発/社内BI環境の構築/ etc ○ 使用している言語・ツール: Python(Jupyter Lab)/GCP/Tableau ■ 一昨年R→Pythonにチェンジしました 自己紹介
  • 6. Copyright © 2019 Classi Corp. All Rights Reserved. pymc3・pystanを触ろうと思ったきっかけ ● 業務でベイズ推定を行う必要が発生した ● 既存のパッケージでサクッと事後分布を取得したい ○ pymc3とpystanが良さそう ■ 両方試してみよう ● pymc3とpystanとは: MCMC法(マルコフ連鎖モンテカルロ法)を行うパッケージ ○ MCMC法: マルコフ連鎖に則りサンプリングを行うことで、解析的に解くことので きない計算や分布を求める方法
  • 7. Copyright © 2019 Classi Corp. All Rights Reserved. pymc3の特徴 ● 環境 ○ python: >=3.5.4 ○ Theano:>=3.3 and < 3.6 ○ 3.6までは開発テスト済み ■ →3.5.4の環境で使用 ● 使い方 ○ with pm.model()でモデルを定義 し、確率分布を記述
  • 8. Copyright © 2019 Classi Corp. All Rights Reserved. pstanの特徴 ● 環境 ○ python: >=3.3 ● 特徴 ○ .stan(C++の確率的プログラミン グ言語)でモデルを定義 ○ 下記の3構造で構成される ■ data: 渡すデータ(dict) ■ parameters: 推定するパラ メータ ■ model: モデル(確率分布)
  • 9. Copyright © 2019 Classi Corp. All Rights Reserved. 使い方 ● 流れ: モデルを記述→サンプリングを「iteration × chain」回実行→結果を取得 ○ 推定結果のsummaryとplotが取得できる summary plot
  • 10. Copyright © 2019 Classi Corp. All Rights Reserved. 使い方 ● 「モデルを記述→サンプリング→結果を取得」の流れ ○ summary: 推定量のパラメータ毎に統計量が算出される
  • 11. Copyright © 2019 Classi Corp. All Rights Reserved. 使い方 ● 「モデルを記述→サンプリング→結果を取得」の流れ ○ summary: 推定量のパラメータ毎に統計量が算出される 平均・分散 収束結果 (r_hat < 1.1が目安)
  • 12. Copyright © 2019 Classi Corp. All Rights Reserved. 使い方 ● 「モデルを記述→サンプリング→結果を取得」の流れ ○ summary: 推定量のパラメータ毎に統計量が算出される
  • 13. Copyright © 2019 Classi Corp. All Rights Reserved. 使い方 ● 「モデルを記述→サンプリング→結果を取得」の流れ ○ summary: 推定量のパラメータ毎に統計量が算出される カーネル密度推定結果 (色はchain) サンプリング段階毎の サンプル値 (ある近辺を蛇行してい ればOK)
  • 14. Copyright © 2019 Classi Corp. All Rights Reserved. 使用したシチュエーション ● 8つのカテゴリに所属する試行をN回行う 場合の確率を推定したい ● 事前情報も(後々)反映させたい ● データの確からしさも推定結果の表現に 入れたい ○ 下記のベイズモデリング ■ 尤度:多項分布 ■ 事前/事後分布:ディリクレ分布 ○ (まとめに繋がるが)そもそもMCMCす る必要なかった。。。 ややこしい離散分布に関するまとめより 引用
  • 15. Copyright © 2019 Classi Corp. All Rights Reserved. 使用したシチュエーション ● pymc3でMCMCの実行 ○ pymc3の文法上、尤度(y)は 1 レコード文の尤度を記述する ● カテゴリ毎の確率を算出 ○ 点推定ではなく、曖昧さを 定量 的に表現できる
  • 16. Copyright © 2019 Classi Corp. All Rights Reserved. pymc3とpystanの比較 ● (社内データを出せないの で)sklearn.datasets.load_wineに対し て重回帰モデルを使って比較 ● 相関の高い2つの変数を選択し、 下 記のモデルを定義 wine_dataのインポート 相関表 モデル式
  • 17. Copyright © 2019 Classi Corp. All Rights Reserved. pymc3とpystanの比較 ~pymc3~ カーネル密度推定結果 inputデータの定義 モデルの定義 説明変数の次元が2なのでshapeを入力
  • 18. Copyright © 2019 Classi Corp. All Rights Reserved. pymc3とpystanの比較 ~pystan~ データ・モデルの読み込み・サンプリング モデルの定義(.stan) カーネル密度推定結果
  • 19. Copyright © 2019 Classi Corp. All Rights Reserved. pymc3とpystanの比較 ● 推定結果はだいたい同じ(ともに収束) ● pymc3の方が実行時間がかかったが、pythonっぽく書ける事はメリット pymc3 pystan
  • 20. Copyright © 2019 Classi Corp. All Rights Reserved. まとめ ● pymc3とpystan(あくまで個人の感想です) ○ 実行スピード: pymc3 < pystan ○ 書きやすさ: pymc3 > pystan ○ ドキュメントの充実度: pymc3 < pystan ○ モデルの表現度: pymc3 < pystan (?) ■ pymc3で使っているtheanoの開発が終了しているのも気になるところ ● 業務のベイズ推定はそもそも解析的に解けるパターンだった ○ (ディリクレ分布 × 多項分布 = ディリクレ分布) ○ まずは解析的に解けるかどうか考える癖をつける ■ 解析的に解けない / 階層モデルを作る際に初めて選択肢に入れる
  • 21. Copyright © 2019 Classi Corp. All Rights Reserved. We are Hiring! Classiでは一緒に働く仲間を募集しています ● Pythonエンジニア/データサイエンティスト/データエンジニア/… ● 詳細は採用ページにて https://hrmos.co/pages/classi