Markov Chain Monte Carlo และการ fit โมเดล

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Michal Oleszak

Machine Learning Engineer

การวิเคราะห์ข้อมูลแบบ Bayesian ในการใช้งานจริง

  • Grid approximation: ไม่สะดวกเมื่อมีพารามิเตอร์จำนวนมาก
  • การสุ่มตัวอย่างจาก posterior ที่รู้จัก: ต้องใช้ conjugate priors
  • Markov Chain Monte Carlo (MCMC): สุ่มตัวอย่างจาก posterior ที่ไม่รู้จัก!
การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Monte Carlo

  • ประมาณค่าบางอย่างด้วยการสร้างตัวเลขสุ่ม
  • จากสูตร $\pi r^2 \simeq 78.5$

วงกลมที่มีรัศมี 5

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Monte Carlo

  • ประมาณค่าบางอย่างด้วยการสร้างตัวเลขสุ่ม
  • จากสูตร $\pi r^2 \simeq 78.5$
  • วาดสี่เหลี่ยม 10x10 ล้อมรอบวงกลม

วงกลมรัศมี 5 พร้อมสี่เหลี่ยมที่กำหนดรอบๆ

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Monte Carlo

  • ประมาณค่าบางอย่างด้วยการสร้างตัวเลขสุ่ม
  • จากสูตร $\pi r^2 \simeq 78.5$
  • วาดสี่เหลี่ยม 10x10 ล้อมรอบวงกลม
  • สุ่ม 25 จุดภายในสี่เหลี่ยม
  • มีกี่จุดที่อยู่ในวงกลม? $19/25=76\%$
  • ประมาณพื้นที่วงกลม: 76% * 100 = 76

วงกลมรัศมี 5 พร้อมสี่เหลี่ยมและ 25 จุดสุ่มภายในสี่เหลี่ยม

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chains

  • จำลองลำดับของสถานะ โดยการเปลี่ยนสถานะแต่ละครั้งมีความน่าจะเป็นกำกับไว้
การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chains

  • จำลองลำดับของสถานะ โดยการเปลี่ยนสถานะแต่ละครั้งมีความน่าจะเป็นกำกับไว้

หมีจะทำอะไรต่อไป:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • หลังจากผ่านไปหลายช่วงเวลา ความน่าจะเป็นของการเปลี่ยนสถานะจะคงที่ไม่ว่าจะเริ่มจากที่ใด
การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chains

  • จำลองลำดับของสถานะ โดยการเปลี่ยนสถานะแต่ละครั้งมีความน่าจะเป็นกำกับไว้

หมีจะทำอะไรต่อไป:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • หลังจากผ่านไปหลายช่วงเวลา ความน่าจะเป็นของการเปลี่ยนสถานะจะคงที่ไม่ว่าจะเริ่มจากที่ใด

หมีจะทำอะไรในอนาคตอันไกล:

hunt eat sleep
hunt 0.28 0.44 0.28
eat 0.28 0.44 0.28
sleep 0.28 0.44 0.28
การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chain Monte Carlo

จุดสีแดงจุดเดียวบนแกนตัวเลข

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chain Monte Carlo

จุดสองจุดบนแกนตัวเลข จุดหนึ่งสีแดงและอีกจุดสีดำ

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chain Monte Carlo

จุดสองจุดบนแกนตัวเลข จุดหนึ่งสีแดงและอีกจุดสีเขียว

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chain Monte Carlo

สามจุดบนแกนตัวเลข จุดหนึ่งสีแดง จุดหนึ่งสีเขียว และจุดหนึ่งสีดำ

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chain Monte Carlo

จุดบนแกนตัวเลข สองจุดสีแดงและหนึ่งจุดสีเขียว

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chain Monte Carlo

สี่จุดบนแกนตัวเลข สองจุดสีแดงและสองจุดสีเขียว

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chain Monte Carlo

เจ็ดจุดบนแกนตัวเลข สองจุดสีแดงและห้าจุดสีเขียว

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Markov Chain Monte Carlo

จุดจำนวนมากบนแกนตัวเลข บางจุดสีแดง ส่วนใหญ่สีเขียว

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

ข้อมูลโฆษณาแบบรวม

print(ads_aggregated)
           date  clothes_banners_shown  sneakers_banners_shown  num_clicks
0    2019-01-01                     20                      18           2
1    2019-01-02                     24                      19           8
2    2019-01-03                     20                      20           5
..          ...                    ...                     ...         ...
148  2019-05-29                     24                      25           8
149  2019-05-30                     26                      27          11
150  2019-05-31                     26                      24           8

[151 rows x 4 columns]
การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Linear regression ด้วย pyMC3

formula = "num_clicks ~ clothes_banners_shown + sneakers_banners_shown"


with pm.Model() as model: pm.GLM.from_formula(formula, data=ads_aggregated)
# Print model specification print(model)
# Sample posterior draws trace = pm.sample(draws=1000, tune=500)

ผลลัพธ์จากฟังก์ชัน print ของ pymc3 แสดงรายการ prior ของพารามิเตอร์โมเดล

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

มาฝึกกันเถอะ!

การวิเคราะห์ข้อมูลแบบเบย์เซียนด้วย Python

Preparing Video For Download...