import random
random.seed(0)
def deney(n_zar, esik):
altilar = sum(random.randint(1, 6) == 6 for _ in range(n_zar))
return altilar >= esik
N = 100_000
for n_zar, esik, ad in [(6, 1, "A"), (12, 2, "B"), (18, 3, "C")]:
p = sum(deney(n_zar, esik) for _ in range(N)) / N
print(f"{ad}: P = {p:.4f} (n={n_zar}, ≥{esik})")5 Koşullu Olasılık
İstatistiğin ruhu: bağımsızlık, Bayes, zincir kuralı
- Blitzstein’in videosu: YouTube — Lecture 4: Conditional Probability (≈50 dk)
- Okuma süresi: ≈28 dk
5.1 Bu Derste Ne Var?
Bu ders kursun kalbi. Önce bağımsızlığı tanımlıyoruz, sonra Blitzstein’in “istatistiğin ruhu” dediği kavrama geçiyoruz: koşullu olasılık — yeni kanıt geldikçe inançları nasıl güncelleriz.
- Bağımsızlık: \(P(A \cap B) = P(A)P(B)\). “Bağımsız = çarp” — ayrıklıkla karıştırma (felaket bir hata).
- Koşullu olasılık: \(P(A \mid B) = P(A \cap B) / P(B)\) — öğrenmenin matematiği.
- Üç teorem: çarpım, zincir kuralı, Bayes — ispatları tek satır, sonuçları bir bilim dalı.
“conditioning is the soul of statistics.” — Blitzstein, 33:13
- Koşullu olasılık = öğrenme. Bir modelin yaptığı her şey koşulludur: sınıflandırıcı \(p(y \mid x)\), dil modeli \(p(\text{token} \mid \text{bağlam})\), Bayesian posterior \(p(\theta \mid \text{veri})\).
- Zincir kuralı → autoregressive dil modelinin matematiği. \(n!\) farklı sıralama → any-order / XLNet.
- Bağımsız = çarp → naive Bayes’in çekirdeği.
- İkili ≠ karşılıklı bağımsız (XOR) → tek katmanlı perceptron neden XOR öğrenemez.
- Çakıl dünyası (yeniden normalleştirme) → masked / causal softmax attention.
- Bayes kuralı → tüm Bayesian çıkarımın, generative↔︎discriminative ilişkisinin ve diffusion ters sürecinin temeli.
5.2 Bağımsızlık: Tanım ve Ayrıklıkla Karıştırma
A ve B bağımsızdır ancak ve ancak:
\[ P(A \cap B) = P(A)\,P(B) \]
Kısa slogan: bağımsız = çarp.
KRİTİK UYARI: bağımsızlık ile ayrıklık (disjoint) bambaşka şeylerdir.
“this is completely different from disjointness … a terrible, disastrous blunder.” — Blitzstein, 12:06
- Ayrık: \(A\) olursa \(B\) olamaz (\(P(A \cap B) = 0\)). Biri diğeri hakkında çok şey söyler.
- Bağımsız: \(A\) olması \(B\) hakkında hiçbir şey söylemez.
(Olasılıkları pozitif) ayrık olaylar asla bağımsız olamaz.
from matplotlib.patches import Circle, Rectangle
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
# Sol: bağımsız
ax = axes[0]
ax.add_patch(Rectangle((-2.5, -1.5), 5, 3, facecolor='#f3f4f6', edgecolor='#1f2937', linewidth=1.5))
ax.add_patch(Circle((-0.7, 0), 1.0, facecolor='#DD6B20', alpha=0.5, edgecolor='#9a3412', linewidth=2))
ax.add_patch(Circle((0.7, 0), 1.0, facecolor='#2C5282', alpha=0.5, edgecolor='#1e3a5f', linewidth=2))
ax.text(-1.2, 1.2, '$A$', fontsize=18, color='#6B0E1B', weight='bold')
ax.text(1.2, 1.2, '$B$', fontsize=18, color='#1e3a5f', weight='bold')
ax.text(0, 0, '$A \\cap B$\n$P=P(A)P(B)$', ha='center', va='center', fontsize=10, color='white', weight='bold')
ax.text(-2.3, -1.3, '$S$', fontsize=14)
ax.set_xlim(-2.7, 2.7); ax.set_ylim(-1.7, 1.7); ax.set_aspect('equal')
ax.set_title('BAĞIMSIZ — kesişir, çarpım kuralı', fontsize=12)
ax.set_xticks([]); ax.set_yticks([])
for sp in ax.spines.values(): sp.set_visible(False)
# Sağ: ayrık
ax = axes[1]
ax.add_patch(Rectangle((-2.5, -1.5), 5, 3, facecolor='#f3f4f6', edgecolor='#1f2937', linewidth=1.5))
ax.add_patch(Circle((-1.2, 0), 0.9, facecolor='#DD6B20', alpha=0.5, edgecolor='#9a3412', linewidth=2))
ax.add_patch(Circle((1.2, 0), 0.9, facecolor='#2C5282', alpha=0.5, edgecolor='#1e3a5f', linewidth=2))
ax.text(-1.2, 1.2, '$A$', fontsize=18, color='#6B0E1B', weight='bold', ha='center')
ax.text(1.2, 1.2, '$B$', fontsize=18, color='#1e3a5f', weight='bold', ha='center')
ax.text(0, 0, '$A \\cap B = \\varnothing$', ha='center', va='center', fontsize=11, color='#A51C30', weight='bold')
ax.text(-2.3, -1.3, '$S$', fontsize=14)
ax.set_xlim(-2.7, 2.7); ax.set_ylim(-1.7, 1.7); ax.set_aspect('equal')
ax.set_title('AYRIK — kesişmez (P pozitifse asla bağımsız değil)', fontsize=12)
ax.set_xticks([]); ax.set_yticks([])
for sp in ax.spines.values(): sp.set_visible(False)
plt.tight_layout()
plt.show()“Bağımsız = çarp” kuralı, olasılıksal modellerde çarpanlara ayırmanın (factorization) temelidir: bağımsız gürültü bileşenleri, köşegen kovaryanslı VAE prior’ı, naive Bayes’teki \(p(\text{özellikler} \mid \text{sınıf}) = \prod p(\text{özellik}_i \mid \text{sınıf})\). Bağımsızlık sayısız parametreyi birkaç çarpana indirir.
5.3 Çoklu Bağımsızlık: İkili ≠ Karşılıklı
Üç olay \(A, B, C\) için bağımsızlık ne demek? Önce her ikisi bağımsız olmalı. Ama bu yetmez. Bir denklem daha gerekir:
\[ P(A \cap B \cap C) = P(A)\,P(B)\,P(C) \]
Yalnızca ikili denklemler sağlanıyorsa ikili (pairwise) bağımsızlık denir — ve ikili bağımsızlık karşılıklı (mutual) bağımsızlığı gerektirmez.
İkili-ama-karşılıklı-değil’in en güzel örneği XOR. \(A\) ve \(B\) bağımsız adil bit’ler, \(C = A \oplus B\). Her ikili bağımsızdır (C’yi tek başına \(A\) veya \(B\) belirlemez), ama üçü karşılıklı bağımsız değildir: \(A\) ile \(B\)’yi birlikte bilince C tamamen belli. Bu, tek katmanlı perceptron’un XOR’u neden öğrenemediğinin (Minsky-Papert) olasılıksal gölgesidir: ikili/marjinal istatistikler bilgisizdir, etiketi birlikte belirlerler — gizli katman gerekir.
5.4 Newton-Pepys Problemi (1693) + Binom Olasılığı
1693’te Samuel Pepys, Newton’a bir zar sorusu yazdı:
- A: 6 zarda en az bir 6.
- B: 12 zarda en az iki 6.
- C: 18 zarda en az üç 6.
Çoğu kişi C der. Doğru cevap: A.
\[ P(A) = 1 - \left(\frac{5}{6}\right)^{6} \approx 0{,}665 \]
“Tam \(k\) tane 6” olasılığı — binom olasılığı:
\[ P_k = \binom{n}{k}\left(\frac{1}{6}\right)^{k}\left(\frac{5}{6}\right)^{n-k} \]
Tümleyenle: \(P(B) \approx 0{,}619\); \(P(C) \approx 0{,}597\).
import math
import numpy as np
import matplotlib.pyplot as plt
def p_en_az_k_alti(n, k, p_alti=1/6):
return 1 - sum(math.comb(n, i) * p_alti**i * (1 - p_alti)**(n - i)
for i in range(k))
senaryolar = [(6, 1, 'A'), (12, 2, 'B'), (18, 3, 'C')]
sonuclar = [p_en_az_k_alti(n, k) for n, k, _ in senaryolar]
adlar = [f'{ad}\n{n} zar\nen az {k} 6' for n, k, ad in senaryolar]
fig, ax = plt.subplots(figsize=(10, 4.5))
renkler = ['#A51C30', '#DD6B20', '#2C5282']
bars = ax.bar(adlar, sonuclar, color=renkler, edgecolor='#1f2937', linewidth=1.5)
for bar, p in zip(bars, sonuclar):
ax.text(bar.get_x() + bar.get_width() / 2, p + 0.01, f'{p:.4f}',
ha='center', fontsize=12, weight='bold', color='#1f2937')
ax.axhline(0.5, color='#6B7280', linestyle=':', alpha=0.7)
ax.set_ylabel('olasılık', fontsize=12)
ax.set_ylim(0, 0.78)
ax.set_title('Newton-Pepys: A > B > C — Pepys C\'ye inanıyordu, yanıldı',
fontsize=12)
ax.grid(True, axis='y', alpha=0.3)
plt.tight_layout()
plt.show()“in 1693 … you had to go to a genius, like Isaac Newton. Whereas now, all you have to do is take STAT 110.” — Blitzstein, 28:03
İstatistikçi Stigler’in argümanı: bir yöntem, sonucun bağlı olduğu bir şeyi (zar olasılıkları) görmezden geliyorsa, bozuktur. Sanity check refleksi tam budur — önemli bir girdiye değişmez (invariant) kalan bir model, o girdiyi yakalamıyordur.
5.5 Koşullu Olasılık: İstatistiğin Ruhu
Asıl soru: elinde inançlar var ve yeni şeyler öğreniyorsun. Yeni kanıt geldikçe inançlarını nasıl güncellemelisin?
“Everything relates to conditioning in one way or another.” — Blitzstein, 33:34
Tanım:
\[ P(A \mid B) = \frac{P(A \cap B)}{P(B)}, \quad P(B) > 0 \]
Eğer \(A\) ile \(B\) bağımsızsa \(P(A \mid B) = P(A)\) — yani \(B\)’yi öğrenmek \(A\) hakkında hiçbir şey değiştirmez.
Koşullu olasılık ML’in yaptığı işin tanımıdır. Discriminative sınıflandırıcı doğrudan \(p(y \mid x)\) öğrenir. Bayesian çıkarımda posterior \(p(\theta \mid \text{veri})\), prior’ın kanıtla güncellenmesidir. Attention, bir sorguya koşullu ağırlık dağılımıdır.
5.6 İki Sezgi: Çakıl Dünyası ve Frekansçı Dünya
Sezgi 1 — Çakıl Dünyası. Örnek uzay \(S\)’yi toplam kütlesi \(1\) olan çakıllar gibi düşün; her çakıl bir sonuç, kütlesi olasılığı. “\(B\) verildi” demek: \(B\)’nin dışındaki çakıllar ilgisiz — onları sil. Kalanların kütlesi \(P(B)\), toplam \(1\) olsun diye yeniden normalleştir.
“renormalize to make total mass 1 again.” — Blitzstein, 40:33
Sezgi 2 — Frekansçı Dünya. Deneyi çok kez tekrarla. \(B\)’nin gerçekleştiği tekrarları işaretle, sonra yalnızca onların içinde \(A\)’nın oranını al.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circle, Rectangle
np.random.seed(7)
N = 60
xs = np.random.uniform(0, 10, N)
ys = np.random.uniform(0, 5, N)
# B = sol kısım (x < 5), A = orta üst (4 < x < 7, y > 2)
b_mask = xs < 5.5
a_mask = (xs > 3.5) & (xs < 6.5) & (ys > 2)
fig, axes = plt.subplots(1, 3, figsize=(11, 4))
# Sol: tüm uzay
ax = axes[0]
for x, y, inA, inB in zip(xs, ys, a_mask, b_mask):
renk = '#A51C30' if (inA and inB) else ('#2C5282' if inB else ('#DD6B20' if inA else '#9CA3AF'))
ax.plot(x, y, 'o', markersize=10, markerfacecolor=renk, markeredgecolor='#1f2937', linewidth=0.5)
ax.add_patch(Rectangle((0, 0), 5.5, 5, fill=False, edgecolor='#2C5282', linewidth=2, linestyle='--'))
ax.add_patch(Rectangle((3.5, 2), 3, 3, fill=False, edgecolor='#DD6B20', linewidth=2, linestyle='--'))
ax.text(5, 5.3, '$A$', color='#DD6B20', fontsize=14, weight='bold', ha='center')
ax.text(2.5, 5.3, '$B$', color='#2C5282', fontsize=14, weight='bold', ha='center')
ax.set_xlim(-0.3, 10.3); ax.set_ylim(-0.3, 6); ax.set_aspect('equal')
ax.set_title(f'$S$ — tüm uzay (60 çakıl)', fontsize=11)
ax.set_xticks([]); ax.set_yticks([])
for sp in ax.spines.values(): sp.set_visible(False)
# Orta: B'ye koşullu — B dışı silindi
ax = axes[1]
for x, y, inA, inB in zip(xs, ys, a_mask, b_mask):
if not inB:
ax.plot(x, y, 'x', markersize=8, color='#D1D5DB', markeredgewidth=1.5)
else:
renk = '#A51C30' if inA else '#2C5282'
ax.plot(x, y, 'o', markersize=10, markerfacecolor=renk, markeredgecolor='#1f2937', linewidth=0.5)
ax.add_patch(Rectangle((0, 0), 5.5, 5, fill=False, edgecolor='#2C5282', linewidth=2))
ax.text(2.5, 5.3, 'sadece $B$ kaldı', color='#2C5282', fontsize=11, weight='bold', ha='center')
ax.set_xlim(-0.3, 10.3); ax.set_ylim(-0.3, 6); ax.set_aspect('equal')
ax.set_title('B verildi → B dışı silindi', fontsize=11)
ax.set_xticks([]); ax.set_yticks([])
for sp in ax.spines.values(): sp.set_visible(False)
# Sağ: yeniden normalleştirme
ax = axes[2]
n_B = sum(b_mask); n_AB = sum(a_mask & b_mask)
ax.bar(['$P(A|B)$\n= n(A∩B)/n(B)'], [n_AB / n_B], color='#A51C30', edgecolor='#6B0E1B')
ax.text(0, n_AB/n_B + 0.02, f'{n_AB}/{n_B} = {n_AB/n_B:.2f}',
ha='center', fontsize=12, weight='bold')
ax.set_ylim(0, 1)
ax.set_ylabel('olasılık', fontsize=11)
ax.set_title('Renormalize: A∩B / B', fontsize=11)
ax.grid(True, axis='y', alpha=0.3)
plt.tight_layout()
plt.show()Çakıl dünyasının yeniden normalleştirmesi doğrudan masked softmax’tır: izin verilmeyen seçenekleri maskele, kalanları toplamı \(1\) olacak şekilde normalleştir — bu birebir koşullamadır (causal attention, geçersiz token maskeleme). Frekansçı dünya ise Monte Carlo kestirimi: \(B\) sağlanan örnekleri süz, içlerinde \(A\)’nın oranını hesapla.
5.7 Üç Teorem: Çarpım, Zincir Kuralı, Bayes
Koşullu olasılığın tanımını yeniden düzenleyerek üç teoremi dakikalar içinde çıkarıyoruz.
Teorem 1 (çarpım kuralı):
\[ P(A \cap B) = P(B)\,P(A \mid B) = P(A)\,P(B \mid A) \]
Teorem 2 (zincir kuralı):
\[ P(A_1 \cap \cdots \cap A_n) = P(A_1)\,P(A_2 \mid A_1)\,P(A_3 \mid A_1 \cap A_2) \cdots P(A_n \mid A_1 \cap \cdots \cap A_{n-1}) \]
Bunu \(n!\) farklı sırayla yazabilirsin.
“this is not just one theorem, but n factorial theorems.” — Blitzstein, 47:47
Teorem 3 (Bayes kuralı):
\[ P(A \mid B) = \frac{P(B \mid A)\,P(A)}{P(B)} \]
İspat tek satır (sadece böldük), ama bu eşitlik koca bir bilim dalının temeli.
“The proof is completely obvious. … The implications are extremely deep.” — Blitzstein, 49:22
Zincir kuralı = autoregressive çarpanlama: dil modeli \(p(w_1,\ldots,w_n) = \prod p(w_i \mid w_{<i})\). \(n!\) sıralama özgürlüğü → any-order üretim (XLNet, diffusion dil modelleri). Bayes kuralı = posterior \(\propto\) olabilirlik \(\times\) prior; bir generative sınıflandırıcı \(p(x \mid y)p(y)\) modelleyip Bayes ile \(p(y \mid x)\)’e çevirir, ve diffusion’ın ters adımı bir Bayes güncellemesidir.
5.8 Bu Dersin Özeti
- Bağımsızlık: \(P(A \cap B) = P(A)P(B)\). “Bağımsız = çarp.”
- Bağımsızlık ≠ ayrıklık: Karıştırma felakettir.
- İkili ≠ karşılıklı bağımsızlık: Üçlü denklem ayrı gerekir (XOR).
- Newton-Pepys: 6 zarda en az bir 6 (\(\approx 0{,}665\)) > 12’de en az iki (\(\approx 0{,}619\)) > 18’de en az üç (\(\approx 0{,}597\)).
- Koşullu olasılık: \(P(A \mid B) = P(A \cap B)/P(B)\).
- İki sezgi: çakıl dünyası (kısıtla + normalleştir) ve frekansçı dünya.
- Üç teorem: çarpım, zincir, Bayes.
Koşullu olasılık \(P(A \mid B) = P(A \cap B)/P(B)\), yeni kanıtla inançları güncellemenin matematiğidir — “istatistiğin ruhu” — ve ondan tek satırlık cebirle çıkan Bayes kuralı, koca bir çıkarım biliminin temelini atar.
5.9 Kontrol Soruları
Cevap: \(P(\text{ilk çift}) = 1/2\). \(P(\text{toplam 7}) = 6/36 = 1/6\). Kesişim (ilk çift, toplam 7): \((2,5), (4,3), (6,1)\) → \(3/36 = 1/12\). Çarpım: \((1/2)(1/6) = 1/12\). Eşit → bağımsız. Sezgiye aykırı ama doğru.
Cevap: Hayır. Ayrık → \(P(A \cap B) = 0\). Bağımsız olsalardı \(P(A)P(B) = 0{,}25\). \(0 \ne 0{,}25\) → bağımsız değil. Pozitif olasılıklı ayrık olaylar asla bağımsız olamaz.
Cevap: Bayes. \(P(+) = 0{,}99 \cdot 0{,}01 + 0{,}05 \cdot 0{,}99 = 0{,}0594\). \(P(\text{hasta} \mid +) = 0{,}99 \cdot 0{,}01 / 0{,}0594 \approx 0{,}167 = \%16{,}7\). Test iyi gibi ama düşük base rate yüzünden pozitiflerin çoğu yanlış pozitif. Ders 1’in base-rate neglect’inin Bayes hesabı.
Cevap: \(p(\text{kara, kedi}) = p(\text{kara}) \cdot p(\text{kedi} \mid \text{kara})\). Genelde \(p(w_1, \ldots, w_n) = \prod p(w_i \mid w_{<i})\). Model her adımda yalnızca bir sonraki token’ın koşullu dağılımını üretir; zincir kuralı tüm dizinin olasılığını yerel koşullulardan kurar.
5.10 Egzersizler
Egzersiz 1. 52 karttan tek kart. “Kupa” ile “Kız (Q)” bağımsız mı? Tanımla doğrula.
Egzersiz 2. Torba: 5 kırmızı, 3 mavi. Yerine koymadan 2 top. (a) İlk kırmızı verildiğinde ikincinin mavi olma olasılığı? (b) İkincinin mavi olma (koşulsuz) olasılığı?
Egzersiz 3. Üçü ikili bağımsız ama karşılıklı bağımsız olmayan üç olay kur. (İpucu: XOR.)
Egzersiz 4. (Python — Newton-Pepys Monte Carlo)
Egzersiz 5. (Sonraki ders) Soru 3’teki hastalığı, yanlış pozitif %1 olsaydı yeniden hesapla. Paydadaki \(P(+) = P(+|H)P(H) + P(+|S)P(S)\) ifadesi toplam olasılık yasası (LOTP) — Ders 5’in ana konusu.
5.11 Sonraki Ders İçin Hazırlık
Ders 5: Koşullamaya Devam, Toplam Olasılık Yasası
Toplam olasılık yasası (LOTP) ile bir olayın olasılığını, ayrık durumlara koşullayıp birleştirerek hesaplamayı öğreneceğiz. Bayes paydasının kendisi.
- Egzersizleri çöz — özellikle 4 (Monte Carlo) ve 5 (LOTP keşfi).
- “En az bir” refleksini pekiştir.
- Ana cümleyi tekrar oku: “Koşullu olasılık, inançları güncellemenin matematiğidir.”
5.12 Anahtar Kavramlar (Cheat Sheet)
| Kavram | Tanım | Blitzstein’de |
|---|---|---|
| Bağımsızlık | \(P(A \cap B) = P(A)P(B)\) | 11m25 |
| Bağımsız ≠ ayrık | Zıt kavramlar | 12m06 |
| İkili ≠ karşılıklı | Üçlü denklem ayrı (XOR) | 14m09 |
| Newton-Pepys | \(A \approx 0{,}665 > B \approx 0{,}619 > C \approx 0{,}597\) | 28m03 |
| Binom olasılığı | \(\binom{n}{k}(1/6)^k(5/6)^{n-k}\) | 26m45 |
| Koşullu olasılık | \(P(A \mid B) = P(A \cap B)/P(B)\) | 34m08 |
| Çakıl dünyası | Kısıtla + \(P(B)\)’ye böl | 36m11 |
| Frekansçı dünya | Uzun vadede oran | 41m25 |
| Çarpım kuralı | \(P(A \cap B) = P(B)P(A \mid B)\) | 45m00 |
| Zincir kuralı | \(\prod P(A_i \mid \text{öncekiler})\) | 47m12 |
| Bayes kuralı | \(P(A \mid B) = P(B \mid A)P(A)/P(B)\) | 49m02 |
5.13 ML Bağlantıları Özeti
- Koşullu olasılık → tüm öğrenme: \(p(y \mid x)\), posterior, attention.
- Zincir kuralı → autoregressive dil modeli; \(n!\) sıra → any-order (XLNet, diffusion LM).
- Bayes kuralı → posterior \(\propto\) olabilirlik \(\times\) prior; generative ↔︎ discriminative.
- Bağımsız = çarp → naive Bayes, faktörizasyon.
- İkili ≠ karşılıklı (XOR) → gizli katmanın gerekliliği.
- Çakıl yeniden normalleştirme → masked / causal softmax attention.
- Binom olasılığı → Binom dağılımı (Ders 8), sayım ve sınıflandırma.
Koşullu olasılık \(P(A \mid B) = P(A \cap B)/P(B)\), öğrenmenin matematiğidir. Tek satırlık Bayes kuralı bu tanımdan doğar. “Conditioning is the soul of statistics.”