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

11.7-dars: Noparametrik testlar

11-QISM — GIPOTEZA TESTLARI · 7-dars


1. Kirish va motivatsiya

t-test va ANOVA o'rtachalar bilan ishlaydi va normallikka tayanadi. Lekin Data Science'dagi ko'p ma'lumot — kuchli qiyshiq 9.8-bob: mijoz sarfi, sessiya uzunligi, yetkazish vaqti, kutish vaqti. Bunday ma'lumotda bitta ulkan qiymat o'rtachani ham, testni ham buzadi (11.3, Misol 3). Bundan tashqari, ba'zan ma'lumot tartibli bo'ladi: qoniqish bahosi (1-5), "yomon / o'rtacha / yaxshi" — ularda o'rtacha ma'nosi shubhali.

Noparametrik testlar — taqsimot shakliga faraz qo'ymaydigan testlar. Ular qiymatlarning o'zi bilan emas, tartiblari (rank) bilan ishlaydi: Mann-Whitney U (ikki mustaqil guruh), Wilcoxon (juftlashgan), Kruskal-Wallis (ko'p guruh), Friedman (takroriy o'lchov). Afzalligi — outlierlarga chidamli, kichik namunada ishonchli; kamchiligi — natija talqini murakkabroq ("o'rtacha farqi" emas) va normal ma'lumotda quvvati biroz kamroq.

Real vaziyat. Jamoa ikki to'lov oqimini solishtiradi: har foydalanuvchining to'lovni yakunlash vaqti. Ma'lumot kuchli qiyshiq (ko'pchilik 20-40 soniya, bir nechtasi 10 daqiqadan ortiq — brauzerni ochiq qoldirganlar). t-test p = 0.71 beradi — "farq yo'q". Median vaqtlar esa 32 va 25 soniya. Mann-Whitney testi p < 0.001 — yangi oqim sezilarli tez (Misol 1). Sabab: bir nechta ulkan qiymat t-testning standart xatosini shishirib yuborgan; tartiblarga asoslangan test esa ularga chidamli.

Bu darsda noparametrik testlarni o'rganamiz.

Bu darsda:

  • Tartib (rank) g'oyasi
  • Mann-Whitney U testi
  • Wilcoxon (juftlashgan) testi
  • Kruskal-Wallis va Friedman
  • Natijani qanday talqin qilish
  • Quvvat: parametrik va noparametrik solishtiruvi
  • Noparametrik tuzoqlar
  • Amaliy: qiyshiq metrikalar tahlili

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


2. Nazariya — chuqur tushuntirish

2.1. Tartib (rank) g'oyasi

text
Ma'lumot:   [12, 15, 900, 18, 14]
Tartiblar:  [ 1,  3,   5,  4,  2]        ← 900 endi shunchaki "eng katta"

Noparametrik testlar shu tartiblar bilan ishlaydi:
  - ekstremal qiymat ta'siri cheklangan (outlierga chidamli)
  - taqsimot shakli muhim emas
  - tartibli (ordinal) ma'lumot uchun ham to'g'ri

Tartiblash — qiymatlarni kattaligi bo'yicha raqamlash. Bu ma'lumotdagi "qanchalik katta" ma'lumotini yo'qotadi, lekin "kattaroqmi" ni saqlaydi — aynan shu ko'p savolda yetarli. Tartib asosidagi testlar outlierga chidamli (900 ham, 90 000 ham — "eng katta"), taqsimot farazisiz ishlaydi. Teng qiymatlar (ties) uchun o'rtacha tartib beriladi; scipy buni avtomatik hisobga oladi.

2.2. Mann-Whitney U testi

text
Ikki MUSTAQIL guruh; t-testning noparametrik muqobili
  H0: ikki taqsimot bir xil (aniqrog'i: P(X > Y) = 0.5 — "stoxastik tenglik")

stats.mannwhitneyu(a, b, alternative="two-sided")

Talqin: "A dan tasodifiy olingan qiymat B dan olinganidan katta bo'lish ehtimoli"
Effekt kattaligi: rank-biserial r = 2 × P(X > Y) - 1  (yoki U dan hisoblanadi)

Mann-Whitney U (Wilcoxon rank-sum) — eng ko'p ishlatiladigan noparametrik test. Muhim nuans: u medianlarni solishtirmaydi (ko'p manbada shunday yozilsa ham) — u "bir guruh qiymatlari ikkinchisidan tizimli ravishda kattaroqmi" degan savolga javob beradi. Medianlar farqi haqida xulosa qilish uchun qo'shimcha faraz kerak (taqsimotlar shakli bir xil, faqat siljigan). Hisobotda medianlar va ularning ishonch oraliqlari (bootstrap, 11.8) bilan birga bering.

2.3. Wilcoxon (juftlashgan) testi

text
Juftlashgan dizayn 11.3-bob: bir xil obyektlarning ikki o'lchovi
  H0: farqlar taqsimoti 0 atrofida simmetrik

stats.wilcoxon(oldin, keyin)              # yoki stats.wilcoxon(farqlar)

Ishlash tartibi: farqlarni oling → mutlaq qiymat bo'yicha tartiblang →
                 musbat va manfiy tartiblar yig'indisini solishtiring

Wilcoxon signed-rank — juftlashgan t-testning noparametrik muqobili: farqlarni tartiblaydi. Nol farqlar (o'zgarish yo'q) odatda tashlanadi (zero_method). Kichik namunada (n < 20) scipy aniq taqsimotdan foydalanadi. Juftlashgan dizayn afzalligi 11.3-bob bu yerda ham saqlanadi: shaxsiy farqlar yo'qoladi.

2.4. Kruskal-Wallis va Friedman

text
KRUSKAL-WALLIS  — ANOVA ning noparametrik muqobili (3+ MUSTAQIL guruh)
  stats.kruskal(g1, g2, g3)
  post-hoc: Dunn testi (tuzatish bilan) yoki juft Mann-Whitney + Bonferroni 11.9-bob

FRIEDMAN        — takroriy o'lchov ANOVA muqobili (bir xil obyektlar, 3+ shart)
  stats.friedmanchisquare(shart1, shart2, shart3)
  post-hoc: juft Wilcoxon + tuzatish

Kruskal-Wallis — ko'p guruhni tartiblar bo'yicha solishtiradi; Friedman — har obyekt ichida shartlarni tartiblaydi (masalan, har foydalanuvchi uchta interfeysni sinaydi). Ikkalasi ham umumiy test: post-hoc kerak (11.6 dagi kabi, tuzatish bilan — 11.9).

2.5. Natijani qanday talqin qilish

text
Noto'g'ri: "medianlar farq qiladi, p = 0.003"        ← test to'g'ridan-to'g'ri bunday demaydi
To'g'riroq: "A guruh qiymatlari tizimli ravishda kattaroq (p = 0.003);
             medianlar: 31 s va 26 s; P(A > B) = 0.61"

Hisobotda bering:
  - medianlar (va bootstrap CI — 11.8)
  - P(X > Y) yoki rank-biserial effekt kattaligi
  - p-qiymat

Noparametrik test natijasi qiymat birligida emas — shuning uchun yonida tushunarli raqamlar kerak: medianlar, kvartillar, P(X > Y). Biznes uchun eng aniq gap: "yangi oqimda foydalanuvchilarning yarmi 26 soniyadan tez tugatadi (eski oqimda 31)". Effekt kattaligi sifatida rank-biserial korrelyatsiya yoki "ustunlik ehtimoli" ishlatiladi.

2.6. Quvvat: parametrik va noparametrik

text
NORMAL ma'lumot:        t-test biroz kuchliroq (Mann-Whitney ~95% samaradorlik)
QIYSHIQ / OUTLIERLI:    noparametrik ancha kuchliroq (11.3 Misol 4)
KICHIK n:               noparametrik xavfsizroq (normallikni tekshirib bo'lmaydi)
TARTIBLI ma'lumot:      faqat noparametrik (yoki tartibli modellar)

Muqobil: log o'zgartirish + t-test 9.8-bob yoki bootstrap/permutatsiya (11.8)

Noparametrik testlar "zaifroq" degan qarash eskirgan: normal ma'lumotda Mann-Whitney t-testning ~95% samaradorligiga ega, qiyshiq ma'lumotda esa undan ancha ustun. Tanlash mezoni: savol nima (o'rtacha muhimmi yoki "odatiy qiymat"?), taqsimot qanday, ma'lumot turi (tartibli?). Pul ko'rsatkichlarida (umumiy daromad muhim) o'rtacha kerak — u holda bootstrap 11.8-bob yaxshi yechim.

2.7. Noparametrik tuzoqlar

Asosiy tuzoqlar: "median testi" deb atash (Mann-Whitney medianlarni solishtirmaydi: u "tizimli ustunlik"ni o'lchaydi. Taqsimot shakllari juda farqli bo'lsa, u farqni umuman ko'rmasligi ham mumkin (Misol 4) — shakl farqi uchun KS testi yoki grafik kerak); faqat p (medianlar, effekt kattaligi kerak); mustaqillikni unutish (11.3 — bu yerda ham asosiy faraz); juftlashgan ma'lumotga Mann-Whitney; ko'p taqqoslash (Kruskal dan keyin tuzatishsiz juft testlar); o'rtacha muhim bo'lganda tartib testi (umumiy daromad — o'rtacha kerak, median emas); juda kichik namunada (n < 5 — aniq testlar ham kuchsiz); ties ko'p bo'lganda (ko'p teng qiymat — yaqinlashish yomonlashadi).

2.8. Noparametrik testlar — farazsiz solishtirish

Noparametrik testlar tartiblar bilan ishlaydi: Mann-Whitney U (ikki mustaqil guruh — "tizimli ravishda kattaroqmi"), Wilcoxon (juftlashgan), Kruskal-Wallis (3+ mustaqil guruh), Friedman (3+ takroriy shart); post-hoc — tuzatish bilan. Afzalligi: outlierga chidamli, taqsimot farazisiz, tartibli ma'lumot uchun mos; normal ma'lumotda quvvati t-testga deyarli teng. Talqin: medianlar, P(X > Y), effekt kattaligi bilan birga. Muqobil — log o'zgartirish yoki bootstrap/permutatsiya 11.8-bob. Keyingi dars — aynan shu: qayta namuna olish usullari.


3. Tez ma'lumotnoma

python
import numpy as np
from scipy import stats

stats.mannwhitneyu(a, b, alternative="two-sided")     # ikki mustaqil guruh
stats.wilcoxon(oldin, keyin)                          # juftlashgan
stats.kruskal(g1, g2, g3)                             # 3+ mustaqil
stats.friedmanchisquare(s1, s2, s3)                   # 3+ takroriy o'lchov

# effekt kattaligi: ustunlik ehtimoli
U = stats.mannwhitneyu(a, b).statistic
p_ustunlik = U / (len(a) * len(b))                    # P(X > Y) (ties yarim)
rank_biserial = 2 * p_ustunlik - 1

# hisobot uchun
np.median(a), np.median(b), np.percentile(a, [25, 75])
QOIDA: dizaynga mos test · medianlar + effekt bilan hisobot · post-hoc tuzatish bilan

Noparametrik testlar xulosasi

Tartiblar bilan ishlaydi — outlierga chidamli, farazsiz
Mann-Whitney U — ikki mustaqil guruh (medianlar emas: P(X>Y))
Wilcoxon — juftlashgan; Kruskal-Wallis — 3+; Friedman — takroriy
Talqin: medianlar + P(X>Y) + p
Normal ma'lumotda quvvati ~95%; qiyshiqda ancha ustun
Muqobil: log + t-test, bootstrap/permutatsiya (11.8)

4. Batafsil misollar

Misollar real numpy/scipy bilan (Python 3.14).

Misol 1 — Mann-Whitney va t-test: qiyshiq ma'lumot

python
"""Qiyshiq vaqt ma'lumotida t-test va Mann-Whitney (real numpy/scipy)."""

import numpy as np
from scipy import stats


def main() -> None:
    rng = np.random.default_rng(0)
    # to'lov vaqti: ko'pchilik 20-40 s, ba'zilar brauzerni ochiq qoldiradi
    eski = np.concatenate([rng.lognormal(np.log(31), 0.35, 190), rng.uniform(600, 1800, 10)])
    yangi = np.concatenate([rng.lognormal(np.log(26), 0.35, 190), rng.uniform(600, 1800, 10)])

    print("=== 1. Tavsif ===")
    for nom, x in [("eski", eski), ("yangi", yangi)]:
        print(f"  {nom}: o'rtacha {x.mean():.1f}s, median {np.median(x):.1f}s, "
              f"maks {x.max():.0f}s")

    print("\n=== 2. t-test (o'rtachalar) ===")
    res_t = stats.ttest_ind(eski, yangi, equal_var=False)
    print(f"  farq {eski.mean() - yangi.mean():+.1f}s, p = {res_t.pvalue:.4f}")

    print("\n=== 3. Mann-Whitney U (tartiblar) ===")
    res_u = stats.mannwhitneyu(eski, yangi)
    p_ust = res_u.statistic / (len(eski) * len(yangi))
    print(f"  U = {res_u.statistic:.0f}, p = {res_u.pvalue:.6f}")
    print(f"  P(eski > yangi) = {p_ust:.3f}, rank-biserial = {2 * p_ust - 1:+.3f}")

    print("\n=== 4. Log o'zgartirish + t-test ===")
    res_l = stats.ttest_ind(np.log(eski), np.log(yangi), equal_var=False)
    print(f"  p = {res_l.pvalue:.6f}")
    print("  ⭐ Outlierlar t-testni bo'g'adi; tartiblar chidamli")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Tavsif ===
  eski: o'rtacha 92.4s, median 32.2s, maks 1778s
  yangi: o'rtacha 82.3s, median 24.8s, maks 1789s

=== 2. t-test (o'rtachalar) ===
  farq +10.1s, p = 0.7053

=== 3. Mann-Whitney U (tartiblar) ===
  U = 26617, p = 0.000000
  P(eski > yangi) = 0.665, rank-biserial = +0.331

=== 4. Log o'zgartirish + t-test ===
  p = 0.014994
  ⭐ Outlierlar t-testni bo'g'adi; tartiblar chidamli

Nima ko'rsatdi: 2.1, 2.2, 2.6-bo'limlar.

Misol 2 — Wilcoxon, Kruskal-Wallis, Friedman

python
"""Juftlashgan, ko'p guruh va takroriy o'lchov uchun noparametrik testlar (real numpy/scipy)."""

import numpy as np
from scipy import stats


def main() -> None:
    rng = np.random.default_rng(1)

    print("=== 1. Wilcoxon: 40 foydalanuvchi, oldin/keyin ===")
    shaxsiy = rng.lognormal(np.log(50), 0.5, 40)
    oldin = shaxsiy * rng.lognormal(0, 0.1, 40)
    keyin = shaxsiy * 0.85 * rng.lognormal(0, 0.1, 40)
    res_w = stats.wilcoxon(oldin, keyin)
    print(f"  median farq: {np.median(oldin - keyin):+.2f}s, p = {res_w.pvalue:.6f}")
    print(f"  juftlashgan t-test p = {stats.ttest_rel(oldin, keyin).pvalue:.6f}")

    print("\n=== 2. Kruskal-Wallis: 3 hamkor (qiyshiq) ===")
    g1 = rng.lognormal(np.log(42), 0.4, 50)
    g2 = rng.lognormal(np.log(45), 0.4, 50)
    g3 = rng.lognormal(np.log(52), 0.4, 50)
    print(f"  medianlar: {np.median(g1):.1f}, {np.median(g2):.1f}, {np.median(g3):.1f}")
    print(f"  Kruskal p = {stats.kruskal(g1, g2, g3).pvalue:.6f}, "
          f"ANOVA p = {stats.f_oneway(g1, g2, g3).pvalue:.6f}")

    print("\n=== 3. Post-hoc: juft Mann-Whitney + Bonferroni ===")
    juftlar = [("1-2", g1, g2), ("1-3", g1, g3), ("2-3", g2, g3)]
    for nom, a, b in juftlar:
        p = stats.mannwhitneyu(a, b).pvalue
        print(f"  {nom}: p = {p:.4f}, Bonferroni bilan {min(1.0, p * 3):.4f}")

    print("\n=== 4. Friedman: har foydalanuvchi 3 interfeysni sinaydi ===")
    baza = rng.lognormal(np.log(60), 0.4, 30)
    i1 = baza * rng.lognormal(0, 0.08, 30)
    i2 = baza * 0.95 * rng.lognormal(0, 0.08, 30)
    i3 = baza * 0.85 * rng.lognormal(0, 0.08, 30)
    print(f"  medianlar: {np.median(i1):.1f}, {np.median(i2):.1f}, {np.median(i3):.1f}")
    print(f"  Friedman p = {stats.friedmanchisquare(i1, i2, i3).pvalue:.6f}")
    print("  ⭐ Dizaynga mos noparametrik test")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Wilcoxon: 40 foydalanuvchi, oldin/keyin ===
  median farq: +6.25s, p = 0.000000
  juftlashgan t-test p = 0.000001

=== 2. Kruskal-Wallis: 3 hamkor (qiyshiq) ===
  medianlar: 38.7, 44.1, 46.8
  Kruskal p = 0.069707, ANOVA p = 0.302045

=== 3. Post-hoc: juft Mann-Whitney + Bonferroni ===
  1-2: p = 0.2317, Bonferroni bilan 0.6950
  1-3: p = 0.0200, Bonferroni bilan 0.0599
  2-3: p = 0.2963, Bonferroni bilan 0.8889

=== 4. Friedman: har foydalanuvchi 3 interfeysni sinaydi ===
  medianlar: 59.1, 61.9, 49.4
  Friedman p = 0.000008
  ⭐ Dizaynga mos noparametrik test

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

Misol 3 — Quvvat solishtiruvi

python
"""Normal va qiyshiq ma'lumotda t-test va Mann-Whitney quvvati (real numpy/scipy)."""

import numpy as np
from scipy import stats


def main() -> None:
    rng = np.random.default_rng(2)
    N, n = 3000, 40

    print("=== 1. Normal ma'lumot (farq 0.5 SD) ===")
    pt = pu = 0
    for _ in range(N):
        a = rng.normal(0.5, 1, n); b = rng.normal(0, 1, n)
        pt += stats.ttest_ind(a, b, equal_var=False).pvalue < 0.05
        pu += stats.mannwhitneyu(a, b).pvalue < 0.05
    print(f"  t-test quvvat {pt / N:.3f}, Mann-Whitney {pu / N:.3f}")

    print("\n=== 2. Log-normal (medianlar 20 va 25) ===")
    pt = pu = 0
    for _ in range(N):
        a = rng.lognormal(np.log(20), 0.8, n); b = rng.lognormal(np.log(25), 0.8, n)
        pt += stats.ttest_ind(a, b, equal_var=False).pvalue < 0.05
        pu += stats.mannwhitneyu(a, b).pvalue < 0.05
    print(f"  t-test quvvat {pt / N:.3f}, Mann-Whitney {pu / N:.3f}")

    print("\n=== 3. Outlierli ma'lumot (5% ekstremal) ===")
    pt = pu = 0
    for _ in range(N):
        a = np.concatenate([rng.normal(10.5, 2, n - 2), rng.uniform(80, 150, 2)])
        b = np.concatenate([rng.normal(10.0, 2, n - 2), rng.uniform(80, 150, 2)])
        pt += stats.ttest_ind(a, b, equal_var=False).pvalue < 0.05
        pu += stats.mannwhitneyu(a, b).pvalue < 0.05
    print(f"  t-test quvvat {pt / N:.3f}, Mann-Whitney {pu / N:.3f}")

    print("\n=== 4. H0 rost: I tur xato ===")
    pt = pu = 0
    for _ in range(N):
        a = rng.lognormal(3, 0.8, n); b = rng.lognormal(3, 0.8, n)
        pt += stats.ttest_ind(a, b, equal_var=False).pvalue < 0.05
        pu += stats.mannwhitneyu(a, b).pvalue < 0.05
    print(f"  t-test {pt / N:.4f}, Mann-Whitney {pu / N:.4f}  (kutilgan 0.05)")
    print("  ⭐ Qiyshiq/outlierli ma'lumotda tartib testi kuchliroq")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Normal ma'lumot (farq 0.5 SD) ===
  t-test quvvat 0.592, Mann-Whitney 0.566

=== 2. Log-normal (medianlar 20 va 25) ===
  t-test quvvat 0.193, Mann-Whitney 0.240

=== 3. Outlierli ma'lumot (5% ekstremal) ===
  t-test quvvat 0.000, Mann-Whitney 0.135

=== 4. H0 rost: I tur xato ===
  t-test 0.0447, Mann-Whitney 0.0503  (kutilgan 0.05)
  ⭐ Qiyshiq/outlierli ma'lumotda tartib testi kuchliroq

Nima ko'rsatdi: 2.6-bo'lim.

Misol 4 — Mann-Whitney nimani ko'rmaydi

python
"""Taqsimotlar juda farqli, lekin Mann-Whitney buni ko'rmaydi; KS ko'radi (real numpy/scipy)."""

import numpy as np
from scipy import stats


def main() -> None:
    rng = np.random.default_rng(3)

    print("=== 1. Medianlar deyarli teng, shakl farqli ===")
    a = rng.normal(50, 5, 3000)
    b = np.concatenate([rng.normal(40, 3, 1500), rng.normal(60, 3, 1500)])   # ikki cho'qqi
    print(f"  medianlar: {np.median(a):.2f} va {np.median(b):.2f}")
    print(f"  o'rtachalar: {a.mean():.2f} va {b.mean():.2f}")
    print(f"  Mann-Whitney p = {stats.mannwhitneyu(a, b).pvalue:.4f}")

    print("\n=== 2. Taqsimotlar haqiqatan farqli (Kolmogorov-Smirnov) ===")
    print(f"  KS testi p = {stats.ks_2samp(a, b).pvalue:.2e}")

    print("\n=== 3. Ustunlik ehtimoli ===")
    U = stats.mannwhitneyu(a, b).statistic
    print(f"  P(A > B) = {U / (len(a) * len(b)):.3f}  (0.5 ga yaqin — 'tizimli ustunlik yo'q')")

    print("\n=== 4. Kvartillar bilan tavsif ===")
    for nom, x in [("A", a), ("B", b)]:
        q = np.percentile(x, [25, 50, 75])
        print(f"  {nom}: Q1 {q[0]:.1f}, median {q[1]:.1f}, Q3 {q[2]:.1f}")
    print("  ⭐ Mann-Whitney faqat 'tizimli ustunlik'ni ko'radi — shakl farqini emas")
    print("     (shuning uchun uni 'median testi' deb atash noto'g'ri; KS yoki grafik kerak)")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Medianlar deyarli teng, shakl farqli ===
  medianlar: 50.14 va 49.84
  o'rtachalar: 50.10 va 49.97
  Mann-Whitney p = 0.8186

=== 2. Taqsimotlar haqiqatan farqli (Kolmogorov-Smirnov) ===
  KS testi p = 3.66e-162

=== 3. Ustunlik ehtimoli ===
  P(A > B) = 0.502  (0.5 ga yaqin — 'tizimli ustunlik yo'q')

=== 4. Kvartillar bilan tavsif ===
  A: Q1 46.6, median 50.1, Q3 53.6
  B: Q1 39.9, median 49.8, Q3 60.0
  ⭐ Mann-Whitney faqat 'tizimli ustunlik'ni ko'radi — shakl farqini emas
     (shuning uchun uni 'median testi' deb atash noto'g'ri; KS yoki grafik kerak)

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


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

Noto'g'ri fikr To'g'risi
"Mann-Whitney — median testi" Stoxastik ustunlik (P(X>Y))
"Noparametrik — zaif test" Normal ma'lumotda ~95% samarali
"Farazsiz — hech narsa kerak emas" Mustaqillik baribir kerak
"Juftlashganga Mann-Whitney" Wilcoxon
"Kruskal — post-hocsiz yetarli" Tuzatilgan juft testlar kerak
"Tartib testi — o'rtacha uchun" O'rtacha muhim bo'lsa bootstrap
"p yetarli" Median, kvartil, effekt
"Outlierlarni o'chirib t-test" Avval tushunish (8.6)

6. Keng tarqalgan xatolar va yechimlari

1. Dizaynga mos kelmagan test

python
stats.mannwhitneyu(oldin, keyin)        # bir xil odamlar          # ⚠️
stats.wilcoxon(oldin, keyin)                                      # ✅

2. Faqat p

python
print("p =", res.pvalue)                                          # ⚠️
print(f"medianlar {m1:.1f}/{m2:.1f}, P(X>Y)={p_ust:.2f}, p={p:.4f}")  # ✅

3. Post-hoc tuzatishsiz

python
for a, b in juftlar: stats.mannwhitneyu(a, b)                     # ⚠️
# Bonferroni yoki FDR 11.9-bob bilan                                 # ✅

4. "Median farq qiladi" xulosasi

python
print("medianlar farqli, p =", p)                                 # ⚠️
print("A qiymatlari tizimli kattaroq; medianlar:", m1, m2)        # ✅

5. O'rtacha muhim bo'lganda

python
stats.mannwhitneyu(daromad_a, daromad_b)   # umumiy daromad muhim  # ⚠️
# bootstrap bilan o'rtacha farqi CI 11.8-bob                         # ✅

6. Ko'p teng qiymat (ties)

python
stats.mannwhitneyu(baholar_a, baholar_b)   # 1-5 shkala, ko'p ties # ⚠️
stats.mannwhitneyu(a, b, method="asymptotic")  # va ties tuzatishi # ✅

7. Juda kichik namuna

python
stats.mannwhitneyu(a, b)      # n = 3 va 4                        # ⚠️
# aniq usul va ehtiyotkor talqin; yoki ko'proq ma'lumot            # ✅

7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 11.3-dars (o'tilgan): t-test farazlari
  • 11.6-dars (o'tilgan): ANOVA va Kruskal-Wallis
  • 9.8-dars (o'tilgan): Qiyshiq taqsimotlar
  • 11.8-dars: Bootstrap va permutatsiya
  • 11.10-dars: A/B test loyihasi

8. Eng yaxshi amaliyotlar

  1. Avval taqsimotni ko'ring (5.6, 5.9).

  2. Dizaynga mos testni tanlang.

  3. Medianlar va kvartillarni bering.

  4. Effekt kattaligini (P(X>Y)) qo'shing.

  5. Post-hoc — tuzatish bilan.

  6. O'rtacha muhim bo'lsa — bootstrap.

  7. Ties ko'p bo'lsa ehtiyot bo'ling.

  8. Mustaqillikni ta'minlang.


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
1.  # noparametrik testlar nima bilan ishlaydi?
2.  # ikki mustaqil guruh — qaysi test?
3.  # juftlashgan — qaysi?
4.  # 3+ mustaqil guruh?
5.  # 3+ takroriy o'lchov?
6.  # Mann-Whitney nimani solishtiradi?
7.  # P(X > Y) = 0.5 nimani anglatadi?
8.  # normal ma'lumotda quvvat nisbati?
9.  # outlierli ma'lumotda?
10. # Kruskal dan keyin?
11. # o'rtacha muhim bo'lsa?
12. # tartibli baholar (1-5) uchun?
Javoblar
  1. Tartiblar (rank)
  2. Mann-Whitney U
  3. Wilcoxon
  4. Kruskal-Wallis
  5. Friedman
  6. Stoxastik ustunlik
  7. Tizimli ustunlik yo'q
  8. ~95% (t-test biroz kuchli)
  9. Noparametrik kuchliroq
  10. Post-hoc (tuzatish bilan)
  11. Bootstrap (11.8)
  12. Noparametrik

Vazifa 2: Xatolarni tuzating

python
1.  stats.mannwhitneyu(oldin, keyin)   # bir xil foydalanuvchilar

2.  print("medianlar farqli, p =", p)

3.  for a, b in combinations(g, 2): stats.mannwhitneyu(a, b)

4.  stats.mannwhitneyu(daromad_a, daromad_b)   # umumiy daromad muhim

5.  stats.ttest_ind(vaqt_a, vaqt_b)   # 5% ekstremal qiymat
Javoblar
python
1.  stats.wilcoxon(oldin, keyin)

2.  print(f"A tizimli kattaroq; medianlar {m1:.1f} va {m2:.1f}, p = {p:.4f}")

3.  # Kruskal + tuzatilgan juft testlar (11.9)

4.  # bootstrap bilan o'rtacha farqi va CI (11.8)

5.  stats.mannwhitneyu(vaqt_a, vaqt_b)   # yoki log + t-test

Vazifa 3: Qiyshiq metrikalar

Modellang:

  1. Sessiya uzunligi (log-normal + outlier)
  2. t-test, log + t-test, Mann-Whitney
  3. Medianlar va kvartillar
  4. Hisobot matni

Vazifa 4: Takroriy o'lchov

Modellang:

  1. 25 foydalanuvchi, 3 interfeys
  2. Friedman
  3. Juft Wilcoxon + Bonferroni
  4. Xulosa

Vazifa 5: Quvvat

Modellang:

  1. Turli taqsimotlar (normal, log-normal, outlierli)
  2. t va Mann-Whitney quvvati
  3. I tur xato
  4. Tavsiya jadvali

Vazifa 6: Integratsiya

Modellang:

  1. Taqsimot grafigi (5.9)
  2. t-test (11.3)
  3. Kruskal (11.6)
  4. Bootstrap (11.8)

Vazifa 7: O'ylash

Noparametrik testlar "farazsiz" deb ataladi va bu ularni xavfsiz tanlovdek ko'rsatadi. Lekin ular ham nimadir haqida faraz qiladi va ba'zi savollarga javob bera olmaydi. Qachon noparametrik test noto'g'ri tanlov bo'ladi, va "o'rtacha" bilan "odatiy qiymat" orasidagi tanlov biznes qaroriga qanday ta'sir qiladi?

Javob

Qisqa javob: noparametrik testlar taqsimot shakli haqida faraz qilmaydi, lekin mustaqillik va (talqin uchun) shakllarning o'xshashligi haqida faraz qiladi. Ular "o'rtacha" haqidagi savolga javob bermaydi — agar biznes uchun umumiy summa muhim bo'lsa (daromad, xarajat), median testi noto'g'ri savolga javob beradi.

1. Qachon noto'g'ri tanlov

Vaziyat Nega muammo
Umumiy daromad muhim Median daromadni bashorat qilmaydi
Taqsimot shakllari juda farqli "Ustunlik" talqini chalkash
Ko'p teng qiymat (ties) Tartiblar ma'lumot yo'qotadi
Juda kichik namuna Aniq test ham kuchsiz

2. O'rtacha va median: biznes farqi

  • Daromad: 1000 mijoz × o'rtacha chek = umumiy tushum → o'rtacha kerak
  • Foydalanuvchi tajribasi: "odatiy mijoz qancha kutadi?" → median
  • SLA: "99% so'rov 200 ms dan tez" → kvantil (median ham, o'rtacha ham emas)

3. Amaliy yechim

  1. Savolni aniqlang: jami, odatiy, yoki dum?
  2. O'rtacha kerak bo'lsa — bootstrap 11.8-bob yoki log-model
  3. Kvantillar kerak bo'lsa — kvantil regressiyasi yoki bootstrap
  4. Bir necha ko'rsatkichni birga hisobot qiling

4. Data Scientist qanday

  • Metrikani biznes savolidan kelib chiqib tanlaydi
  • Test turini metrikaga moslaydi (test — vosita, maqsad emas)
  • Natijani tushunarli birlikda tushuntiradi

5. Xulosa

  1. "Farazsiz" — mustaqillikdan tashqari
  2. Median testi o'rtacha haqidagi savolga javob bermaydi
  3. Metrikani biznes savoli belgilaydi
  4. Bootstrap — har qanday statistika uchun universal yechim (11.8)

Nimani mustahkamlaydi: 2.5, 2.6, 2.7-bo'limlar.


Xulosa

Bu darsda noparametrik testlarni o'rgandik.

Eng muhim uch fikr:

  1. Tartiblar bilan ishlash. Noparametrik testlar qiymatlarni tartiblarga aylantiradi — shuning uchun outlierlarga chidamli va taqsimot shakliga faraz qo'ymaydi. Dizaynga qarab: Mann-Whitney U (ikki mustaqil), Wilcoxon (juftlashgan), Kruskal-Wallis (3+ mustaqil), Friedman (3+ takroriy o'lchov).

  2. To'g'ri talqin. Mann-Whitney medianlarni solishtirmaydi — u "bir guruh qiymatlari tizimli ravishda kattaroqmi" (P(X > Y)) degan savolga javob beradi; taqsimot shakli farqini esa u ko'rmaydi (buning uchun KS testi yoki grafik). Hisobotda medianlar, kvartillar va effekt kattaligi (P(X>Y), rank-biserial) bilan birga bering.

  3. Qachon ishlatish. Qiyshiq va outlierli ma'lumotda noparametrik testlar t-testdan sezilarli kuchliroq; normal ma'lumotda quvvati ~95% — ya'ni deyarli bepul xavfsizlik. Lekin o'rtacha muhim bo'lsa (umumiy daromad), tartib testi noto'g'ri savolga javob beradi — u holda log o'zgartirish yoki bootstrap 11.8-bob.

Keyingi darsda bootstrap va permutatsiya testlarini o'rganamiz: har qanday statistika uchun ishonch oralig'i va p-qiymat — formulasiz, faraz minimal.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
11.7-dars: Noparametrik testlar — IlmHamroh