Di balik kap mesin Bayesian

Analisis Data Bayesian dengan Python

Michal Oleszak

Machine Learning Engineer

Teorema Bayes: ulasan kembali

 

$$P(A|B) = \frac{P(B|A) * P(A)}{P(B)}$$

Analisis Data Bayesian dengan Python

Teorema Bayes: ulasan kembali

 

$$P(\text{parameter}|\text{data}) = \frac{P(\text{data}|\text{parameter}) * P(\text{parameter})}{P(\text{data})}$$

 

  • P(parameter | data)   →   distribusi posterior: apa yang kita ketahui tentang parameter setelah melihat data
  • P(parameter)   →   distribusi prior: apa yang kita ketahui tentang parameter sebelum melihat data
  • P(data | parameter)   →   likelihood data menurut model statistik kita
  • P(data)   →   faktor penskalaan
Analisis Data Bayesian dengan Python

Lempar koin lagi: pendekatan grid

T: Berapa peluang keluar gambar pada koin jika kita mengamati 75 gambar dari 100 lemparan?

num_heads = np.arange(0, 101, 1)
head_prob = np.arange(0, 1.01, 0.01)

coin = pd.DataFrame([(x, y) for x in num_heads for y in head_prob]) coin.columns = ["num_heads", "head_prob"]
       num_heads  head_prob
0              0       0.00
1              0       0.01
2              0       0.02
          ...        ...
10199        100       0.99
10200        100       1.00
[10201 baris x 2 kolom]
Analisis Data Bayesian dengan Python

Lempar koin lagi: pendekatan grid

T: Berapa peluang keluar gambar pada koin jika kita mengamati 75 gambar dari 100 lemparan?

from scipy.stats import uniform
coin["prior"] = uniform.pdf(coin["head_prob"])

       num_heads  head_prob
0              0       0.00
1              0       0.01
2              0       0.02
          ...        ...
10199        100       0.99
10200        100       1.00
[10201 baris x 2 kolom]
Analisis Data Bayesian dengan Python

Lempar koin lagi: pendekatan grid

T: Berapa peluang keluar gambar pada koin jika kita mengamati 75 gambar dari 100 lemparan?

from scipy.stats import uniform
coin["prior"] = uniform.pdf(coin["head_prob"])

       num_heads  head_prob  prior
0              0       0.00    1.0
1              0       0.01    1.0
2              0       0.02    1.0
          ...        ...    ...
10199        100       0.99    1.0
10200        100       1.00    1.0
[10201 baris x 3 kolom]
Analisis Data Bayesian dengan Python

Lempar koin lagi: pendekatan grid

T: Berapa peluang keluar gambar pada koin jika kita mengamati 75 gambar dari 100 lemparan?

from scipy.stats import uniform
coin["prior"] = uniform.pdf(coin["head_prob"])

from scipy.stats import binom coin["likelihood"] = binom.pmf(coin["num_heads"], 100, coin["head_prob"])
       num_heads  head_prob  prior
0              0       0.00    1.0
1              0       0.01    1.0
2              0       0.02    1.0
          ...        ...    ...
10199        100       0.99    1.0
10200        100       1.00    1.0
[10201 baris x 3 kolom]
Analisis Data Bayesian dengan Python

Lempar koin lagi: pendekatan grid

T: Berapa peluang keluar gambar pada koin jika kita mengamati 75 gambar dari 100 lemparan?

from scipy.stats import uniform
coin["prior"] = uniform.pdf(coin["head_prob"])

from scipy.stats import binom coin["likelihood"] = binom.pmf(coin["num_heads"], 100, coin["head_prob"])
       num_heads  head_prob  prior  likelihood
0              0       0.00    1.0    1.000000
1              0       0.01    1.0    0.366032
2              0       0.02    1.0    0.132620
          ...        ...    ...         ...
10199        100       0.99    1.0    0.366032
10200        100       1.00    1.0    1.000000
[10201 baris x 4 kolom]
Analisis Data Bayesian dengan Python

Lempar koin lagi: pendekatan grid

T: Berapa peluang keluar gambar pada koin jika kita mengamati 75 gambar dari 100 lemparan?

coin["posterior_prob"] = coin["prior"] * coin["likelihood"]
coin["posterior_prob"] /= coin["posterior_prob"].sum()


       num_heads  head_prob  prior  likelihood
0              0       0.00    1.0    1.000000
1              0       0.01    1.0    0.366032
2              0       0.02    1.0    0.132620
          ...        ...    ...         ...
10199        100       0.99    1.0    0.366032
10200        100       1.00    1.0    1.000000
[10201 baris x 4 kolom]
Analisis Data Bayesian dengan Python

Lempar koin lagi: pendekatan grid

T: Berapa peluang keluar gambar pada koin jika kita mengamati 75 gambar dari 100 lemparan?

coin["posterior_prob"] = coin["prior"] * coin["likelihood"]
coin["posterior_prob"] /= coin["posterior_prob"].sum()


       num_heads  head_prob  prior  likelihood  posterior_prob
0              0       0.00    1.0    1.000000        0.009901
1              0       0.01    1.0    0.366032        0.003624
2              0       0.02    1.0    0.132620        0.001313
          ...        ...    ...         ...             ...
10199        100       0.99    1.0    0.366032        0.003624
10200        100       1.00    1.0    1.000000        0.009901
[10201 baris x 5 kolom]
Analisis Data Bayesian dengan Python

Lempar koin lagi: pendekatan grid

T: Berapa peluang keluar gambar pada koin jika kita mengamati 75 gambar dari 100 lemparan?

from scipy.stats import binom
from scipy.stats import uniform

num_heads = np.arange(0, 101, 1)
head_prob = np.arange(0, 1.01, 0.01)
coin = pd.DataFrame([(x, y) for x in num_heads for y in head_prob])
coin.columns = ["num_heads", "head_prob"]

coin["prior"] = uniform.pdf(coin["head_prob"])
coin["likelihood"] = binom.pmf(coin["num_heads"], 100, coin["head_prob"])

coin["posterior_prob"] = coin["prior"] * coin["likelihood"]
coin["posterior_prob"] /= coin["posterior_prob"].sum()
Analisis Data Bayesian dengan Python

Memplot distribusi posterior

T: Berapa peluang keluar gambar pada koin jika kita mengamati 75 gambar dari 100 lemparan?

heads75 = coin.loc[coin["num_heads"] == 75]
heads75["posterior_prob"] /= heads75["posterior_prob"].sum()
      num_heads  head_prob  prior     likelihood  posterior_prob
7575         75       0.00    1.0   0.000000e+00    0.000000e+00
7576         75       0.01    1.0  1.886367e-127   1.867690e-129
         ...        ...    ...            ...             ...
7674         75       0.99    1.0   1.141263e-27    1.129964e-29
7675         75       1.00    1.0   0.000000e+00    0.000000e+00
[101 baris x 5 kolom]
sns.lineplot(heads75["head_prob"], heads75["posterior_prob"])
plt.show()
Analisis Data Bayesian dengan Python

Memplot distribusi posterior

T: Berapa peluang keluar gambar pada koin jika kita mengamati 75 gambar dari 100 lemparan? J:

Plot densitas peluang untuk peluang keluar gambar. Plot memuncak di sekitar 0,75 dan memungkinkan nilai antara kira-kira 0,60 hingga 0,85.

Analisis Data Bayesian dengan Python

Ayo berlatih menghitung posterior dengan pendekatan grid!

Analisis Data Bayesian dengan Python

Preparing Video For Download...