Regresyon ve tahmin

Python ile Bayesçi Veri Analizi

Michal Oleszak

Machine Learning Engineer

Doğrusal regresyon

$$y = \beta_0 + \beta_1x_1 + \beta_2x_2 + ...$$

$$\text{sales} = \beta_0 + \beta_1\text{marketingSpending}$$

 

  • Sıklıkçı çıkarım:

    • $\text{sales} = \beta_0 + \beta_1\text{marketingSpending} + \varepsilon$

    • $\varepsilon \sim \mathcal{N} (0, \sigma)$

 

  • Bayesyen çıkarım:

    • $\text{sales} \sim \mathcal{N} (\beta_0 + \beta_1\text{marketingSpending}, \sigma)$
Python ile Bayesçi Veri Analizi

Normal dağılım

normal_0_1 = np.random.normal(0, 1, size=10000)




sns.kdeplot(normal_0_1, shade=True, label="N(0,1)") plt.show()

Standart normal dağılımın yoğunluğu; 0'da tepe yapar ve etrafında simetriktir.

Python ile Bayesçi Veri Analizi

Normal dağılım

normal_0_1 = np.random.normal(0, 1, size=10000)
normal_3_1 = np.random.normal(3, 1, size=10000)


sns.kdeplot(normal_0_1, shade=True, label="N(0,1)")
sns.kdeplot(normal_3_1, shade=True, label="N(3,1)")


plt.show()

Standart normal dağılımın yoğunluğu; 3'te tepe yapar ve etrafında simetriktir.

Python ile Bayesçi Veri Analizi

Normal dağılım

normal_0_1 = np.random.normal(0, 1, size=10000)
normal_3_1 = np.random.normal(3, 1, size=10000)
normal_0_3 = np.random.normal(0, 3, size=10000)

sns.kdeplot(normal_0_1, shade=True, label="N(0,1)")
sns.kdeplot(normal_3_1, shade=True, label="N(3,1)")
sns.kdeplot(normal_0_3, shade=True, label="N(0,3)")

plt.show()

Standart normal dağılımın yoğunluğu; 0'da tepe yapar ve etrafında simetriktir.

Python ile Bayesçi Veri Analizi

Bayesyen regresyon modeli tanımı

$$\text{sales} \sim \mathcal{N} (\beta_0 + \beta_1\text{marketingSpending}, \sigma)$$

$$\beta_0 \sim \mathcal{N} (5, 2)$$

$$\beta_1 \sim \mathcal{N} (2, 10)$$

$$\sigma \sim \mathcal{Unif} (0, 3)$$

 

  • Pazarlama olmadan 5000 satış bekliyoruz.
  • Harcamada her 1000 artış için satışlarda 2000 artış bekliyoruz.
  • Standart sapma için uniform öncül; değeri bilinmiyor.
Python ile Bayesçi Veri Analizi

Regresyon parametrelerini tahmin etme

  • Izgara yaklaşımı → çok parametrede pratik değil
  • Eşlenik öncüller seçip bilinen posteriordan örnekleme → sezgisel olmayan öncüller
  • Üçüncü yol: eşlenik olmayan öncüllerle bile posteriordan örnekleme!
  • Şimdilik, parametre çekişlerinin verildiğini varsayın
Python ile Bayesçi Veri Analizi

Posterioru görselleştirme

$$\text{sales} = \beta_0 + \beta_1\text{marketingSpending}$$

print(marketing_spending_draws)
array([9.6153, 8.9922, ..., 4.59565])
import pymc3 as pm

pm.plot_posterior(
  marketing_spending_draws, 
  hdi_prob=0.95
)

Ortalama ve güvenilir aralığı işaretli bir yoğunluk grafiği.

Python ile Bayesçi Veri Analizi

Posterior çekişlerini analiz etme

posterior_draws_df = pd.DataFrame({
    "intercept_draws": intercept_draws,
    "marketing_spending_draws": marketing_spending_draws,
    "sd_draws": sd_draws
})

print(posterior_draws_df)
       intercept_draws  marketing_spending_draws      sd_draws
count     10000.000000              10000.000000  10000.000000
mean          2.972130                  5.999146      1.337621
std           3.008565                  2.020708      0.471723
min          -8.562093                 -2.842438      0.029643
25%           0.972832                  4.621807      1.003229
50%           3.002940                  5.975067      1.427617
75%           5.020615                  7.362572      1.736310
max          15.228549                 13.258955      1.999834
Python ile Bayesçi Veri Analizi

Öngörü dağılımı

Pazarlamaya 1000 $ harcarsak ne kadar satış bekleriz?

$\text{sales} \sim \mathcal{N} (\beta_0 + \beta_1\text{marketingSpending}, \sigma)$

# Parametrelerin nokta tahminleri
intercept_mean = intercept_draws.mean()
marketing_spending_mean = marketing_spending_draws.mean()
sd_mean = sd_draws.mean()


# Öngörü dağılımının ortalamasını hesapla predictive_mean = intercept_mean + marketing_spending_mean * 1000
# Öngörü dağılımından örnekle prediction_draws = np.random.normal(predictive_mean, sd_mean, size=10000)
Python ile Bayesçi Veri Analizi

Öngörü dağılımı

Pazarlamaya 1000 $ harcarsak ne kadar satış bekleriz?

Tahmini satışların, 5986 civarında tepe yapan çan eğrisi şeklinde yoğunluğu.

Python ile Bayesçi Veri Analizi

Hadi regresyon ve tahmin yapalım!

Python ile Bayesçi Veri Analizi

Preparing Video For Download...