Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Huber yo'qotishi
- 2.2. Kvantil regressiya
- 2.3. RANSAC va Theil-Sen
- 2.4. Qachon qaysi usul
- 2.5. Bashorat intervallari
- 2.6. Usullarning narxi
- 2.7. Tuzoqlar
- 2.8. Robustlik — ishonchsiz ma'lumot uchun
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Outlierlar: to'rt usul
- Misol 2 — Huber: epsilon va samaradorlik narxi
- Misol 3 — Kvantil regressiya va intervallar
- Misol 4 — Yetkazib berish: to'liq qaror
- 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
13.11-dars: Robust va kvantil regressiya
13-QISM — REGRESSIYA · 11-dars
1. Kirish va motivatsiya
OLS ning eng jiddiy zaifligi — outlierlarga sezgirlik 13.1-bob: kvadratik yo'qotish bitta chetlangan nuqtaga juda katta vazn beradi. Real ma'lumotda esa chetlangan qiymatlar deyarli har doim bor — o'lchov xatosi, noyob holat, firibgarlik. Robust regressiya shu muammoni hal qiladi; kvantil regressiya esa boshqa savolga javob beradi: "o'rtacha emas, 90-persentil qancha?"
Bu darsda: Huber yo'qotishi va uning epsilon parametri, RANSAC va Theil-Sen, qachon qaysi biri, kvantil regressiya va pinball loss 12.8-bob, bashorat intervallari va bu usullarning narxi.
Real vaziyat. Yetkazib berish xizmati kuryer vaqtini bashorat qiladi. Ma'lumotda 2% yozuv buzilgan (GPS xatosi tufayli 8 soatlik "safar"lar). OLS bu yozuvlardan nishabni 34% ga siljitdi. Huber regressiyasi deyarli o'zgarmadi. Bundan tashqari, mijozga va'da qilish uchun o'rtacha emas, 80-persentil kerak edi — kvantil regressiya (q=0.8) aynan shuni berdi.
Bu darsda robust va kvantil usullarni o'rganamiz.
Bu darsda:
- Huber yo'qotishi
- Kvantil regressiya
- RANSAC va Theil-Sen
- Qachon qaysi usul
- Bashorat intervallari
- Usullarning narxi
- Tuzoqlar
- Amaliy: yetkazib berish vaqti
ℹ Misollar real numpy/sklearn bilan (Python 3.14).
2. Nazariya — chuqur tushuntirish
2.1. Huber yo'qotishi
Kichik xatolarda kvadratik, katta xatolarda CHIZIQLI:
L(r) = 0.5 · r^2 agar |r| <= d
= d · (|r| - 0.5 · d) agar |r| > d
d (epsilon) — chegara; sklearn da standart 1.35 (standartlashtirilgan qoldiqda)
d katta → OLS ga yaqin
d kichik → MAE ga yaqin (robustroq)
HuberRegressor(epsilon=1.35, alpha=0.0001) ← masshtablash kerak Huber — OLS va MAE orasidagi murosa: markazda kvadratik (samarali, silliq), dumlarda chiziqli (outlier ta'sirini cheklaydi). epsilon outlier deb hisoblanadigan chegarani belgilaydi. Bu — amaliyotda eng ko'p ishlatiladigan robust usul, chunki u tez va barqaror.
2.2. Kvantil regressiya
Pinball (kvantil) yo'qotish, q uchun:
L_q(r) = q · r agar r >= 0 (kam bashorat qilindi)
= (q - 1) · r agar r < 0 (ortiq bashorat qilindi)
q = 0.5 → median regressiyasi (MAE) — robust
q = 0.9 → 90-persentil chizig'i
QuantileRegressor(quantile=0.5, alpha=0.0)
GradientBoostingRegressor(loss="quantile", alpha=q) ← nochiziqli variant Kvantil regressiya o'rtachani emas, shartli kvantilni modellaydi. Ikki foydasi bor: q = 0.5 (median) robust bahoni beradi; boshqa q lar esa bashorat intervali va asimmetrik narx masalalarini hal qiladi (12.8, 9.10). Muhim xossa: kvantil regressiya geteroskedastiklikni tabiiy ravishda ko'rsatadi — q=0.1 va q=0.9 chiziqlari uzoqlashsa, tarqoqlik o'sib boryapti.
2.3. RANSAC va Theil-Sen
RANSAC (RANdom SAmple Consensus):
1. tasodifiy minimal namuna tanlab model qurish
2. unga mos keladigan ("inlier") nuqtalarni sanash
3. eng ko'p inlier bergan modelni saqlash, takrorlash
→ 50% gacha outlier bo'lsa ham ishlaydi; lekin tasodifiy (random_state kerak)
Theil-Sen:
barcha nuqta juftliklari nishabining MEDIANASI
→ juda robust (29% buzilish nuqtasi), lekin p katta bo'lsa sekin
Buzilish nuqtasi (breakdown point): OLS 0%, Huber ~0%, Theil-Sen 29%, RANSAC ~50%RANSAC — outlier ulushi katta bo'lganda (masalan, 30-40%) eng kuchli; u outlierlarni butunlay tashlab yuboradi. Theil-Sen — kichik o'lchamli vazifalarda juda ishonchli, lekin hisoblash qimmat. Huber esa outlierlarni tashlamaydi, faqat vaznini kamaytiradi — shuning uchun ularning ulushi katta bo'lsa yetarli bo'lmasligi mumkin.
2.4. Qachon qaysi usul
OLS — outlier yo'q yoki juda kam; eng samarali
HUBER — 1-10% outlier; standart robust tanlov
RANSAC — 20-50% outlier; qattiq buzilgan ma'lumot
THEIL-SEN — kam belgi, yuqori ishonchlilik talabi
KVANTIL q=0.5 — median bashorat kerak; robust va talqin oson
KVANTIL q≠0.5 — asimmetrik narx yoki interval kerak
Avval: outlierlar QAYERDAN kelgan? (o'lchov xatosi / haqiqiy holat) — 13.4Birinchi savol texnik emas: outlier qayerdan kelgan? O'lchov xatosi bo'lsa — tuzating yoki olib tashlang (hujjatlashtirib); haqiqiy, lekin noyob holat bo'lsa — u modelga kiritilishi kerak (masalan, alohida belgi bilan). Robust usul — oxirgi chora, ma'lumotni tushunish o'rnini bosmaydi.
2.5. Bashorat intervallari
Kvantil regressiya bilan:
q = 0.05 va q = 0.95 modellarini alohida o'qitish → 90% interval
Baholash:
QAMROV (coverage): interval haqiqatan 90% holatni qamraydimi
KENGLIK: tor interval yaxshi, lekin qamrov buzilmasligi kerak
Muqobil: konformal bashorat (kafolatlangan qamrov), bootstrap 11.8-bob
Diqqat: kvantil modellari KESISHIB ketishi mumkin (q=0.9 < q=0.5)Bashorat intervali — ko'p qarorlar uchun nuqtaviy bashoratdan muhimroq 12.8-bob: "45 daqiqa" emas, "80% ehtimol bilan 32-61 daqiqa". Kvantil regressiya buning eng oddiy yo'li. Natijani qamrov bilan tekshiring — nazariy 90% amalda 76% bo'lib chiqishi mumkin.
2.6. Usullarning narxi
Robust usullar bepul emas:
· outlier YO'Q bo'lsa, OLS dan biroz kam samarali (kengroq CI)
· Huber/kvantil — iterativ, sekinroq
· RANSAC — tasodifiy, takrorlanuvchanlik uchun random_state
· Theil-Sen — O(n^2) yoki undan yomon
· statistik xulosa (p, CI) murakkabroq — bootstrap kerak 11.8-bob
Lekin: outlier bo'lsa — narx arzimasRobust usullarning samaradorlik narxi kichik: Huber toza normal ma'lumotda OLS ning ~95% samaradorligini saqlaydi. Shuning uchun amaliy qoida: agar ma'lumot manbai ishonchsiz bo'lsa, Huber ni standart qiling — yo'qotish minimal, himoya esa jiddiy.
2.7. Tuzoqlar
Asosiy tuzoqlar: outlierni sababsiz o'chirish 13.4-bob; robust usulni ma'lumotni tushunish o'rniga ishlatish; masshtablamaslik (Huber uchun muhim); RANSAC da random_state qo'ymaslik; kvantil modellarining kesishishini tekshirmaslik; intervalni qamrovsiz e'lon qilish; median regressiyani "o'rtacha" deb hisobot qilish; epsilon ni sinamaslik.
2.8. Robustlik — ishonchsiz ma'lumot uchun
Huber yo'qotishi markazda kvadratik, dumlarda chiziqli — outlier ta'sirini cheklaydi va amaliyotdagi standart robust tanlov (1-10% buzilish uchun). Kuchli buzilishda RANSAC (50% gacha) yoki Theil-Sen (29%) ishlatiladi. Kvantil regressiya boshqa savolga javob beradi: q=0.5 robust median bashorat, q≠0.5 esa asimmetrik narx va bashorat intervallari uchun. Robust usullar ma'lumotni tushunish o'rnini bosmaydi: avval outlier qayerdan kelganini aniqlang. Keyingi dars — amaliyot: to'liq regressiya loyihasi.
3. Tez ma'lumotnoma
import numpy as np
from sklearn.linear_model import (HuberRegressor, LinearRegression,
QuantileRegressor, RANSACRegressor, TheilSenRegressor)
from sklearn.metrics import mean_pinball_loss
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
Pipeline([("sc", StandardScaler()), ("m", HuberRegressor(epsilon=1.35))])
RANSACRegressor(random_state=0).fit(X, y).inlier_mask_
TheilSenRegressor(random_state=0, max_subpopulation=10_000)
# kvantil interval
past = QuantileRegressor(quantile=0.05, alpha=0).fit(X, y)
yuqori = QuantileRegressor(quantile=0.95, alpha=0).fit(X, y)
qamrov = ((y_te >= past.predict(X_te)) & (y_te <= yuqori.predict(X_te))).mean()
QOIDA: avval outlier sababini top · Huber standart · RANSAC ko'p buzilishda · qamrovni o'lchaRobustlik xulosasi
Huber — kvadratik+chiziqli (epsilon=1.35) · RANSAC — inlier konsensusi
Theil-Sen — juftlik nishablari medianasi · Buzilish nuqtasi: OLS 0%, TS 29%, RANSAC 50%
Kvantil: q=0.5 median (robust), q≠0.5 interval va asimmetrik narx
Narx: outliersiz OLS dan biroz kam samarali — arzimas4. Batafsil misollar
Misollar real numpy/sklearn bilan (Python 3.14).
Misol 1 — Outlierlar: to'rt usul
"""OLS, Huber, RANSAC va Theil-Sen ni solishtirish (real numpy/sklearn)."""
import numpy as np
from sklearn.linear_model import (HuberRegressor, LinearRegression,
RANSACRegressor, TheilSenRegressor)
def yarat(buzuq_ulush: float, seed: int = 5, n: int = 400):
rng = np.random.default_rng(seed)
x = rng.uniform(0, 20, n)
y = 10 + 2.5 * x + rng.normal(0, 2.0, n)
k = int(buzuq_ulush * n)
if k:
idx = rng.choice(n, k, replace=False)
y[idx] = y[idx] + rng.normal(60, 15, k) # GPS xatosi kabi
return x.reshape(-1, 1), y
def nishablar(X, y) -> dict:
return {
"OLS": LinearRegression().fit(X, y).coef_[0],
"Huber": HuberRegressor(epsilon=1.35).fit(X, y).coef_[0],
"RANSAC": RANSACRegressor(random_state=0).fit(X, y).estimator_.coef_[0],
"Theil-Sen": TheilSenRegressor(random_state=0,
max_subpopulation=5000).fit(X, y).coef_[0],
}
def main() -> None:
print("=== 1. Toza ma'lumot (haqiqiy nishab 2.5) ===")
X, y = yarat(0.0)
for nom, w in nishablar(X, y).items():
print(f" {nom:<10}: {w:.4f}")
print("\n=== 2. 5% buzilgan ===")
X, y = yarat(0.05)
for nom, w in nishablar(X, y).items():
print(f" {nom:<10}: {w:.4f} (xato {abs(w - 2.5) / 2.5:+.1%})")
print("\n=== 3. 25% buzilgan ===")
X, y = yarat(0.25)
for nom, w in nishablar(X, y).items():
print(f" {nom:<10}: {w:.4f} (xato {abs(w - 2.5) / 2.5:+.1%})")
print("\n=== 4. Buzilish ulushi bo'yicha ===")
print(f" {'ulush':>6} {'OLS':>8} {'Huber':>8} {'RANSAC':>8} {'Theil-Sen':>10}")
for u in [0.0, 0.05, 0.15, 0.30, 0.45]:
X, y = yarat(u)
n = nishablar(X, y)
print(f" {u:>6.0%} {n['OLS']:>8.3f} {n['Huber']:>8.3f} "
f"{n['RANSAC']:>8.3f} {n['Theil-Sen']:>10.3f}")
print(" ⭐ Buzilish ulushi ortsa, RANSAC eng barqaror qoladi")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Toza ma'lumot (haqiqiy nishab 2.5) ===
OLS : 2.4858
Huber : 2.4903
RANSAC : 2.4906
Theil-Sen : 2.4847
=== 2. 5% buzilgan ===
OLS : 2.6286 (xato +5.1%)
Huber : 2.5017 (xato +0.1%)
RANSAC : 2.4893 (xato +0.4%)
Theil-Sen : 2.5154 (xato +0.6%)
=== 3. 25% buzilgan ===
OLS : 2.3554 (xato +5.8%)
Huber : 2.4995 (xato +0.0%)
RANSAC : 2.5069 (xato +0.3%)
Theil-Sen : 2.5432 (xato +1.7%)
=== 4. Buzilish ulushi bo'yicha ===
ulush OLS Huber RANSAC Theil-Sen
0% 2.486 2.490 2.491 2.485
5% 2.629 2.502 2.489 2.515
15% 2.720 2.494 2.475 2.511
30% 2.475 2.504 2.533 2.576
45% 2.343 2.347 2.510 2.707
⭐ Buzilish ulushi ortsa, RANSAC eng barqaror qoladiNima ko'rsatdi: 2.1, 2.3, 2.4-bo'limlar.
Misol 2 — Huber: epsilon va samaradorlik narxi
"""Robustlik bepul emas, lekin arzon (real numpy/sklearn)."""
import numpy as np
from sklearn.linear_model import HuberRegressor, LinearRegression
def main() -> None:
rng = np.random.default_rng(9)
HAQIQIY = 2.5
def tajriba(buzuq: float, eps: float, B: int = 200):
ols, hub = [], []
for _ in range(B):
n = 200
x = rng.uniform(0, 20, n)
y = 10 + HAQIQIY * x + rng.normal(0, 2.0, n)
k = int(buzuq * n)
if k:
idx = rng.choice(n, k, replace=False)
y[idx] += rng.normal(60, 15, k)
X = x.reshape(-1, 1)
ols.append(LinearRegression().fit(X, y).coef_[0])
hub.append(HuberRegressor(epsilon=eps, max_iter=500).fit(X, y).coef_[0])
return np.array(ols), np.array(hub)
print("=== 1. Toza ma'lumotda samaradorlik narxi ===")
ols, hub = tajriba(0.0, 1.35)
print(f" OLS : o'rtacha {ols.mean():.4f}, SD {ols.std():.4f}")
print(f" Huber: o'rtacha {hub.mean():.4f}, SD {hub.std():.4f}")
print(f" Huber ning SD si OLS dan {hub.std() / ols.std():.3f} barobar katta "
f"(narx ~{(hub.std() / ols.std() - 1) * 100:.1f}%)")
print("\n=== 2. 8% buzilgan ma'lumotda ===")
ols, hub = tajriba(0.08, 1.35)
print(f" OLS : o'rtacha {ols.mean():.4f} (siljish "
f"{ols.mean() - HAQIQIY:+.4f}), SD {ols.std():.4f}")
print(f" Huber: o'rtacha {hub.mean():.4f} (siljish "
f"{hub.mean() - HAQIQIY:+.4f}), SD {hub.std():.4f}")
print("\n=== 3. epsilon ning ta'siri (8% buzilgan) ===")
ols8, _ = tajriba(0.08, 1.35, B=100)
for eps in [1.05, 1.35, 2.0, 5.0, 50.0]:
_, hub = tajriba(0.08, eps, B=100)
print(f" epsilon {eps:>5}: nishab SD {hub.std():.4f}, "
f"siljish {hub.mean() - HAQIQIY:+.4f}")
print(f" taqqoslash uchun OLS nishab SD: {ols8.std():.4f}")
print(" (bu yerda outlierlar x bo'ylab bir tekis — ular nishabni siljitmaydi,")
print(" lekin uning TARQOQLIGINI keskin oshiradi; Huber aynan shuni to'xtatadi)")
print("\n=== 4. O'rtacha kvadratik xato (MSE) taqqoslash ===")
for buzuq in [0.0, 0.03, 0.10]:
ols, hub = tajriba(buzuq, 1.35, B=100)
mse_o = np.mean((ols - HAQIQIY) ** 2)
mse_h = np.mean((hub - HAQIQIY) ** 2)
print(f" {buzuq:>4.0%} buzilgan: OLS MSE {mse_o:.5f}, Huber MSE {mse_h:.5f}, "
f"nisbat {mse_o / mse_h:6.1f}x")
print(" ⭐ Toza ma'lumotda narx kichik, buzilganda foyda katta")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Toza ma'lumotda samaradorlik narxi ===
OLS : o'rtacha 2.4996, SD 0.0240
Huber: o'rtacha 2.4996, SD 0.0248
Huber ning SD si OLS dan 1.034 barobar katta (narx ~3.4%)
=== 2. 8% buzilgan ma'lumotda ===
OLS : o'rtacha 2.4885 (siljish -0.0115), SD 0.2066
Huber: o'rtacha 2.4964 (siljish -0.0036), SD 0.0280
=== 3. epsilon ning ta'siri (8% buzilgan) ===
epsilon 1.05: nishab SD 0.0313, siljish +0.0016
epsilon 1.35: nishab SD 0.0305, siljish -0.0057
epsilon 2.0: nishab SD 0.0304, siljish -0.0051
epsilon 5.0: nishab SD 0.1842, siljish +0.0023
epsilon 50.0: nishab SD 0.2011, siljish +0.0138
taqqoslash uchun OLS nishab SD: 0.1982
(bu yerda outlierlar x bo'ylab bir tekis — ular nishabni siljitmaydi,
lekin uning TARQOQLIGINI keskin oshiradi; Huber aynan shuni to'xtatadi)
=== 4. O'rtacha kvadratik xato (MSE) taqqoslash ===
0% buzilgan: OLS MSE 0.00057, Huber MSE 0.00066, nisbat 0.9x
3% buzilgan: OLS MSE 0.01746, Huber MSE 0.00087, nisbat 20.1x
10% buzilgan: OLS MSE 0.05673, Huber MSE 0.00091, nisbat 62.4x
⭐ Toza ma'lumotda narx kichik, buzilganda foyda kattaNima ko'rsatdi: 2.1, 2.6-bo'limlar.
Misol 3 — Kvantil regressiya va intervallar
"""Shartli kvantillar va bashorat intervali (real numpy/sklearn)."""
import numpy as np
from sklearn.linear_model import QuantileRegressor
from sklearn.metrics import mean_pinball_loss
from sklearn.model_selection import train_test_split
def main() -> None:
rng = np.random.default_rng(13)
n = 1500
masofa = rng.uniform(1, 25, n)
# tarqoqlik masofa bilan o'sadi (geteroskedastiklik)
vaqt = 8 + 2.4 * masofa + rng.normal(0, 1.0 + 0.35 * masofa, n)
X = masofa.reshape(-1, 1)
Xtr, Xte, ytr, yte = train_test_split(X, vaqt, test_size=0.3, random_state=0)
print("=== 1. Kvantil chiziqlari ===")
modellar = {}
for q in [0.05, 0.25, 0.5, 0.75, 0.95]:
m = QuantileRegressor(quantile=q, alpha=0.0, solver="highs").fit(Xtr, ytr)
modellar[q] = m
print(f" q = {q:.2f}: kesma {m.intercept_:6.2f}, nishab {m.coef_[0]:.3f}")
print(" (nishablar farqi — tarqoqlik masofa bilan o'sishini ko'rsatadi)")
print("\n=== 2. Bashorat intervali (90%) ===")
past = modellar[0.05].predict(Xte)
yuqori = modellar[0.95].predict(Xte)
qamrov = ((yte >= past) & (yte <= yuqori)).mean()
print(f" qamrov = {qamrov:.1%} (kerak 90%)")
print(f" o'rtacha kenglik = {(yuqori - past).mean():.2f} daqiqa")
print("\n=== 3. Interval masofa bo'yicha ===")
for lo, hi in [(1, 6), (6, 14), (14, 25)]:
mos = (Xte[:, 0] >= lo) & (Xte[:, 0] < hi)
print(f" masofa {lo:>2}-{hi:>2} km: kenglik "
f"{(yuqori[mos] - past[mos]).mean():5.2f}, "
f"qamrov {((yte[mos] >= past[mos]) & (yte[mos] <= yuqori[mos])).mean():.1%}")
print("\n=== 4. Pinball loss bilan baholash ===")
for q in [0.5, 0.9]:
m = QuantileRegressor(quantile=q, alpha=0.0, solver="highs").fit(Xtr, ytr)
p_q = m.predict(Xte)
p_med = modellar[0.5].predict(Xte)
print(f" q = {q}: o'z modeli {mean_pinball_loss(yte, p_q, alpha=q):.4f}, "
f"median modeli {mean_pinball_loss(yte, p_med, alpha=q):.4f}")
print(" ⭐ Har kvantil o'z modelini talab qiladi")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Kvantil chiziqlari ===
q = 0.05: kesma 6.57, nishab 1.815
q = 0.25: kesma 7.38, nishab 2.176
q = 0.50: kesma 8.08, nishab 2.406
q = 0.75: kesma 8.49, nishab 2.703
q = 0.95: kesma 9.35, nishab 2.987
(nishablar farqi — tarqoqlik masofa bilan o'sishini ko'rsatadi)
=== 2. Bashorat intervali (90%) ===
qamrov = 87.6% (kerak 90%)
o'rtacha kenglik = 17.54 daqiqa
=== 3. Interval masofa bo'yicha ===
masofa 1- 6 km: kenglik 6.54, qamrov 82.3%
masofa 6-14 km: kenglik 14.92, qamrov 90.3%
masofa 14-25 km: kenglik 24.89, qamrov 87.9%
=== 4. Pinball loss bilan baholash ===
q = 0.5: o'z modeli 2.1576, median modeli 2.1576
q = 0.9: o'z modeli 0.9447, median modeli 2.0532
⭐ Har kvantil o'z modelini talab qiladiNima ko'rsatdi: 2.2, 2.5-bo'limlar.
Misol 4 — Yetkazib berish: to'liq qaror
"""Buzilgan ma'lumot + asimmetrik narx (real numpy/sklearn)."""
import numpy as np
from sklearn.linear_model import HuberRegressor, LinearRegression, QuantileRegressor
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split
def yarat(seed: int = 17, n: int = 2000):
rng = np.random.default_rng(seed)
masofa = rng.uniform(1, 25, n)
tirband = rng.beta(2, 3, n)
vaqt = 8 + 2.2 * masofa + 14 * tirband + rng.normal(0, 3.0, n)
toza = vaqt.copy()
# 3% GPS xatosi: vaqt bir necha barobar oshib ketadi
buzuq = rng.random(n) < 0.03
vaqt[buzuq] += rng.uniform(120, 300, buzuq.sum())
X = np.column_stack([masofa, tirband])
return X, vaqt, toza, buzuq
def main() -> None:
X, y, toza, buzuq = yarat()
idx = np.arange(len(X))
Xtr, Xte, ytr, yte, itr, ite = train_test_split(X, y, idx, test_size=0.3,
random_state=0)
toza_te = toza[ite]
buzuq_te = buzuq[ite]
print("=== 1. Ma'lumot ===")
print(f" {len(X)} safar, buzilgan yozuvlar: {buzuq.sum()} ({buzuq.mean():.1%})")
print(f" test'da buzilgan: {buzuq_te.sum()} ta")
print("\n=== 2. Koeffitsiyentlar (haqiqiy: masofa 2.2, tirband 14) ===")
ols = LinearRegression().fit(Xtr, ytr)
hub = HuberRegressor(epsilon=1.35, max_iter=1000).fit(Xtr, ytr)
print(f" OLS : masofa {ols.coef_[0]:.3f}, tirband {ols.coef_[1]:6.2f}")
print(f" Huber: masofa {hub.coef_[0]:.3f}, tirband {hub.coef_[1]:6.2f}")
print("\n=== 3. Toza yozuvlarda aniqlik ===")
sof = ~buzuq_te
for nom, m in [("OLS", ols), ("Huber", hub)]:
print(f" {nom:<6}: buzilmagan test yozuvlarida MAE "
f"{mean_absolute_error(toza_te[sof], m.predict(Xte[sof])):.3f} daqiqa")
print("\n=== 4. Mijozga va'da: 80-persentil ===")
kv = QuantileRegressor(quantile=0.8, alpha=0.0, solver="highs").fit(Xtr, ytr)
med = QuantileRegressor(quantile=0.5, alpha=0.0, solver="highs").fit(Xtr, ytr)
for nom, m in [("median (q=0.5)", med), ("va'da (q=0.8)", kv)]:
b = m.predict(Xte)
kech = (toza_te > b).mean()
print(f" {nom:<15}: o'rtacha va'da {b.mean():5.1f} daqiqa, "
f"kech qolish {kech:.1%}")
print(" ⭐ Robust baho + kvantil va'da = ishonchli xizmat")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Ma'lumot ===
2000 safar, buzilgan yozuvlar: 63 (3.1%)
test'da buzilgan: 13 ta
=== 2. Koeffitsiyentlar (haqiqiy: masofa 2.2, tirband 14) ===
OLS : masofa 2.191, tirband 5.69
Huber: masofa 2.199, tirband 13.39
=== 3. Toza yozuvlarda aniqlik ===
OLS : buzilmagan test yozuvlarida MAE 7.911 daqiqa
Huber : buzilmagan test yozuvlarida MAE 2.273 daqiqa
=== 4. Mijozga va'da: 80-persentil ===
median (q=0.5) : o'rtacha va'da 42.3 daqiqa, kech qolish 48.8%
va'da (q=0.8) : o'rtacha va'da 45.1 daqiqa, kech qolish 15.2%
⭐ Robust baho + kvantil va'da = ishonchli xizmatNima ko'rsatdi: 2.2, 2.4-bo'limlar.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "Outlierlarni o'chirish kerak" | Avval sababini toping |
| "Huber outlierlarni tashlaydi" | Vaznini kamaytiradi |
| "RANSAC har doim yaxshi" | Tasodifiy, ko'p buzilishda |
| "Robustlik bepul" | Kichik samaradorlik narxi |
| "Median = o'rtacha" | Har xil |
| "Bitta model barcha kvantil uchun" | Har kvantil — o'z modeli |
| "Interval — qamrovsiz" | Qamrovni o'lchang |
| "Huber masshtablashsiz ishlaydi" | Masshtablash kerak |
6. Keng tarqalgan xatolar va yechimlari
1. Outlierni sababsiz o'chirish
df = df[np.abs(z) < 3] # ⚠️
# avval tekshiring: o'lchov xatosimi yoki haqiqiy holat 13.4-bob # ✅2. Masshtablamaslik
HuberRegressor().fit(X, y) # ⚠️
Pipeline([("sc", StandardScaler()), ("m", HuberRegressor())]) # ✅3. RANSAC da random_state yo'q
RANSACRegressor().fit(X, y) # har safar boshqa natija # ⚠️
RANSACRegressor(random_state=0) # ✅4. Kvantil modellarining kesishishi
past, yuqori = q05.predict(X), q95.predict(X) # ⚠️
yuqori = np.maximum(yuqori, past) # yoki monoton usul # ✅5. Qamrovsiz interval
print(f"interval: {past:.1f}-{yuqori:.1f}") # ⚠️
print(f"... (test qamrovi {qamrov:.1%})") # ✅6. Medianni o'rtacha deb hisobot qilish
# "o'rtacha yetkazib berish vaqti 34 daqiqa" (q=0.5 modeli) # ⚠️
# "tipik (median) vaqt 34 daqiqa" # ✅7. Theil-Sen ni katta ma'lumotda
TheilSenRegressor().fit(X, y) # n = 200000 # ⚠️
TheilSenRegressor(max_subpopulation=10_000) # yoki Huber # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 9.10-dars (o'tilgan): Asimmetrik narx
- 12.8-dars (o'tilgan): Pinball loss va kvantil metrikalari
- 13.1-dars (o'tilgan): OLS ning outlier sezgirligi
- 13.4-dars (o'tilgan): Ta'sirli nuqtalar
- 13.12-dars: To'liq loyiha
8. Eng yaxshi amaliyotlar
Avval outlier sababini aniqlang.
Huber ni standart robust tanlov qiling.
Masshtablashni unutmang.
RANSAC da random_state qo'ying.
Kvantil bilan interval bering.
Qamrovni o'lchang.
Median va o'rtachani chalkashtirmang.
Natijani OLS bilan solishtiring.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # Huber yo'qotishi qanday?
2. # epsilon nima?
3. # epsilon katta bo'lsa?
4. # RANSAC qanday ishlaydi?
5. # RANSAC buzilish nuqtasi?
6. # Theil-Sen nima?
7. # pinball loss formulasi?
8. # q = 0.5 nima beradi?
9. # interval qanday quriladi?
10. # qamrov nima?
11. # robustlikning narxi?
12. # birinchi savol nima?Javoblar
- Markazda kvadratik, dumlarda chiziqli
- Outlier chegarasi
- OLS ga yaqinlashadi
- Inlier konsensusi
- ~50%
- Juftlik nishablari medianasi
- max(q·r, (q-1)·r)
- Median regressiyasi
- Ikki kvantil modeli
- Interval haqiqatni qamrash ulushi
- Kichik samaradorlik yo'qotishi
- Outlier qayerdan kelgan?
Vazifa 2: Xatolarni tuzating
1. df = df[np.abs(z) < 3] # tekshirmasdan
2. HuberRegressor().fit(X, y) # masshtablanmagan
3. RANSACRegressor().fit(X, y)
4. # "90% interval: 20-60 daqiqa" (qamrov o'lchanmagan)
5. # q=0.5 modelini "o'rtacha vaqt" deb hisobot qilishJavoblar
1. # Cook masofasi bilan topib, har birini tekshiring (13.4)
2. Pipeline([("sc", StandardScaler()), ("m", HuberRegressor())])
3. RANSACRegressor(random_state=0)
4. qamrov = ((y >= past) & (y <= yuqori)).mean()
5. # "median (tipik) vaqt"Vazifa 3: To'rt usul
Modellang:
- Turli buzilish ulushi
- To'rt usul
- Nishab xatosi
- Xulosa
Vazifa 4: Huber narxi
Modellang:
- Toza ma'lumot
- SD taqqoslash
- epsilon ta'siri
- MSE
Vazifa 5: Kvantillar
Modellang:
- Beshta kvantil
- Interval
- Qamrov
- Pinball loss
Vazifa 6: To'liq qaror
Modellang:
- Buzilgan ma'lumot
- Robust baho
- Kvantil va'da
- Hisobot
Vazifa 7: O'ylash
Robust usullar "outlierlarning ta'sirini kamaytiradi" — lekin ba'zi sohalarda aynan outlierlar eng qiziq hodisalar (firibgarlik, nosozlik, bozor inqirozi). Robustlik qachon ma'lumotni yashirishga aylanadi?
Javob
Qisqa javob: robustlik markaziy tendensiyani himoya qiladi; agar sizning savolingiz aynan chekka hodisalar haqida bo'lsa, robust usul noto'g'ri vosita — u qiziqarli qismni tashlab yuboradi.
1. Ikki xil savol
| Savol | Vosita |
|---|---|
| "Tipik holat qanday?" | Robust regressiya |
| "Chekka holatlar qanday?" | Kvantil (q=0.95+), ekstremal qiymatlar nazariyasi |
| "Bu kuzatuv anomalmi?" | Anomaliya aniqlash (18-qism) |
| "Anomaliya nega yuz berdi?" | Sababiy tahlil, domen |
2. Xavf: muhim signalni yo'qotish
- Firibgarlik — aynan outlier
- Nosozlik bashorati — kamdan-kam hodisa
- Moliyaviy risk — dumdagi hodisalar (VaR)
- Tibbiyotda noyob asoratlar
3. To'g'ri yondashuv
- Outlierlarni ajratib tahlil qiling (o'chirmang)
- Ular uchun alohida model yoki belgi
- Asosiy modelda robust usul + anomaliyalar uchun alohida oqim
- Har ikkalasini hisobotda ko'rsating
4. Amaliy shakl
- Robust model — "normal" rejim uchun
- Kvantil (q=0.99) — yuqori chegara rejasi
- Anomaliya aniqlovchi — signal berish uchun
- Hujjat: qancha kuzatuv qanday sababdan chiqarildi
5. Xulosa
- Robustlik — savolga bog'liq tanlov
- Chekka hodisalar ba'zan asosiy maqsad
- Outlierlarni tashlash emas, ajratish
- Ikki oqimni birga saqlang
Nimani mustahkamlaydi: 2.4, 2.7-bo'limlar.
Xulosa
Bu darsda robust va kvantil regressiyani o'rgandik.
Eng muhim uch fikr:
Huber — standart robust tanlov. Yo'qotish markazda kvadratik,
|r| > epsilonbo'lganda chiziqli: outlier tashlanmaydi, lekin uning vazni cheklanadi.epsilonkatta bo'lsa OLS ga, kichik bo'lsa MAE ga yaqinlashadi. Kuchli buzilishda (20-50%) RANSAC, kam belgili ishonchli baho uchun Theil-Sen.Kvantil regressiya — boshqa savol. U o'rtachani emas, shartli kvantilni modellaydi:
q = 0.5robust median bashorat,q ≠ 0.5esa asimmetrik narx (9.10, 12.8) va bashorat intervallari uchun. Har kvantil o'z modelini talab qiladi; intervalni qamrov bilan tekshiring va kvantil chiziqlarining kesishishini nazorat qiling.Robustlik ma'lumotni tushunish o'rnini bosmaydi. Birinchi savol — outlier qayerdan kelgan? (o'lchov xatosi / haqiqiy noyob holat — 13.4). Robust usullarning samaradorlik narxi kichik (toza ma'lumotda OLS ga yaqin), shuning uchun ma'lumot manbai ishonchsiz bo'lsa Huber ni standart qiling — lekin chekka hodisalar asosiy maqsad bo'lsa, ularni yashirmang, alohida modellang.
Keyingi darsda amaliyot — 13-qismning to'liq regressiya loyihasi: ma'lumotdan hisobotgacha.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!