SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデルlogics-of-blue
 
第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)Yoshitake Takebayashi
 
幾何を使った統計のはなし
幾何を使った統計のはなし幾何を使った統計のはなし
幾何を使った統計のはなしToru Imai
 
因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説Shiga University, RIKEN
 
自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介Taku Yoshioka
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定Akira Masuda
 
【解説】 一般逆行列
【解説】 一般逆行列【解説】 一般逆行列
【解説】 一般逆行列Kenjiro Sugimoto
 
『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会takehikoihayashi
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布についてHiroshi Shimizu
 
Rで学ぶ回帰分析と単位根検定
Rで学ぶ回帰分析と単位根検定Rで学ぶ回帰分析と単位根検定
Rで学ぶ回帰分析と単位根検定Nagi Teramo
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)Takao Yamanaka
 
2 4.devianceと尤度比検定
2 4.devianceと尤度比検定2 4.devianceと尤度比検定
2 4.devianceと尤度比検定logics-of-blue
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類Shintaro Fukushima
 
最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門joisino
 
因果推論の奥へ: "What works" meets "why it works"
因果推論の奥へ: "What works" meets "why it works"因果推論の奥へ: "What works" meets "why it works"
因果推論の奥へ: "What works" meets "why it works"takehikoihayashi
 
Bayesian Neural Networks : Survey
Bayesian Neural Networks : SurveyBayesian Neural Networks : Survey
Bayesian Neural Networks : Surveytmtm otm
 

Tendances (20)

2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル
 
Stan超初心者入門
Stan超初心者入門Stan超初心者入門
Stan超初心者入門
 
MICの解説
MICの解説MICの解説
MICの解説
 
第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)第4回DARM勉強会 (構造方程式モデリング)
第4回DARM勉強会 (構造方程式モデリング)
 
幾何を使った統計のはなし
幾何を使った統計のはなし幾何を使った統計のはなし
幾何を使った統計のはなし
 
因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説
 
自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介自動微分変分ベイズ法の紹介
自動微分変分ベイズ法の紹介
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定
 
【解説】 一般逆行列
【解説】 一般逆行列【解説】 一般逆行列
【解説】 一般逆行列
 
『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布について
 
Rで学ぶ回帰分析と単位根検定
Rで学ぶ回帰分析と単位根検定Rで学ぶ回帰分析と単位根検定
Rで学ぶ回帰分析と単位根検定
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 
2 4.devianceと尤度比検定
2 4.devianceと尤度比検定2 4.devianceと尤度比検定
2 4.devianceと尤度比検定
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
階層ベイズとWAIC
階層ベイズとWAIC階層ベイズとWAIC
階層ベイズとWAIC
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
因果推論の奥へ: "What works" meets "why it works"
因果推論の奥へ: "What works" meets "why it works"因果推論の奥へ: "What works" meets "why it works"
因果推論の奥へ: "What works" meets "why it works"
 
Bayesian Neural Networks : Survey
Bayesian Neural Networks : SurveyBayesian Neural Networks : Survey
Bayesian Neural Networks : Survey
 

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

if-up 2019 | A2. クラウドにつながり始めたハードウェア
if-up 2019 | A2. クラウドにつながり始めたハードウェアif-up 2019 | A2. クラウドにつながり始めたハードウェア
if-up 2019 | A2. クラウドにつながり始めたハードウェアSORACOM,INC
 
タクシー×AIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて
タクシー×AIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについてタクシー×AIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて
タクシー×AIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについてTakashi Suzuki
 
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-Recruit Technologies
 
JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活JupyterLabを中心とした快適な分析生活
JupyterLabを中心とした快適な分析生活Classi.corp
 
Icml2018読み会_overview&GANs
Icml2018読み会_overview&GANsIcml2018読み会_overview&GANs
Icml2018読み会_overview&GANsKentaro Tachibana
 
ディープラーニングによるユーザーの行動予測
ディープラーニングによるユーザーの行動予測ディープラーニングによるユーザーの行動予測
ディープラーニングによるユーザーの行動予測澪標アナリティクス
 
エスキュービズムの考えるDXの取り組み
エスキュービズムの考えるDXの取り組みエスキュービズムの考えるDXの取り組み
エスキュービズムの考えるDXの取り組みs-cubism sales_marketing
 
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料Takaya Nakanishi
 
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 講演資料)NTT DATA Technology & Innovation
 
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 PinpointAmazon Web Services Japan
 
Batch Reinforcement Learning
Batch Reinforcement LearningBatch Reinforcement Learning
Batch Reinforcement LearningTakuma Oda
 
<インフラ管理者向け>チームでのAI開発を支援するAI開発プラットフォームKAMONOHASHI
<インフラ管理者向け>チームでのAI開発を支援するAI開発プラットフォームKAMONOHASHI<インフラ管理者向け>チームでのAI開発を支援するAI開発プラットフォームKAMONOHASHI
<インフラ管理者向け>チームでのAI開発を支援するAI開発プラットフォームKAMONOHASHIKamonohashi
 
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]DeNA
 
時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証Masaharu Kinoshita
 
入社半年での開発ストーリー - 千人規模の顔認証受付サービスを 1ヶ月で作った話 -
入社半年での開発ストーリー - 千人規模の顔認証受付サービスを 1ヶ月で作った話 -入社半年での開発ストーリー - 千人規模の顔認証受付サービスを 1ヶ月で作った話 -
入社半年での開発ストーリー - 千人規模の顔認証受付サービスを 1ヶ月で作った話 -Yoshitaka Haribara
 
ポストAiを見据えた日本企業の経営戦略 加藤整 20171020_v1.2
ポストAiを見据えた日本企業の経営戦略 加藤整 20171020_v1.2ポストAiを見据えた日本企業の経営戦略 加藤整 20171020_v1.2
ポストAiを見据えた日本企業の経営戦略 加藤整 20171020_v1.2Sei Kato (加藤 整)
 
『MobageのAnalytics活用したサービス開発』 - データマイニングCROSS2014 #CROSS2014
『MobageのAnalytics活用したサービス開発』 - データマイニングCROSS2014 #CROSS2014『MobageのAnalytics活用したサービス開発』 - データマイニングCROSS2014 #CROSS2014
『MobageのAnalytics活用したサービス開発』 - データマイニングCROSS2014 #CROSS2014Koichi Hamada
 
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!
Mulesoft meetup #02 Anypointで日本のクラウドサービスを繋いでみた!Kazuya Sugimoto
 
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 IidaHidenori Fujioka
 

Similaire à 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