6  Koşullamaya Devam ve Toplam Olasılık Yasası

LOTP, hastalık testi, savcı yanılgısı, explaining away

NotBölüm bilgisi

6.1 Bu Derste Ne Var?

Ders 4’te koşullu olasılığı ve Bayes’i kurduk. Burada onu kullanıyoruz:

  1. Toplam olasılık yasası (LOTP): karmaşık \(P(B)\)’yi ayrık durumlara bölüp birleştir.
  2. Bayes + LOTP: hastalık testi — %95 “doğru” test, ama pozitifin sadece %16’sı gerçekten hasta.
  3. Biyohazardlar: \(P(A \mid B)\) ile \(P(B \mid A)\) (savcı yanılgısı), prior ile posterior, bağımsızlık ile koşullu bağımsızlık.

“you can’t really think clearly except under the condition that you understand how to think conditionally.” — Blitzstein, 1:33

İpucuBuilder Notu — ML Köprüleri
  • LOTP = marjinalleştirme: \(p(x) = \sum_z p(x \mid z) p(z)\). Latent değişkenli modellerin (mixture, VAE, EM, HMM) temeli.
  • Hastalık testi = precision vs recall. Dengesiz veride accuracy neden yanıltır.
  • Savcı yanılgısı = \(p(\text{veri} \mid \text{model})\) ile \(p(\text{model} \mid \text{veri})\)’yi karıştırmak.
  • Koşullu bağımsızlık = Bayesian ağların ve naive Bayes’in çekirdeği; explaining away = collider yapısı.

6.2 Toplam Olasılık Yasası (LOTP)

Örnek uzay \(S\)’yi böler (partition) ayır: \(A_1, A_2, \ldots, A_n\) hem ayrık hem de birleşimleri \(S\). Bir \(B\) olayını her parça keser:

\[ P(B) = \sum_{i=1}^{n} P(B \cap A_i) = \sum_{i=1}^{n} P(B \mid A_i)\,P(A_i) \]

“I prefer to just think of it as breaking up a problem into simpler pieces.” — Blitzstein, 7:28

Kritik nokta: yararı, partition’ı ne kadar iyi seçtiğine bağlı. Kötü bölme \(n\) eşit zor problem verir; iyi bölme her parçayı kolaylaştırır.

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle, Ellipse

fig, ax = plt.subplots(figsize=(10, 4.5))
ax.add_patch(Rectangle((0, 0), 9, 4, facecolor='#f3f4f6', edgecolor='#1f2937', linewidth=2))

# Partition Ai
renkler = ['#fef3c7', '#fed7aa', '#bfdbfe']
isimler = ['$A_1$', '$A_2$', '$A_3$']
genislikler = [3, 3.5, 2.5]
basla = 0
for w, c, ad in zip(genislikler, renkler, isimler):
    ax.add_patch(Rectangle((basla, 0), w, 4, facecolor=c, edgecolor='#6B7280',
                          linewidth=1.5, alpha=0.85))
    ax.text(basla + w/2, 3.5, ad, fontsize=18, weight='bold', ha='center', color='#1f2937')
    basla += w

# B olayı (elips, partition'ları keser)
ax.add_patch(Ellipse((4.5, 1.5), 6.5, 1.8, facecolor='#A51C30', alpha=0.4,
                    edgecolor='#6B0E1B', linewidth=2))
ax.text(4.5, 1.5, '$B$', fontsize=20, weight='bold', ha='center', va='center', color='white')

# B ∩ Ai parçaları için annotation
ax.annotate('$P(B) = P(B|A_1)P(A_1) + P(B|A_2)P(A_2) + P(B|A_3)P(A_3)$',
            xy=(4.5, -0.3), ha='center', fontsize=12, color='#6B0E1B', weight='bold')

ax.set_xlim(-0.5, 9.5); ax.set_ylim(-0.8, 4.4); ax.set_aspect('auto')
ax.set_title('LOTP: $B$\'yi partition $\\{A_1, A_2, A_3\\}$ ile parçalara böl, koşullu olasılıkları ağırlıkla topla',
             fontsize=11)
ax.set_xticks([]); ax.set_yticks([])
for sp in ax.spines.values(): sp.set_visible(False)
plt.tight_layout()
plt.show()
Şekil 6.1
İpucuBuilder Notu — Marjinalleştirme ve Latent Modeller

LOTP, olasılıksal modellerde marjinalleştirmenin ta kendisi: \(p(x) = \sum_z p(x \mid z) p(z)\). Sınıflandırıcının marjinal tahmini, mixture’da bileşenleri toplama, HMM’de gizli durumları toplama — hepsi LOTP. “İyi partition seç” tavsiyesi de gizli değişkeni doğru tasarlamaya denk düşer.

6.3 İki Kart Paradoksu: “Bir As” vs “Maça Ası”

52 kartlık desteden 2 kart. İki koşullu olasılığı karşılaştır:

(a) İki as, en az bir as verildiğinde:

\[ P(\text{iki as} \mid \text{en az bir as}) = \frac{\binom{4}{2}}{\binom{52}{2} - \binom{48}{2}} = \frac{6}{198} = \frac{1}{33} \]

(b) İki as, maça ası verildiğinde: Bir kart maça ası, diğer kart 51 kartın eşit olası biri. Bunların 3’ü as:

\[ P(\text{iki as} \mid \text{maça ası}) = \frac{3}{51} = \frac{1}{17} \]

Şaşırtıcı: hangi as olduğunu söylemek olasılığı neredeyse iki katına çıkardı. “Bir as” = varoluşsal (belirsiz); “maça ası” = belirli bir kartı sabitlemek.

İpucuBuilder Notu — Kanıtın Belirliliği

Kanıtın belirliliği posterior’u kökten değiştirir. “En az bir” tipi (varoluşsal) ile “belirli bir öğe” tipi farklı sonuç verir — selection effect / gözlem çerçevesi sorunudur. Bir modele kanıt verirken “belirli mi, varoluşsal mı” ayrımı çıkarılan sonucu değiştirir.

6.4 Hastalık Testi: Bayes + LOTP El Ele

Hastalık nüfusun %1’inde. Test %95 doğru:

\[ P(T \mid D) = 0{,}95 = P(T^c \mid D^c) \]

Hastanın merak ettiği \(P(D \mid T)\). Bayes + LOTP:

\[ P(D \mid T) = \frac{P(T \mid D)P(D)}{P(T \mid D)P(D) + P(T \mid D^c)P(D^c)} = \frac{0{,}95 \cdot 0{,}01}{0{,}95 \cdot 0{,}01 + 0{,}05 \cdot 0{,}99} \approx 0{,}16 \]

%95 doğru test pozitif verdiğinde bile, hasta olma olasılığı sadece %16.

“there’s only a 16% chance that the patient has the disease.” — Blitzstein, 26:15

import matplotlib.pyplot as plt
import numpy as np

N = 10000
hasta = 100
saglam = N - hasta
hasta_poz = int(hasta * 0.95)        # 95
hasta_neg = hasta - hasta_poz        # 5
saglam_poz = int(saglam * 0.05)      # 495
saglam_neg = saglam - saglam_poz     # 9405

fig, axes = plt.subplots(1, 2, figsize=(11, 5))

# Sol: 4'lü tablo
ax = axes[0]
veri = [[hasta_poz, hasta_neg], [saglam_poz, saglam_neg]]
etiketler = [['Hasta + Pozitif\n95', 'Hasta + Negatif\n5'],
             ['Sağlam + Pozitif\n495 (yanlış)', 'Sağlam + Negatif\n9405']]
renkler = [['#A51C30', '#fdf2f8'], ['#DD6B20', '#bfdbfe']]
for i in range(2):
    for j in range(2):
        ax.add_patch(plt.Rectangle((j, 1-i), 1, 1, facecolor=renkler[i][j],
                                   edgecolor='#1f2937', linewidth=2))
        ax.text(j + 0.5, 1.5 - i, etiketler[i][j], ha='center', va='center',
                fontsize=10, color='white' if i == 0 and j == 0 else '#1f2937', weight='bold')

ax.text(-0.15, 1.5, 'Hasta\n(%1)', ha='right', va='center', fontsize=11, weight='bold', color='#A51C30')
ax.text(-0.15, 0.5, 'Sağlam\n(%99)', ha='right', va='center', fontsize=11, weight='bold', color='#DD6B20')
ax.text(0.5, 2.15, 'Pozitif', ha='center', fontsize=12, weight='bold')
ax.text(1.5, 2.15, 'Negatif', ha='center', fontsize=12, weight='bold')
ax.set_xlim(-0.7, 2.3); ax.set_ylim(-0.2, 2.5); ax.set_aspect('equal')
ax.set_title('10.000 kişi — 4\'lü tablo', fontsize=12)
ax.set_xticks([]); ax.set_yticks([])
for sp in ax.spines.values(): sp.set_visible(False)

# Sağ: Pozitif çıkanların kompozisyonu
ax = axes[1]
toplam_poz = hasta_poz + saglam_poz
ax.barh(['Toplam pozitif\n= 590'], [hasta_poz], color='#A51C30', label=f'Gerçekten hasta: 95 (%{100*hasta_poz/toplam_poz:.1f})')
ax.barh(['Toplam pozitif\n= 590'], [saglam_poz], left=[hasta_poz], color='#DD6B20',
        label=f'Yanlış pozitif: 495 (%{100*saglam_poz/toplam_poz:.1f})')
ax.text(hasta_poz/2, 0, f'{hasta_poz}', ha='center', va='center', fontsize=14, color='white', weight='bold')
ax.text(hasta_poz + saglam_poz/2, 0, f'{saglam_poz}', ha='center', va='center', fontsize=14, color='white', weight='bold')
ax.legend(loc='upper right', fontsize=10)
ax.set_xlabel('kişi sayısı', fontsize=12)
ax.set_title(f'$P(D \\mid T) = 95/590 \\approx 0{{,}}161$', fontsize=12)
ax.set_xlim(0, 650)
ax.grid(True, axis='x', alpha=0.3)

plt.tight_layout()
plt.show()
Şekil 6.2
ÖnemliBuilder Notu — Precision vs Recall

Bu örnek precision vs recall’un ta kendisi. \(P(T \mid D)\) = recall/sensitivity; \(P(D \mid T)\) = precision. Test “%95 accurate” görünse de, dengesiz veride (%1 pozitif) precision çöker — accuracy’nin neden yanıltıcı bir metrik olduğunun kanıtı. Aynı hesap, bir dolandırıcılık dedektörünün alarmlarının çoğunun neden yanlış pozitif olduğunu açıklar; çözüm base rate’i hesaba katmak ve kalibrasyon.

6.5 Biyohazard 1: P(A|B) ≠ P(B|A) — Savcı Yanılgısı

Blitzstein bu yaygın hataları “biyohazard” diye adlandırıyor. Birincisi: \(P(A \mid B)\) ile \(P(B \mid A)\)’yı karıştırmak. Hukukta buna savcı yanılgısı denir.

Sally Clark davası. İki bebeği SIDS’le ölen kadın, “uzman” tanığa göre \((1/8500)^2 \approx 1/73\) milyon olasılıkla “masum”. İki hata:

  • Bağımsızlık varsayımı: iki ölüm bağımsız sayıldı — ortak genetik faktör olabilir.
  • Savcı yanılgısı: \(1/73\) milyon = \(P(\text{kanıt} \mid \text{masum})\), ama önemli olan \(P(\text{masum} \mid \text{kanıt})\). Bayes ile çevirince paya \(P(\text{masum})\) girer; çoğu anne masum olduğundan bu prior \(\approx 1\)’e yakın, hesap kökten değişir.

Clark yıllarca hapis yattı; karar sonradan bozuldu.

ÖnemliBuilder Notu — Likelihood ≠ Posterior

Savcı yanılgısı = olabilirlik \(p(\text{kanıt} \mid \text{hipotez})\) ile posterior \(p(\text{hipotez} \mid \text{kanıt})\)’u karıştırmak. Bir modelde “p(veri | null) çok düşük” demek “p(null | veri) çok düşük” demek değildir — prior olmadan posterior’a geçemezsin. P-değeri yanlış-yorumlarının kökü budur.

6.6 Biyohazard 2 ve 3: Prior↔︎Posterior ve Koşullu Bağımsızlık

Biyohazard 2: prior ile posterior’u karıştırmak. \(P(A)\) prior (kanıttan önce); \(P(A \mid B)\) posterior. Sık hata: “A gerçekleşti deniyor, o hâlde \(P(A) = 1\).” Yanlış. Doğrusu:

\[ P(A \mid A) = 1 \]

Verilen bilgi koşul çubuğunun sağına gider, \(P(A)\)’yı \(1\) yapmaz.

Biyohazard 3: koşullu bağımsızlığı bağımsızlıkla karıştırmak. \(A\) ve \(B\), \(C\) verildiğinde koşullu bağımsızdır:

\[ P(A \cap B \mid C) = P(A \mid C)\,P(B \mid C) \]

Bağımsızlık tanımının her yerine “\(\mid C\)” ekle.

İpucuBuilder Notu — PGM ve Naive Bayes

Koşullu bağımsızlık = Bayesian ağların (graphical models) çekirdeği — bir değişken ebeveynlerine koşullu olarak gerisinden bağımsızdır; dev birleşik dağılım küçük çarpanlara iner. Naive Bayes: “özellikler, sınıfa koşullu bağımsızdır” — çoğu zaman yanlış ama şaşırtıcı işe yarar.

6.7 Explaining Away: Bağımsız ama Koşullu Bağımlı

İki örnek bağımsızlık ↔︎ koşullu bağımsızlığın birbirini gerektirmediğini gösterir.

(a) Koşullu bağımsız ⇏ bağımsız. Bilmediğin güçlü/zayıf bir satranç rakibiyle bir dizi maç. Güce koşullu olarak maçlar bağımsız (güç sabit). Ama koşulsuz bağımsız değil: ilk beş galibiyet, sonrakileri tahmin etmeye yarar.

(b) Bağımsız ⇏ koşullu bağımsız (explaining away). Yangın alarmı: F = gerçek yangın, C = patlamış mısır. F ile C bağımsız. Alarmın çaldığını (A) öğrenince:

\[ P(F \mid A \cap C^c) = 1 \]

Alarm çaldı + popcorn yok → yangın olmak zorunda. F ve C başta bağımsız, ama ortak sonuçlarına (A) koşullandığında bağımlı hale gelirler.

flowchart LR
    F["F<br/>Yangın<br/>(neden 1)"] --> A["A<br/>Alarm çaldı<br/>(ortak sonuç)"]
    C["C<br/>Popcorn<br/>(neden 2)"] --> A
    A -.->|"A'ya koşullan"| Renk["F ⊥ C başta<br/>F ⊥̸ C | A<br/>(explaining away)"]
    style F fill:#fef3c7,stroke:#9a3412
    style C fill:#bfdbfe,stroke:#1e3a5f
    style A fill:#fce7f3,stroke:#A51C30,stroke-width:3px
    style Renk fill:#fef9c3,stroke:#6B0E1B
flowchart LR
    F["F<br/>Yangın<br/>(neden 1)"] --> A["A<br/>Alarm çaldı<br/>(ortak sonuç)"]
    C["C<br/>Popcorn<br/>(neden 2)"] --> A
    A -.->|"A'ya koşullan"| Renk["F ⊥ C başta<br/>F ⊥̸ C | A<br/>(explaining away)"]
    style F fill:#fef3c7,stroke:#9a3412
    style C fill:#bfdbfe,stroke:#1e3a5f
    style A fill:#fce7f3,stroke:#A51C30,stroke-width:3px
    style Renk fill:#fef9c3,stroke:#6B0E1B
Şekil 6.3: Collider (v-yapısı): iki bağımsız neden (F, C) → ortak sonuç (A). A’ya koşullanmak F ve C’yi bağımlı yapar — explaining away. Nedensel çıkarımda collider’a koşullanmak sahte korelasyon üretir (Berkson paradoksu).
ÖnemliBuilder Notu — Collider Bias / Berkson

Bu doğrudan Bayesian ağlardaki collider (v-yapısı). Collider’a koşullanmak nedenleri bağımlı yapar — nedensel çıkarımda sahte korelasyon üretir (collider bias / Berkson paradoksu). Veri bir collider’a koşullanarak toplandıysa (sadece “hastaneye başvuranlar”), gerçekte bağımsız özellikler korele görünür ve model bu sahte ilişkiyi öğrenir. Çözüm: collider’a koşullanma/kontrol etme.

6.8 Bu Dersin Özeti

  1. Koşullu düşünmek kursun ana teması; LOTP olasılıkta “böl ve birleştir”.
  2. LOTP: \(P(B) = \sum_i P(B \mid A_i)P(A_i)\), ayrık \(\{A_i\}\) partition’ı. Yararı iyi bölmeye bağlı.
  3. İki kart paradoksu: \(P(\text{iki as} \mid \text{bir as}) = 1/33\), \(P(\text{iki as} \mid \text{maça ası}) = 1/17\).
  4. Hastalık testi: %95 doğru test, %1 base → \(P(D \mid T) \approx 0{,}16\).
  5. Savcı yanılgısı: Sally Clark (Bayes’siz hesap masumu mahkum eder).
  6. Prior ↔︎ posterior: \(P(A) \ne P(A \mid B)\); \(P(A \mid A) = 1\).
  7. Koşullu bağımsızlık sıradanı gerektirmez; explaining away = collider’a koşullanmak nedenleri bağımlı yapar.
ÖnemliTek bir cümle

LOTP karmaşık bir olayı ayrık durumlara koşullayıp birleştirir; koşullamanın en derin dersi şudur: \(P(A \mid B) \ne P(B \mid A)\), prior \(\ne\) posterior, ve bağımsızlık koşula göre ortaya çıkıp kaybolabilir.

6.9 Kontrol Soruları

Cevap: \(P(\text{tura}) = (2/3)(1/2) + (1/3)(1) = 1/3 + 1/3 = \mathbf{2/3}\).

Cevap: \(P(\text{hileli} \mid \text{tura}) = (1)(1/3)/(2/3) = \mathbf{1/2}\). Prior \(1/3\) → posterior \(1/2\).

Cevap: \(P(\text{uzun} \mid \text{NBA}) \approx 1\); \(P(\text{NBA} \mid \text{uzun}) \approx 0\). Savcı yanılgısı + base rate: NBA oyuncusu nadir, \(P(\text{NBA})\) küçük, Bayes hesabını çökertir.

Cevap: Explaining away. Veri collider’a koşullanarak toplandıysa (Berkson), gerçekte bağımsız özellikler korele görünür ve model bu sahte ilişkiyi öğrenir. Çözüm: collider’a koşullanmadan örnekle, veya nedensel grafik bilgisiyle düzelt.

6.10 Egzersizler

Egzersiz 1. Fabrika: M1 (%50, %2 hatalı), M2 (%30, %3 hatalı), M3 (%20, %5 hatalı). Hatalı olma olasılığını LOTP ile bul.

Egzersiz 2. (Devam) Hatalı ürün bulundu. M3’ten gelme olasılığı? (Bayes.)

Egzersiz 3. Kendi “explaining away” örneğini kur — bağımsız iki neden, ortak sonuç.

Egzersiz 4. (Python — hastalık testi simülasyon)

import random
random.seed(0)

N = 1_000_000
hasta_ve_poz = poz = 0
for _ in range(N):
    hasta = random.random() < 0.01
    test_poz = random.random() < (0.95 if hasta else 0.05)
    if test_poz:
        poz += 1
        if hasta:
            hasta_ve_poz += 1

print(f"P(D | T) ≈ {hasta_ve_poz / poz:.4f}   (Bayes beklenti: ~0.1610)")

Egzersiz 5. (Sonraki ders) Monty Hall: 3 kapı, biri arabaya. Bir kapı seç, sunucu boş bir kapıyı açar, değiştirme şansı verir. Değiştirmeli misin? Önce sezgini yaz.

6.11 Sonraki Ders İçin Hazırlık

Ders 6: Monty Hall ve Simpson Paradoksu

İki ünlü paradoks. Monty Hall: değiştirmek kazanma olasılığını \(1/3\)’ten \(2/3\)’e çıkarır. Simpson paradoksu: gruplar tek tek bir yönde, birleştirilince ters yönde sonuç verebilir.

UyarıDers 6 öncesi yapılacak
  • Egzersizleri çöz — özellikle 4 (simülasyon) ve 5 (Monty Hall sezgisi).
  • “Bayes paydası her zaman LOTP” refleksini pekiştir.
  • Ana cümleyi tekrar oku: “LOTP karmaşık bir olayı parçalara böler…”

6.12 Anahtar Kavramlar (Cheat Sheet)

Kavram Tanım Blitzstein’de
LOTP \(P(B) = \sum_i P(B \mid A_i)P(A_i)\) 6m00
Partition Ayrık + birleşim \(S\) 5m15
İki kart paradoksu \(1/33\) vs \(1/17\) 15m43
Hastalık testi %95 test + %1 base → \(\approx \%16\) 26m15
Bayes + LOTP Bayes paydası LOTP ile açılır 24m45
Savcı yanılgısı \(P(A \mid B) \ne P(B \mid A)\) 32m45
Prior vs posterior \(P(A) \ne P(A \mid B)\); \(P(A \mid A) = 1\) 39m48
Koşullu bağımsızlık \(P(A \cap B \mid C) = P(A \mid C)P(B \mid C)\) 41m14
Explaining away Bağımsız nedenler, collider’a koşullu → bağımlı 48m01

6.13 ML Bağlantıları Özeti

İpucu7 köprü
  1. LOTP → marjinalleştirme; mixture, latent değişken, EM, HMM.
  2. Hastalık testiprecision vs recall; dengesiz veride accuracy yanıltır.
  3. Savcı yanılgısı → likelihood \(\ne\) posterior; prior olmadan çıkarım yok.
  4. Prior ↔︎ posterior → Bayesian ML’in tanımı.
  5. Koşullu bağımsızlıkBayesian ağlar (PGM), naive Bayes faktörizasyonu.
  6. Explaining away (collider)selection bias, Berkson paradoksu.
  7. Kanıt belirliliği → “belirli mi, varoluşsal mı”; prompt/koşul tasarımı.
ÖnemliTek bir şey alıp gideceksen

Zor bir olasılığı, ayrık durumlara koşullayıp birleştirerek (LOTP) parçala. Üç tuzaktan sakın: \(P(A \mid B) \ne P(B \mid A)\), prior \(\ne\) posterior, bağımsızlık koşula göre belirip kaybolur. Koşullamanın yönü ve neye koşullandığın her şeyi değiştirir.