Mundarija (31)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Intervyu javobining tuzilishi
- 2.2. Bayes: tibbiy test masalasi
- 2.3. Tug'ilgan kun paradoksi
- 2.4. Kutilgan qiymat: ketma-ket ikki gerb
- 2.5. p-qiymat nima va nima EMAS
- 2.6. Ishonch oralig'i talqini
- 2.7. I va II tur xatolar va quvvat
- 2.8. Markaziy limit teoremasi
- 2.9. A/B test dizayni: namuna hajmi, peeking, ko'p testlash
- 2.10. Simpson paradoksi
- 2.11. Korrelyatsiya va sabab
- 2.12. Tanlash tarafkashligi va omon qolganlar
- 2.13. Monty Hall masalasi
- 2.14. Kutish paradoksi (inspection paradox)
- 2.15. O'rtachaga qaytish (regression to the mean)
- 2.16. Chastotali va Bayes yondashuvlari — qisqa
- 2.17. Tuzoqlar
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Ehtimollik klassikasi: Bayes, tug'ilgan kunlar, HH uchun kutilma
- Misol 2 — p-qiymat nima va nima emas, ishonch oralig'i va CLT
- Misol 3 — A/B test: namuna hajmi, quvvat, peeking va ko'p testlash
- Misol 4 — Tarafkashliklar: Simpson, korrelyatsiya va sabab, omon qolganlar
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
29.9-dars: Intervyu: statistika va ehtimollik
29-QISM — LOYIHALAR VA KARYERA · 9-dars
1. Kirish va motivatsiya
Oldingi darsda rezyume va ish qidirishni o'rgandik: rezyume suhbatga taklif olish uchun, voronka esa bu jarayonni o'lchash uchun. Taklif kelganidan keyin navbat intervyuga keladi. Data Science intervyularining deyarli hammasida statistika va ehtimollik bo'limi bor — Data Analyst uchun ham, ML Engineer uchun ham. Sabab oddiy: bu kasbning har kunlik qarorlari noaniqlik ostida qabul qilinadi — "bu farq haqiqiymi?", "testni qachon to'xtatamiz?", "bu model yaxshiroqmi yoki omadli bo'ldimi?".
Intervyuda bu savollar ko'pincha qisqa masala shaklida keladi: "Kasallik testi 95% aniq, natija musbat — kasal bo'lish ehtimoli qancha?", "Tangani ketma-ket ikki gerb chiqquncha tashlaymiz — o'rtacha necha marta?", "p-qiymat 0.03 — bu nimani anglatadi?". Ular qisqa, lekin tuzoqli: birinchi xayolga kelgan javob ko'pincha noto'g'ri. Kasallik masalasida ko'p odam "95%" deydi — to'g'ri javob esa bu darsning 1-misolida 8.8% chiqadi.
Real vaziyat. Nomzod texnik intervyuda "p-qiymat — nol gipoteza to'g'ri bo'lish ehtimoli" deb javob berdi. Intervyuer davom etdi: "Demak, p = 0.04 bo'lsa, ta'sir yo'qligi ehtimoli 4%mi?" Nomzod "ha" dedi. Bu — eng keng tarqalgan xato, va u amalda qimmatga tushadi: "sezilarli" deb e'lon qilingan natijalarning katta qismi yolg'on bo'lishi mumkin. 2-misolda aynan shu savolni simulyatsiya bilan tekshiramiz: haqiqiy ta'sirlar kam bo'lgan dunyoda p < 0.05 bo'lgan testlarning deyarli yarmida nol gipoteza to'g'ri.
Bu darsda intervyuda tez-tez so'raladigan statistika va ehtimollik savollarini ko'rib chiqamiz. Har bir savol uchun: savol → yaxshi javob tuzilishi → tez-tez qilinadigan xato → kod bilan tekshiruv. Oxirgi qism eng muhim: intervyuda ham, ishda ham javobingizni simulyatsiya bilan tekshira olish — sizni boshqa nomzodlardan ajratib turadi.
Bu darsda:
- Intervyu javobining tuzilishi: aniqlashtirish → formula → intuitsiya → tekshiruv
- Bayes teoremasi: tibbiy test masalasi
- Tug'ilgan kun paradoksi
- Kutilgan qiymat: ketma-ket ikki gerb uchun 6 ta tashlash
- p-qiymat nima va nima EMAS
- Ishonch oralig'i talqini va qamrov
- I va II tur xatolar, quvvat, "g'olib la'nati"
- Markaziy limit teoremasi va uning chegaralari
- A/B test dizayni: namuna hajmi, peeking, ko'p testlash
- Simpson paradoksi, korrelyatsiya va sabab, omon qolganlar tarafkashligi
- Qo'shimcha klassikalar: Monty Hall, kutish paradoksi, o'rtachaga qaytish, chastotali va Bayes
- Tuzoqlar
ℹ Misollar real numpy/scipy/pandas bilan (Python 3.14). Har javob analitik formula va Monte Carlo simulyatsiyasi bilan solishtiriladi. Nazariy asoslar 04, 09 va 11-qismlarda o'tilgan — bu dars ularni intervyu formatiga keltiradi.
2. Nazariya — chuqur tushuntirish
2.1. Intervyu javobining tuzilishi
Intervyuer faqat to'g'ri raqamni emas, fikrlash jarayonini baholaydi. To'g'ri raqamni tushuntirishsiz aytish ham, noto'g'ri raqamni yaxshi mulohaza bilan aytish ham — turli signal beradi.
1. ANIQLASHTIRISH (10-20 soniya)
"95% aniq" - sezgirlikmi, spetsifiklikmi, ikkalasimi?
tanga adolatli-mi? kunlar bir tekis taqsimlanganmi? kabisa yili?
2. MODEL / FORMULA
Bayes, kombinatorika, Markov holatlari, CLT
3. INTUITSIYA (sonli misol)
"1000 odamni tasavvur qilaylik: 10 kasal, ..."
4. TEKSHIRUV
chegaraviy holat (tarqalish 0 yoki 1 bo'lsa?), o'lcham tekshiruvi,
"kompyuterim bo'lsa - 5 qatorli simulyatsiya bilan tekshirardim"
5. AMALIY MA'NO
"shuning uchun skrining testidan keyin tasdiqlovchi test kerak"
XATOLAR: darhol raqam aytish; jim o'ylash (fikrni ovoz chiqarib ayting);
noaniq javobni "ishonchli" qilib aytish; tekshirmaslik Simulyatsiya — sizning qo'shimcha qurolingiz. Jonli kodlash imkoni bo'lsa 29.10-bob, ko'p ehtimollik masalasini 5-10 qatorli Monte Carlo bilan tekshirish mumkin. Bu darsdagi har bir misol shu uslubda yozilgan: avval formula, keyin simulyatsiya, keyin ular mos keladimi — 2*SE bilan.
2.2. Bayes: tibbiy test masalasi
Savol. Kasallik aholining 1% ida bor. Test kasallarda 95% holatda musbat (sezgirlik), sog'lomlarda 90% holatda manfiy (spetsifiklik). Test musbat chiqdi. Kasal bo'lish ehtimoli qancha?
Yaxshi javob tuzilishi.
Bayes 9.4-bob: P(K | +) = P(+ | K) P(K) / P(+)
P(+) = P(+ | K) P(K) + P(+ | sog') P(sog')
= 0.95 * 0.01 + 0.10 * 0.99 = 0.0095 + 0.099 = 0.1085
P(K | +) = 0.0095 / 0.1085 = 0.0876 (~9%)
INTUITSIYA (1000 odam):
10 kasal -> ~10 ta musbat (haqiqiy)
990 sog'lom -> ~99 ta musbat (yolg'on)
musbatlar ichida kasal: 10 / (10 + 99) ~ 9%
AMALIY: kam tarqalgan holatda skrining testi ko'p yolg'on musbat beradi;
ikkinchi mustaqil test: prior endi 0.0876 -> P ~ 0.48
ML dagi aynan shu hodisa: nomutanosib sinflarda precision past (14.9)Tez-tez qilinadigan xato. "95%" deyish — P(+ | K) ni P(K | +) bilan almashtirish (asosiy stavkani e'tiborsiz qoldirish, base rate fallacy). Yana bir xato — ikkinchi test "ham xuddi shunday 9% beradi" deyish: ikkinchi testda prior endi 1% emas, 8.76%.
Kod bilan tekshiruv: 1-misol, 1-bo'lim — million odam simulyatsiyasi.
2.3. Tug'ilgan kun paradoksi
Savol. Xonada nechta odam bo'lsa, kamida ikkitasining tug'ilgan kuni bir xil bo'lish ehtimoli 50% dan oshadi?
Yaxshi javob tuzilishi.
Aniqlashtirish: 365 kun, bir tekis, kabisa yili yo'q, egizaklar yo'q
Teskari hodisa 9.2-bob: HAMMASI turlicha
P(turlicha) = 365/365 * 364/365 * ... * (365 - k + 1)/365
P(kamida bitta juft) = 1 - P(turlicha)
k = 23 -> 0.507; k = 57 -> 0.99
INTUITSIYA: savol "MENING tug'ilgan kunim bilan" emas, "ISTALGAN ikki
kishi" haqida; 23 kishida juftliklar soni 23 * 22 / 2 = 253 ta
AMALIY: xesh to'qnashuvlari, A/B test uchun ID lar, takror yozuvlar -
"kichik ehtimol * ko'p juftlik = katta ehtimol"Tez-tez qilinadigan xato. 365 / 2 = 183 deyish — bu "kimdir mening tug'ilgan kunimda" degan boshqa savolga yaqin javob. Yoki k / 365 ni qo'shish (ehtimollar qo'shilmaydi, hodisalar kesishadi).
Kod bilan tekshiruv: 1-misol, 2-bo'lim.
2.4. Kutilgan qiymat: ketma-ket ikki gerb
Savol. Adolatli tangani ketma-ket ikki gerb (HH) chiqquncha tashlaymiz. O'rtacha nechta tashlash kerak? HT uchun-chi?
Yaxshi javob tuzilishi — Markov holatlari va kutilmaning chiziqliligi 9.6-bob:
HH uchun holatlar: S0 (boshlanish yoki oxirgi T), S1 (oxirgi H)
E0 = 1 + 0.5 * E1 + 0.5 * E0 (H -> S1, T -> S0)
E1 = 1 + 0.5 * 0 + 0.5 * E0 (H -> tamom, T -> S0 ga QAYTISH)
-> E0 = 2 + E1, E1 = 1 + 0.5 * E0 -> E0 = 6
HT uchun:
E0 = 1 + 0.5 * E1 + 0.5 * E0
E1 = 1 + 0.5 * 0 + 0.5 * E1 (T -> tamom, H -> S1 da QOLADI)
-> E1 = 2, E0 = 4
UMUMIY: k ta ketma-ket gerb uchun 2^(k+1) - 2 (HHH -> 14)
INTUITSIYA: ikkala naqsh ehtimoli bir xil (1/4), lekin HH "o'z-o'zi bilan
ustma-ust tushadi" - muvaffaqiyatsizlik butun yutuqni yo'qotadiTez-tez qilinadigan xato. "Ehtimol 1/4, demak 4 ta tashlash" — bu HH ni mustaqil juftliklar (1-2, 3-4, ...) sifatida tashlaganda bo'lardi va u ham to'g'ri emas (u holda 8 ta tashlash). Yoki HH va HT uchun bir xil javob berish.
Kod bilan tekshiruv: 1-misol, 3-bo'lim — 100 000 ketma-ketlik.
2.5. p-qiymat nima va nima EMAS
Savol. "p = 0.03 chiqdi. Bu nimani anglatadi?"
Yaxshi javob tuzilishi.
TA'RIF 11.1-bob: nol gipoteza to'g'ri bo'lsa, kuzatilgan yoki undan ham
chetroq natijani olish ehtimoli.
p = P(shunday yoki chetroq ma'lumot | H0)
p-QIYMAT NIMA EMAS:
1. P(H0 | ma'lumot) EMAS - buning uchun prior kerak (Bayes)
2. ta'sir kattaligi EMAS - katta n da kichik ta'sir ham p ~ 0
3. natija takrorlanish ehtimoli EMAS
4. p > 0.05 -> "ta'sir yo'q" EMAS - quvvat past bo'lishi mumkin
5. p = 0.049 va p = 0.051 - deyarli bir xil dalil
H0 TO'G'RI BO'LSA: p ~ Uniform(0, 1) -> P(p < 0.05) = 0.05 = alfa
"p < 0.05 li testlarning qanchasida H0 to'g'ri?" (FDR) - bog'liq:
haqiqiy ta'sirlar ulushi pi va quvvat:
FDR = (1 - pi) * alfa / ((1 - pi) * alfa + pi * quvvat)
pi = 0.1, quvvat 0.48 -> FDR ~ 0.48 (deyarli yarmi!)Tez-tez qilinadigan xato. "p = 0.03 — nol gipoteza to'g'ri bo'lish ehtimoli 3%" yoki "ta'sir 97% ehtimol bilan haqiqiy". Ikkinchi xato: "p juda kichik — demak ta'sir katta".
Kod bilan tekshiruv: 2-misol, 1-3-bo'limlar.
2.6. Ishonch oralig'i talqini
Savol. "95% ishonch oralig'i [2.1, 3.4] — bu nimani anglatadi?"
Yaxshi javob tuzilishi.
CHASTOTALI TALQIN (4.13, 11-qism):
PROTSEDURA 95% qamrovga ega: tajribani ko'p marta takrorlasak, qurilgan
oraliqlarning ~95% i haqiqiy parametrni qamraydi.
BITTA tayyor oraliq [2.1, 3.4] parametrni yo qamraydi, yo yo'q -
"95% ehtimol bilan parametr shu oraliqda" chastotali ma'noda NOTO'G'RI
(Bayes kredibl oralig'ida esa bunday talqin to'g'ri - prior bilan)
QAMROV SHARTLARI: t-oraliq normal ma'lumotda aniq; boshqa taqsimotda CLT
ga tayanadi -> kichik n va og'ir dumli taqsimotda qamrov 95% dan PAST
(2-misol: lognormal, n=5 -> 0.766)
yechim: katta n, log-transformatsiya, bootstrap (11.8)Tez-tez qilinadigan xato. "Ma'lumotlarning 95% i shu oraliqda" (bu bashorat oralig'i yoki taqsimot kvantillari bilan chalkashtirish) yoki "parametr 95% ehtimol bilan shu oraliqda" (chastotali oraliq uchun).
Kod bilan tekshiruv: 2-misol, 4-bo'lim — 20 000 takror bilan qamrov.
2.7. I va II tur xatolar va quvvat
Savol. "I va II tur xatolarni tushuntiring. Quvvat nima va nega muhim?"
Yaxshi javob tuzilishi.
H0 to'g'ri H1 to'g'ri
H0 rad etildi I TUR XATO (alfa) to'g'ri (quvvat = 1 - beta)
H0 rad etilmadi to'g'ri II TUR XATO (beta)
MISOL (mahsulot): I tur - ishlamaydigan funksiyani chiqarish;
II tur - foydali funksiyani tashlab yuborish
QUVVAT 11.2-bob oshadi: n kattalashsa, ta'sir katta bo'lsa, dispersiya
kichik bo'lsa, alfa katta bo'lsa
KAM QUVVAT XAVFI:
1. haqiqiy ta'sirlar ko'p o'tkazib yuboriladi
2. "G'OLIB LA'NATI" (type M xato): sezilarli chiqqan natijalar
ta'sirni OSHIRIB ko'rsatadi - faqat "omadli" katta baholar
chegaradan o'tadiTez-tez qilinadigan xato. "p > 0.05, demak ta'sir yo'q" — kam quvvatli testda bu II tur xato bo'lishi mumkin. Yoki kichik testda topilgan "+1.8 p.p." ni haqiqiy ta'sir deb biznes rejaga qo'yish.
Kod bilan tekshiruv: 3-misol, 1-2-bo'limlar.
2.8. Markaziy limit teoremasi
Savol. "Markaziy limit teoremasi nima deydi va qachon ishlamaydi?"
Yaxshi javob tuzilishi.
CLT 4.7-bob: mustaqil, bir xil taqsimlangan, CHEKLI dispersiyali X_i uchun
n kattalashganda o'rtacha taqsimoti ~ Normal(mu, sigma^2 / n)
- TAQSIMOTNING o'zi emas, O'RTACHA normallashadi
- std(o'rtacha) = sigma / sqrt(n)
- asimmetriya(o'rtacha) = asimmetriya(X) / sqrt(n) -> sekin kamayadi
QACHON EHTIYOT BO'LISH KERAK:
- og'ir dumli, asimmetrik (daromad, chek summasi): n=30 "qoidasi" yetmaydi
- dispersiya cheksiz (Koshi taqsimoti) - CLT umuman ishlamaydi
- kuzatuvlar bog'liq (bitta foydalanuvchining ko'p sessiyasi) -
samarali n kichikroq, SE ni klaster bo'yicha hisoblangTez-tez qilinadigan xato. "CLT bo'yicha ma'lumot normal taqsimlanadi" yoki "n = 30 dan keyin hamma narsa normal". Daromad kabi metrikalarda A/B test uchun bu qimmat xato.
Kod bilan tekshiruv: 2-misol, 4-5-bo'limlar.
2.9. A/B test dizayni: namuna hajmi, peeking, ko'p testlash
Savol. "Konversiya 10%. +1 foiz punktni aniqlash uchun A/B testni qanday rejalashtirasiz?" Ketidan: "Menejer har kuni natijaga qarab, sezilarli bo'lganda to'xtatmoqchi — nima deysiz?" va "Biz 20 ta metrikani kuzatamiz — muammo bormi?"
Yaxshi javob tuzilishi.
1. METRIKA: bitta asosiy (konversiya) + guardrail lar (qaytish, xatolar)
2. MDE (minimal aniqlanadigan ta'sir) - biznes uchun muhim eng kichik farq
3. NAMUNA HAJMI (11.2, 11.4):
n = ( z_(1-alfa/2) * sqrt(2 * p_ort * q_ort)
+ z_(1-beta) * sqrt(p0 q0 + p1 q1) )^2 / MDE^2
p0 = 0.10, MDE = 0.01 -> har guruhga ~14 750
tez qoida: n ~ 16 * p (1 - p) / MDE^2 = 14 400
4. DAVOMIYLIK: n / kunlik trafik, kamida to'liq hafta(lar) - hafta kuni ta'siri
5. TASODIFIY TAQSIMLASH: foydalanuvchi bo'yicha (xesh, 27.13), SRM tekshiruvi
6. TAHLIL: oldindan yozilgan reja bo'yicha, bir marta
PEEKING 27.13-bob: har qarash - yangi imkoniyat "tasodifan" p < 0.05 olish
20 qarash -> yolg'on musbat 0.05 dan ~0.25 ga
yechim: oldindan belgilangan n; ketma-ket testlar (alfa sarflash)
KO'P TESTLASH 11.9-bob: 20 ta H0 metrikada P(>=1 yolg'on) = 1 - 0.95^20 = 0.64
Bonferroni (alfa/m) - FWER nazorati, konservativ
Benjamini-Hochberg - FDR nazorati, ko'proq topadiTez-tez qilinadigan xato. Namuna hajmini "bir hafta" deb tanlash (hisobsiz); peeking ga rozi bo'lish; 20 metrikadan bittasi "sezilarli" chiqsa, uni g'alaba deb e'lon qilish; har kuni qarab, sezilarli bo'lmaguncha "yana bir hafta" davom ettirish.
Kod bilan tekshiruv: 3-misol, 1, 3, 4-bo'limlar.
2.10. Simpson paradoksi
Savol. "Yangi sahifa har bir segmentda konversiyani oshirdi, lekin umumiy konversiya tushdi. Qanday bo'lishi mumkin?"
Yaxshi javob tuzilishi.
Sabab: guruhlar tarkibi farq qiladi (8.4, 28.11)
yangi sahifa ko'proq MOBIL foydalanuvchilarga ko'rsatilgan,
mobil konversiya o'z-o'zidan past (4% va 12%)
-> umumiy yangi guruh "past konversiyali" segmentga og'gan
QAYSI JAVOB TO'G'RI: segment (qurilma) sahifa tanloviga SABAB bo'lsa -
segment ichidagi farqlar, segment ulushlari bilan standartlanadi
TO'G'RI RANDOMIZATSIYADA (A/B): segmentlar ulushi guruhlarda teng ->
Simpson yuz bermaydi (katta n da); yuz bersa - taqsimlash buzilgan
(SRM), rollout bosqichma-bosqich bo'lgan yoki trafik aralashganTez-tez qilinadigan xato. Umumiy natijani segment tarkibini tekshirmasdan qabul qilish; yoki aksincha — har doim segmentlash kerak deb o'ylash (segment muolajaning natijasi bo'lsa, umumiy farq to'g'ri — 28.11).
Kod bilan tekshiruv: 4-misol, 1-bo'lim.
2.11. Korrelyatsiya va sabab
Savol. "Qo'llab-quvvatlashga ko'p murojaat qilgan mijozlar ko'proq ketadi. Murojaat qilishni qiyinlashtirsak, ketish kamayadimi?"
Yaxshi javob tuzilishi.
Uchta tushuntirish 4.10-bob:
1. yashirin sabab: tarmoq muammosi -> murojaat VA ketish
2. teskari yo'nalish: ketishga qaror qilgan mijoz shartnomani
bekor qilish uchun murojaat qiladi
3. haqiqiy sabab: yomon xizmat ko'rsatish mijozni ketkazadi
TEKSHIRISH: yashirin sabab bo'yicha qatlamlash, vaqt tartibi,
tajriba (murojaat jarayonini tasodifiy yaxshilash), 28.11 usullari
AMALIY: murojaatni qiyinlashtirish - muammoni yashiradi, ketishni
kamaytirmaydi (va ehtimol oshiradi)Tez-tez qilinadigan xato. Korrelyatsiyadan to'g'ridan-to'g'ri choraga o'tish. Yoki "korrelyatsiya sabab emas" deb to'xtab qolish — intervyuer nima qilish kerakligini ham kutadi: qanday tekshirasiz?
Kod bilan tekshiruv: 4-misol, 2-bo'lim.
2.12. Tanlash tarafkashligi va omon qolganlar
Savol. "Muvaffaqiyatli startaplar asoschilarining ko'pi universitetni tashlagan. Demak, universitetni tashlash foydalimi?" yoki "Ilovamiz sharhlari o'rtachasi 4.6 — mijozlar mamnunmi?"
Yaxshi javob tuzilishi.
OMON QOLGANLAR (survivorship): faqat "omon qolganlar" ko'rinadi
muvaffaqiyatsiz startaplar (universitetni tashlaganlar ham) hisobda yo'q
-> o'rtacha, ulushlar oshirib ko'rsatiladi
savol: "ko'rinmaydiganlar kim va ular qancha?"
BERKSON (tanlash - kollayder, 28.11): tanlash ikki mustaqil omilga bog'liq
bo'lsa, tanlangan guruhda ular SOXTA bog'lanadi
(muvaffaqiyat = joy + jamoa -> muvaffaqiyatlilar ichida joy va jamoa
manfiy korrelyatsiyali)
BOSHQA TANLASH TURLARI: faqat sharh qoldirganlar, faqat so'rovnomaga
javob berganlar, faqat ilovani o'chirmaganlar, maoshini ochiq e'lon
qilganlar (29.8, 2.8)Tez-tez qilinadigan xato. Ko'rinadigan namunani butun populyatsiya deb qabul qilish; tanlangan guruh ichidagi korrelyatsiyadan umumiy xulosa chiqarish.
Kod bilan tekshiruv: 4-misol, 3-4-bo'limlar.
2.13. Monty Hall masalasi
Savol. Uchta eshik: birining ortida mashina, ikkitasida echki. Siz bitta eshikni tanlaysiz. Boshlovchi (mashina qayerdaligini biladi) qolgan ikkitadan echkili birini ochadi va "tanlovni almashtirasizmi?" deb so'raydi.
Yaxshi javob tuzilishi.
Aniqlashtirish: boshlovchi HAR DOIM echkili eshikni ochadimi? (ha - klassik shart)
Almashtirish yutadi, agar birinchi tanlov NOTO'G'RI bo'lsa:
P(birinchi tanlov to'g'ri) = 1/3 -> qolish 1/3
P(birinchi tanlov noto'g'ri) = 2/3 -> almashish 2/3
INTUITSIYA: 100 eshik, boshlovchi 98 ta echkini ochadi - qolgan bitta
eshik "boshlovchi tanlagan" eshik
Agar boshlovchi tasodifan ochsa va tasodifan echki chiqsa - javob 1/2
(shart o'zgarsa - javob o'zgaradi; shuning uchun aniqlashtirish kerak)Tez-tez qilinadigan xato. "Ikki eshik qoldi — 50/50". Boshlovchining harakati tasodifiy emas, u ma'lumot beradi.
Kod bilan tekshiruv:
mashina = rng.integers(0, 3, 200_000)
tanlov = rng.integers(0, 3, 200_000)
qolish = (tanlov == mashina).mean() # ~0.333
almashish = (tanlov != mashina).mean() # ~0.667 - almashganda yutish2.14. Kutish paradoksi (inspection paradox)
Savol. Avtobuslar o'rtacha har 10 daqiqada keladi. Bekatga tasodifiy vaqtda keldingiz — o'rtacha qancha kutasiz?
Yaxshi javob tuzilishi.
Aniqlashtirish: avtobuslar JADVAL bo'yicha (aniq 10 daqiqada) yoki
tasodifiy (Puasson oqimi) keladimi?
JADVAL: kutish ~ Uniform(0, 10) -> o'rtacha 5 daqiqa
PUASSON: oraliqlar eksponensial, xotirasiz -> o'rtacha 10 daqiqa (!)
NEGA: tasodifiy vaqtda kelgan odam UZUN oraliqqa tushish ehtimoli yuqori
(uzun oraliq vaqt o'qida ko'proq joy egallaydi) - "uzunlik bo'yicha
tanlash"; umumiy formula: E[kutish] = E[T^2] / (2 E[T])
DS DAGI SHAKLLARI: "o'rtacha sinf hajmi" talabalar nuqtai nazaridan
kattaroq; tasodifiy foydalanuvchi sessiyasi o'rtachadan uzunroq;
tasodifiy tanlangan mijozning buyurtmasi "o'rtacha buyurtma"dan kattaTez-tez qilinadigan xato. Har doim "yarim oraliq — 5 daqiqa" deyish; oraliqlar taqsimotini so'ramaslik.
Kod bilan tekshiruv (simulyatsiyada: Puasson oqimida ~10, jadvalda ~5 daqiqa):
oraliq = rng.exponential(10, 200_000)
vaqt = np.cumsum(oraliq)
kelish = rng.uniform(0, vaqt[-1], 200_000)
kutish = vaqt[np.searchsorted(vaqt, kelish)] - kelish # o'rtacha ~10, 5 emas2.15. O'rtachaga qaytish (regression to the mean)
Savol. "Birinchi oyda eng yomon natija ko'rsatgan 10% do'konga yangi menejer yubordik — keyingi oyda ular sezilarli yaxshilandi. Menejerlar samarali ekanmi?"
Yaxshi javob tuzilishi.
Kuzatilgan natija = doimiy qobiliyat + tasodifiy omad
Eng chetdagilar (eng yomon / eng yaxshi) - o'rtacha OMADSIZ / OMADLI
Keyingi o'lchovda omad qaytadan tasodifiy -> natija o'rtachaga yaqinlashadi
HECH NARSA qilmasa ham!
Simulyatsiya (qobiliyat va shovqin dispersiyasi teng): 1-testdagi top-10%
o'rtachasi 2.49, 2-testda 1.23 - yarmiga "tushdi"
TEKSHIRISH: nazorat guruhi - xuddi shunday tanlangan, lekin menejer
YUBORILMAGAN do'konlar; ta'sir = farqlar farqi (28.11 DiD)Tez-tez qilinadigan xato. Chetdan tanlangan guruhning yaxshilanishini aralashuv ta'siri deb e'lon qilish. Klassik holatlar: "eng yomon o'quvchilarga repetitor", "eng ko'p shikoyat qilgan mijozlarga chegirma", "eng yomon haftadan keyin reklamani o'zgartirdik".
2.16. Chastotali va Bayes yondashuvlari — qisqa
Savol. "Chastotali va Bayes statistikasi farqi nima? Qachon qaysi birini ishlatasiz?"
CHASTOTALI BAYES
parametr noma'lum, lekin QAT'IY tasodifiy o'zgaruvchi
(ishonch darajasi)
ehtimol uzoq muddatli chastota ishonch darajasi
natija p-qiymat, ishonch oralig'i posterior, kredibl oraliq
oldingi bilim formal ravishda kirmaydi prior orqali kiradi
savolga javob "H0 da bunday ma'lumot "ma'lumotni ko'rgach,
qanchalik kutilmagan?" parametr qayerda?"
qachon qulay standart tajribalar, kichik namuna + oldingi bilim,
regulyator talablari ketma-ket qarorlar (29.8 voronka)Yaxshi javob — "ikkalasi ham asbob": katta tajribada ular ko'pincha o'xshash javob beradi; farq kichik namunada va oldingi bilim kuchli bo'lganda seziladi. 29.8 ning 4-misolida kichik sonli voronka konversiyalari uchun Beta posterior aynan shuning uchun ishlatilgan.
2.17. Tuzoqlar
Asosiy tuzoqlar: savolni aniqlashtirmasdan raqam aytish; P(A | B) ni P(B | A) bilan almashtirish (asosiy stavka); ehtimollarni qo'shish (kesishuvlarni hisobga olmasdan); p-qiymatni P(H0 | ma'lumot) yoki ta'sir kattaligi deb talqin qilish; p > 0.05 ni "ta'sir yo'q" deb o'qish; bitta ishonch oralig'iga "95% ehtimol" berish; CLT ni "ma'lumot normal" deb tushunish; og'ir dumli metrikada kichik n da normal oraliq; namuna hajmini hisobsiz tanlash; peeking; ko'p metrikadan "sezilarli"sini tanlash; kam quvvatli testdagi sezilarli natijaga ishonish (g'olib la'nati); umumiy jadvalni segment tarkibisiz talqin qilish; korrelyatsiyadan choraga o'tish; faqat ko'rinadigan (omon qolgan) namunadan xulosa; Monty Hall da boshlovchi ma'lumotini e'tiborsiz qoldirish; kutish vaqtida oraliqlar taqsimotini so'ramaslik; chetdan tanlangan guruhning o'rtachaga qaytishini aralashuv ta'siri deb bilish; javobni tekshirmaslik.
3. Tez ma'lumotnoma
import numpy as np
from scipy import stats
# Bayes
p_k_musbat = sez * prev / (sez * prev + (1 - spes) * (1 - prev))
# tug'ilgan kun
p_juft = 1 - np.prod(1 - np.arange(k) / 365)
# Monte Carlo tekshiruv shabloni
rng = np.random.default_rng(0)
x = rng.random(1_000_000) < p # hodisa
baho, se = x.mean(), x.std() / np.sqrt(x.size)
mos = abs(baho - nazariy) < 2 * se
# ishonch oralig'i (t) va ikki proporsiya testi
lo, hi = stats.t.interval(0.95, n - 1, loc=x.mean(), scale=stats.sem(x))
p_qiymat = stats.norm.sf(abs(z)) * 2
# A/B namuna hajmi (har guruhga)
za, zb = stats.norm.ppf(0.975), stats.norm.ppf(0.8)
pb = (p0 + p1) / 2
n = ((za * np.sqrt(2 * pb * (1 - pb))
+ zb * np.sqrt(p0 * (1 - p0) + p1 * (1 - p1))) / (p1 - p0)) ** 2Tez-tez so'raladigan savollar — qisqa javoblar
| Savol | Qisqa to'g'ri javob |
|---|---|
| Kasallik 1%, sezgirlik 95%, spetsifiklik 90%, test musbat | ~8.8% (1000 odam: 10 haqiqiy, 99 yolg'on musbat) |
| Tug'ilgan kun: 50% uchun necha odam? | 23 (253 juftlik) |
| HH uchun kutilgan tashlashlar | 6 (HT uchun 4, HHH uchun 14) |
| p-qiymat | H0 to'g'ri bo'lsa, shunday yoki chetroq natija ehtimoli |
| 95% CI | protsedura 95% qamraydi; bitta oraliq uchun "95% ehtimol" emas |
| I / II tur xato | yolg'on musbat (alfa) / o'tkazib yuborish (beta); quvvat = 1 - beta |
| CLT | o'rtacha taqsimoti normallashadi; og'ir dumda sekin |
| Namuna hajmi (10%, +1 p.p.) | har guruhga ~14 750 (tez qoida 16 p q / MDE^2) |
| Peeking | yolg'on musbatni oshiradi (20 qarash ~0.25) |
| 20 metrika | P(>=1 yolg'on) = 0.64; Bonferroni yoki BH |
| Simpson | guruh tarkibi farqi; sabab tuzilmasi bo'yicha standartlash |
| Korrelyatsiya | yashirin sabab, teskari yo'nalish, tanlash; tajriba bilan tekshirish |
| Omon qolganlar | ko'rinmaydiganlarni so'rang; o'rtacha oshirib ko'rsatiladi |
| Monty Hall | almashtiring: 2/3 (boshlovchi biladi va har doim echkini ochadi) |
| Avtobus har 10 daqiqada, tasodifiy keldim | jadvalda 5, Puasson oqimida 10 daqiqa (kutish paradoksi) |
| Eng yomonlar keyingi safar yaxshilandi | o'rtachaga qaytish; nazorat guruhi kerak |
Intervyu javobi shabloni
aniqlashtirish -> formula -> intuitsiya (1000 odam) -> tekshiruv (chegara, simulyatsiya) -> amaliy ma'no
P(A|B) != P(B|A); p != P(H0|ma'lumot); CI - protsedura xossasi
n oldindan; bitta asosiy metrika; peeking yo'q; ko'p test - tuzatish
tarkib (Simpson), yashirin sabab, tanlash - "ma'lumot qanday paydo bo'lgan?"4. Batafsil misollar
Misollar real numpy/scipy/pandas bilan (Python 3.14). Har misol mustaqil ishlaydi; har javob analitik formula va simulyatsiya bilan tekshiriladi.
Misol 1 — Ehtimollik klassikasi: Bayes, tug'ilgan kunlar, HH uchun kutilma
"""Ehtimollik klassikasi: Bayes (tibbiy test), tug'ilgan kun paradoksi, HH uchun kutilma."""
import numpy as np
def bayes(prev, sez, spes):
"""P(kasal | test musbat) - analitik."""
tp = prev * sez
fp = (1 - prev) * (1 - spes)
return tp / (tp + fp)
def birinchi_juftlik(tangalar, naqsh):
"""Har qatorda naqsh (masalan [1, 1]) birinchi marta TUGAGAN tashlash raqami."""
k = len(naqsh)
mos = np.ones((tangalar.shape[0], tangalar.shape[1] - k + 1), dtype=bool)
for j, v in enumerate(naqsh):
mos &= tangalar[:, j:tangalar.shape[1] - k + 1 + j] == v
bor = mos.any(axis=1)
return mos.argmax(axis=1) + k, bor
def main() -> None:
rng = np.random.default_rng(9)
print("=== 1. Bayes: kasallik 1%, sezgirlik 0.95, spetsifiklik 0.90 ===")
prev, sez, spes = 0.01, 0.95, 0.90
n = 1_000_000
kasal = rng.random(n) < prev
musbat = np.where(kasal, rng.random(n) < sez, rng.random(n) < 1 - spes)
mc = kasal[musbat].mean()
se = np.sqrt(mc * (1 - mc) / musbat.sum())
an = bayes(prev, sez, spes)
print(f" analitik P(kasal | +) = {an:.4f}")
print(f" Monte Carlo ({n} odam): {mc:.4f} (SE {se:.4f}), "
f"mos: {abs(mc - an) < 2 * se}")
print(f" 1000 odamda: {int(round(1000 * prev * sez))} haqiqiy musbat, "
f"{int(round(1000 * (1 - prev) * (1 - spes)))} yolg'on musbat")
ikkinchi = bayes(an, sez, spes)
print(f" ikkinchi mustaqil test ham musbat: {ikkinchi:.4f}")
for p in [0.001, 0.01, 0.1, 0.3]:
print(f" tarqalish {p:<5} -> P(kasal | +) = {bayes(p, sez, spes):.3f}")
print("\n=== 2. Tug'ilgan kun paradoksi (365 kun, bir tekis) ===")
print(f" {'odam':>5} {'analitik':>9} {'Monte Carlo':>12} {'SE':>6}")
for k in [10, 23, 30, 50, 57]:
an = 1 - np.prod(1 - np.arange(k) / 365)
kun = np.sort(rng.integers(0, 365, (50_000, k)), axis=1)
mc = (np.diff(kun, axis=1) == 0).any(axis=1).mean()
print(f" {k:>5} {an:>9.3f} {mc:>12.3f} {np.sqrt(mc * (1 - mc) / 50_000):>6.4f}")
kerak = next(k for k in range(1, 366)
if 1 - np.prod(1 - np.arange(k) / 365) >= 0.5)
print(f" ehtimol 0.5 dan oshadigan eng kichik guruh: {kerak} odam")
print(f" 23 odamda juftliklar soni: {23 * 22 // 2} (shuning uchun ehtimol katta)")
print("\n=== 3. Kutilgan tashlashlar: HH, HT, HHH (H - gerb) ===")
tangalar = rng.integers(0, 2, (100_000, 400), dtype=np.int8)
nazariy = {"HH": 6, "HT": 4, "HHH": 14}
naqshlar = {"HH": [1, 1], "HT": [1, 0], "HHH": [1, 1, 1]}
for nom, nq in naqshlar.items():
t, bor = birinchi_juftlik(tangalar, nq)
o, s = t.mean(), t.std(ddof=1) / np.sqrt(len(t))
print(f" {nom:<4} nazariy {nazariy[nom]:>3}, simulyatsiya {o:6.3f} "
f"(SE {s:.3f}), topilmagan {int((~bor).sum())}, "
f"mos: {abs(o - nazariy[nom]) < 2 * s}")
print(" HH (6) > HT (4): HT kutilganda H dan keyin yana H kelsa, 'H' holati")
print(" saqlanadi; HH kutilganda H dan keyingi T hammasini boshiga qaytaradi")
print("\n=== 4. Xulosa ===")
print(f" musbat testdan keyin kasallik ehtimoli {bayes(prev, sez, spes):.1%} - "
"95% emas")
print(" ⭐ Javob: formula + intuitsiya (1000 odam) + simulyatsiya bilan tekshiruv")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Bayes: kasallik 1%, sezgirlik 0.95, spetsifiklik 0.90 ===
analitik P(kasal | +) = 0.0876
Monte Carlo (1000000 odam): 0.0884 (SE 0.0009), mos: True
1000 odamda: 10 haqiqiy musbat, 99 yolg'on musbat
ikkinchi mustaqil test ham musbat: 0.4769
tarqalish 0.001 -> P(kasal | +) = 0.009
tarqalish 0.01 -> P(kasal | +) = 0.088
tarqalish 0.1 -> P(kasal | +) = 0.514
tarqalish 0.3 -> P(kasal | +) = 0.803
=== 2. Tug'ilgan kun paradoksi (365 kun, bir tekis) ===
odam analitik Monte Carlo SE
10 0.117 0.120 0.0015
23 0.507 0.509 0.0022
30 0.706 0.702 0.0020
50 0.970 0.971 0.0008
57 0.990 0.990 0.0004
ehtimol 0.5 dan oshadigan eng kichik guruh: 23 odam
23 odamda juftliklar soni: 253 (shuning uchun ehtimol katta)
=== 3. Kutilgan tashlashlar: HH, HT, HHH (H - gerb) ===
HH nazariy 6, simulyatsiya 5.993 (SE 0.015), topilmagan 0, mos: True
HT nazariy 4, simulyatsiya 4.002 (SE 0.006), topilmagan 0, mos: True
HHH nazariy 14, simulyatsiya 13.936 (SE 0.037), topilmagan 0, mos: True
HH (6) > HT (4): HT kutilganda H dan keyin yana H kelsa, 'H' holati
saqlanadi; HH kutilganda H dan keyingi T hammasini boshiga qaytaradi
=== 4. Xulosa ===
musbat testdan keyin kasallik ehtimoli 8.8% - 95% emas
⭐ Javob: formula + intuitsiya (1000 odam) + simulyatsiya bilan tekshiruvNatija tahlili.
1-bo'lim — Bayes. Analitik javob 0.0876, million odamlik simulyatsiya 0.0884 (SE 0.0009) — 2*SE ichida mos. "1000 odam" intuitsiyasi: 10 ta haqiqiy musbat va 99 ta yolg'on musbat — musbat natijalilarning 10 dan 1 qismigina kasal. Test yomon emas (95% sezgirlik, 90% spetsifiklik), lekin kasallik kam: sog'lom odamlar shunchalik ko'pki, ularning 10% xatosi kasallarning 95% to'g'ri natijasidan ko'p. Ikkinchi mustaqil test ham musbat bo'lsa, ehtimol 0.4769 — prior endi 0.0876, 0.01 emas. Tarqalish jadvali eng muhim intervyu fikrini ko'rsatadi: bir xil test tarqalish 0.001 da 0.009, 0.3 da 0.803 beradi. "Test qanchalik ishonchli?" savoliga javob — "qaysi aholida?".
2-bo'lim — tug'ilgan kunlar. Analitik va Monte Carlo qiymatlari yaqin: 23 odamda 0.507 va 0.509, 57 odamda ikkalasi 0.990. Eng katta farq 10 odamda (0.117 va 0.120, taxminan 2*SE) — beshta taqqoslashdan birida bunday og'ish tasodifan kutiladigan narsa (3-misoldagi ko'p testlash g'oyasi). Kod ehtimol 0.5 dan oshadigan eng kichik guruhni 23 deb topdi — 253 ta juftlik bor, har birida ehtimol 1/365, shuning uchun kamida bitta to'qnashuv ehtimoli katta.
3-bo'lim — kutilgan tashlashlar. HH: nazariy 6, simulyatsiya 5.993 (SE 0.015); HT: 4 va 4.002; HHH: 14 va 13.936 (SE 0.037) — hammasi 2*SE ichida. 400 tashlash ichida naqsh topilmagan qator yo'q — simulyatsiya uzunligi yetarli ekanini tekshirish ham muhim (aks holda kutilma kam baholanardi). HH va HT ning farqi — intervyuerlarning sevimli davomi: ikki naqshning ehtimoli bir xil, lekin kutish vaqti har xil, chunki HH kutilganda "H" dan keyingi "T" hamma yutuqni yo'qotadi.
4-bo'lim — xulosa natijadan: musbat testdan keyin kasallik ehtimoli 8.8%. Uch masala ham bir xil sxemada yechildi: formula, sonli intuitsiya, simulyatsiya va 2*SE bilan solishtirish.
Misol 2 — p-qiymat nima va nima emas, ishonch oralig'i va CLT
"""p-qiymat nima va nima emas, ishonch oralig'i qamrovi va markaziy limit teoremasi."""
import numpy as np
from scipy import stats
def t_test(a, b):
"""Qatorlar bo'yicha vektorlashgan Welch t-test p-qiymatlari."""
va, vb = a.var(axis=1, ddof=1) / a.shape[1], b.var(axis=1, ddof=1) / b.shape[1]
t = (a.mean(axis=1) - b.mean(axis=1)) / np.sqrt(va + vb)
df = (va + vb) ** 2 / (va ** 2 / (a.shape[1] - 1) + vb ** 2 / (b.shape[1] - 1))
return 2 * stats.t.sf(np.abs(t), df)
def main() -> None:
rng = np.random.default_rng(99)
m, n = 20_000, 30
print("=== 1. H0 to'g'ri bo'lganda p-qiymat taqsimoti (20 000 test, n=30) ===")
p0 = t_test(rng.normal(0, 1, (m, n)), rng.normal(0, 1, (m, n)))
hist = np.histogram(p0, bins=10, range=(0, 1))[0] / m
print(" o'nliklar ulushi: " + " ".join(f"{h:.3f}" for h in hist))
ulush = (p0 < 0.05).mean()
print(f" p < 0.05 ulushi: {ulush:.4f} (SE {np.sqrt(0.05 * 0.95 / m):.4f})"
f" - bu alfa, ya'ni I tur xato")
print("\n=== 2. p-qiymat P(H0 | ma'lumot) EMAS ===")
haq = rng.random(m) < 0.10 # testlarning 10% ida haqiqiy ta'sir
siljish = np.where(haq, 0.5, 0.0)[:, None]
p = t_test(rng.normal(0, 1, (m, n)) + siljish, rng.normal(0, 1, (m, n)))
sez = p < 0.05
quvvat = sez[haq].mean()
yolgon = (~haq[sez]).mean()
print(f" haqiqiy ta'sir ulushi 0.10, ta'sir 0.5 std, n=30 -> quvvat {quvvat:.3f}")
print(f" p < 0.05 bo'lgan testlar: {sez.sum()} ta; ulardan H0 to'g'ri: "
f"{yolgon:.3f}")
nazariy = 0.9 * 0.05 / (0.9 * 0.05 + 0.1 * quvvat)
print(f" Bayes bilan: 0.9*0.05 / (0.9*0.05 + 0.1*{quvvat:.3f}) = {nazariy:.3f}")
oraliq = (p > 0.04) & (p < 0.05)
print(f" 0.04 < p < 0.05 bo'lgan testlarda H0 to'g'ri: "
f"{(~haq[oraliq]).mean():.3f} (n={oraliq.sum()})")
print("\n=== 3. p-qiymat ta'sir kattaligi EMAS ===")
for nn, d in [(100, 0.30), (200_000, 0.01)]:
a, b = rng.normal(d, 1, nn), rng.normal(0, 1, nn)
pv = stats.ttest_ind(a, b, equal_var=False).pvalue
print(f" n={nn:>7} har guruhda, haqiqiy farq {d:.2f} std: "
f"farq {a.mean() - b.mean():+.4f}, p = {pv:.2g}")
print("\n=== 4. 95% ishonch oralig'i qamrovi (o'rtacha uchun) ===")
print(f" {'taqsimot':<14} {'n':>4} {'t-oraliq':>9} {'z-oraliq':>9}")
for nom, gen, mu in [("normal", lambda s: rng.normal(5, 2, s), 5.0),
("lognormal", lambda s: rng.lognormal(0, 1.2, s),
float(np.exp(1.2 ** 2 / 2)))]:
for nn in [5, 30, 200]:
x = gen((m, nn))
o, s = x.mean(axis=1), x.std(axis=1, ddof=1) / np.sqrt(nn)
tq = stats.t.ppf(0.975, nn - 1)
qt = ((o - tq * s <= mu) & (mu <= o + tq * s)).mean()
qz = ((o - 1.96 * s <= mu) & (mu <= o + 1.96 * s)).mean()
print(f" {nom:<14} {nn:>4} {qt:>9.3f} {qz:>9.3f}")
print(" talqin: 100 ta tajribada ~95 ta oraliq haqiqiy qiymatni qamraydi;")
print(" BITTA tayyor oraliq uchun 'ehtimol 95%' - chastotali talqinda noto'g'ri")
print("\n=== 5. Markaziy limit teoremasi: lognormal daromad o'rtachasi ===")
print(f" {'n':>4} {'asimmetriya':>12} {'nazariy':>8} {'std':>7} {'nazariy':>8}")
sigma = np.sqrt((np.exp(1.2 ** 2) - 1) * np.exp(1.2 ** 2))
asim = (np.exp(1.2 ** 2) + 2) * np.sqrt(np.exp(1.2 ** 2) - 1)
for nn in [1, 5, 30, 200]:
o = rng.lognormal(0, 1.2, (m, nn)).mean(axis=1)
print(f" {nn:>4} {stats.skew(o):>12.2f} {asim / np.sqrt(nn):>8.2f} "
f"{o.std():>7.3f} {sigma / np.sqrt(nn):>8.3f}")
print("\n=== 6. Xulosa (natijadan hisoblangan) ===")
print(f" H0 da p < 0.05 ulushi {ulush:.3f}; lekin p < 0.05 li testlarning "
f"{yolgon:.0%} ida H0 to'g'ri")
print(" ⭐ p - 'H0 to'g'ri bo'lsa, shunday yoki undan chetroq natija ehtimoli'")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. H0 to'g'ri bo'lganda p-qiymat taqsimoti (20 000 test, n=30) ===
o'nliklar ulushi: 0.098 0.097 0.098 0.101 0.097 0.099 0.102 0.103 0.106 0.099
p < 0.05 ulushi: 0.0509 (SE 0.0015) - bu alfa, ya'ni I tur xato
=== 2. p-qiymat P(H0 | ma'lumot) EMAS ===
haqiqiy ta'sir ulushi 0.10, ta'sir 0.5 std, n=30 -> quvvat 0.481
p < 0.05 bo'lgan testlar: 1925 ta; ulardan H0 to'g'ri: 0.497
Bayes bilan: 0.9*0.05 / (0.9*0.05 + 0.1*0.481) = 0.484
0.04 < p < 0.05 bo'lgan testlarda H0 to'g'ri: 0.696 (n=250)
=== 3. p-qiymat ta'sir kattaligi EMAS ===
n= 100 har guruhda, haqiqiy farq 0.30 std: farq +0.2705, p = 0.049
n= 200000 har guruhda, haqiqiy farq 0.01 std: farq +0.0128, p = 5.5e-05
=== 4. 95% ishonch oralig'i qamrovi (o'rtacha uchun) ===
taqsimot n t-oraliq z-oraliq
normal 5 0.952 0.880
normal 30 0.948 0.938
normal 200 0.948 0.947
lognormal 5 0.766 0.689
lognormal 30 0.851 0.841
lognormal 200 0.911 0.910
talqin: 100 ta tajribada ~95 ta oraliq haqiqiy qiymatni qamraydi;
BITTA tayyor oraliq uchun 'ehtimol 95%' - chastotali talqinda noto'g'ri
=== 5. Markaziy limit teoremasi: lognormal daromad o'rtachasi ===
n asimmetriya nazariy std nazariy
1 6.71 11.16 3.553 3.687
5 5.20 4.99 1.688 1.649
30 3.10 2.04 0.694 0.673
200 0.79 0.79 0.261 0.261
=== 6. Xulosa (natijadan hisoblangan) ===
H0 da p < 0.05 ulushi 0.051; lekin p < 0.05 li testlarning 50% ida H0 to'g'ri
⭐ p - 'H0 to'g'ri bo'lsa, shunday yoki undan chetroq natija ehtimoli'Natija tahlili.
1-bo'lim — H0 to'g'ri bo'lganda 20 000 t-testning p-qiymatlari bir tekis taqsimlangan: har o'nlikda ~0.1 (0.097 dan 0.106 gacha). p < 0.05 ulushi 0.0509 (SE 0.0015) — bu aynan alfa, I tur xato ehtimoli. Muhim fikr: H0 to'g'ri bo'lsa, p = 0.01 ham, p = 0.9 ham bir xil ehtimol bilan chiqadi — p-qiymat "H0 ga qanchalik ishonish" o'lchovi emas.
2-bo'lim — p-qiymat P(H0 | ma'lumot) EMAS. Dunyoda testlarning 10% ida haqiqiy ta'sir bor (0.5 std, n=30, quvvat 0.481). p < 0.05 chiqqan 1925 ta testdan 0.497 ulushida H0 to'g'ri — deyarli yarmi yolg'on kashfiyot. Bayes formulasi bilan nazariy qiymat 0.484 — simulyatsiyaga yaqin. p chegaraga yaqin bo'lsa (0.04 < p < 0.05), H0 to'g'ri bo'lganlar ulushi 0.696 (n=250) — "zo'rg'a sezilarli" natija juda kuchsiz dalil. Bu raqamlar haqiqiy ta'sirlar ulushiga bog'liq (Vazifa 4): 50% bo'lsa FDR kichik, 1% bo'lsa — juda katta.
3-bo'lim — p-qiymat ta'sir kattaligi EMAS. 100 kuzatuvda katta farq (0.3 std, baho +0.2705) — p = 0.049; 200 000 kuzatuvda amalda ahamiyatsiz farq (0.01 std, baho +0.0128) — p = 5.5e-05. Kichikroq p kattaroq ta'sirni anglatmaydi; har doim ta'sir kattaligi va oraliqni ayting.
4-bo'lim — ishonch oralig'i qamrovi. Normal ma'lumotda t-oraliq har n da ~0.95 (0.952, 0.948, 0.948), z-oraliq esa n=5 da 0.880 — kichik n da t taqsimoti kerak. Lognormal (og'ir dumli, daromadga o'xshash) ma'lumotda hammasi yomonroq: n=5 da t-oraliq 0.766, n=30 da 0.851, hatto n=200 da ham 0.911. "n = 30 dan keyin CLT ishlaydi" qoidasi og'ir dumli metrikalar uchun noto'g'ri — A/B testda daromad metrikasi bilan ishlaganda buni bilish shart.
5-bo'lim — markaziy limit teoremasi. O'rtachalar std si nazariya bilan mos (n=200 da 0.261 va 0.261), asimmetriya esa 1/sqrt(n) tezlikda kamayadi: nazariy 11.16 dan n=200 da 0.79 gacha — simulyatsiya ham 0.79. Kichik n da tanlanma asimmetriyasi nazariyadan uzoq (n=1 da 6.71 va 11.16) — og'ir dumli taqsimotda asimmetriyaning o'zini baholash ham beqaror. n=200 da ham asimmetriya 0.79 — o'rtacha taqsimoti hali normal emas, shuning uchun 4-bo'limdagi qamrov 0.911.
6-bo'lim — xulosa natijadan: H0 da p < 0.05 ulushi 0.051, lekin p < 0.05 li testlarning 50% ida H0 to'g'ri. Ikki raqam ikki xil savolga javob beradi — intervyuda aynan shu farqni tushuntirish so'raladi.
Misol 3 — A/B test: namuna hajmi, quvvat, peeking va ko'p testlash
"""A/B test savollari: namuna hajmi, I/II tur xato, quvvat, peeking, ko'p testlash."""
import numpy as np
from scipy import stats
YOLGON = "yolg'on"
def namuna_hajmi(p0, mde, alfa=0.05, quvvat=0.8):
"""Ikki proporsiya uchun har guruhga kerakli n (normal yaqinlashish)."""
p1 = p0 + mde
za, zb = stats.norm.ppf(1 - alfa / 2), stats.norm.ppf(quvvat)
pb = (p0 + p1) / 2
s = za * np.sqrt(2 * pb * (1 - pb)) + zb * np.sqrt(p0 * (1 - p0) + p1 * (1 - p1))
return int(np.ceil((s / mde) ** 2))
def z_p(xa, xb, n):
"""Ikki proporsiya z-testi (birlashgan), vektorlashgan; p-qiymat."""
pa, pb = xa / n, xb / n
pp = (xa + xb) / (2 * n)
se = np.sqrt(2 * pp * (1 - pp) / n)
z = np.divide(pb - pa, se, out=np.zeros_like(se), where=se > 0)
return 2 * stats.norm.sf(np.abs(z)), pb - pa
def bh(p, q=0.05):
"""Benjamini-Hochberg: rad etilgan gipotezalar maskasi."""
m = len(p)
tartib = np.argsort(p)
chegara = q * np.arange(1, m + 1) / m
ok = p[tartib] <= chegara
k = np.max(np.nonzero(ok)[0]) + 1 if ok.any() else 0
rad = np.zeros(m, dtype=bool)
rad[tartib[:k]] = True
return rad
def main() -> None:
rng = np.random.default_rng(2710)
p0, mde, sim = 0.10, 0.01, 4000
tekshir = []
print("=== 1. Namuna hajmi: konversiya 10%, MDE +1 p.p., alfa 0.05, quvvat 0.8 ===")
n = namuna_hajmi(p0, mde)
print(f" har guruhga n = {n}")
for nom, d in [("H0 (farq yo'q)", 0.0), ("H1 (+1 p.p.)", mde)]:
xa = rng.binomial(n, p0, sim)
xb = rng.binomial(n, p0 + d, sim)
p, _ = z_p(xa, xb, n)
u = (p < 0.05).mean()
se = np.sqrt(u * (1 - u) / sim)
print(f" {nom:<16} p < 0.05 ulushi {u:.3f} (SE {se:.3f})")
tekshir.append(abs(u - (0.05 if d == 0 else 0.8)) < 2 * se)
print("\n=== 2. Kam quvvatli test va 'g'olib la'nati' (n/4) ===")
n4 = n // 4
xa = rng.binomial(n4, p0, sim)
xb = rng.binomial(n4, p0 + mde, sim)
p, farq = z_p(xa, xb, n4)
sez = p < 0.05
print(f" n = {n4}: quvvat {sez.mean():.3f} -> II tur xato {1 - sez.mean():.3f}")
print(f" haqiqiy farq {mde:.4f}; sezilarli natijalardagi o'rtacha farq "
f"{farq[sez].mean():.4f} (x{farq[sez].mean() / mde:.2f} oshirilgan)")
print(" 'sezilarli emas' != 'ta'sir yo'q': "
f"{1 - sez.mean():.0%} holatda haqiqiy ta'sir o'tkazib yuborildi")
print("\n=== 3. Peeking: 20 marta qarab, p < 0.05 da to'xtatish (H0 to'g'ri) ===")
qadam = n // 20
ka = rng.binomial(qadam, p0, (sim, 20)).cumsum(axis=1)
kb = rng.binomial(qadam, p0, (sim, 20)).cumsum(axis=1)
nlar = qadam * np.arange(1, 21)
pk, _ = z_p(ka, kb, nlar[None, :])
for k in [1, 5, 10, 20]:
qarash = np.linspace(0, 19, k).round().astype(int) if k > 1 else np.array([19])
u = (pk[:, qarash] < 0.05).any(axis=1).mean()
print(f" {k:>2} marta qarash: yolg'on musbat {u:.3f}")
bonf = (pk < 0.05 / 20).any(axis=1).mean()
print(f" 20 marta, har birida alfa/20: {bonf:.3f} (konservativ)")
print("\n=== 4. Ko'p testlash: 20 metrika ===")
m = 20
print(f" hammasi H0: P(kamida bitta p < 0.05) nazariy 1 - 0.95^20 = "
f"{1 - 0.95 ** m:.3f}")
p_h0 = rng.random((sim, m))
print(f" simulyatsiya: {(p_h0 < 0.05).any(axis=1).mean():.3f}")
haq = np.zeros(m, dtype=bool)
haq[:4] = True # 4 ta metrikada haqiqiy ta'sir
natija = {"tuzatishsiz": [], "Bonferroni": [], "BH (FDR 0.05)": []}
for _ in range(sim):
z = rng.normal(np.where(haq, 3.0, 0.0), 1.0)
p = 2 * stats.norm.sf(np.abs(z))
for nom, rad in [("tuzatishsiz", p < 0.05), ("Bonferroni", p < 0.05 / m),
("BH (FDR 0.05)", bh(p))]:
natija[nom].append((rad[haq].sum(), rad[~haq].sum(),
rad[~haq].sum() / max(rad.sum(), 1)))
print(f" 4 ta haqiqiy ta'sir (z ~ 3), 16 ta H0; {sim} takror:")
print(f" {'usul':<14} {'topildi (4 dan)':>15} {YOLGON:>8} {'FDR':>6} "
f"{'P(>=1 ' + YOLGON + ')':>15}")
for nom, v in natija.items():
v = np.array(v)
print(f" {nom:<14} {v[:, 0].mean():>15.2f} {v[:, 1].mean():>8.2f} "
f"{v[:, 2].mean():>6.3f} {(v[:, 1] > 0).mean():>15.3f}")
print("\n=== 5. Xulosa (natijadan hisoblangan) ===")
print(f" n={n}: yolg'on musbat 0.05 ga, quvvat 0.8 ga 2*SE ichida mos: "
f"{tekshir[0]}, {tekshir[1]}")
print(" ⭐ Namuna hajmi oldindan; bitta asosiy metrika; qarashlar rejalashtirilgan")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Namuna hajmi: konversiya 10%, MDE +1 p.p., alfa 0.05, quvvat 0.8 ===
har guruhga n = 14751
H0 (farq yo'q) p < 0.05 ulushi 0.046 (SE 0.003)
H1 (+1 p.p.) p < 0.05 ulushi 0.792 (SE 0.006)
=== 2. Kam quvvatli test va 'g'olib la'nati' (n/4) ===
n = 3687: quvvat 0.287 -> II tur xato 0.713
haqiqiy farq 0.0100; sezilarli natijalardagi o'rtacha farq 0.0183 (x1.83 oshirilgan)
'sezilarli emas' != 'ta'sir yo'q': 71% holatda haqiqiy ta'sir o'tkazib yuborildi
=== 3. Peeking: 20 marta qarab, p < 0.05 da to'xtatish (H0 to'g'ri) ===
1 marta qarash: yolg'on musbat 0.052
5 marta qarash: yolg'on musbat 0.166
10 marta qarash: yolg'on musbat 0.212
20 marta qarash: yolg'on musbat 0.253
20 marta, har birida alfa/20: 0.019 (konservativ)
=== 4. Ko'p testlash: 20 metrika ===
hammasi H0: P(kamida bitta p < 0.05) nazariy 1 - 0.95^20 = 0.642
simulyatsiya: 0.652
4 ta haqiqiy ta'sir (z ~ 3), 16 ta H0; 4000 takror:
usul topildi (4 dan) yolg'on FDR P(>=1 yolg'on)
tuzatishsiz 3.43 0.80 0.163 0.561
Bonferroni 1.96 0.05 0.018 0.045
BH (FDR 0.05) 2.51 0.15 0.040 0.138
=== 5. Xulosa (natijadan hisoblangan) ===
n=14751: yolg'on musbat 0.05 ga, quvvat 0.8 ga 2*SE ichida mos: True, True
⭐ Namuna hajmi oldindan; bitta asosiy metrika; qarashlar rejalashtirilganNatija tahlili.
1-bo'lim — namuna hajmi. Konversiya 10%, MDE +1 p.p., alfa 0.05, quvvat 0.8 uchun formula har guruhga 14751 beradi (tez qoida 16 * 0.09 / 0.0001 = 14 400 — yaqin). Simulyatsiya formulani tasdiqlaydi: H0 da p < 0.05 ulushi 0.046 (SE 0.003), H1 da 0.792 (SE 0.006) — ikkalasi ham rejalashtirilgan 0.05 va 0.8 ga 2*SE ichida.
2-bo'lim — kam quvvatli test (n = 3687, rejadagining to'rtdan biri). Quvvat 0.287 — haqiqiy ta'sir bor, lekin 71% holatda test uni topmaydi (II tur xato 0.713). Eng xavflisi — "g'olib la'nati": sezilarli chiqqan testlarda o'rtacha farq 0.0183, haqiqiy 0.0100 — x1.83 oshirilgan. Kichik testda faqat tasodifan katta chiqqan baholar chegaradan o'tadi. Biznes rejaga "+1.8 p.p." yozilsa, keyin natija "yomonlashgandek" ko'rinadi — aslida u hech qachon 1.8 bo'lmagan.
3-bo'lim — peeking (H0 to'g'ri). Faqat oxirida bir marta qarash: yolg'on musbat 0.052. 5 marta qarab, birinchi p < 0.05 da to'xtatish — 0.166; 10 marta — 0.212; 20 marta — 0.253, besh barobar. Har qarashda alfa/20 ishlatish yolg'on musbatni 0.019 ga tushiradi (konservativ — quvvat ham tushadi). To'g'ri yo'l — 27.13 dagidek oldindan belgilangan n yoki maxsus ketma-ket testlar.
4-bo'lim — ko'p testlash. 20 ta metrika hammasi H0 bo'lsa, kamida bittasi "sezilarli" chiqish ehtimoli nazariy 0.642, simulyatsiyada 0.652. 4 ta haqiqiy ta'sir va 16 ta H0 bo'lgan holatda: tuzatishsiz — 4 dan 3.43 ta topildi, lekin o'rtacha 0.80 ta yolg'on, FDR 0.163, 56.1% tajribada kamida bitta yolg'on kashfiyot. Bonferroni — yolg'on deyarli yo'q (0.05, P(>=1) 0.045), lekin haqiqiylardan faqat 1.96 tasi topildi. Benjamini-Hochberg o'rtada: 2.51 ta topildi, FDR 0.040 — va'da qilingan 0.05 dan past. Qaysi birini tanlash — savolga bog'liq: bitta ham yolg'on qimmat bo'lsa (tibbiyot, ishga tushirish qarori) — Bonferroni; ko'p nomzoddan keyingi tekshiruv uchun ro'yxat kerak bo'lsa — BH.
5-bo'lim — xulosa natijadan: n=14751 da yolg'on musbat va quvvat rejaga 2*SE ichida mos (True, True). A/B test dizayni savoliga javob: metrika, MDE, namuna hajmi va qarashlar soni — hammasi test boshlanishidan oldin yoziladi.
Misol 4 — Tarafkashliklar: Simpson, korrelyatsiya va sabab, omon qolganlar
"""Tarafkashliklar: Simpson paradoksi, korrelyatsiya va sabab, omon qolganlar (survivorship)."""
import numpy as np
import pandas as pd
def main() -> None:
rng = np.random.default_rng(404)
print("=== 1. Simpson: yangi to'lov sahifasi (mobil foydalanuvchilarga ko'proq) ===")
n = 60_000
mobil = rng.random(n) < 0.5
yangi = rng.random(n) < np.where(mobil, 0.8, 0.2) # taqsimlash TASODIFIY EMAS
p = np.where(mobil, 0.04, 0.12) + 0.01 * yangi # har segmentda +1 p.p.
df = pd.DataFrame({"qurilma": np.where(mobil, "mobil", "kompyuter"),
"sahifa": np.where(yangi, "yangi", "eski"),
"xarid": rng.random(n) < p})
jad = df.pivot_table(index="qurilma", columns="sahifa", values="xarid",
aggfunc="mean")
jad["farq"] = jad["yangi"] - jad["eski"]
umumiy = df.groupby("sahifa")["xarid"].mean()
for q, r in jad.iterrows():
print(f" {q:<10} eski {r['eski']:.4f} yangi {r['yangi']:.4f} "
f"farq {r['farq']:+.4f}")
uf = umumiy["yangi"] - umumiy["eski"]
print(f" {'UMUMIY':<10} eski {umumiy['eski']:.4f} yangi {umumiy['yangi']:.4f} "
f"farq {uf:+.4f}")
ulush = df["qurilma"].value_counts(normalize=True)
st = float(sum(jad.loc[q, "farq"] * ulush[q] for q in jad.index))
print(f" segment ulushlari bilan standartlangan farq: {st:+.4f} (haqiqiy +0.0100)")
print("\n=== 2. Korrelyatsiya va sabab: murojaatlar va mijoz ketishi ===")
n = 20_000
muammo = rng.random(n) < 0.2 # tarmoq muammosi (yashirin sabab)
murojaat = rng.poisson(np.where(muammo, 3.0, 0.5))
ketdi = rng.random(n) < np.where(muammo, 0.30, 0.08) # murojaat ketishga TA'SIR QILMAYDI
r = np.corrcoef(murojaat, ketdi)[0, 1]
print(f" corr(murojaatlar, ketish) = {r:+.3f}")
for m, nom in [(False, "muammosiz"), (True, "muammoli")]:
s = muammo == m
print(f" {nom:<10} ichida corr = {np.corrcoef(murojaat[s], ketdi[s])[0, 1]:+.3f}"
f" (n={s.sum()})")
kop = murojaat >= 3
print(f" ketish: >=3 murojaat {ketdi[kop].mean():.3f}, <3 murojaat "
f"{ketdi[~kop].mean():.3f}")
print(" xato xulosa: 'murojaatni qiyinlashtirsak, ketish kamayadi'")
print("\n=== 3. Omon qolganlar: startaplar o'sishi ===")
n = 5_000
osish = rng.normal(0.0, 0.30, n) # yillik o'sish, haqiqiy o'rtacha 0
omon = osish > 0.15 # faqat yaxshi o'sganlar "ko'rinadi"
print(f" hamma startaplar: o'rtacha o'sish {osish.mean():+.3f} (n={n})")
print(f" omon qolganlar: o'rtacha o'sish {osish[omon].mean():+.3f} "
f"(n={omon.sum()}, {omon.mean():.1%})")
print("\n=== 4. Berkson: tanlash mustaqil belgilarni bog'laydi ===")
joy = rng.normal(0, 1, n) # joylashuv sifati
jamoa = rng.normal(0, 1, n) # jamoa tajribasi (mustaqil)
tanlandi = joy + jamoa + rng.normal(0, 0.5, n) > 1.5
print(f" hamma: corr(joy, jamoa) = {np.corrcoef(joy, jamoa)[0, 1]:+.3f}")
rt = np.corrcoef(joy[tanlandi], jamoa[tanlandi])[0, 1]
print(f" faqat muvaffaqiyatlilar ({tanlandi.mean():.1%}): corr = {rt:+.3f}")
print(" xato xulosa: 'yaxshi joy tanlaganlar jamoaga e'tibor bermaydi'")
print("\n=== 5. Xulosa (natijadan hisoblangan) ===")
if np.sign(uf) != np.sign(st):
print(f" Simpson: umumiy farq {uf:+.4f}, segmentlar ichida esa ijobiy "
f"({st:+.4f})")
ichki = max(abs(np.corrcoef(murojaat[muammo == m], ketdi[muammo == m])[0, 1])
for m in [False, True])
print(f" korrelyatsiya {r:+.3f} -> yashirin sabab ichida {ichki:.3f} gacha tushdi")
print(f" omon qolganlar o'rtachasi {osish[omon].mean() - osish.mean():+.3f} "
f"ga oshirib ko'rsatilgan")
print(" ⭐ Avval so'rang: ma'lumot qanday tanlangan va nima taqsimlashni hal qilgan?")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Simpson: yangi to'lov sahifasi (mobil foydalanuvchilarga ko'proq) ===
kompyuter eski 0.1192 yangi 0.1352 farq +0.0159
mobil eski 0.0403 yangi 0.0501 farq +0.0099
UMUMIY eski 0.1036 yangi 0.0671 farq -0.0365
segment ulushlari bilan standartlangan farq: +0.0129 (haqiqiy +0.0100)
=== 2. Korrelyatsiya va sabab: murojaatlar va mijoz ketishi ===
corr(murojaatlar, ketish) = +0.193
muammosiz ichida corr = +0.005 (n=15981)
muammoli ichida corr = +0.027 (n=4019)
ketish: >=3 murojaat 0.290, <3 murojaat 0.105
xato xulosa: 'murojaatni qiyinlashtirsak, ketish kamayadi'
=== 3. Omon qolganlar: startaplar o'sishi ===
hamma startaplar: o'rtacha o'sish -0.007 (n=5000)
omon qolganlar: o'rtacha o'sish +0.348 (n=1537, 30.7%)
=== 4. Berkson: tanlash mustaqil belgilarni bog'laydi ===
hamma: corr(joy, jamoa) = -0.024
faqat muvaffaqiyatlilar (15.5%): corr = -0.564
xato xulosa: 'yaxshi joy tanlaganlar jamoaga e'tibor bermaydi'
=== 5. Xulosa (natijadan hisoblangan) ===
Simpson: umumiy farq -0.0365, segmentlar ichida esa ijobiy (+0.0129)
korrelyatsiya +0.193 -> yashirin sabab ichida 0.027 gacha tushdi
omon qolganlar o'rtachasi +0.355 ga oshirib ko'rsatilgan
⭐ Avval so'rang: ma'lumot qanday tanlangan va nima taqsimlashni hal qilgan?Natija tahlili.
1-bo'lim — Simpson paradoksi. Har segmentda yangi sahifa yaxshiroq: kompyuterda +0.0159, mobilda +0.0099 (haqiqiy ikkalasida +0.01, kompyuterdagi og'ish — shovqin, bu segmentda yangi sahifa ko'rganlar kam). Lekin umumiy jadvalda yangi sahifa yomon: 0.0671 va 0.1036, farq -0.0365. Sabab: yangi sahifa 80% mobil foydalanuvchilarga ko'rsatilgan, mobil konversiya esa uch barobar past. Segment ulushlari bilan standartlangan farq +0.0129 — haqiqiy +0.0100 ga yaqin. Intervyuda muhim qo'shimcha: to'g'ri randomizatsiyalangan A/B testda bunday bo'lmasligi kerak; bo'lsa — taqsimlash buzilgan (SRM tekshiruvi, 27.13).
2-bo'lim — korrelyatsiya va sabab. Murojaatlar va ketish korrelyatsiyasi +0.193: 3 va undan ko'p murojaat qilganlar 0.290 ulushda ketadi, qolganlar 0.105. Lekin simulyatsiyada murojaat ketishga umuman ta'sir qilmaydi — ikkalasining sababi tarmoq muammosi. Yashirin sabab bo'yicha qatlamlaganda korrelyatsiya yo'qoladi: muammosizlarda +0.005, muammolilarda +0.027. "Murojaatni qiyinlashtiramiz" qarori ketishni kamaytirmaydi — faqat muammo haqidagi signalni yo'qotadi.
3-bo'lim — omon qolganlar. Barcha 5000 startapning o'rtacha o'sishi -0.007 (haqiqiy 0), lekin faqat "ko'rinadiganlar" (o'sishi 15% dan yuqori, 30.7%) o'rtachasi +0.348. Maqolalarda, konferensiyalarda, muvaffaqiyat hikoyalarida biz faqat shu 30.7% ni ko'ramiz.
4-bo'lim — Berkson tarafkashligi. Joylashuv sifati va jamoa tajribasi mustaqil (corr = -0.024). Muvaffaqiyat ikkalasiga bog'liq; faqat muvaffaqiyatlilarni (15.5%) olsak — corr = -0.564: "yaxshi joy tanlaganlarning jamoasi kuchsiz" degan soxta qonuniyat. Sabab: muvaffaqiyatga yetish uchun yo joy, yo jamoa kuchli bo'lishi kerak — ulardan biri kuchsiz bo'lsa, ikkinchisi kuchli bo'lgani uchun tanlangan. Bu 28.11 dagi kollayder — tanlash orqali.
5-bo'lim — xulosalar natijadan hisoblandi: Simpson (umumiy -0.0365, segmentlar ichida +0.0129), korrelyatsiya +0.193 dan qatlamlar ichida eng ko'pi 0.027 gacha tushdi, omon qolganlar o'rtachasi +0.355 ga oshirib ko'rsatilgan. To'rtala tuzoqqa bitta savol yordam beradi: ma'lumot qanday paydo bo'lgan va kim taqsimlashni hal qilgan?
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "Test 95% aniq — musbat natija 95% kasallik" | Asosiy stavka muhim: 1% tarqalishda ~8.8% |
| "23 odam — ehtimol 23/365" | Istalgan ikki kishi: 253 juftlik, ehtimol ~0.507 |
| "HH va HT — bir xil kutilma" | HH 6, HT 4: HH muvaffaqiyatsizlikda boshiga qaytadi |
| "p = 0.03 — H0 ehtimoli 3%" | p = P(ma'lumot yoki chetroq | H0); P(H0 | p < 0.05) 50% gacha bo'lishi mumkin |
| "p juda kichik — ta'sir katta" | 200 000 kuzatuvda 0.01 std farq ham p ~ 5.5e-05 |
| "p > 0.05 — ta'sir yo'q" | Kam quvvatda 71% holatda haqiqiy ta'sir o'tkazib yuborildi |
| "Bu oraliq parametrni 95% ehtimol bilan qamraydi" | Protsedura 95% qamraydi; bitta oraliq — yo qamraydi, yo yo'q |
| "n = 30 dan keyin CLT ishlaydi" | Lognormal daromadda n=30 da qamrov 0.851, n=200 da ham 0.911 |
| "Har kuni qarasak, tezroq xulosa qilamiz" | 20 qarashda yolg'on musbat 0.253 |
| "20 metrikadan biri sezilarli — g'alaba" | Hammasi H0 bo'lsa ham 0.64 ehtimol bilan kamida bittasi "sezilarli" |
| "Umumiy konversiya tushdi — yangi sahifa yomon" | Har segmentda oshgan bo'lishi mumkin (Simpson) |
| "Omon qolgan startaplar o'rtachasi — bozor o'rtachasi" | Ko'rinmaydiganlar hisobga olinmagan: +0.348 va -0.007 |
6. Keng tarqalgan xatolar va yechimlari
1. Asosiy stavkani unutish
p_kasal = sezgirlik # ⚠️
p_kasal = sez * prev / (sez * prev + (1 - spes) * (1 - prev)) # ✅2. p-qiymatni noto'g'ri talqin qilish
⚠️ "p = 0.03, demak ta'sir 97% ehtimol bilan haqiqiy"
✅ "Agar ta'sir bo'lmasa, bunday yoki kattaroq farq 3% ehtimol bilan chiqardi.
Ta'sir kattaligi va oralig'i: +1.2 p.p. [0.1, 2.3]"3. Ishonch oralig'ini ehtimol deb aytish
⚠️ "Haqiqiy o'rtacha 95% ehtimol bilan [2.1, 3.4] da"
✅ "Bu protsedura bilan qurilgan oraliqlarning 95% i haqiqiy qiymatni qamraydi"4. Namuna hajmisiz A/B test
davomiylik = "1 hafta" # ⚠️
n = namuna_hajmi(p0=0.10, mde=0.01) # ~14 750 har guruhga -> kunlar # ✅5. Peeking
for kun in range(30):
if p_qiymat(kun) < 0.05:
break # ⚠️
natija = p_qiymat(oxirgi_kun) # oldindan belgilangan n da bir marta # ✅6. Ko'p testlash tuzatishsiz
sezilarli = [m for m, p in zip(metrikalar, pqiymatlar) if p < 0.05] # ⚠️
sezilarli = [m for m, r in zip(metrikalar, bh(np.array(pqiymatlar))) if r] # ✅7. Kam quvvatli testdagi ta'sirni biznes rejaga qo'yish
⚠️ "Kichik testda +1.8 p.p. chiqdi - rejaga +1.8 yozamiz"
✅ "Quvvat 0.29 edi; sezilarli natijalar o'rtacha x1.8 oshirilgan.
Katta test bilan tasdiqlaymiz yoki konservativ baho olamiz"7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 4.7, 4.13-darslar (o'tilgan): Markaziy limit teoremasi, t-test va ishonch oralig'i
- 4.10, 8.4-darslar (o'tilgan): Korrelyatsiya va sababiyat, Simpson paradoksi
- 9.2, 9.3, 9.4, 9.6-darslar (o'tilgan): Kombinatorika, shartli ehtimollik, Bayes, kutilma
- 9.10-dars (o'tilgan): Monte Carlo — javobni simulyatsiya bilan tekshirish
- 11.1, 11.2, 11.4, 11.9-darslar (o'tilgan): p-qiymat, quvvat va namuna hajmi, proporsiyalar, ko'p taqqoslash
- 27.13-dars (o'tilgan): Onlayn A/B test, peeking, guardrail metrikalar
- 28.11-dars (o'tilgan): Sababiy xulosa, kollayder va tanlash
- 29.10-dars: Intervyu — ML, SQL va case study; statistik fikrlash case study da ham kerak
- 29.11-dars: Ma'lumot etikasi — tanlash tarafkashligi adolatlilik masalasi sifatida
8. Eng yaxshi amaliyotlar
Avval savolni aniqlashtiring: taxminlarni ovoz chiqarib ayting.
Formula + sonli intuitsiya ("1000 odam") + tekshiruv — uchalasi birga.
Imkon bo'lsa, javobni 5-10 qatorli simulyatsiya bilan tekshiring; mos kelishini 2*SE bilan baholang.
p-qiymat bilan birga ta'sir kattaligi va ishonch oralig'ini ayting.
A/B test: metrika, MDE, namuna hajmi, davomiylik — hammasi oldindan; peeking yo'q.
Ko'p metrika yoki ko'p segment — tuzatish (Bonferroni yoki BH) yoki bitta asosiy metrika.
Har bog'liqlikda so'rang: yashirin sabab? teskari yo'nalish? ma'lumot qanday tanlangan?
Bilmagan joyingizni tan oling va qanday tekshirishingizni ayting — bu ham kuchli javob.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # tarqalish 0.1% bo'lsa, musbat testdan keyin kasallik ehtimoli?
2. # ikkinchi mustaqil test ham musbat - taxminan qancha?
3. # 57 odamda umumiy tug'ilgan kun ehtimoli?
4. # HHH uchun kutilgan tashlashlar?
5. # H0 to'g'ri bo'lsa, p-qiymatlarning qancha ulushi 0.2 dan 0.3 gacha?
6. # haqiqiy ta'sirlar 10%, quvvat ~0.48: p < 0.05 lardan qanchasida H0 to'g'ri?
7. # lognormal (sigma 1.2), n=5: t-oraliq qamrovi 0.95 dan yuqorimi, pastmi?
8. # namuna hajmi n/4 bo'lsa quvvat taxminan qancha?
9. # 5 marta qarab to'xtatish: yolg'on musbat taxminan?
10. # Bonferroni va BH: qaysi biri ko'proq haqiqiy ta'sir topadi?
11. # tasodifiy taqsimlangan katta A/B testda Simpson paradoksi bo'ladimi?
12. # omon qolganlar ichida mustaqil ikki omil qanday bog'lanadi?Javoblar
0.009— musbatlarning 1% dan ham kami kasal~0.48(prior0.0876bilan)0.99014(simulyatsiya13.936)~0.1— H0 da p bir tekis taqsimlangan~0.5(simulyatsiya0.497, Bayes0.484)- Ancha past —
0.766 ~0.29(simulyatsiya0.287)~0.17(simulyatsiya0.166)- BH (
2.51va1.96ta), lekin biroz ko'proq yolg'on bilan - Katta n da deyarli yo'q — segment ulushlari guruhlarda teng; bo'lsa — taqsimlashni tekshiring
- Soxta (odatda manfiy) korrelyatsiya paydo bo'ladi —
-0.564
Vazifa 2: Xatolarni tuzating
1. p_kasal = 0.95 # test sezgirligi 95%
2. natija = "ta'sir yo'q" if p > 0.05 else "ta'sir bor"
3. if min(pqiymatlar) < 0.05: xulosa = "yangi dizayn yaxshiroq"
4. while p >= 0.05: kun += 1; p = test(kun)
5. oraliq = (x.mean() - 1.96 * x.std() / np.sqrt(5), x.mean() + 1.96 * x.std() / np.sqrt(5)) # daromad, n=5Javoblar
1. p_kasal = sez * prev / (sez * prev + (1 - spes) * (1 - prev)) # asosiy stavka bilan
2. natija = f"farq {farq:+.3f}, 95% CI [{lo:.3f}, {hi:.3f}], quvvat {quvvat:.2f}"
# p > 0.05 - "ma'lumot yetarli emas", ayniqsa quvvat past bo'lsa
3. rad = bh(np.array(pqiymatlar)) # yoki oldindan tanlangan BITTA asosiy metrika
4. n = namuna_hajmi(p0, mde); p = test(n) # bir marta, oldindan belgilangan n da
5. # og'ir dumli, kichik n: log-transformatsiya yoki bootstrap 11.8-bob, n ni oshirish
lo, hi = np.percentile([rng.choice(x, x.size).mean() for _ in range(5000)], [2.5, 97.5])Vazifa 3: Ehtimollik masalalari
1-misol asosida simulyatsiya bilan tekshiring:
- Kupon kolleksioneri: 10 xil stiker bor, har paketda tasodifiy bittasi. Hammasini yig'ish uchun o'rtacha nechta paket kerak? (Javob:
10 * (1 + 1/2 + ... + 1/10) ~ 29.3) - Tayoqni ikki tasodifiy nuqtada sindiramiz — bo'laklardan uchburchak yasash ehtimoli? (Javob: 0.25)
- Ikki farzandli oila, kamida bittasi o'g'il — ikkalasi o'g'il bo'lish ehtimoli? "Kattasi o'g'il" bo'lsa-chi? (1/3 va 1/2)
- HT va TH o'yini: tanga tashlanadi, qaysi naqsh birinchi chiqsa o'sha yutadi. HH va TH o'yinida-chi?
Vazifa 4: p-qiymat va oraliqlar
2-misol asosida:
- Haqiqiy ta'sirlar ulushi
0.5va0.01bo'lgandaP(H0 | p < 0.05)ni hisoblang - Lognormal ma'lumot uchun bootstrap percentil oralig'i qamrovini n=5, 30, 200 da o'lchang — t-oraliqdan yaxshimi?
- Log-transformatsiya qilingan ma'lumot uchun oraliq — u qaysi parametrni qamraydi (o'rtachani emas, geometrik o'rtachani)?
- Koshi taqsimoti uchun o'rtachalar std si n oshganda kamayadimi?
Vazifa 5: A/B test
3-misol asosida:
- MDE ni
+0.5 p.p.qiling — namuna hajmi necha barobar oshadi? (1 / MDE^2) - Quvvatni 0.9 ga oshirish uchun n qanchaga oshishi kerak?
- 5 ta rejalashtirilgan qarash uchun Pocock chegarasi (har qarashda ~`0.0158`) bilan yolg'on musbatni o'lchang
- BH da
q = 0.10qiling — topilgan va yolg'on ta'sirlar qanday o'zgaradi?
Vazifa 6: Tarafkashliklar
4-misol asosida:
- Simpson misolida sahifani tasodifiy taqsimlang (mobil va kompyuterga teng) — paradoks yo'qoladimi?
- Murojaat va ketish misoliga teskari yo'nalish qo'shing: ketishga qaror qilganlar 2 ta qo'shimcha murojaat qiladi — qatlamlash buni ushlaydimi?
- Omon qolganlar chegarasini 0.0 va 0.3 qiling — tarafkashlik qanday o'zgaradi?
- Berkson misolida tanlash shovqinini oshiring (
0.5→2.0) — soxta korrelyatsiya qanday o'zgaradi?
Vazifa 7: O'ylash
Intervyuer: "Biz yangi tavsiya algoritmini 3 kun sinadik. Birinchi kuni sezilarli emas edi, uchinchi kuni p = 0.04 chiqdi va biz to'xtatdik. 15 ta metrikani kuzatdik, ulardan 'o'rtacha chek' sezilarli oshdi, qolganlari — yo'q. Mobil ilovada natija yaxshi, veb-saytda yomonroq. Algoritmni hamma uchun ishga tushirishni tavsiya qilasizmi?"
Javob
Qisqa javob: hozircha yo'q — bu natija uchta mustaqil sababga ko'ra ishonchli emas. Lekin "yo'q" deyish ham yetmaydi: to'g'ri tajribani qanday o'tkazishni taklif qilish kerak.
1. Peeking. Test oldindan belgilangan hajmsiz, p < 0.05 bo'lgan birinchi kuni to'xtatilgan. 3-misolda 5 marta qarash yolg'on musbatni 0.05 dan 0.166 ga oshirdi. Bundan tashqari, 3 kun — to'liq hafta ham emas: hafta kunlari ta'siri va "yangilik effekti" (foydalanuvchilar yangi narsani dastlab ko'proq bosadi) aralashgan.
2. Ko'p testlash. 15 ta metrikadan bittasi "sezilarli" — hammasi H0 bo'lsa ham kamida bittasi 1 - 0.95^15 = 0.54 ehtimol bilan sezilarli chiqadi. "O'rtacha chek" oldindan asosiy metrika sifatida tanlanganmidi? Agar yo'q bo'lsa, bu — keyin tanlangan natija. BH yoki Bonferroni bilan tuzatilgan p-qiymatni ko'rish kerak. Bundan tashqari, o'rtacha chek og'ir dumli metrika — 2-misolda n kichik bo'lganda oddiy oraliq qamrovi 95% dan ancha past edi.
3. Segmentlar. "Mobilda yaxshi, vebda yomon" — segmentlar ham qo'shimcha testlar (yana ko'p testlash). Agar taqsimlash to'g'ri bo'lsa, umumiy natija asosiy; segment farqi — keyingi test uchun gipoteza. Agar mobil va vebdagi foydalanuvchilar ulushi guruhlarda farq qilsa — taqsimlash buzilgan (SRM), 4-misoldagi Simpson holati mumkin.
4. Kam quvvat va g'olib la'nati. 3 kunlik test ehtimol kam quvvatli. 3-misolda kam quvvatli testning sezilarli natijalari ta'sirni o'rtacha x1.83 oshirib ko'rsatdi — "o'rtacha chek oshdi" raqamining o'zi ham oshirilgan bo'lishi mumkin.
5. Taklif.
- Oldindan reja yozish: asosiy metrika (masalan, foydalanuvchiga daromad), guardrail lar, MDE, namuna hajmi — kamida 1-2 to'liq hafta.
- Daromad metrikasi uchun bootstrap yoki log-transformatsiya, SE foydalanuvchi bo'yicha.
- Segmentlar (mobil/veb) — oldindan e'lon qilingan ikkinchi darajali tahlil, tuzatish bilan.
- Natija bir marta, oldindan belgilangan kunda o'qiladi.
Intervyuerga javob: "Hozirgi natija bilan ishga tushirishni tavsiya qilmayman: test sezilarli bo'lgan kunda to'xtatilgan, 15 metrikadan bittasi tasodifan ham sezilarli chiqishi mumkin, 3 kun esa haftalik mavsumiylikni qamramaydi. Lekin natija qiziqarli — uni gipoteza sifatida olib, asosiy metrikasi va namuna hajmi oldindan belgilangan ikki haftalik test o'tkazishni taklif qilaman. Shundan keyin ishga tushirish qarori raqam bilan asoslanadi."
Nimani mustahkamlaydi: 2.2, 2.5, 2.6, 2.9, 2.10-bo'limlar.
Xulosa
Bu darsda intervyuda tez-tez so'raladigan statistika va ehtimollik savollarini ko'rib chiqdik va har bir javobni simulyatsiya bilan tekshirdik.
Eng muhim uch fikr:
Javob — formula, intuitsiya va tekshiruv. 1-misolda tibbiy test masalasida to'g'ri javob
8.8%(analitik0.0876, simulyatsiya0.0884), "95%" emas — asosiy stavka hal qiladi; tug'ilgan kun paradoksida 23 odam (0.507, 253 juftlik); ketma-ket ikki gerb uchun 6 ta tashlash (5.993), HT uchun esa 4 ta. Har javob Monte Carlo bilan2*SEichida tasdiqlandi — intervyuda ham shu uslubda javob bering.p-qiymat va oraliqlar — nima ekanini va nima emasligini biling. 2-misolda H0 da p bir tekis va
p < 0.05ulushi0.051, lekin haqiqiy ta'sirlar kam bo'lgan dunyodap < 0.05li testlarning~50%ida H0 to'g'ri; 200 000 kuzatuvda ahamiyatsiz farq hamp = 5.5e-05. Ishonch oralig'i — protsedura xossasi; og'ir dumli ma'lumotda n=30 da qamrov0.851, n=200 da ham0.911— CLT sekin ishlaydi.A/B test va tarafkashliklar — dizayn oldindan. 3-misolda formula
14751ni berdi va simulyatsiya quvvat0.792ni tasdiqladi; kam quvvatli testda ta'sir x1.83oshirib ko'rsatildi; 20 marta qarash yolg'on musbatni0.253ga, 20 metrika esaP(>=1 yolg'on)ni0.64ga chiqardi. 4-misolda Simpson paradoksi, yashirin sabab, omon qolganlar va Berkson tarafkashligi bitta savolga olib keldi: ma'lumot qanday paydo bo'lgan?
Keyingi darsda Intervyu: ML, SQL va case study: bias-variance, regularizatsiya, nomutanosib sinflar, sizish va gradient boosting bo'yicha savollar — kod bilan tekshiruv; sqlite3 da haqiqiy jadvallar bilan SQL savollari (JOIN, GROUP BY, oyna funksiyalari, retention); jonli kodlash masalalari va "sotuv 10% tushdi — nima qilasiz?" degan case study ning to'liq tahlili.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!