IlmHamroh
Data Science va sun'iy intellekt/Ehtimollik4/10-dars17 daqiqa
Mundarija (22)

9.4-dars: Bayes teoremasi

9-QISM — EHTIMOLLIK · 4-dars


1. Kirish va motivatsiya

9.3-darsda ko'rdik: P(A | B) ≠ P(B | A). Lekin ko'pincha bizga ma'lum bo'lgani — biri, kerak bo'lgani — ikkinchisi. Test ishlab chiqaruvchisi aytadi: "Kasal odamda test 99% musbat" — bu P(musbat | kasal). Bemor so'raydi: "Testim musbat — kasal bo'lish ehtimolim qancha?" — bu P(kasal | musbat). Bayes teoremasi — ular orasidagi ko'prik.

Bayes teoremasi — ehtimollikdagi eng muhim formulalardan biri va butun bir fikrlash usuli: oldingi ishonch (prior) + yangi dalil (likelihood) → yangilangan ishonch (posterior). Data Science'da: spam filtri (Naive Bayes — so'zlar berilganda spam ehtimoli), tibbiy diagnostika, firibgarlik aniqlash (signal berilganda firibgar ehtimoli), A/B test (Bayescha yondashuv), ML (Bayes optimal klassifikator, Bayescha optimallashtirish). Bayes'ni tushunmaslik — kam uchraydigan hodisalarda juda katta xatolarga olib keladi.

Real vaziyat. Bank firibgarlik tizimi: "Firibgar tranzaksiyalarning 99% ini aniqlaydi, halol tranzaksiyalarning faqat 2% ida xato signal beradi". Menejer: "Signal chiqsa — 99% firibgar, kartani bloklaymiz!". Data Scientist Bayes bilan hisoblaydi: firibgarlik — 0.1% tranzaksiya. P(firibgar | signal) = 0.99 × 0.001 / (0.99 × 0.001 + 0.02 × 0.999) ≈ 4.7%! Signallarning 95% dan ortig'i — halol mijozlar. Kartani avtomatik bloklash — minglab norozi mijoz. Yechim: signal → qo'shimcha tekshiruv (SMS tasdiq), bloklash emas.

Bu darsda Bayes teoremasini o'rganamiz.

Bu darsda:

  • Bayes formulasi
  • Prior, likelihood, posterior
  • Asosiy ulush xatosi (base rate fallacy)
  • Chastotalar jadvali (tabiiy chastota usuli)
  • Ketma-ket yangilanish
  • Bayes va spam filtri
  • Bayes tuzoqlari
  • Amaliy: diagnostika va firibgarlik

ℹ Misollar real numpy/pandas bilan (Python 3.14).


2. Nazariya — chuqur tushuntirish

2.1. Bayes formulasi

text
               P(B | A) × P(A)
  P(A | B) = -------------------
                    P(B)

  P(B) = P(B | A) × P(A) + P(B | A emas) × P(A emas)   (to'liq ehtimollik, 9.3)

Kelib chiqishi (ko'paytirish qoidasi, 9.3):
  P(A VA B) = P(A | B) × P(B) = P(B | A) × P(A)
  → ikkinchi tenglikni P(B) ga bo'lamiz

Bayes teoremasi — shartni "aylantiradi": P(B | A) (odatda ma'lum — test xususiyati, model aniqligi) va P(A) (asosiy ulush) dan P(A | B) ni (bizga kerak — dalil berilganda xulosa) hisoblaydi. Formula ko'paytirish qoidasining ikki ko'rinishidan to'g'ridan-to'g'ri chiqadi. Maxraj P(B) — to'liq ehtimollik formulasi 9.3-bob: dalil barcha yo'llar bilan qanchalik tez-tez uchraydi.

2.2. Prior, likelihood, posterior

text
  posterior   ~   likelihood   ×   prior
  P(A | B)        P(B | A)          P(A)

  prior       — dalilgacha ishonch (asosiy ulush: kasallik 1%)
  likelihood  — gipoteza to'g'ri bo'lsa, dalil qanchalik kutiladi (test sezgirligi 99%)
  evidence    — P(B), dalilning umumiy ehtimoli (normallashtiruvchi)
  posterior   — dalildan keyingi ishonch

Bayescha fikrlash: ishonch — o'zgaruvchan; har yangi dalil uni yangilaydi. Prior — boshlang'ich bilim (tarixiy ulush, ekspert fikri); likelihood — dalil gipotezaga qanchalik mos; posterior — yangilangan ishonch. Muhim: kuchli dalil (likelihood yuqori) ham juda past prior ni ko'p ko'tara olmaydi — va aksincha. Bu 9.1'da aytilgan "Bayescha ehtimollik" (ishonch darajasi) — chastotali yondashuvdan farqli.

2.3. Asosiy ulush xatosi (base rate fallacy)

Asosiy ulush xatosi — prior'ni e'tiborsiz qoldirib, faqat likelihood'ga qarash: "test 99% aniq → musbat bo'lsa 99% kasal". Kasallik kam uchrasa (1%), sog'lom odamlar juda ko'p — ularning kichik xato ulushi ham (masalan, 5%) kasallarning to'g'ri musbatlaridan ko'p bo'ladi. Natija: P(kasal | musbat) ≈ 17%. Qoida: hodisa qanchalik kam uchrasa, musbat natijaga shunchalik shubha bilan qarash kerak. ML'da: imbalanced klassifikatsiya (Klassifikatsiya qismi) — kam sinfda precision past bo'lishi aynan shu.

2.4. Chastotalar jadvali (tabiiy chastota usuli)

text
10 000 odam, kasallik 1%, sezgirlik 99%, xato musbat 5%:

                  kasal (100)    sog'lom (9 900)
  test musbat         99              495          → jami musbat 594
  test manfiy          1            9 405

  P(kasal | musbat) = 99 / 594 ≈ 0.167

Tabiiy chastota usuli — ehtimollar o'rniga aniq sonlar bilan fikrlash (10 000 odam): formula o'rniga jadval, intuitiv va xatosiz. Tadqiqotlar ko'rsatadi: shifokorlar ham ehtimollar bilan adashadi, lekin "10 000 kishidan 99 + 495 musbat" ko'rinishida to'g'ri javob beradi. Hisobotda menejerga Bayes natijasini shu shaklda tushuntiring 8.9-bob.

2.5. Ketma-ket yangilanish

Ketma-ket yangilanish — birinchi dalildan keyingi posterior ikkinchi dalil uchun prior bo'ladi: 1-test musbat → 17%; 2-test (mustaqil) ham musbat → prior 0.17 bilan → ~80%; 3-test → ~99%. Shu sababli tibbiyotda musbat skrining natijasi qayta test bilan tasdiqlanadi. Shart: testlar shartli mustaqil bo'lishi kerak (bir xil xato sababi bo'lmasin). Naive Bayes klassifikatori (Klassifikatsiya qismi) — ko'p so'z (dalil) bilan ketma-ket yangilanish, so'zlar shartli mustaqil deb faraz qilinadi ("naive").

2.6. Bayes va spam filtri

Spam filtri (Bayes'ning klassik qo'llanilishi): prior — P(spam) (masalan, 40%); likelihood — P("bepul" | spam), P("bepul" | spam emas) (o'quv ma'lumotidan so'z chastotalari); posterior — P(spam | "bepul"). Ko'p so'zda — ko'paytmalar (shartli mustaqillik farazi); amalda log-ehtimollar yig'indisi (juda kichik sonlar ko'paytmasi 0 ga "tushib ketmasin" — underflow). Nol chastota muammosi — Laplace tekislash (har so'z soniga +1). Bu Klassifikatsiya qismidagi MultinomialNB ning asosi.

2.7. Bayes tuzoqlari

Asosiy tuzoqlar: asosiy ulushni e'tiborsiz qoldirish (eng keng tarqalgan — firibgarlik, kasallik, anomaliya); P(B | A) = P(A | B) (prokuror xatosi, 9.3); prior'ni noto'g'ri tanlash (boshqa populyatsiyaning ulushi — kasalxona bemorlari va umumiy aholi ulushi farq qiladi); bog'liq dalillarni mustaqil deb yangilash (bir xil laboratoriyada ikki marta test — ishonch sun'iy oshadi); nol prior (P(A) = 0 bo'lsa, hech qanday dalil uni o'zgartirmaydi — "hech qachon" demang); nol likelihood (spam filtrida yangi so'z — Laplace); kichik sonlar ko'paytmasi (underflow — log ishlating).

2.8. Bayes — dalil bilan ishonchni yangilash

Bayes teoremasi: P(A | B) = P(B | A) × P(A) / P(B) — shartni aylantirish; posterior ~ likelihood × prior; maxraj — to'liq ehtimollik; asosiy ulush hal qiluvchi (kam uchraydigan hodisada musbat dalil ham past posterior); tabiiy chastota (10 000 kishilik jadval) — intuitiv tushuntirish; ketma-ket yangilanish (posterior → yangi prior; shartli mustaqillik); spam filtri (Naive Bayes, log, Laplace). Bog'lanishlar: 9.3 (shartli ehtimollik), Klassifikatsiya qismi (Naive Bayes, imbalanced, precision), Gipoteza testlari qismi (Bayescha A/B test).


3. Tez ma'lumotnoma

python
def bayes(prior: float, sezgirlik: float, xato_musbat: float) -> float:
    """P(A | musbat) = P(musbat | A) × P(A) / P(musbat)."""
    dalil = sezgirlik * prior + xato_musbat * (1 - prior)
    return sezgirlik * prior / dalil

bayes(0.01, 0.99, 0.05)          # ≈ 0.167 (tibbiy test)
bayes(0.001, 0.99, 0.02)         # ≈ 0.047 (firibgarlik)

# Ketma-ket yangilanish
p = 0.01
for _ in range(3):
    p = bayes(p, 0.99, 0.05)     # posterior → yangi prior

# Tabiiy chastota
N = 10_000
kasal = N * 0.01; tp = kasal * 0.99; fp = (N - kasal) * 0.05
tp / (tp + fp)

# Log-ehtimollar (underflow oldini olish)
import math
math.log(0.4) + sum(math.log(p) for p in [0.05, 0.02, 0.1])
QOIDA: prior'ni so'ra · jadval bilan tekshir · kam hodisada musbatga shubha · log ishlat

Bayes teoremasi xulosasi

P(A | B) = P(B | A) × P(A) / P(B)
Posterior ~ likelihood × prior
Asosiy ulush — kam hodisada musbat dalil ham past posterior
Tabiiy chastota — 10 000 kishilik jadval (intuitiv)
Ketma-ket — posterior → yangi prior (mustaqil dalillar)
Spam — Naive Bayes, log-ehtimol, Laplace tekislash

4. Batafsil misollar

Misollar real numpy/pandas bilan (Python 3.14).

Misol 1 — Tibbiy test: formula, jadval, simulyatsiya

python
"""Bayes: tibbiy test paradoksi uch usulda (real numpy)."""

import numpy as np


def bayes(prior: float, sezgirlik: float, xato_musbat: float) -> float:
    dalil = sezgirlik * prior + xato_musbat * (1 - prior)
    return sezgirlik * prior / dalil


def main() -> None:
    prior, sez, xm = 0.01, 0.99, 0.05

    print("=== 1. Formula ===")
    print(f"  P(kasal | musbat) = {bayes(prior, sez, xm):.3f}")

    print("\n=== 2. Tabiiy chastota (10 000 kishi) ===")
    N = 10_000
    kasal = int(N * prior)
    tp = round(kasal * sez)
    fp = round((N - kasal) * xm)
    print(f"  kasal: {kasal}, to'g'ri musbat: {tp}")
    print(f"  sog'lom: {N - kasal}, xato musbat: {fp}")
    print(f"  P = {tp} / ({tp} + {fp}) = {tp / (tp + fp):.3f}")

    print("\n=== 3. Simulyatsiya (1 000 000 kishi) ===")
    rng = np.random.default_rng(0)
    k = rng.random(1_000_000) < prior
    musbat = np.where(k, rng.random(k.size) < sez, rng.random(k.size) < xm)
    print(f"  P(kasal | musbat) = {k[musbat].mean():.3f}")
    print("  ⭐ Test 99% sezgir, lekin musbat natija ~17% kasallik")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Formula ===
  P(kasal | musbat) = 0.167

=== 2. Tabiiy chastota (10 000 kishi) ===
  kasal: 100, to'g'ri musbat: 99
  sog'lom: 9900, xato musbat: 495
  P = 99 / (99 + 495) = 0.167

=== 3. Simulyatsiya (1 000 000 kishi) ===
  P(kasal | musbat) = 0.167
  ⭐ Test 99% sezgir, lekin musbat natija ~17% kasallik

Nima ko'rsatdi: 2.1, 2.3, 2.4-bo'limlar.

Misol 2 — Asosiy ulush ta'siri (firibgarlik)

python
"""Prior (asosiy ulush) posterior'ga qanday ta'sir qiladi (real Python)."""


def bayes(prior: float, sezgirlik: float, xato_musbat: float) -> float:
    dalil = sezgirlik * prior + xato_musbat * (1 - prior)
    return sezgirlik * prior / dalil


def main() -> None:
    sez, xm = 0.99, 0.02
    print("=== 1. Firibgarlik tizimi (sezgirlik 99%, xato signal 2%) ===")
    for prior in [0.5, 0.1, 0.01, 0.001, 0.0001]:
        print(f"  firibgarlik ulushi {prior:>7.2%}: P(firibgar | signal) = {bayes(prior, sez, xm):.3f}")

    print("\n=== 2. 1 000 000 tranzaksiyada (ulush 0.1%) ===")
    N, ulush = 1_000_000, 0.001
    tp = N * ulush * sez
    fp = N * (1 - ulush) * xm
    print(f"  to'g'ri signal: {tp:,.0f}, xato signal: {fp:,.0f}")
    print(f"  signallarning {fp / (tp + fp):.1%} i — halol mijoz")

    print("\n=== 3. Xato signalni kamaytirish ===")
    for xm2 in [0.02, 0.005, 0.001]:
        print(f"  xato signal {xm2:.1%}: posterior {bayes(ulush, sez, xm2):.3f}")
    print("  ⭐ Kam hodisada xato musbat ulushi hal qiluvchi")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Firibgarlik tizimi (sezgirlik 99%, xato signal 2%) ===
  firibgarlik ulushi  50.00%: P(firibgar | signal) = 0.980
  firibgarlik ulushi  10.00%: P(firibgar | signal) = 0.846
  firibgarlik ulushi   1.00%: P(firibgar | signal) = 0.333
  firibgarlik ulushi   0.10%: P(firibgar | signal) = 0.047
  firibgarlik ulushi   0.01%: P(firibgar | signal) = 0.005

=== 2. 1 000 000 tranzaksiyada (ulush 0.1%) ===
  to'g'ri signal: 990, xato signal: 19,980
  signallarning 95.3% i — halol mijoz

=== 3. Xato signalni kamaytirish ===
  xato signal 2.0%: posterior 0.047
  xato signal 0.5%: posterior 0.165
  xato signal 0.1%: posterior 0.498
  ⭐ Kam hodisada xato musbat ulushi hal qiluvchi

Nima ko'rsatdi: 2.2, 2.3-bo'limlar.

Misol 3 — Ketma-ket yangilanish

python
"""Ketma-ket Bayes yangilanishi: posterior → yangi prior (real Python)."""


def bayes(prior: float, sezgirlik: float, xato_musbat: float) -> float:
    dalil = sezgirlik * prior + xato_musbat * (1 - prior)
    return sezgirlik * prior / dalil


def main() -> None:
    print("=== 1. Uchta mustaqil musbat test ===")
    p = 0.01
    print(f"  boshlang'ich prior: {p:.3f}")
    for i in range(1, 4):
        p = bayes(p, 0.99, 0.05)
        print(f"  {i}-test musbat → {p:.3f}")

    print("\n=== 2. Musbat, keyin manfiy ===")
    p = bayes(0.01, 0.99, 0.05)
    # manfiy natija: P(manfiy | kasal) = 0.01, P(manfiy | sog'lom) = 0.95
    p_manfiy = 0.01 * p / (0.01 * p + 0.95 * (1 - p))
    print(f"  musbat → {p:.3f}, keyin manfiy → {p_manfiy:.4f}")

    print("\n=== 3. Nol prior — hech qachon o'zgarmaydi ===")
    p = 0.0
    for _ in range(5):
        p = bayes(p, 0.99, 0.05)
    print(f"  5 ta musbatdan keyin: {p}")
    print("  ⭐ Posterior → keyingi dalil uchun prior")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Uchta mustaqil musbat test ===
  boshlang'ich prior: 0.010
  1-test musbat → 0.167
  2-test musbat → 0.798
  3-test musbat → 0.987

=== 2. Musbat, keyin manfiy ===
  musbat → 0.167, keyin manfiy → 0.0021

=== 3. Nol prior — hech qachon o'zgarmaydi ===
  5 ta musbatdan keyin: 0.0
  ⭐ Posterior → keyingi dalil uchun prior

Nima ko'rsatdi: 2.5, 2.7-bo'limlar.

Misol 4 — Kichik spam filtri (Naive Bayes qo'lda)

python
"""Naive Bayes spam filtri qo'lda: log-ehtimol va Laplace (real pandas/math)."""

import math
from collections import Counter

import pandas as pd


def main() -> None:
    xatlar = pd.DataFrame({
        "matn": ["bepul pul yut", "bepul chegirma bugun", "yut bepul sovg'a",
                 "ertaga uchrashuv", "hisobot ilova", "bugun uchrashuv vaqti",
                 "chegirma faqat bugun", "loyiha hisobot"],
        "spam": [1, 1, 1, 0, 0, 0, 1, 0],
    })

    prior = xatlar["spam"].mean()
    soz = {k: Counter(" ".join(xatlar[xatlar["spam"] == k]["matn"]).split()) for k in [0, 1]}
    lugat = set(soz[0]) | set(soz[1])
    jami = {k: sum(soz[k].values()) for k in [0, 1]}

    def log_p(matn: str, k: int) -> float:
        p = math.log(prior if k == 1 else 1 - prior)
        for s in matn.split():
            p += math.log((soz[k][s] + 1) / (jami[k] + len(lugat)))   # Laplace
        return p

    print("=== 1. O'quv ma'lumoti ===")
    print(f"  P(spam) = {prior:.2f}, lug'at: {len(lugat)} so'z")

    print("\n=== 2. Yangi xatlar ===")
    for yangi in ["bepul chegirma", "hisobot uchrashuv", "bugun yut"]:
        l1, l0 = log_p(yangi, 1), log_p(yangi, 0)
        p_spam = 1 / (1 + math.exp(l0 - l1))
        print(f"  '{yangi}': P(spam) = {p_spam:.3f}")

    print("\n=== 3. Nega log ===")
    print(f"  0.001^200 = {0.001 ** 200}  (underflow)")
    print(f"  200 × log(0.001) = {200 * math.log(0.001):.1f}")
    print("  ⭐ Naive Bayes = ko'p so'z bilan Bayes yangilanishi")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. O'quv ma'lumoti ===
  P(spam) = 0.50, lug'at: 13 so'z

=== 2. Yangi xatlar ===
  'bepul chegirma': P(spam) = 0.903
  'hisobot uchrashuv': P(spam) = 0.079
  'bugun yut': P(spam) = 0.777

=== 3. Nega log ===
  0.001^200 = 0.0  (underflow)
  200 × log(0.001) = -1381.6
  ⭐ Naive Bayes = ko'p so'z bilan Bayes yangilanishi

Nima ko'rsatdi: 2.6-bo'lim.


5. To'g'ri va noto'g'ri tushunishlar

Noto'g'ri fikr To'g'risi
"Test 99% aniq → musbat = 99% kasal" Prior'ga bog'liq (~17%)
"Prior — muhim emas" Kam hodisada hal qiluvchi
"Signal = firibgar" Ko'pi halol (asosiy ulush)
"Bir xil laboratoriyada 2 test — ikki dalil" Bog'liq dalil — ishonch sun'iy
"P = 0 — xavfsiz baho" Nol prior hech qachon o'zgarmaydi
"Ehtimollarni ko'paytiraman" Log yig'indisi (underflow)
"Yangi so'z — ehtimol 0" Laplace tekislash
"Bayes faqat nazariya" Spam, diagnostika, firibgarlik

6. Keng tarqalgan xatolar va yechimlari

1. Prior'siz xulosa

python
p_kasal = 0.99                     # sezgirlik, posterior emas     # ⚠️
p_kasal = bayes(0.01, 0.99, 0.05)  # ≈ 0.167                       # ✅

2. Maxrajni unutish

python
p = 0.99 * 0.01                    # bu P(musbat VA kasal)         # ⚠️
p = 0.99 * 0.01 / (0.99 * 0.01 + 0.05 * 0.99)                      # ✅

3. Underflow

python
p = math.prod(ehtimollar)          # 0.0 bo'lib qoladi             # ⚠️
log_p = sum(math.log(x) for x in ehtimollar)                       # ✅

4. Nol chastota

python
p = soz[s] / jami                  # yangi so'z → 0 → log xato     # ⚠️
p = (soz[s] + 1) / (jami + len(lugat))   # Laplace                 # ✅

5. Noto'g'ri populyatsiya prior'i

python
prior = 0.30   # kasalxona bemorlari ulushi — skrining uchun       # ⚠️
prior = 0.01   # tekshirilayotgan populyatsiya ulushi              # ✅

6. Bog'liq dalillar

python
p = bayes(bayes(0.01, 0.99, 0.05), 0.99, 0.05)  # bir xil namuna   # ⚠️
# ikkinchi test — mustaqil usul/namuna bilan                       # ✅

7. Nol prior

python
prior = 0.0                        # "bu hech qachon bo'lmaydi"    # ⚠️
prior = 1e-6                       # juda kichik, lekin nol emas   # ✅

7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 9.3-dars (o'tilgan): Shartli ehtimollik, to'liq ehtimollik
  • 8.8-dars (o'tilgan): Gipoteza va dalil
  • Klassifikatsiya qismi (reja): Naive Bayes, imbalanced, precision/recall
  • Gipoteza testlari qismi (reja): Bayescha A/B test
  • 8.9-dars (o'tilgan): Natijani tabiiy chastota bilan tushuntirish

8. Eng yaxshi amaliyotlar

  1. Har doim prior'ni (asosiy ulushni) so'rang.

  2. Natijani 10 000 kishilik jadval bilan tekshiring.

  3. Kam hodisada musbat natijaga shubha qiling.

  4. Musbat natija — qo'shimcha tekshiruv, avtomatik qaror emas.

  5. Ketma-ket yangilashda mustaqillikni tekshiring.

  6. Log-ehtimol ishlating.

  7. Laplace tekislash — nol chastotaga qarshi.

  8. Nol prior bermang.


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
1.  # Bayes formulasi?
2.  # prior nima?
3.  # likelihood nima?
4.  # posterior nima?
5.  # maxraj P(B) qanday hisoblanadi?
6.  # prior 1%, sezgirlik 99%, xato 5% → posterior?
7.  # prior kamaysa posterior?
8.  # 2-mustaqil musbat test → posterior?
9.  # nol prior + dalil?
10. # nega log?
11. # Laplace nima?
12. # Naive Bayes'dagi "naive"?
Javoblar
  1. P(A | B) = P(B | A) × P(A) / P(B)
  2. Dalilgacha ishonch
  3. P(dalil | gipoteza)
  4. Dalildan keyingi ishonch
  5. To'liq ehtimollik
  6. ~0.167
  7. Kamayadi
  8. ~0.8
  9. 0 qoladi
  10. Underflow
  11. Har soniga +1
  12. So'zlar shartli mustaqil deb faraz

Vazifa 2: Xatolarni tuzating

python
1.  p_firibgar = 0.99   # sezgirlik

2.  p = 0.99 * 0.001   # posterior sifatida

3.  p = math.prod([0.001] * 300)

4.  p = soz["yangi"] / jami

5.  prior = 0.0
Javoblar
python
1.  p_firibgar = bayes(0.001, 0.99, 0.02)

2.  p = 0.99 * 0.001 / (0.99 * 0.001 + 0.02 * 0.999)

3.  log_p = 300 * math.log(0.001)

4.  p = (soz["yangi"] + 1) / (jami + len(lugat))

5.  prior = 1e-6

Vazifa 3: Diagnostika

Modellang:

  1. Kasallik 0.5%, sezgirlik 95%, xato musbat 3%
  2. Formula bilan posterior
  3. 100 000 kishilik jadval
  4. Ikkinchi mustaqil test

Vazifa 4: Firibgarlik

Modellang:

  1. Ulush 0.2%, sezgirlik 98%
  2. Xato signal 1%, 0.5%, 0.1%
  3. Har holatda posterior
  4. Bloklash yoki SMS tasdiq qarori

Vazifa 5: Spam filtri

Modellang:

  1. 20 ta xat (spam/emas)
  2. So'z chastotalari
  3. Laplace bilan Naive Bayes
  4. 5 ta yangi xatni tasniflash

Vazifa 6: Integratsiya

Modellang:

  1. Shartli ehtimollik (9.3)
  2. To'liq ehtimollik (maxraj)
  3. Simulyatsiya (9.1)
  4. Hisobotda tabiiy chastota (8.9)

Vazifa 7: O'ylash

Bayescha fikrlash: "Kuchli da'vo — kuchli dalil talab qiladi". Yangi ML model "sotuvni 40% oshiradi" deb da'vo qilinmoqda, bitta pilot test yaxshi natija bergan. Bayes nuqtai nazaridan bu natijaga qanchalik ishonish kerak? Prior qayerdan olinadi va nima uchun "hayratli" natijalar ko'pincha takrorlanmaydi?

Javob

Qisqa javob: "40% o'sish" kabi natijalarning prior ehtimoli juda past (o'xshash loyihalarning ko'pi bir necha foiz beradi). Bitta test — cheklangan dalil; xato musbat natija ehtimoli (tasodif, p-hacking, xato) bilan solishtirganda, posterior hali past bo'lishi mumkin. Shuning uchun "hayratli" natijalar ko'pincha takrorlanmaydi — ular xato musbatlar orasidan "tanlangan".

1. Prior qayerdan

  • O'xshash loyihalar tarixi (kompaniyadagi oldingi A/B testlar)
  • Soha tajribasi (odatda o'sish 1-5%)
  • Meta-tahlillar (ko'p tadqiqot natijalari)

2. Hisob g'oyasi

Haqiqatan 40% Haqiqatan yo'q
Prior 2% 98%
Pilot "yaxshi" 80% 10% (tasodif, xato)
Jami 1.6 9.8

P(haqiqiy | yaxshi pilot) ≈ 1.6 / 11.4 ≈ 14%.

3. Nega hayratli natijalar takrorlanmaydi

  • Past prior + shovqinli dalil = past posterior
  • Ko'p tajriba ichidan eng yaxshisi e'lon qilinadi (tanlov)
  • Kichik namuna — katta tasodifiy og'ish (9.1)
  • "Winner's curse" — tanlangan natija haqiqiydan kattaroq

4. Data Scientist qanday

  1. Prior'ni tarixiy ma'lumotdan baholaydi
  2. Mustaqil takroriy test talab qiladi (ketma-ket yangilanish)
  3. Ta'sir kattaligini ehtiyotkorlik bilan kichraytirib baholaydi
  4. Menejerga tabiiy chastota bilan tushuntiradi

5. Xulosa

  1. Kuchli da'vo — past prior; bitta dalil yetarli emas
  2. Posterior = prior × dalil kuchi
  3. Hayratli natijalar — ko'pincha tanlangan xato musbatlar
  4. Takroriy mustaqil test — ishonchning yagona yo'li

Nimani mustahkamlaydi: 2.2, 2.3, 2.5-bo'limlar.


Xulosa

Bu darsda Bayes teoremasini o'rgandik.

Eng muhim uch fikr:

  1. Bayes formulasi. P(A | B) = P(B | A) × P(A) / P(B) — ma'lum P(dalil | gipoteza) dan kerakli P(gipoteza | dalil) ga o'tish; maxraj — to'liq ehtimollik 9.3-bob. Posterior ~ likelihood × prior.

  2. Asosiy ulush hal qiluvchi. Kam uchraydigan hodisada (kasallik 1%, firibgarlik 0.1%) 99% sezgir test ham past posterior beradi (17%, 4.7%) — xato musbatlar ko'p. Tabiiy chastota jadvali (10 000 kishi) — intuitiv tekshiruv va menejerga tushuntirish usuli. Musbat signal — qo'shimcha tekshiruv, avtomatik qaror emas.

  3. Ketma-ket yangilanish va spam filtri. Posterior → keyingi dalil uchun prior (mustaqil dalillar); nol prior hech qachon o'zgarmaydi. Naive Bayes — ko'p so'z bilan yangilanish: log-ehtimollar (underflow), Laplace tekislash (nol chastota).

Keyingi darsda tasodifiy o'zgaruvchini o'rganamiz: natijani songa aylantirish, diskret va uzluksiz o'zgaruvchilar, ehtimollik funksiyalari (PMF, PDF, CDF) va scipy.stats bilan ishlash.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
9.4-dars: Bayes teoremasi — IlmHamroh