Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Bir ulush testi
- 2.2. Ikki ulush farqi (z-test)
- 2.3. Aniq testlar: Fisher va binomial
- 2.4. Ulush uchun ishonch oralig'i
- 2.5. Farq uchun ishonch oralig'i
- 2.6. Absolyut va nisbiy farq
- 2.7. Proporsiya tuzoqlari
- 2.8. Proporsiyalar — binomial ma'lumot testi
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Bir ulush: aniq test va z-test
- Misol 2 — A/B test: z-test, Fisher, CI
- Misol 3 — Wald va Wilson oraliqlari
- Misol 4 — Kichik namuna va Simpson paradoksi
- 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
11.4-dars: Proporsiyalar (konversiyalar) testi
11-QISM — GIPOTEZA TESTLARI · 4-dars
1. Kirish va motivatsiya
Data Science'da eng ko'p tekshiriladigan farq — ulushlar farqi: konversiya, klik chastotasi (CTR), qaytish (churn) ulushi, xato chastotasi, "ha/yo'q" javoblar. Bu ma'lumot binomial 9.7-bob: har foydalanuvchi — 0 yoki 1. Shuning uchun t-test o'rniga maxsus vositalar ishlatiladi: proporsiyalar z-testi, aniq testlar (Fisher, binomial), va ulushlar uchun to'g'ri ishonch oraliqlari.
Amalda bu yerda ko'p xato qilinadi: nisbiy va absolyut farqni chalkashtirish ("+13% o'sish" — 11% dan 12.5% gacha, ya'ni +1.5 foiz punkt), kichik sonlarda normal yaqinlashishdan foydalanish, Wald ishonch oralig'ini kam kuzatuvda ishlatish (u [-0.02; 0.05] kabi ma'nosiz chegaralar beradi), va bitta foydalanuvchining ko'p sessiyasini mustaqil kuzatuv deb hisoblash.
Real vaziyat. Marketing bo'limi: "Yangi banner CTR ni 2.0% dan 2.6% ga oshirdi — 30% o'sish!". Ma'lumot: eski bannerda 100 ta ko'rsatishdan 2 ta klik, yangisida 500 ta ko'rsatishdan 13 ta klik. Data Scientist ishonch oralig'ini hisoblaydi: farq +0.6 foiz punkt, 95% CI [-2.5; +3.7] foiz punkt (Fisher p = 1.0) — natija shovqindan ajralmaydi. Bundan tashqari, 100 ta ko'rsatish uchun normal yaqinlashish ishonchsiz (kutilgan kliklar soni 2 ta). To'g'ri qaror: testni davom ettirish; kerakli hajm 11.2-bob — har variant uchun o'n minglab ko'rsatish.
Bu darsda proporsiyalar testini o'rganamiz.
Bu darsda:
- Bir ulush testi (binomial va z-test)
- Ikki ulush farqi (z-test)
- Aniq testlar: Fisher va binomial
- Ulush uchun ishonch oralig'i (Wald, Wilson)
- Farq uchun ishonch oralig'i
- Absolyut va nisbiy farq
- Proporsiya tuzoqlari
- Amaliy: A/B konversiya tahlili
ℹ Misollar real numpy/scipy/statsmodels bilan (Python 3.14).
2. Nazariya — chuqur tushuntirish
2.1. Bir ulush testi
Savol: kuzatilgan ulush ma'lum qiymatdan (p0) farqlimi?
n = 500 tashrif, x = 42 konversiya (8.4%); p0 = 10% — farqlimi?
ANIQ (binomial) test — har doim to'g'ri:
stats.binomtest(k=42, n=500, p=0.10)
z-TEST (normal yaqinlashish) — n katta bo'lsa:
z = (p_hat - p0) / sqrt(p0 (1 - p0) / n)
shart: n × p0 >= 10 va n × (1 - p0) >= 10 Aniq binomial test — binomial taqsimotdan 9.7-bob to'g'ridan-to'g'ri hisoblaydi: hech qanday yaqinlashish yo'q, kichik n da ham to'g'ri. z-test — normal yaqinlashish (MLT, 4.7): tez, formulada qulay, lekin kam hodisa (kutilgan soni 10 dan kam) bo'lsa ishonchsiz. Qoida: shubha bo'lsa — aniq test (binomtest); u ishonch oralig'ini ham beradi (.proportion_ci()).
2.2. Ikki ulush farqi (z-test)
A: nA = 4000, xA = 440 (11.0%) B: nB = 4000, xB = 500 (12.5%)
H0: pA = pB
Birlashtirilgan ulush: p_pool = (xA + xB) / (nA + nB)
SE0 = sqrt( p_pool (1 - p_pool) (1/nA + 1/nB) )
z = (pB - pA) / SE0, p = 2 × P(Z > |z|)
statsmodels: proportions_ztest([xB, xA], [nB, nA])Ikki ulush z-testi — A/B testlarning standart vositasi. Diqqat: p-qiymat uchun birlashtirilgan ulush (H0 da ikkalasi teng deb faraz qilinadi), ishonch oralig'i uchun esa alohida ulushlar ishlatiladi 2.5-bob — shuning uchun ba'zan "p < 0.05, lekin CI nolni o'z ichiga oladi" kabi kichik nomuvofiqlik ko'rinadi (chegara yaqinida). Muqobil: xi-kvadrat testi 11.5-bob — 2×2 jadvalda z-test bilan matematik ekvivalent.
2.3. Aniq testlar: Fisher va binomial
Fisher aniq testi (stats.fisher_exact) — 2×2 jadval uchun aniq p-qiymat (gipergeometrik taqsimot, 9.2): kichik namunalarda yoki kam hodisada (kutilgan chastota < 5) ishlatiladi. Binomial test — bir ulush uchun. Aniq testlar konservativ (p biroz kattaroq — I tur xato alfa dan kam bo'ladi). Katta namunada z-test, xi-kvadrat va Fisher deyarli bir xil natija beradi; kichikda — Fisher xavfsizroq.
2.4. Ulush uchun ishonch oralig'i
WALD (klassik, yomon): p_hat ± 1.96 sqrt(p_hat (1 - p_hat) / n)
muammo: p_hat = 0 bo'lsa CI = [0, 0] (!); kichik n da qamrov 95% dan ancha past
WILSON (tavsiya etiladi) — kichik n va ekstremal ulushlarda ham to'g'ri
statsmodels: proportion_confint(x, n, method="wilson")
aniq (Clopper-Pearson): method="beta" — eng konservativ Wald oralig'i — darsliklardagi klassik formula, lekin amalda yomon: kam hodisada (x = 0, 1, 2) noto'g'ri, hatto mumkin bo'lmagan chegaralar (manfiy yoki > 1) beradi. Wilson oralig'i — oddiy formula, ancha yaxshi qamrov; proportion_confint(..., method="wilson"). "3 qoidasi": n ta kuzatuvda 0 hodisa bo'lsa, ulushning yuqori chegarasi ≈ 3/n (masalan, 300 ta sinovda xato yo'q → xato ehtimoli 1% gacha bo'lishi mumkin).
2.5. Farq uchun ishonch oralig'i
Farq (absolyut, foiz punktda):
SE = sqrt( pA(1-pA)/nA + pB(1-pB)/nB ) ← alohida ulushlar (birlashtirilmagan)
CI: (pB - pA) ± 1.96 × SE
statsmodels: confint_proportions_2indep(xB, nB, xA, nA, method="wald")
Nisbiy farq (lift) CI — log shkalada hisoblanadi yoki bootstrap (11.8)Hisobotda farqning ishonch oralig'i eng muhim raqam: "konversiya +1.5 foiz punkt [+0.1; +2.9]" — qanday yaxshilanishlar ma'lumotga mos ekanini ko'rsatadi. Nisbiy farq (lift) uchun oddiy formula yo'q — log shkala yoki bootstrap 11.8-bob ishlatiladi. Hisobotda ikkalasini ham bering: absolyut (foiz punkt) va nisbiy (%).
2.6. Absolyut va nisbiy farq
pA = 11.0%, pB = 12.5%
ABSOLYUT farq: +1.5 foiz punkt (pp — percentage point)
NISBIY farq: +13.6% (lift = (pB - pA) / pA)
"Konversiya 13% oshdi" va "konversiya 1.5% oshdi" — bir xil natijani tasvirlaydi!
Biznes qarori uchun ikkalasi ham kerak: nisbiy — ta'sir kattaligi,
absolyut — qancha qo'shimcha mijoz (1.5 pp × 100 000 tashrif = 1 500 mijoz)Foiz punkt va foiz — eng ko'p chalkashtiriladigan juftlik. Kichik bazada nisbiy farq katta ko'rinadi (0.1% → 0.15% = +50%!), lekin absolyut ta'sir kichik. Hisobotda har doim aniq yozing: "+1.5 foiz punkt (+13.6% nisbiy)". Amaliy chegara ham qaysi birida ekanini kelishing.
2.7. Proporsiya tuzoqlari
Asosiy tuzoqlar: kam hodisada normal yaqinlashish (n × p < 10 — aniq test); Wald CI (kichik n, ekstremal ulush — Wilson); foiz va foiz punktni adashtirish; soxta mustaqillik (sessiya/ko'rsatish emas, foydalanuvchi — 11.3); ketma-ket tekshirish 11.2-bob; ko'p variant (A/B/C/D — ko'p taqqoslash, 11.9); Simpson paradoksi (8.7 — segmentlarda teskari yo'nalish; trafik tarkibi o'zgarganda); nisbiy farqni kichik bazada bo'rttirish; CI siz "farq yo'q" 11.1-bob.
2.8. Proporsiyalar — binomial ma'lumot testi
Ulushlar uchun: bir ulush — aniq binomial test yoki z-test (n p >= 10); ikki ulush — z-test (birlashtirilgan SE bilan p uchun), Fisher (kichik n), xi-kvadrat (11.5 — ekvivalent); ishonch oralig'i — ulush uchun Wilson (Wald emas), farq uchun alohida ulushli SE; absolyut (foiz punkt) va nisbiy (lift) farqni aniq ajrating. Tuzoqlar: kam hodisa, soxta mustaqillik, ketma-ket tekshirish, Simpson. Keyingi dars — xi-kvadrat: kategoriyalar bog'liqligi va moslik testi.
3. Tez ma'lumotnoma
import numpy as np
from scipy import stats
from statsmodels.stats.proportion import (proportion_confint, proportions_ztest,
confint_proportions_2indep)
# BIR ULUSH
stats.binomtest(k=42, n=500, p=0.10) # aniq test
stats.binomtest(k=42, n=500, p=0.10).proportion_ci(method="wilson")
proportion_confint(42, 500, method="wilson") # ulush CI
# IKKI ULUSH
stat, p = proportions_ztest([500, 440], [4000, 4000]) # [xB, xA], [nB, nA]
stats.fisher_exact([[500, 3500], [440, 3560]]) # aniq (kichik n)
confint_proportions_2indep(500, 4000, 440, 4000, method="wald") # farq CI
# QO'LDA
pA, pB = xA / nA, xB / nB
se = np.sqrt(pA * (1 - pA) / nA + pB * (1 - pB) / nB)
ci = (pB - pA - 1.96 * se, pB - pA + 1.96 * se)
lift = (pB - pA) / pA
QOIDA: kam hodisa → aniq test · CI — Wilson · foiz punkt ≠ foiz · birlik — foydalanuvchiProporsiyalar xulosasi
Bir ulush — binomtest (aniq) yoki z-test (n p >= 10)
Ikki ulush — proportions_ztest; kichik n — fisher_exact
Ulush CI — Wilson (Wald emas); "3 qoidasi": 0 hodisa → ~3/n
Farq CI — alohida ulushli SE; nisbiy farq — log yoki bootstrap
Absolyut (foiz punkt) va nisbiy (lift) — ikkalasini bering4. Batafsil misollar
Misollar real numpy/scipy/statsmodels bilan (Python 3.14).
Misol 1 — Bir ulush: aniq test va z-test
"""Bir ulush testi: binomtest va normal yaqinlashish (real scipy/numpy)."""
import numpy as np
from scipy import stats
def main() -> None:
print("=== 1. 500 tashrifdan 42 konversiya; H0: p = 10% ===")
res = stats.binomtest(k=42, n=500, p=0.10)
print(f" ulush = {42 / 500:.3%}, aniq p = {res.pvalue:.4f}")
ci = res.proportion_ci(method="wilson")
print(f" Wilson CI: [{ci.low:.3%}, {ci.high:.3%}]")
print("\n=== 2. z-test (normal yaqinlashish) ===")
p0, n, x = 0.10, 500, 42
z = (x / n - p0) / np.sqrt(p0 * (1 - p0) / n)
print(f" z = {z:.3f}, p = {2 * stats.norm.sf(abs(z)):.4f}")
print(f" shart: n×p0 = {n * p0:.0f} >= 10 — bajarilgan")
print("\n=== 3. Kam hodisa: 60 sinovdan 1 ta xato; H0: p = 5% ===")
res2 = stats.binomtest(k=1, n=60, p=0.05)
z2 = (1 / 60 - 0.05) / np.sqrt(0.05 * 0.95 / 60)
print(f" aniq p = {res2.pvalue:.4f}, z-test p = {2 * stats.norm.sf(abs(z2)):.4f}")
print(f" n×p0 = {60 * 0.05:.1f} < 10 — z-test ishonchsiz")
print("\n=== 4. '3 qoidasi': 300 sinovda 0 xato ===")
ci0 = stats.binomtest(k=0, n=300, p=0.01).proportion_ci(method="exact")
print(f" CI: [{ci0.low:.4%}, {ci0.high:.4%}], 3/n = {3 / 300:.2%}")
print(" ⭐ Kam hodisada — aniq test")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. 500 tashrifdan 42 konversiya; H0: p = 10% ===
ulush = 8.400%, aniq p = 0.2631
Wilson CI: [6.274%, 11.160%]
=== 2. z-test (normal yaqinlashish) ===
z = -1.193, p = 0.2330
shart: n×p0 = 50 >= 10 — bajarilgan
=== 3. Kam hodisa: 60 sinovdan 1 ta xato; H0: p = 5% ===
aniq p = 0.3719, z-test p = 0.2361
n×p0 = 3.0 < 10 — z-test ishonchsiz
=== 4. '3 qoidasi': 300 sinovda 0 xato ===
CI: [0.0000%, 1.2221%], 3/n = 1.00%
⭐ Kam hodisada — aniq testNima ko'rsatdi: 2.1, 2.3, 2.4-bo'limlar.
Misol 2 — A/B test: z-test, Fisher, CI
"""Ikki ulush farqi: z-test, Fisher va ishonch oraliqlari (real scipy/statsmodels)."""
import numpy as np
from scipy import stats
from statsmodels.stats.proportion import confint_proportions_2indep, proportions_ztest
def main() -> None:
nA, xA, nB, xB = 4000, 440, 4000, 500
pA, pB = xA / nA, xB / nB
print("=== 1. Kuzatilgan ===")
print(f" A: {pA:.2%} ({xA}/{nA}), B: {pB:.2%} ({xB}/{nB})")
print(f" absolyut farq: {(pB - pA) * 100:+.2f} foiz punkt; nisbiy: {(pB - pA) / pA:+.1%}")
print("\n=== 2. z-test ===")
stat, p = proportions_ztest([xB, xA], [nB, nA])
print(f" z = {stat:.3f}, p = {p:.4f}")
print("\n=== 3. Fisher aniq testi ===")
_, p_f = stats.fisher_exact([[xB, nB - xB], [xA, nA - xA]])
print(f" p = {p_f:.4f} (z-test bilan yaqin)")
print("\n=== 4. Farqning 95% CI ===")
lo, hi = confint_proportions_2indep(xB, nB, xA, nA, method="wald")
print(f" [{lo * 100:+.2f}, {hi * 100:+.2f}] foiz punkt")
se = np.sqrt(pA * (1 - pA) / nA + pB * (1 - pB) / nB)
print(f" qo'lda: [{((pB - pA) - 1.96 * se) * 100:+.2f}, {((pB - pA) + 1.96 * se) * 100:+.2f}]")
print(" ⭐ Hisobot: farq (pp), nisbiy farq, CI va p")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Kuzatilgan ===
A: 11.00% (440/4000), B: 12.50% (500/4000)
absolyut farq: +1.50 foiz punkt; nisbiy: +13.6%
=== 2. z-test ===
z = 2.083, p = 0.0372
=== 3. Fisher aniq testi ===
p = 0.0405 (z-test bilan yaqin)
=== 4. Farqning 95% CI ===
[+0.09, +2.91] foiz punkt
qo'lda: [+0.09, +2.91]
⭐ Hisobot: farq (pp), nisbiy farq, CI va pNima ko'rsatdi: 2.2, 2.5, 2.6-bo'limlar.
Misol 3 — Wald va Wilson oraliqlari
"""Wald CI kichik n va ekstremal ulushda buziladi; Wilson yaxshiroq (real numpy/statsmodels)."""
import numpy as np
from statsmodels.stats.proportion import proportion_confint
def main() -> None:
print("=== 1. Turli holatlarda CI ===")
print(f" {'x/n':<10} {'Wald':<22} {'Wilson':<22}")
for x, n in [(0, 30), (1, 30), (3, 30), (15, 30), (50, 1000)]:
w = proportion_confint(x, n, method="normal")
s = proportion_confint(x, n, method="wilson")
print(f" {f'{x}/{n}':<10} [{w[0]:.4f}, {w[1]:.4f}] [{s[0]:.4f}, {s[1]:.4f}]")
print("\n=== 2. Qamrov simulyatsiyasi (haqiqiy p = 0.05, n = 40) ===")
rng = np.random.default_rng(0)
p_haqiqiy, n, N = 0.05, 40, 20_000
x = rng.binomial(n, p_haqiqiy, N)
for usul in ["normal", "wilson", "beta"]:
lo, hi = proportion_confint(x, n, method=usul)
qamrov = np.mean((lo <= p_haqiqiy) & (p_haqiqiy <= hi))
print(f" {usul:<8}: qamrov {qamrov:.3f} (maqsad 0.95)")
print("\n=== 3. Wald muammosi ===")
print(f" x=0, n=30: Wald {proportion_confint(0, 30, method='normal')} — 'ehtimol aniq 0'")
print(" ⭐ Ulush CI uchun Wilson (yoki aniq)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Turli holatlarda CI ===
x/n Wald Wilson
0/30 [0.0000, 0.0000] [0.0000, 0.1135]
1/30 [0.0000, 0.0976] [0.0059, 0.1667]
3/30 [0.0000, 0.2074] [0.0346, 0.2562]
15/30 [0.3211, 0.6789] [0.3315, 0.6685]
50/1000 [0.0365, 0.0635] [0.0381, 0.0653]
=== 2. Qamrov simulyatsiyasi (haqiqiy p = 0.05, n = 40) ===
normal : qamrov 0.868 (maqsad 0.95)
wilson : qamrov 0.952 (maqsad 0.95)
beta : qamrov 0.986 (maqsad 0.95)
=== 3. Wald muammosi ===
x=0, n=30: Wald (0.0, 0.0) — 'ehtimol aniq 0'
⭐ Ulush CI uchun Wilson (yoki aniq)Nima ko'rsatdi: 2.4-bo'lim.
Misol 4 — Kichik namuna va Simpson paradoksi
"""Kichik namunada 'katta o'sish' va segmentlarda teskari yo'nalish (real numpy/scipy/statsmodels)."""
import numpy as np
from scipy import stats
from statsmodels.stats.proportion import confint_proportions_2indep
def main() -> None:
print("=== 1. Banner misoli: 2/100 va 13/500 ===")
nA, xA, nB, xB = 100, 2, 500, 13
pA, pB = xA / nA, xB / nB
print(f" CTR: {pA:.2%} → {pB:.2%} (nisbiy {(pB - pA) / pA:+.0%})")
_, p_f = stats.fisher_exact([[xB, nB - xB], [xA, nA - xA]])
lo, hi = confint_proportions_2indep(xB, nB, xA, nA, method="wald")
print(f" Fisher p = {p_f:.3f}, farq CI [{lo * 100:+.2f}, {hi * 100:+.2f}] foiz punkt")
print(" → shovqindan ajralmaydi")
print("\n=== 2. Simpson paradoksi 8.7-bob ===")
# mobil: A 100/1000 = 10%, B 60/500 = 12%; kompyuter: A 90/300 = 30%, B 260/800 = 32.5%
segment = {"mobil": (100, 1000, 60, 500), "kompyuter": (90, 300, 260, 800)}
jA = jB = nAj = nBj = 0
for nom, (xa, na, xb, nb) in segment.items():
print(f" {nom:<10}: A {xa / na:.1%} ({na} ta), B {xb / nb:.1%} ({nb} ta) → B yaxshiroq")
jA += xa; nAj += na; jB += xb; nBj += nb
print(f" UMUMIY : A {jA / nAj:.1%} ({nAj} ta), B {jB / nBj:.1%} ({nBj} ta) → A yaxshiroq?!")
print(" sabab: guruhlarda qurilma tarkibi har xil")
print(" ⭐ Kichik n — ehtiyot; segment tarkibini tekshiring")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Banner misoli: 2/100 va 13/500 ===
CTR: 2.00% → 2.60% (nisbiy +30%)
Fisher p = 1.000, farq CI [-2.48, +3.68] foiz punkt
→ shovqindan ajralmaydi
=== 2. Simpson paradoksi 8.7-bob ===
mobil : A 10.0% (1000 ta), B 12.0% (500 ta) → B yaxshiroq
kompyuter : A 30.0% (300 ta), B 32.5% (800 ta) → B yaxshiroq
UMUMIY : A 14.6% (1300 ta), B 24.6% (1300 ta) → A yaxshiroq?!
sabab: guruhlarda qurilma tarkibi har xil
⭐ Kichik n — ehtiyot; segment tarkibini tekshiringNima ko'rsatdi: 2.7-bo'lim.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "+1.5% va +13% — turli natijalar" | Bir xil (pp va nisbiy) |
| "z-test har doim ishlaydi" | n p >= 10 sharti |
| "Wald CI — standart" | Wilson yaxshiroq |
| "0 hodisa → ehtimol 0" | Yuqori chegara ~3/n |
| "Ko'rsatishlar soni = n" | Foydalanuvchilar soni |
| "Fisher faqat kichik n uchun" | Har doim to'g'ri (konservativ) |
| "Umumiy natija yetarli" | Segmentlarni ko'ring (Simpson) |
| "p < 0.05 → ishga tushiramiz" | Amaliy chegara + CI |
6. Keng tarqalgan xatolar va yechimlari
1. Kam hodisada z-test
z = (x / n - p0) / np.sqrt(p0 * (1 - p0) / n) # n*p0 = 3 # ⚠️
stats.binomtest(k=x, n=n, p=p0) # ✅2. Wald CI
proportion_confint(1, 30, method="normal") # ⚠️
proportion_confint(1, 30, method="wilson") # ✅3. Foiz punkt va foiz
print(f"konversiya {(pB - pA) * 100:.1f}% oshdi") # ⚠️
print(f"{(pB - pA) * 100:.1f} foiz punkt ({(pB - pA) / pA:+.1%} nisbiy)") # ✅4. Sessiya darajasida test
proportions_ztest([klik_b, klik_a], [korsatish_b, korsatish_a]) # ⚠️
# foydalanuvchi darajasiga agregatsiya qiling # ✅5. Faqat p
print("p =", p) # ⚠️
print(f"farq {(pB-pA)*100:+.2f} pp, CI [{lo*100:+.2f}, {hi*100:+.2f}], p = {p:.4f}") # ✅6. Ko'p variant
# A/B/C/D — har juftlikni alohida solishtirish # ⚠️
# xi-kvadrat 11.5-bob yoki tuzatish 11.9-bob # ✅7. Segmentsiz xulosa
# umumiy konversiya bo'yicha qaror # ⚠️
# asosiy segmentlar bo'yicha ham ko'ring (Simpson) # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 9.7-dars (o'tilgan): Binomial taqsimot
- 11.2-dars (o'tilgan): Konversiyalar uchun namuna hajmi
- 11.5-dars: Xi-kvadrat (2×2 jadval)
- 11.8-dars: Bootstrap (nisbiy farq CI)
- 11.10-dars: A/B test loyihasi
8. Eng yaxshi amaliyotlar
Mustaqil birlik — foydalanuvchi.
Kam hodisada aniq test.
Ulush CI — Wilson.
Farq CI ni hisobot qiling.
Absolyut va nisbiy farqni ajrating.
Segmentlarni tekshiring (Simpson).
Ko'p variantda tuzatish.
Amaliy chegarani oldindan kelishing.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # 11% dan 12.5% — absolyut farq?
2. # nisbiy farq?
3. # z-test sharti?
4. # kam hodisada qaysi test?
5. # 2x2 jadval uchun aniq test?
6. # ulush CI uchun tavsiya?
7. # 0/200 uchun yuqori chegara?
8. # p uchun SE qanday hisoblanadi?
9. # farq CI uchun?
10. # mustaqil birlik?
11. # A/B/C/D — nima qilish kerak?
12. # umumiy natija va segmentlar qarama-qarshi?Javoblar
- +1.5 foiz punkt
- +13.6%
- n×p >= 10 va n×(1-p) >= 10
- Binomial/Fisher (aniq)
- Fisher
- Wilson
- ~1.5% (3/200)
- Birlashtirilgan ulush bilan
- Alohida ulushlar bilan
- Foydalanuvchi
- Xi-kvadrat yoki tuzatish
- Simpson paradoksi
Vazifa 2: Xatolarni tuzating
1. z = (3/50 - 0.10) / np.sqrt(0.10 * 0.90 / 50)
2. proportion_confint(2, 40, method="normal")
3. print(f"konversiya {(0.125 - 0.11) * 100:.1f}% oshdi")
4. proportions_ztest([kliklar_b, kliklar_a], [korsatishlar_b, korsatishlar_a])
5. print("p =", p) # A/B hisobotJavoblar
1. stats.binomtest(k=3, n=50, p=0.10)
2. proportion_confint(2, 40, method="wilson")
3. print(f"{(0.125 - 0.11) * 100:.1f} foiz punkt ({(0.125 - 0.11) / 0.11:+.1%})")
4. # foydalanuvchi darajasida: nunique(user_id) va konversiya qilganlar soni
5. print(f"farq {farq:+.2f} pp CI [{lo:+.2f}, {hi:+.2f}], p = {p:.4f}")Vazifa 3: A/B tahlil
Modellang:
- Ikki variant: 5 000 va 5 000 foydalanuvchi
- Konversiya, farq, CI, p
- Nisbiy farq
- Amaliy chegara bilan qaror
Vazifa 4: CI qamrovi
Modellang:
- p = 0.02, 0.2, 0.5; n = 20, 50, 200
- Wald, Wilson, aniq qamrovi
- Jadval
- Tavsiya
Vazifa 5: Segment tahlili
Modellang:
- Simpson paradoksli ma'lumot
- Umumiy va segment testlari
- Tarkib farqini ko'rsatish
- To'g'ri xulosa
Vazifa 6: Integratsiya
Modellang:
- Binomial (9.7)
- Namuna hajmi (11.2)
- Bootstrap CI (11.8 ga tayyorgarlik)
- Hisobot (8.9)
Vazifa 7: O'ylash
Ko'p kompaniyalar A/B test natijalarini "konversiya 13% oshdi" shaklida e'lon qiladi, lekin bazaviy konversiya va absolyut farqni ko'rsatmaydi. Nima uchun bu shaffoflik muammosi, va foizlar bilan manipulyatsiya qanday amalga oshiriladi?
Javob
Qisqa javob: nisbiy farq kichik bazada juda katta ko'rinadi (0.1% → 0.15% = "+50%"), shuning uchun kontekstsiz foiz ko'pincha ta'sirni bo'rttiradi. Absolyut farq, bazaviy qiymat va ishonch oralig'isiz raqam qaror qabul qilish uchun yaroqsiz.
1. Manipulyatsiya usullari
| Usul | Nima qilinadi |
|---|---|
| Faqat nisbiy farq | Kichik bazada katta foiz |
| Bazani yashirish | Qancha odamga ta'sir — noma'lum |
| CI ni ko'rsatmaslik | Noaniqlik yashiriladi |
| Eng yaxshi segment | "Mobil foydalanuvchilarda +30%" |
| Eng yaxshi metrika | 10 metrikadan bittasi |
| Erta to'xtatish | p < 0.05 bo'lgan kun |
2. Halol hisobot tarkibi
- Bazaviy qiymat va namuna hajmi
- Absolyut farq (foiz punkt) va nisbiy farq
- Ishonch oralig'i
- Oldindan belgilangan asosiy metrika (va nechta metrika ko'rilgani)
- Test davomiyligi va to'xtash qoidasi
3. Biznes ta'siri
- Absolyut farq × trafik = qo'shimcha mijozlar
- Nisbiy farq — boshqa tajribalar bilan solishtirish uchun
- CI — eng yomon/eng yaxshi ssenariy
4. Data Scientist qanday
- Shablon hisobot (barcha raqamlar bir joyda)
- Testlar registri va oldindan reja
- "Katta foiz" da avval bazani so'raydi
- Menejerga ikki raqamni birga tushuntiradi
5. Xulosa
- Kontekstsiz foiz — yarim haqiqat
- Baza, absolyut farq, CI — majburiy
- Manipulyatsiya ko'pincha tanlab hisobot orqali
- Shablon va registr — himoya
Nimani mustahkamlaydi: 2.6, 2.7-bo'limlar.
Xulosa
Bu darsda proporsiyalar testini o'rgandik.
Eng muhim uch fikr:
Test tanlash. Bir ulush — aniq binomial test (yoki z-test, agar n p >= 10 va n(1-p) >= 10); ikki ulush — z-test (birlashtirilgan SE bilan), kichik namunada — Fisher aniq testi; 2×2 da xi-kvadrat 11.5-bob bilan ekvivalent.
Ishonch oraliqlari. Ulush uchun Wilson (Wald emas — kichik n va ekstremal ulushda buziladi; 0 hodisa → yuqori chegara ~3/n). Farq uchun — alohida ulushli SE; nisbiy farq (lift) uchun log shkala yoki bootstrap 11.8-bob.
Absolyut va nisbiy. "+1.5 foiz punkt" va "+13.6%" — bir xil natija; kichik bazada nisbiy farq bo'rttirilgan ko'rinadi. Hisobotda baza, absolyut farq, nisbiy farq, CI va p birga. Tuzoqlar: soxta mustaqillik (foydalanuvchi darajasi), ketma-ket tekshirish, ko'p variant, Simpson paradoksi.
Keyingi darsda xi-kvadrat testlarini o'rganamiz: kategoriyalar bog'liqligi (kontingentlik jadvali), moslik testi (kutilgan taqsimot), qoldiqlar tahlili va testning cheklovlari.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!