Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Tokyo.R #94 脱rstan初心者
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Koji E. Kosugi
September 11, 2021
Technology
1.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Tokyo.R #94 脱rstan初心者
第94回Tokyo.Rでの発表資料です。
Koji E. Kosugi
September 11, 2021
More Decks by Koji E. Kosugi
See All by Koji E. Kosugi
統計学に必要な数学(線形代数含む)
kosugitti
0
920
CRANへの道
kosugitti
0
210
sappoRo.R #12 初心者セッション
kosugitti
0
430
多次元展開法を用いた 多値バイクラスタリング モデルの提案
kosugitti
0
530
小杉考司(専修大学)
kosugitti
2
870
電子計算機のイロハ
kosugitti
1
1.7k
Shinyで親父の威厳を回復した話
kosugitti
0
740
ベイズ統計学勉強会 2022年春合宿資料「はじめてのTeX」
kosugitti
2
9k
Tokyo.R #90 RStudioで日本語論文を書く(2)
kosugitti
1
1.4k
Other Decks in Technology
See All in Technology
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
3
2.4k
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
270
Backstageでつくるセルフサービスな社内開発基盤
kikunosuke75
1
340
なぜSRE・セキュリティは評価されないのか?守りの組織を事業成長エンジンに変えた実践
cscengineer
PRO
3
2.3k
Autonomous AI Databaseサービス・アップデート(FY27)/ adb-service-update-jp-fy27
oracle4engineer
PRO
0
120
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
160
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
560
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
6
7.2k
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
110
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
350
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
240
書籍『生成AIの安全性入門』の入門
wataoka
0
220
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
280
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
470
A Modern Web Designer's Workflow
chriscoyier
698
190k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
Build your cross-platform service in a week with App Engine
jlugia
234
19k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
870
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Unsuck your backbone
ammeep
672
58k
Design in an AI World
tapps
1
300
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Navigating Team Friction
lara
192
16k
Transcript
めざせ! 脱rstan初心者 @kosugitti 1
自己紹介 • 名前;小杉考司(こすぎこうじ) • 略歴;1976.01.17 大阪市生まれ • 趣味;心理統計,統計モデリング • 仕事;専修大学で心理統計教えてます
2
初心者を脱出する 4 ాઌੜˏ౦େֶͷΞΠσΞΛͱʹΠϥετԽ ॳ৺ऀ͔ CSNT͕ ͬͯ͘ΕΔʂ தڃऀʁ ্ڃऀ ਆ
初心者だって大変だ • データを眺める=可視化するだけでもやることはたくさん • 分布に当てはめていくのも,分布とリンク関数の知識が必要 なので,やるべきこといっぱーい • 幸いbrmsなど専用パッケージがあれば,細かくコードを 書く必要はないし,収束しない問題に出会うことも少ない •
まずは色々あそんでみよう 5
じゃあ中級者は? • Stanのコードを自分で描き始めたら(brmsなど既存パッ ケージに頼らなければ),あなたはもう中級者! • 分布をあれこれ混ぜ合わせたくなってきたら,あなたはもう 中級者! • 分布の混ぜ合わせ方→階層モデル,潜在クラスモデル •
決まったモデルから入っていくというよりも,自分の分析し たい現象に素直に向き合って,モデルを作り上げていく 6
ٱอઌੜͷΠϥετ দӜઌੜͷΠϥετ ؠσʔλαΠΤϯεWPMΑΓ 世界の成り立ちを想像しよう
ٱอ σʔλղੳͷͨΊ ͷ౷ܭϞσϦϯάೖΑΓ
紙とペン • フルスクラッチでstanコードを書くときは,まず紙とペンを 用意します! • タブレットとタッチペンでもいいけど,とりあえずいきなり エディタを立ち上げるわけではありません • 描き方に好みがあるかもしれませんが,おすすめは縦長に セットしてデータを最下部に置きます
10
yi σʔλ͕͋ͬͨͱ͞
d Կ͔ͷϝΧχζϜʹ֬ ͔Βग़͖ͯͯΔ yi
d ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن͔ͳʁ yi
d ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن͔ͳʁ ਖ਼نʹ ύϥϝλೋͭ̇ ʢҐஔͱ෯ʣ yi μ σi ࢄ
ਫ਼ ͕ݸਓ͝ͱʹ มΘΔͱ͍͏Ϟσϧ
d d d Θ͔Βͳ͍ͷ ֬ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ Θ͔Βͳ͍ͷ ֬ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ μ
σi yi
d d d ͓͖·͠ΐ͏ࣄલ ͓͖·͠ΐ͏ࣄલ μ σi yi
完成 17 d d d μ σi yi
完成 • 下から上に書いていく • パラメータは記号か数字 • わからないものにはそれを生む 確率分布をおく • 数字で
fi xされたら図の完成 18 ͨ͘͝Γલͷ͜ͱͷΑ͏ʹࢥ͑·͕͢ɼ ͪΌΜͱઃܭਤΛॻ͍͓͔ͯͳ͍ͱ ίʔυΛॻ͘ͱ͖ʹ໎ࢠʹͳΓ·͢
ίʔυʹ͠·͢ σʔλͷग़Ͳ͜Ζʹ σʔλͷग़Ͳ͜Ζʹ Θ͔Βͳ͍ͷΛ ද֬͢ʹ ࣄલ
ίʔυʹ͠·͢ ٻΊ͍ͨͷɼϞσϧϒϩοΫͰ ه߸Ͱද͍ͯͨ͠ͷΛ ύϥϝʔλϒϩοΫʹॻ͘ ֎͔Β༩͑ΒΕΔͷ σʔλϒϩοΫʹॻ͘
yi σʔλ͕͋ͬͨͱ͞ 分布の混ぜ合わせ1 階層線形モデルの場合
d yi Կ͔ͷϝΧχζϜʹ֬ ͔Βग़͖ͯͯΔ
d yi ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن͔ͳʁ
d yi μ ୯ๆͰࠨӈରশͳΒ ͻͱ·ͣਖ਼ن͔ͳʁ ਖ਼نʹ ύϥϝλೋͭ̇ ʢҐஔͱ෯ʣ σ
d yi μ Θ͔Βͳ͍ͷ ֬ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ σ d ࣄલͷύϥϝλ ϑΟοΫε͞Ε͍ͯΔͷͰ
͜Ε͜͜ͰऴΘΓ
d yi μi ʹ β0 + β1i Xi ͖͕ ݸਓJͰมΘΔ
Ϟσϧ ฏۉʹߏʢϞσϧʣ͕ ೖΔʢ֬తͰͳ͍ʣ σ d
d yi μi ʹ β0 + β1i Xi ͖͕ ݸਓJͰมΘΔ
Ϟσϧ d 0 100 Θ͔Βͳ͍ͷ ֬ʹ͕ͨ͠͏ͷ͕ ϕΠδΞϯͷᎄ ࣄલͷύϥϝλΛ ϑΟοΫε͢Δͱ ͜Ε͜͜ͰऴΘΓ σ d
d yi μi ʹ β0 + β1i Xi ͖͕ ݸਓJͰมΘΔ
Ϟσϧ d 0 100 τ β1M d ͖ͷฏۉ ʢݸਓࠩͷฏۉʣ ͖ͷࢄ ʢݸਓࠩͷࢄʣ σ d
d yi μi σ ʹ β0 + β1i Xi ͖͕
ݸਓJͰมΘΔ Ϟσϧ d 0 100 τ β1M d d 0 100 d ࣄલͷύϥϝλ ϑΟοΫε͞Ε͍ͯΔͷͰ ͜͜ͰऴΘΓ ࣄલͷύϥϝλ ϑΟοΫε͞Ε͍ͯΔͷͰ ͜͜ͰऴΘΓ d
d yi μi ʹ β0 + β1i Xi d 0
100 τ β1M d d 0 100 d 完成 • わからないものは確率で • 確率分布のパラメータが 固定できるまで上に 30 σ d
31 ࣄલͰͳ͍ ֬Ϟσϧͷͱ͜Ζ ʹ 設計図からコードに起こす
32 ύϥϝλ͕ݻఆ͞Εͨ ֬ʹࣄલ 設計図からコードに起こす
33 ߏ͕ೖͬͨͱ͜Ζ USBOTGPSNFEQBSBNFUFSTϒϩοΫͰ هड़͢ΔͱεοΩϦ͢Δ
34 Ϟσϧʹؚ·ΕΔະʢΪϦγΞจࣈʣ ͕ਪఆ͖͢ύϥϝʔλ
35 σʔλ3ͱͷ૭ޱ
36 完成 ׳Εͯ͘Δͱ্͔Βॻ͘͜ͱ Ͱ͖ΔΑ͏ʹͳΓ·͢ʂ
階層モデルもこわくない • 色々なところに分布を混ぜる階層モデルも,設計図があれば迷子になり ません • 逆にいうと,初心者は設計図がイメージできていないのに書こうとし て,変数間関係がわからなくなっちゃってる • 階層線形モデルのテキストを読むと,記号で色々説明してくれています が,図にしてみると整理しやすい
• レベル1,レベル2とか といった文字・記号も図にしてみると簡単 • 図の描き方にはプレート表現もありますが,Kurshcke styleのほうが わかりやすい(と個人的には思っています) γ00 , τ10 37
コード上でのテクニック • transformed parametersを駆使するようになると,よ く言われるのがこれ 38 • transformed parametersで作られた変数に対してサ ンプリング記法で表現するのが良くない。
αϯϓϦϯάه๏ λʔήοτه๏ • 事後予測チェック,WAIC/LOOの計算などにも必要な書き 方なのでtarget+=で書く癖をつけよう
• ゼロ過剰ポアソンとか,混合正規モデルなどデータ生成メカニ ズムの背景に質的(離散的・カテゴリ的)違いがあるモデルの 場合は,基本的にtarget+=記法になる • 質的に違うものを混ぜ合わせるというのは,言い換えると条 件分岐(if文)のようなもの。 • もしカテゴリ1なら→分布Aに従う •
もしカテゴリ2なら→分布Bに従う 39 分布の混ぜ合わせ2 潜在クラスモデルの場合 θ ͜ͷJGͷذΛΧςΰϦΧϧͷύϥϝλʹΑͬͯදݱ͢Δ
40 分布の混ぜ合わせ2 潜在クラスモデルの場合 d yi μA σ μB σ θ
1 − θ θ
41 d yi μA σ μB σ θ 1 −
θ θ θ × Normal(μA , σ) (1 − θ) × Normal(μB , σ) ࠨϧʔτ ӈϧʔτ
42 θ × Normal(μA , σ) (1 − θ) ×
Normal(μB , σ) • Stanの中では対数尤度,logをとった形で計算する log(θ) + log(Normal(μA , σ)) log(1 − θ) + log(Normal(μB , σ)) • normal_lpdfの形に書き換える log(theta)+normal_lpdf(y[i] | mu1 , sigma) log(1-theta)+normal_lpdf(y[I] | mu2 , sigma) • この二つの状態(左・右ルート)を足し合わせたものが結果の確率になる • →対数をとった表現にしているので,exp関数で元の確率に戻して から足し合わせる • →Stanの中では対数尤度で計算するので,logをとった形にする MPH TVN FYQ
43 log(theta)+normal_lpdf(y[i] | mu1 , sigma) log(1-theta)+normal_lpdf(y[I] | mu2 ,
sigma) • この二つの状態(左・右ルート)を足し合わせたものが結果の確率になる • →対数をとった表現にしているので,exp関数で元の確率に戻して から足し合わせる • →Stanの中では対数尤度で計算するので,logをとった形にする MPH TVN FYQ log_sum_exp • log_sum_exp関数の()の中身は足し合わせるべきベクトル , target += log_sum_exp ݅ ݅ ݅/ ʜ
44 この表現力を手にいれると, あなたはもう中級者
Stanの階段のぼる〜 • 離散分布は条件分岐と考えると「Aのときで,さらにBならこっち のルートで・・・」と離散分布を重ねていくことで色々な表現ができ るようになる→アヒル本11.4のLDA/CateCate分布 • transformの中で条件分岐ベクトルだけ書いて,modelブロック ではtarget+=だけになる,といった書き方も • さらに面倒な分岐をfunctionブロックを使って書き始めると
上級者への道が・・・ • 混ぜ合わせ+MCMCによるラベルスイッチング問題などに直面す ると,stanのさまざまな型(ordered vectorなど)にも目が向 いてきます 45
もう一つの中級者 • Rstanの初心者を脱出する際に必要なルートは「インストール の壁」 • バージョンが上がる,OSが変わる,チップが変わると結構あ ちこちで悲鳴が上がる。なかなか安定した環境を保持し続け るのは難しい • これはもう経験あるのみで,色々なケースでのノウハウを積
み重ね,ググり続けるしかないです。 • 脱出(というか迂回)方法として,Dockerやcmdstanrに 乗り換えるというのもあり。 47
48 Stan Advent Calendar2019で検索
49
50 Stan Advent Calendar2020で検索
Enjoy!