Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Birliklar
- 2.2. Standartlashtirilgan koeffitsiyentlar
- 2.3. Multikollinearlik va VIF
- 2.4. Multikollinearlikni hal qilish
- 2.5. Log-transformatsiyalarda talqin
- 2.6. Kategoriya koeffitsiyentlari
- 2.7. Tuzoqlar
- 2.8. Koeffitsiyent — shartli bayonot
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Birlik va standartlashtirish
- Misol 2 — Multikollinearlik: beqaror koeffitsiyentlar
- Misol 3 — Log modellarida talqin
- Misol 4 — Kategoriya koeffitsiyentlari va hisobot
- 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.3-dars: Koeffitsiyentlarni talqin qilish
13-QISM — REGRESSIYA · 3-dars
1. Kirish va motivatsiya
Chiziqli modelning asosiy qiymati — koeffitsiyentlar. Lekin ularni o'qish ko'rinadiganidan qiyin: koeffitsiyent kattaligi birlikka bog'liq, ishorasi boshqa belgilarga bog'liq, barqarorligi esa belgilarning o'zaro bog'liqligiga. Noto'g'ri o'qilgan koeffitsiyent noto'g'ri biznes qaroriga aylanadi.
Bu darsda: birliklar va standartlashtirilgan koeffitsiyentlar, multikollinearlik va VIF, koeffitsiyentlarning beqarorligi, log-transformatsiyalarda talqin (elastiklik, foizli o'zgarish), kategoriya koeffitsiyentlari (tayanch daraja) va koeffitsiyentdan ta'sir haqida xulosa chiqarish chegaralari.
Real vaziyat. Marketing jamoasi modeldan shunday xulosa chiqardi: "Instagram koeffitsiyenti -1.2 — u sotuvni kamaytiryapti, byudjetni olib tashlaymiz". Tekshiruv: Instagram va Facebook xarajatlari korrelyatsiyasi 0.94 edi (ular birga o'zgardi), koeffitsiyentlar esa beqaror — VIF 18. Belgilarni birlashtirgach ("umumiy ijtimoiy tarmoq byudjeti"), koeffitsiyent +2.1 bo'ldi. Kanalni yopish xato bo'lar edi.
Bu darsda koeffitsiyentlarni to'g'ri o'qishni o'rganamiz.
Bu darsda:
- Birliklar va standartlashtirish
- Multikollinearlik va VIF
- Koeffitsiyent barqarorligi
- Log-transformatsiyalarda talqin
- Kategoriya koeffitsiyentlari
- Ta'sir haqida xulosa chegaralari
- Tuzoqlar
- Amaliy: koeffitsiyentlar hisoboti
ℹ Misollar real numpy/pandas/sklearn/statsmodels bilan (Python 3.14).
2. Nazariya — chuqur tushuntirish
2.1. Birliklar
Koeffitsiyent birligi = y birligi / x birligi
narx (ming $) ~ maydon (m^2): w = 1.52 → "+1 m^2 = +1.52 ming $"
maydon sm^2 da berilsa: w = 0.000152 → bir xil model, boshqa son!
Koeffitsiyent kattaligi MUHIMLIK emas Koeffitsiyentni birliksiz o'qish — eng keng tarqalgan xato. w = 38 va w = 1.52 ni solishtirib "birinchisi muhimroq" deyish noto'g'ri: birinchisi 0/1 belgi, ikkinchisi m^2 uchun. Solishtirish uchun standartlashtirilgan koeffitsiyentlar kerak.
2.2. Standartlashtirilgan koeffitsiyentlar
x ni standartlashtiring: z = (x - o'rtacha) / SD
Keyin: w_std = w × SD_x (y standartlashtirilmagan bo'lsa)
Talqin: "x bir SD ga o'zgarsa, y qancha o'zgaradi"
Bu — belgilarni O'ZARO solishtirish uchun yagona to'g'ri yo'l
Diqqat: 0/1 belgilar uchun SD ma'nosi cheklangan (ulushga bog'liq) Standartlashtirilgan koeffitsiyent (w × SD_x) belgilarni bir shkalaga keltiradi: "bir SD o'zgarish qancha ta'sir beradi". Bu sklearn da StandardScaler bilan avtomatik olinadi. Lekin eslang: bu ham muhimlik emas, bog'lanish kuchi — sababiy talqin baribir asoslanmaydi 13.2-bob.
2.3. Multikollinearlik va VIF
Multikollinearlik — belgilar o'zaro kuchli bog'liq
Oqibatlari:
· koeffitsiyentlar BEQAROR (namuna biroz o'zgarsa keskin o'zgaradi)
· standart xatolar katta, p-qiymatlar yuqori
· ishoralar mantiqqa zid bo'lishi mumkin
· BASHORAT sifati odatda ZARAR KO'RMAYDI
VIF_j = 1 / (1 - R_j^2), R_j^2 — x_j ni qolgan belgilarga regressiya
VIF < 5 — muammo yo'q
5..10 — ehtiyot
> 10 — jiddiyMultikollinearlik — talqin muammosi, bashorat muammosi emas. Agar sizga faqat bashorat kerak bo'lsa, uni e'tiborsiz qoldirsangiz bo'ladi; koeffitsiyentlarni tushuntirish kerak bo'lsa — hal qilish shart. VIF har belgi uchun "qolganlari uni qanchalik tushuntiradi"ni o'lchaydi.
2.4. Multikollinearlikni hal qilish
1. Belgilarni BIRLASHTIRISH (ikki kanal byudjeti → umumiy byudjet)
2. Birini olib tashlash (mantiqan kamroq muhimini)
3. Ridge regularizatsiyasi 13.7-bob — koeffitsiyentlarni barqarorlashtiradi
4. PCA bilan yangi ortogonal belgilar 10.9-bob — talqin yo'qoladi
5. Ko'proq ma'lumot yig'ish
6. Hech narsa qilmaslik — agar faqat bashorat kerak bo'lsaYechim maqsadga bog'liq: talqin kerak bo'lsa — birlashtirish yoki olib tashlash (domen bilimi bilan); barqaror koeffitsiyent kerak bo'lsa — Ridge 13.7-bob. PCA multikollinearlikni to'liq yechadi, lekin koeffitsiyentlar ma'nosini yo'qotadi — talqin talab qilinmaganda mos.
2.5. Log-transformatsiyalarda talqin
log(y) ~ x → w = "x bir birlikka oshsa, y ≈ 100·w % o'zgaradi" (kichik w uchun)
aniq: (exp(w) - 1) × 100%
y ~ log(x) → "x 1% oshsa, y ≈ w/100 birlikka o'zgaradi"
log(y) ~ log(x) → w = ELASTIKLIK: "x 1% oshsa, y w% o'zgaradi"
Diqqat: log fazoda o'qitilgan modelni asl birlikka qaytarganda
exp(bashorat) MEDIANANI beradi, o'rtachani emas (qiyshiqlik tuzatishi kerak) Log-log modeli iqtisodda eng ko'p ishlatiladigan shakl, chunki koeffitsiyent elastiklik bo'ladi — birliksiz va tushunarli ("narx 1% oshsa, talab 1.3% kamayadi"). log(y) ishlatish, shuningdek, o'ng qiyshiq maqsad va ko'paytiruvchi xato uchun mos (12.8 MSLE).
2.6. Kategoriya koeffitsiyentlari
One-hot (drop_first=True): bitta daraja TAYANCH bo'ladi
hudud: markaz (tayanch), shimol, janub, chekka
w_shimol = "shimol markazdan qancha farq qiladi"
Tayanch darajani o'zgartirsangiz — barcha koeffitsiyentlar o'zgaradi (model bir xil!)
Tayanch: eng ko'p uchraydigan yoki eng mantiqiy daraja Kategoriya koeffitsiyentlari har doim tayanch darajaga nisbatan o'qiladi — buni hisobotda yozmaslik keng tarqalgan xato. Model sifati tayanch tanlovidan o'zgarmaydi, faqat sonlar boshqacha ko'rinadi. Barcha darajalarni kiritish (drop_first=False) kesma bilan to'liq kollinearlikka olib keladi ("dummy variable trap").
2.7. Tuzoqlar
Asosiy tuzoqlar: koeffitsiyentlarni birliksiz solishtirish; sababiy talqin 13.2-bob; multikollinearlikda ishoraga ishonish; VIF ni tekshirmaslik; log modelida koeffitsiyentni birlik deb o'qish; kategoriya tayanch darajasini aytmaslik; p-qiymatga ko'p test tuzatishisiz ishonish 11.9-bob; koeffitsiyent noaniqligini (CI) bermaslik; ekstrapolyatsiya.
2.8. Koeffitsiyent — shartli bayonot
Koeffitsiyentni o'qishda uchta savol: (1) birligi nima — solishtirish uchun standartlashtiring (w × SD_x); (2) barqarormi — belgilar o'zaro bog'liq bo'lsa (VIF > 10) koeffitsiyent beqaror, ishorasi ham o'zgarishi mumkin, lekin bashorat zarar ko'rmaydi; (3) qanday shaklda — log(y) da foiz, log-log da elastiklik, kategoriyada tayanch darajaga nisbatan farq. Har uchala javob hisobotda bo'lishi kerak, ishonch oralig'i bilan birga. Keyingi dars — regressiya taxminlari va diagnostika.
3. Tez ma'lumotnoma
import numpy as np
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor
# standartlashtirilgan koeffitsiyentlar
w_std = model.coef_ * X.std(axis=0, ddof=1)
# VIF
Xc = sm.add_constant(X)
vif = [variance_inflation_factor(Xc, i) for i in range(1, Xc.shape[1])]
# log talqini
# log(y) ~ x: (np.exp(w) - 1) * 100 → foiz o'zgarish
# log(y) ~ log(x): w → elastiklik
# kategoriya
pd.get_dummies(df["hudud"], drop_first=True) # tayanch — birinchi daraja
QOIDA: birlikni yoz · VIF tekshir · CI ber · tayanch darajani ayt · sabab demaTalqin xulosasi
w birligi = y birligi / x birligi · solishtirish uchun w × SD_x
VIF > 10 — koeffitsiyent beqaror (bashorat emas, talqin muammosi)
log(y)~x: ~100w% · y~log(x): w/100 birlik · log-log: elastiklik
Kategoriya: tayanch darajaga nisbatan farq4. Batafsil misollar
Misollar real numpy/pandas/sklearn/statsmodels bilan (Python 3.14).
Misol 1 — Birlik va standartlashtirish
"""Koeffitsiyent kattaligi muhimlik emas (real numpy/sklearn)."""
import numpy as np
from sklearn.linear_model import LinearRegression
def main() -> None:
rng = np.random.default_rng(6)
n = 2000
maydon = rng.lognormal(np.log(70), 0.33, n).clip(28, 260)
markaz = (rng.random(n) < 0.3).astype(float)
yosh = rng.integers(0, 45, n).astype(float)
narx = 18 + 1.52 * maydon + 38 * markaz - 0.62 * yosh + rng.normal(0, 13, n)
nomlar = ["maydon", "markaz", "yosh"]
X = np.column_stack([maydon, markaz, yosh])
print("=== 1. Xom koeffitsiyentlar ===")
m = LinearRegression().fit(X, narx)
for nom, w in zip(nomlar, m.coef_):
print(f" {nom:<8}: {w:+8.3f}")
print(" ('markaz eng muhim' degan xulosa — xato)")
print("\n=== 2. Birlikni o'zgartiramiz: maydon sm^2 da ===")
X2 = X.copy()
X2[:, 0] = X2[:, 0] * 10_000
m2 = LinearRegression().fit(X2, narx)
print(f" maydon koeffitsiyenti: {m2.coef_[0]:.8f}")
print(f" model bir xil: bashoratlar teng = "
f"{np.allclose(m.predict(X), m2.predict(X2))}")
print("\n=== 3. Standartlashtirilgan koeffitsiyentlar ===")
sd = X.std(axis=0, ddof=1)
for nom, w, s in zip(nomlar, m.coef_, sd):
print(f" {nom:<8}: w = {w:+8.3f}, SD = {s:6.2f}, "
f"w × SD = {w * s:+7.2f}")
print(" talqin: belgi bir SD ga o'zgarsa narx qancha o'zgaradi")
print("\n=== 4. Tartib o'zgardi ===")
tartib = sorted(zip(nomlar, np.abs(m.coef_ * sd)), key=lambda t: -t[1])
print(f" standartlashgan bo'yicha: {[n for n, _ in tartib]}")
print(f" xom koeffitsiyent bo'yicha: "
f"{[n for n, _ in sorted(zip(nomlar, np.abs(m.coef_)), key=lambda t: -t[1])]}")
print(" ⭐ Solishtirish faqat standartlashgan koeffitsiyentlar bilan")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Xom koeffitsiyentlar ===
maydon : +1.527
markaz : +37.905
yosh : -0.635
('markaz eng muhim' degan xulosa — xato)
=== 2. Birlikni o'zgartiramiz: maydon sm^2 da ===
maydon koeffitsiyenti: 0.00015270
model bir xil: bashoratlar teng = True
=== 3. Standartlashtirilgan koeffitsiyentlar ===
maydon : w = +1.527, SD = 25.15, w × SD = +38.41
markaz : w = +37.905, SD = 0.47, w × SD = +17.63
yosh : w = -0.635, SD = 13.11, w × SD = -8.33
talqin: belgi bir SD ga o'zgarsa narx qancha o'zgaradi
=== 4. Tartib o'zgardi ===
standartlashgan bo'yicha: ['maydon', 'markaz', 'yosh']
xom koeffitsiyent bo'yicha: ['markaz', 'maydon', 'yosh']
⭐ Solishtirish faqat standartlashgan koeffitsiyentlar bilanNima ko'rsatdi: 2.1, 2.2-bo'limlar.
Misol 2 — Multikollinearlik: beqaror koeffitsiyentlar
"""Korrelyatsiyalangan belgilar va VIF (real numpy/sklearn/statsmodels)."""
import numpy as np
import statsmodels.api as sm
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold, cross_val_score
from statsmodels.stats.outliers_influence import variance_inflation_factor
def yarat(seed: int, n: int = 500):
rng = np.random.default_rng(seed)
insta = rng.gamma(4, 250, n)
face = 0.9 * insta + rng.normal(0, 120, n) # juda kuchli bog'liq
tv = rng.gamma(3, 400, n)
sotuv = 5000 + 1.1 * (insta + face) + 0.8 * tv + rng.normal(0, 900, n)
return np.column_stack([insta, face, tv]), sotuv
def main() -> None:
X, y = yarat(0)
nomlar = ["instagram", "facebook", "tv"]
print("=== 1. Korrelyatsiya ===")
print(f" corr(instagram, facebook) = {np.corrcoef(X[:, 0], X[:, 1])[0, 1]:.3f}")
print(f" corr(instagram, tv) = {np.corrcoef(X[:, 0], X[:, 2])[0, 1]:.3f}")
print("\n=== 2. VIF ===")
Xc = sm.add_constant(X)
for i, nom in enumerate(nomlar, start=1):
print(f" {nom:<10}: VIF = {variance_inflation_factor(Xc, i):6.2f}")
print("\n=== 3. Koeffitsiyentlar turli namunalarda ===")
for seed in [0, 1, 2, 3]:
Xs, ys = yarat(seed)
m = LinearRegression().fit(Xs, ys)
print(f" namuna {seed}: instagram {m.coef_[0]:+7.3f}, "
f"facebook {m.coef_[1]:+7.3f}, tv {m.coef_[2]:+6.3f}")
print(" (haqiqiy ta'sir: instagram va facebook uchun 1.1, tv uchun 0.8)")
print("\n=== 4. Bashorat zarar ko'rmaydi ===")
cv = KFold(5, shuffle=True, random_state=0)
r2_hammasi = cross_val_score(LinearRegression(), X, y, cv=cv, scoring="r2").mean()
birlashgan = np.column_stack([X[:, 0] + X[:, 1], X[:, 2]])
r2_birlashgan = cross_val_score(LinearRegression(), birlashgan, y, cv=cv,
scoring="r2").mean()
print(f" uchta belgi bilan: CV R^2 = {r2_hammasi:.4f}")
print(f" birlashtirilgan: CV R^2 = {r2_birlashgan:.4f}")
mb = LinearRegression().fit(birlashgan, y)
print(f" birlashgan koeffitsiyent: {mb.coef_[0]:.3f} (haqiqiy 1.1), "
f"tv {mb.coef_[1]:.3f}")
print(" ⭐ Multikollinearlik — talqin muammosi, bashorat emas")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Korrelyatsiya ===
corr(instagram, facebook) = 0.962
corr(instagram, tv) = 0.028
=== 2. VIF ===
instagram : VIF = 13.50
facebook : VIF = 13.51
tv : VIF = 1.00
=== 3. Koeffitsiyentlar turli namunalarda ===
namuna 0: instagram +1.185, facebook +1.033, tv +0.762
namuna 1: instagram +1.046, facebook +1.071, tv +0.784
namuna 2: instagram +1.087, facebook +1.209, tv +0.890
namuna 3: instagram +0.654, facebook +1.508, tv +0.764
(haqiqiy ta'sir: instagram va facebook uchun 1.1, tv uchun 0.8)
=== 4. Bashorat zarar ko'rmaydi ===
uchta belgi bilan: CV R^2 = 0.6102
birlashtirilgan: CV R^2 = 0.6124
birlashgan koeffitsiyent: 1.111 (haqiqiy 1.1), tv 0.762
⭐ Multikollinearlik — talqin muammosi, bashorat emasNima ko'rsatdi: 2.3, 2.4-bo'limlar.
Misol 3 — Log modellarida talqin
"""log(y), log(x) va log-log koeffitsiyentlari (real numpy/sklearn)."""
import numpy as np
from sklearn.linear_model import LinearRegression
def main() -> None:
rng = np.random.default_rng(8)
n = 4000
print("=== 1. log(y) ~ x: foizli o'zgarish ===")
tajriba = rng.uniform(0, 20, n)
# har yil tajriba maoshni ~7% oshiradi (ko'paytiruvchi model)
maosh = 400 * np.exp(0.07 * tajriba) * rng.lognormal(0, 0.18, n)
m = LinearRegression().fit(tajriba.reshape(-1, 1), np.log(maosh))
w = m.coef_[0]
print(f" koeffitsiyent = {w:.4f}")
print(f" taxminiy talqin: har yil +{w * 100:.2f}%")
print(f" aniq talqin: har yil +{(np.exp(w) - 1) * 100:.2f}% (haqiqiy +7.25%)")
print("\n=== 2. y ~ log(x): kamayuvchi qaytim ===")
reklama = rng.uniform(100, 10_000, n)
sotuv = 2000 + 850 * np.log(reklama) + rng.normal(0, 400, n)
m2 = LinearRegression().fit(np.log(reklama).reshape(-1, 1), sotuv)
print(f" koeffitsiyent = {m2.coef_[0]:.1f}")
print(f" talqin: reklama 1% oshsa, sotuv +{m2.coef_[0] / 100:.1f} birlik")
print(f" reklama 2 barobar oshsa: +{m2.coef_[0] * np.log(2):.0f} birlik")
print("\n=== 3. log-log: elastiklik ===")
narx = rng.uniform(5, 60, n)
talab = 10_000 * narx ** (-1.3) * rng.lognormal(0, 0.15, n)
m3 = LinearRegression().fit(np.log(narx).reshape(-1, 1), np.log(talab))
print(f" elastiklik = {m3.coef_[0]:.3f} (haqiqiy -1.3)")
print(" talqin: narx 1% oshsa, talab "
f"{abs(m3.coef_[0]):.2f}% kamayadi")
print("\n=== 4. Asl birlikka qaytish tuzog'i ===")
log_bashorat = m.predict(tajriba.reshape(-1, 1))
oddiy = np.exp(log_bashorat)
qoldiq_var = np.var(np.log(maosh) - log_bashorat, ddof=2)
tuzatilgan = np.exp(log_bashorat + qoldiq_var / 2)
print(f" haqiqiy o'rtacha maosh: {maosh.mean():8.2f}")
print(f" exp(bashorat) o'rtachasi: {oddiy.mean():8.2f} ← past (median beradi)")
print(f" qiyshiqlik tuzatilgan: {tuzatilgan.mean():8.2f}")
print(" ⭐ Log fazodan qaytishda tuzatish kerak")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. log(y) ~ x: foizli o'zgarish ===
koeffitsiyent = 0.0700
taxminiy talqin: har yil +7.00%
aniq talqin: har yil +7.25% (haqiqiy +7.25%)
=== 2. y ~ log(x): kamayuvchi qaytim ===
koeffitsiyent = 853.4
talqin: reklama 1% oshsa, sotuv +8.5 birlik
reklama 2 barobar oshsa: +592 birlik
=== 3. log-log: elastiklik ===
elastiklik = -1.303 (haqiqiy -1.3)
talqin: narx 1% oshsa, talab 1.30% kamayadi
=== 4. Asl birlikka qaytish tuzog'i ===
haqiqiy o'rtacha maosh: 882.05
exp(bashorat) o'rtachasi: 868.50 ← past (median beradi)
qiyshiqlik tuzatilgan: 882.18
⭐ Log fazodan qaytishda tuzatish kerakNima ko'rsatdi: 2.5-bo'lim.
Misol 4 — Kategoriya koeffitsiyentlari va hisobot
"""Tayanch daraja va to'liq koeffitsiyentlar hisoboti (real pandas/statsmodels)."""
import numpy as np
import pandas as pd
import statsmodels.api as sm
def yarat(seed: int = 15, n: int = 1500) -> pd.DataFrame:
rng = np.random.default_rng(seed)
hudud = rng.choice(["markaz", "shimol", "janub", "chekka"], n,
p=[0.3, 0.25, 0.25, 0.2])
maydon = rng.lognormal(np.log(70), 0.33, n).clip(28, 260)
yosh = rng.integers(0, 45, n).astype(float)
qosh = pd.Series(hudud).map({"markaz": 40.0, "shimol": 8.0,
"janub": 0.0, "chekka": -14.0}).to_numpy()
narx = 18 + 1.52 * maydon - 0.62 * yosh + qosh + rng.normal(0, 13, n)
return pd.DataFrame({"hudud": hudud, "maydon": maydon, "yosh": yosh, "narx": narx})
def moslash(df: pd.DataFrame, tayanch: str):
darajalar = [d for d in ["markaz", "shimol", "janub", "chekka"] if d != tayanch]
X = pd.concat([df[["maydon", "yosh"]],
pd.DataFrame({f"hudud_{d}": (df["hudud"] == d).astype(float)
for d in darajalar})], axis=1)
return sm.OLS(df["narx"], sm.add_constant(X)).fit(), X.columns.tolist()
def main() -> None:
df = yarat()
print("=== 1. Tayanch = markaz ===")
nat, ustunlar = moslash(df, "markaz")
for nom, w, se in zip(["kesma"] + ustunlar, nat.params, nat.bse):
print(f" {nom:<14}: {w:+8.2f} ± {se:5.2f}")
print(" hudud koeffitsiyentlari — MARKAZGA nisbatan")
print("\n=== 2. Tayanch = janub ===")
nat2, ustunlar2 = moslash(df, "janub")
for nom, w, se in zip(["kesma"] + ustunlar2, nat2.params, nat2.bse):
print(f" {nom:<14}: {w:+8.2f} ± {se:5.2f}")
print(f" model bir xil: R^2 {nat.rsquared:.4f} va {nat2.rsquared:.4f}")
print("\n=== 3. Farqlar saqlanadi ===")
print(f" markaz - shimol (1-model): {-nat.params['hudud_shimol']:+.2f}")
print(f" markaz - shimol (2-model): "
f"{nat2.params['hudud_markaz'] - nat2.params['hudud_shimol']:+.2f}")
print("\n=== 4. Hisobot ko'rinishi ===")
ci = nat.conf_int()
print(" Belgilar (tayanch hudud: markaz), narx ming $ da:")
talqin = {
"maydon": "har m^2 uchun",
"yosh": "har yil uchun",
"hudud_shimol": "markazga nisbatan",
"hudud_janub": "markazga nisbatan",
"hudud_chekka": "markazga nisbatan",
}
for nom in ustunlar:
w = nat.params[nom]
lo, hi = ci.loc[nom]
print(f" {nom:<14} {w:+7.2f} [95% CI {lo:+7.2f}, {hi:+7.2f}] "
f"{talqin[nom]}")
print(" ⭐ Tayanch daraja hisobotda ko'rsatilishi SHART")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Tayanch = markaz ===
kesma : +59.00 ± 1.31
maydon : +1.51 ± 0.01
yosh : -0.63 ± 0.03
hudud_shimol : -32.19 ± 0.96
hudud_janub : -39.12 ± 0.91
hudud_chekka : -54.53 ± 1.00
hudud koeffitsiyentlari — MARKAZGA nisbatan
=== 2. Tayanch = janub ===
kesma : +19.89 ± 1.35
maydon : +1.51 ± 0.01
yosh : -0.63 ± 0.03
hudud_markaz : +39.12 ± 0.91
hudud_shimol : +6.93 ± 0.97
hudud_chekka : -15.41 ± 1.01
model bir xil: R^2 0.9121 va 0.9121
=== 3. Farqlar saqlanadi ===
markaz - shimol (1-model): +32.19
markaz - shimol (2-model): +32.19
=== 4. Hisobot ko'rinishi ===
Belgilar (tayanch hudud: markaz), narx ming $ da:
maydon +1.51 [95% CI +1.48, +1.54] har m^2 uchun
yosh -0.63 [95% CI -0.68, -0.58] har yil uchun
hudud_shimol -32.19 [95% CI -34.07, -30.30] markazga nisbatan
hudud_janub -39.12 [95% CI -40.91, -37.33] markazga nisbatan
hudud_chekka -54.53 [95% CI -56.49, -52.57] markazga nisbatan
⭐ Tayanch daraja hisobotda ko'rsatilishi SHARTNima ko'rsatdi: 2.6-bo'lim.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "Katta koeffitsiyent — muhim belgi" | Birlikka bog'liq |
| "Manfiy ishora — zarar" | Multikollinearlikda beqaror |
| "Multikollinearlik bashoratni buzadi" | Asosan talqinni |
| "VIF 3 — muammo" | 10 dan katta bo'lsa |
| "log koeffitsiyenti — birlik" | Foiz yoki elastiklik |
| "exp(bashorat) = o'rtacha" | Median |
| "Kategoriya koeffitsiyenti — mutlaq" | Tayanchga nisbatan |
| "p < 0.05 — ta'sir bor" | CI va ko'p testni ko'ring |
6. Keng tarqalgan xatolar va yechimlari
1. Xom koeffitsiyentlarni solishtirish
# "markaz (38) maydondan 1.5-bob muhimroq" # ⚠️
w_std = m.coef_ * X.std(axis=0, ddof=1) # ✅2. VIF ni tekshirmaslik
# koeffitsiyent ishorasidan xulosa # ⚠️
variance_inflation_factor(sm.add_constant(X), i) # ✅3. Log koeffitsiyentini noto'g'ri o'qish
# "log(maosh) modeli: +0.07 so'm" # ⚠️
# "+7.25% (exp(0.07) - 1)" # ✅4. Log fazodan qaytishda tuzatmaslik
bashorat = np.exp(model.predict(X)) # ⚠️
bashorat = np.exp(pred + qoldiq_var / 2) # ✅5. Tayanch darajani aytmaslik
print("shimol: +8.0") # ⚠️
print("shimol: +8.0 (markazga nisbatan)") # ✅6. Dummy tuzog'i
pd.get_dummies(df["hudud"]) # kesma bilan kollinear # ⚠️
pd.get_dummies(df["hudud"], drop_first=True) # ✅7. Noaniqliksiz hisobot
print(f"maydon: {w:.2f}") # ⚠️
print(f"maydon: {w:.2f} [CI {lo:.2f}, {hi:.2f}]") # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 4.9-dars (o'tilgan): Korrelyatsiya
- 10.9-dars (o'tilgan): PCA — ortogonal belgilar
- 13.2-dars (o'tilgan): Nazoratga olish
- 13.7-dars: Ridge — barqaror koeffitsiyentlar
- 13.9-dars: Kategoriyalar va o'zaro ta'sirlar
8. Eng yaxshi amaliyotlar
Birlikni yozing.
Solishtirish uchun standartlashtiring.
VIF ni tekshiring.
Ishonch oralig'ini bering.
Tayanch darajani ko'rsating.
Log talqinini aniq yozing.
Sababiy tildan saqlaning.
Beqarorlikni tekshiring (turli namunalar).
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # koeffitsiyent birligi?
2. # standartlashtirilgan koeffitsiyent formulasi?
3. # multikollinearlik nimaga zarar qiladi?
4. # VIF formulasi?
5. # VIF chegarasi?
6. # log(y) ~ x talqini?
7. # log-log talqini?
8. # y ~ log(x) talqini?
9. # exp(bashorat) nimani beradi?
10. # kategoriya koeffitsiyenti nimaga nisbatan?
11. # dummy tuzog'i nima?
12. # multikollinearlikni qanday hal qilish mumkin?Javoblar
- y birligi / x birligi
- w × SD_x
- Talqinga (koeffitsiyent beqaror)
- 1/(1-R_j^2)
- 10
- Foizli o'zgarish
- Elastiklik
- 1% oshsa w/100 birlik
- Median
- Tayanch darajaga
- Barcha darajalar + kesma
- Birlashtirish, olib tashlash, Ridge, PCA
Vazifa 2: Xatolarni tuzating
1. # "markaz koeffitsiyenti 38 — eng muhim belgi"
2. # VIF 22 bo'lgan belgi koeffitsiyentidan xulosa
3. # "log(narx) modeli: +0.12 ming so'm"
4. bashorat = np.exp(model.predict(X))
5. print("shimol: +8.0")Javoblar
1. w_std = m.coef_ * X.std(axis=0, ddof=1)
2. # belgilarni birlashtiring yoki Ridge ishlating
3. # "+12.7% (exp(0.12) - 1)"
4. bashorat = np.exp(pred + s2 / 2)
5. print("shimol: +8.0 (markazga nisbatan)")Vazifa 3: Standartlashtirish
Modellang:
- Turli birlikli belgilar
- Xom va standartlashgan koeffitsiyentlar
- Tartib farqi
- Hisobot
Vazifa 4: Multikollinearlik
Modellang:
- Korrelyatsiyalangan belgilar
- VIF
- Namunalar bo'yicha beqarorlik
- Yechim
Vazifa 5: Log modellari
Modellang:
- Uch shakl
- Talqin
- Qiyshiqlik tuzatishi
- Xulosa
Vazifa 6: Kategoriyalar
Modellang:
- Ikki tayanch
- Koeffitsiyentlar
- Farqlar tengligi
- Hisobot
Vazifa 7: O'ylash
Regressiya koeffitsiyentlari ko'pincha "belgi muhimligi" sifatida taqdim etiladi va shu asosda resurslar taqsimlanadi. Bu yondashuvning chegaralari qanday va muhimlikni qanday o'lchash to'g'riroq?
Javob
Qisqa javob: koeffitsiyent — "muhimlik" emas, shartli bog'lanish kuchi. Resurs taqsimlash uchun kerak bo'lgani — o'zgartirish natijasi (ta'sir), uni esa faqat tajriba yoki sababiy usul beradi.
1. Koeffitsiyent nimani bermaydi
| Savol | Koeffitsiyent javob beradimi |
|---|---|
| Qaysi belgi y bilan kuchli bog'liq | Qisman (standartlashtirilsa) |
| Qaysi belgi bashoratga ko'p hissa qo'shadi | Yo'q (permutation importance yaxshiroq) |
| Belgini o'zgartirsak nima bo'ladi | Yo'q (tajriba kerak) |
| Byudjetni qayerga yo'naltirish | Yo'q |
2. Muqobil o'lchovlar
- Permutation importance: belgi aralashtirilsa metrika qancha tushadi
- SHAP: har bashoratga hissa (modelga xos emas)
- Ablatsiya: belgini olib tashlab CV ni qayta o'lchash
- Tajriba: haqiqiy ta'sir (11.10)
3. Nega ular ham yetarli emas
- Hammasi bashorat haqida gapiradi, ta'sir haqida emas
- Korrelyatsiyalangan belgilarda muhimlik "bo'linib ketadi"
- Ma'lumot taqsimoti o'zgarsa natija ham o'zgaradi
4. Amaliy tartib
- Standartlashtirilgan koeffitsiyent + CI — birinchi qarash
- Permutation importance — bashorat hissasi
- Domen bilimi bilan tekshirish
- Qaror uchun — tajriba
5. Xulosa
- Koeffitsiyent — shartli bog'lanish
- Muhimlik ta'rifi savolga bog'liq
- Bir nechta o'lchovni birga ko'ring
- Qaror uchun tajriba kerak
Nimani mustahkamlaydi: 2.1, 2.3-bo'limlar.
Xulosa
Bu darsda koeffitsiyentlarni talqin qilishni o'rgandik.
Eng muhim uch fikr:
Koeffitsiyent birlikka bog'liq.
w = 38vaw = 1.52ni to'g'ridan-to'g'ri solishtirish xato: birlikni o'zgartirsangiz son o'zgaradi, model esa o'zgarmaydi. Solishtirish uchun standartlashtirilgan koeffitsiyent (w × SD_x) — "belgi bir SD ga o'zgarsa, y qancha o'zgaradi".Multikollinearlik talqinni buzadi. Belgilar o'zaro kuchli bog'liq bo'lsa (VIF > 10) koeffitsiyentlar beqaror bo'ladi — namuna biroz o'zgarsa qiymat, hatto ishora ham o'zgaradi. Muhim nuans: bashorat sifati zarar ko'rmaydi. Yechim maqsadga bog'liq: belgilarni birlashtirish, birini olib tashlash yoki Ridge 13.7-bob.
Shakl talqinni o'zgartiradi.
log(y) ~ xda koeffitsiyent foizli o'zgarish ((e^w - 1)×100%),log-logda elastiklik,y ~ log(x)da "1% oshsaw/100birlik". Log fazodan qaytishdaexp(bashorat)medianani beradi. Kategoriya koeffitsiyentlari esa tayanch darajaga nisbatan — buni hisobotda yozish shart.
Keyingi darsda regressiya taxminlari va diagnostikani o'rganamiz: chiziqlilik, mustaqillik, geteroskedastiklik, normal qoldiqlar, ta'sirli nuqtalar va nima qilish kerakligi.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!