Mundarija (26)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Kurs xaritasi
- 2.2. Qismlar orasidagi bog'lanishlar
- 2.3. Asosiy tamoyillar — kursning "skeleti"
- 2.4. Doimiy o'rganish: nima eskiradi, nima qoladi
- 2.5. Maqolani o'qish: uch o'tish va tanqidiy savollar
- 2.6. Maqolani qayta ishlab chiqish (reproduce)
- 2.7. Yangi kutubxona yoki modelni baholash
- 2.8. O'rganish rejasi: 3, 6, 12 oy
- 2.9. Jamoa va ochiq manbaga hissa
- 2.10. Charchash va "men yetarli emasman" hissi
- 2.11. Tuzoqlar
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Tamoyillar imtihoni: to'rt tuzoq bitta ma'lumotda
- Misol 2 — Maqoladagi da'voni tekshirish: "+2% yaxshi"
- Misol 3 — O'rganish rejasi generatori: ko'nikmalar grafi va topologik tartib
- Misol 4 — Kurs statistikasi: bosqichlar, tamoyillar va ramziy yakun
- 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
- Kurs xulosasi
29.12-dars: Doimiy o'rganish va kurs yakuni
29-QISM — LOYIHALAR VA KARYERA · 12-dars
1. Kirish va motivatsiya
Oldingi darsda ma'lumot etikasini o'lchanadigan qildik: anonimlikni k bilan, maxfiylikni eps bilan, adolatlilikni guruh metrikalari bilan — va har bir himoya choraning narxini raqamda ko'rdik. Bu kursning oxirgi texnik mavzusi edi. Endi oxirgi dars: kurs tugagandan keyin nima qoladi va nima bilan davom etiladi?
Kursda 29 qism va 348 dars bo'ldi: NumPy massividan tortib transformerlar, LLM tizimlari, deploy va sababiy xulosagacha. Ko'p aniq narsalar — kutubxona funksiyalarining nomlari, parametrlar, hatto ba'zi "eng yaxshi" modellar — bir necha yilda o'zgaradi yoki eskiradi. Lekin kurs davomida qayta-qayta takrorlangan bir nechta tamoyil bor: bazaviy har doim, halol baholash dizayni, sizishga qarshi bo'lish, juftlashgan taqqoslash va 2*SE, "eng sodda munosib model", test bir marta, reproduksiya, natijani halol yozish. Ular vosita emas — fikrlash usuli, va ular eskirmaydi. Yangi model, yangi kutubxona yoki yangi maqola chiqqanda aynan shu tamoyillar sizga "bu haqiqatan yaxshimi?" degan savolga javob berishga yordam beradi.
Real vaziyat (tipik). Kursni tugatgan tahlilchi ijtimoiy tarmoqda yangi usul haqida post ko'radi: "Bu usul klassik bazaviydan 2% yaxshi!" Ertasiga u jamoaga usulni ishlab chiqarishga joriy qilishni taklif qiladi. Ikki haftalik ishdan keyin ma'lum bo'ladi: maqoladagi natija bitta urug' va bitta bo'lishda olingan, bazaviy esa sozlanmagan edi. Jamoaning o'z ma'lumotida, yaxshi sozlangan bazaviy bilan juftlashgan taqqoslashda "yangi usul" sezilarli yomonroq chiqdi. Bu darsning 2-misolida aynan shu vaziyatni simulyatsiya qilamiz — va da'vo qanday qilib "yo'qolishini" raqam bilan ko'ramiz.
Bu darsda kursni bitta xaritaga yig'amiz, uning asosiy tamoyillarini qayta sinovdan o'tkazamiz va kursdan keyingi o'rganishni tizimli qilish yo'llarini ko'ramiz.
Bu darsda:
- Kurs xaritasi: 29 qism, bosqichlar va ular orasidagi bog'lanishlar
- Kurs davomida takrorlangan asosiy tamoyillar — va ular qaysi darslarda ko'rsatilgani
- Doimiy o'rganish: nima eskiradi, nima qoladi
- Maqolani o'qish: uch o'tish va tanqidiy savollar
- Maqolani qayta ishlab chiqish (reproduce) va yangi kutubxonani baholash
- O'rganish rejasi: 3, 6 va 12 oy — yo'nalishlar bo'yicha
- Jamoa va ochiq manbaga hissa
- Charchash va "men yetarli emasman" hissi — qisqa va amaliy
- Kurs yakuni
ℹ Misollar real numpy/sklearn bilan (Python 3.14). 4-misol kurs papkasini o'qimaydi: fayllar vaqt o'tishi bilan o'zgaradi, shuning uchun qismlar ro'yxati kod ichida qo'lda berilgan — misol mustaqil va takrorlanuvchan qoladi.
2. Nazariya — chuqur tushuntirish
2.1. Kurs xaritasi
BOSQICH 1: ASOSLAR (1-7)
1 Kirish -> 2 NumPy -> 3 Pandas -> 4 Statistika, 5 Vizualizatsiya,
6 Tozalash, 7 Ma'lumot yig'ish
"ma'lumotni qo'lga olish, tozalash, ko'rish"
|
v
BOSQICH 2: TAHLIL VA MATEMATIKA (8-11)
8 EDA 9 Ehtimollik 10 Chiziqli algebra 11 Gipoteza testlari
"savol berish, noaniqlikni o'lchash, vektorlar tilida fikrlash"
|
v
BOSQICH 3: KLASSIK ML (12-19)
12 ML asoslari -> 13 Regressiya -> 14 Klassifikatsiya -> 15 Daraxtlar
16 Nazoratsiz 17 Feature engineering 18 Baholash va sozlash 19 scikit-learn
"model qurish va - eng muhimi - uni HALOL baholash"
|
v
BOSQICH 4: CHUQUR O'RGANISH VA AI (20-26)
20 Neyron tarmoqlar -> 21 PyTorch -> 22 Ko'rish, 23 NLP -> 24 Transformerlar
-> 25 LLM -> 26 Generativ AI
"tasvir, matn va generatsiya; katta modellarni tizimga aylantirish"
|
v
BOSQICH 5: ISHLAB CHIQARISH VA MAXSUS MAVZULAR (27-28)
27 MLOps va deploy 28 Vaqt qatorlari, tavsiya, RL, geo, katta ma'lumot,
sababiy xulosa
"modelni xizmatga aylantirish, kuzatish; yangi turdagi vazifalar"
|
v
BOSQICH 6: LOYIHALAR VA KARYERA (29)
loyiha hayot sikli -> portfolio -> rezyume -> intervyu -> etika -> davom
"bilimni natijaga va kasbga aylantirish"2.2. Qismlar orasidagi bog'lanishlar
Kurs chiziqli ko'rinadi, lekin g'oyalar qismlar orasida "sayohat qiladi". Bir necha misol:
G'OYA BIRINCHI MARTA QAYTA KELDI
bootstrap, SE 11.8 18.10, 22-26 taqqoslashlar, 27.13, 28.11
sizish (leakage) 12.9 17.8, 18.2, 23.13, 28.3, 28.9
kalibrlash 14.10 27.14, 29.11 (guruhlar bo'yicha)
embedding 17 (kategoriyalar) 21.10, 23.6, 25.7 (semantik qidiruv)
gradient tushish 13.6 20.7, 21.4, 28.8 (policy gradient)
PCA / SVD 10.8-10.9 16.8, 28.5 (matritsa faktorizatsiyasi)
korrelyatsiya != sabab 4.10 8.4, 28.11 (DAG, AIPW)
tasodifiy tajriba 11 (testlar) 27.13 (A/B), 28.7 (banditlar)
reproduksiya 19.7 21.7, 27.2, 29.6
etika 1.7, 7.11 25.13, 26.9, 29.11Kursni takrorlashning eng samarali yo'li — qismlar bo'yicha emas, g'oyalar bo'yicha. Masalan, "sizish" g'oyasini beshta darsda ketma-ket o'qish uning har xil ko'rinishini (tayyorlash, maqsad, guruh, vaqt, fazo) bir joyda ko'rsatadi.
2.3. Asosiy tamoyillar — kursning "skeleti"
1. BAZAVIY HAR DOIM
har model eng sodda bazaviy bilan solishtiriladi: ko'pchilik sinf,
o'rtacha, "kechagi qiymat", mashhurlik, sozlangan chiziqli model
-> 12.6, 18.1, 28.1 (vaqt qatori bazaviylari), 28.4 (mashhurlik)
2. HALOL BAHOLASH DIZAYNI
savolga mos bo'lish; validatsiya tanlov uchun, test yakuniy baho uchun
-> 12.3, 18.1, 18.2, 18.4 (nested CV), 28.1 (rolling-origin)
3. SIZISHGA QARSHI VAQT / GURUH BO'YICHA BO'LISH
bir mijoz, bir bemor, bir do'kon - faqat bitta tomonda; kelajak - testda
-> 12.3, 12.9, 17.8, 18.2, 28.3, 28.9 (fazoviy)
4. JUFTLASHGAN TAQQOSLASH VA 2*SE
bir xil bo'lishlarda farq, uning SE si; |farq| > 2*SE - sezilarli
-> 11.8, 18.3, 18.10, 27.13
5. "ENG SODDA MUNOSIB MODEL"
eng yaxshisidan sezilarli yomon bo'lmagan eng sodda yondashuv
-> 18.10, 27.14, 28.12
6. TEST BIR MARTA
testga qarab tanlash - uni validatsiyaga aylantirish (optimizm)
-> 12.3, 18.11
7. REPRODUKSIYA
urug'lar, muhit, manifest; bitta urug' - bitta namuna
-> 19.7, 27.2, 29.6
8. NATIJANI HALOL YOZISH
kutilmagan va salbiy natija ham; noaniqlik bilan; cheklovlar bilan
-> 5.13 (yolg'on grafiklar), 8.9, 29.4, 29.11
9. FARAZLARNI O'LCHAB TEKSHIRISH
model/usul farazlari - diagnostika bilan, ishonch bilan emas
-> 13.4, 28.11 (overlap, placebo)Bu tamoyillar bir-biriga bog'langan: juftlashgan taqqoslash (4) faqat halol dizaynda (2, 3) ma'noli; "eng sodda munosib model" (5) juftlashgan taqqoslashsiz qo'llab bo'lmaydi; test bir marta (6) bo'lmasa, barcha raqamlar optimistik. 1-misol ularning to'rttasini bitta kichik ma'lumotda qayta sinovdan o'tkazadi.
2.4. Doimiy o'rganish: nima eskiradi, nima qoladi
TEZ ESKIRADI (oylar - bir necha yil) SEKIN ESKIRADI (o'n yillar)
kutubxona API lari, versiyalar ehtimollik va statistika
"eng yaxshi" model nomlari chiziqli algebra, optimallash
bulut xizmatlari, narxlar baholash dizayni, sizish, bazaviy
prompt texnikalari sababiy fikrlash
ish bozori talablari muloqot, muammoni aniqlash
halollik va reproduksiya
-> vaqtingizning katta qismini o'ng ustunni chuqurlashtirishga,
kichik qismini chap ustunni kuzatishga sarflangO'rganish manbalari turlari: rasmiy hujjatlar va kutubxona o'zgarishlar jurnali (changelog), ilmiy maqolalar va ularning kodi, darsliklar, ochiq kodni o'qish, musobaqalar 29.5-bob, jamoadoshlar va kod ko'rib chiqish. Aniq sayt yoki kurs nomlarini bermaymiz — ular o'zgaradi; manba tanlashda esa bitta mezon: u o'z da'volarini tekshirishga imkon beradimi (kod, ma'lumot, raqamlar)?
2.5. Maqolani o'qish: uch o'tish va tanqidiy savollar
1-O'TISH (5-10 daqiqa): sarlavha, abstract, rasmlar/jadvallar, xulosa
savol: maqola nimani da'vo qiladi? bu menga kerakmi?
2-O'TISH (bir soat): kirish, usul (asosiy g'oya), tajriba bo'limi
savol: da'vo QANDAY tekshirilgan? jadvallardagi raqamlar nimani o'lchaydi?
3-O'TISH (kerak bo'lsa, bir necha soat): formulalar, ilovalar, kod
savol: men buni qayta ishlab chiqa olamanmi?
TANQIDIY SAVOLLAR (tajriba bo'limi uchun):
[ ] bazaviy bormi? u SOZLANGANmi yoki "standart parametrlar"da?
[ ] nechta urug' / bo'lish? variatsiya (std, CI, SE) ko'rsatilganmi?
[ ] farq variatsiyadan kattami (2*SE)?
[ ] test to'plami qanday tanlangan? giperparametrlar testda tanlanmaganmi?
[ ] sizish ehtimoli: guruh, vaqt, dublikatlar?
[ ] ablation: yutuq qaysi qismdan keladi?
[ ] hisob xarajati tengmi? (yangi usulga 10 barobar ko'p vaqt berilganmi?)
[ ] ma'lumotlar to'plami qanday? mening vazifamga o'xshashmi?
[ ] kod va ma'lumot ochiqmi?
[ ] mualliflar cheklovlarni yozganmi?Eng ko'p uchraydigan zaiflik — sozlanmagan bazaviy. Yangi usulga ko'p sozlash vaqti berilib, bazaviy "standart parametrlar" bilan qoldirilsa, farqning katta qismi usuldan emas, sozlashdan keladi. 2-misolda aynan shuni o'lchaymiz.
Bu savollar mualliflarga hurmatsizlik emas: ularning o'zi ham shu savollarni berishni xohlaydi. Tanqidiy o'qish — da'voni rad etish emas, balki unga qanchalik ishonish mumkinligini baholash.
2.6. Maqolani qayta ishlab chiqish (reproduce)
1. DA'VONI ANIQ YOZING: "X usuli Y ma'lumotda Z metrikasi bo'yicha
bazaviydan +2% yaxshi"
2. KICHIK MIQYOSDA BOSHLANG: ma'lumotning bir qismi, kichik model
3. AVVAL BAZAVIYNI QAYTA OLING: maqoladagi bazaviy raqamiga yeta olasizmi?
yeta olmasangiz - baholash protokoli farq qiladi, yangi usulga o'tmang
4. BIR XIL PROTOKOL: bir xil bo'lishlar, metrika, oldindan ishlov
5. BIR NECHA URUG': kamida 5-10, juftlashgan farq va SE
6. BAZAVIYNI HAM SOZLANG: bir xil sozlash byudjeti bilan
7. HISOBOT: nima qayta olindi, nima olinmadi, farq sabablari haqida
farazlar; muhit va urug'lar (27.2)Qayta ishlab chiqish — o'rganishning eng samarali usullaridan biri: maqolani o'qib "tushundim" deyish bilan uni ishlatib, raqamni qayta olish orasida katta farq bor. Natija tasdiqlanmasa ham — bu qimmatli natija, uni halol yozing.
Qayta ishlab chiqish hisobotining qisqa namunasi (raqamlar 2-misoldan):
# Qayta ishlab chiqish: "Yangi usul bazaviydan +2% yaxshi"
## Da'vo
Maqola: yangi usul (gradient boosting) logistik regressiyadan aniqlik
bo'yicha +2.7% yaxshi. Bitta urug', bitta bo'lish (70/30).
## Protokol
- Ma'lumot: maqoladagi generator, 1000 qator, 8 belgi
- Bo'lish: 70/30, stratifikatsiya; 10 yangi urug' (100-109)
- Variantlar: yangi usul, maqoladagi bazaviy, sozlangan bazaviy
(masshtablash + spline + C ni 3-fold CV bilan)
- Taqqoslash: juftlashgan farq, SE, qoida |farq| > 2*SE
## Natija
| taqqoslash | farq | SE | musbat urug'lar |
|----------------------------|---------|--------|-----------------|
| yangi - maqoladagi bazaviy | +0.0260 | 0.0084 | 9/10 |
| yangi - sozlangan bazaviy | -0.0223 | 0.0085 | 1/10 |
## Xulosa
Da'vo maqoladagi bazaviyga nisbatan tasdiqlandi, lekin sozlangan bazaviy
yangi usuldan sezilarli yaxshi. Farq bazaviyning masshtablashsiz va qattiq
regularizatsiya qilinganidan kelgan deb taxmin qilamiz (tekshirish: ablation).
## Cheklovlar
Sintetik ma'lumot; boshqa ma'lumotda natija farq qilishi mumkin.
Muhit va urug'lar: manifest.json 27.2-bob.2.7. Yangi kutubxona yoki modelni baholash
SAVOL QANDAY TEKSHIRILADI
muammom bormi, u hal qiladimi? hozirgi og'riq nuqtasi yozma
mening ma'lumotimda yaxshiroqmi? bazaviy bilan juftlashgan taqqoslash,
bir necha urug', 2*SE
xarajati? o'qitish/bashorat vaqti, xotira, narx
bog'liqliklar va litsenziya? ruxsat etilganmi, og'irmi, xavfsizmi
barqarorlik va qo'llab-quvvatlash? versiyalar, o'zgarishlar jurnali,
hujjatlar sifati
chiqib ketish narxi? keyin almashtirish qanchalik qiyin
QOIDA: "eng sodda munosib model" - kutubxonalarga ham tegishli
yangi vosita faqat sezilarli foyda bersa va xarajati oqlansa qabul qilinadi
cheklangan sinov: vaqt chegarasi (masalan, 1-2 hafta) va oldindan yozilgan
qabul mezoni2.8. O'rganish rejasi: 3, 6, 12 oy
Reja — taxmin, va'da emas. Quyidagi jadval yo'nalishlar bo'yicha umumiy yo'l-yo'riq; soatlar va muddatlar faraziy, har odamda farq qiladi.
| Yo'nalish | 1-3 oy | 4-6 oy | 7-12 oy |
|---|---|---|---|
| Ma'lumot tahlilchisi | SQL va pandas ni kundalik vazifalarda; 8, 11-qismlarni takrorlash | A/B test va sababiy tahlil (27.13, 28.11) real savolda | Dashboard va hisobot loyihasi, biznes bilan muloqot tajribasi |
| ML muhandisi | 12, 17, 18-qismlarni g'oya bo'yicha takrorlash; bitta to'liq loyiha (29.2-29.4) | Deploy va monitoring (27) ni o'z loyihangizda | Bitta maqolani qayta ishlab chiqish; ochiq manbaga birinchi hissa |
| NLP / LLM muhandisi | 23-25-qismlar; RAG va baholash (25.9-25.10) | O'z ma'lumotingizda LLM tizimini baholash va xavfsizligi (25.13) | Fine-tuning tajribasi, xarajat va sifat muvozanati |
| MLOps | 27-qism to'liq; reproduksiya (19.7, 27.2) | CI, konteyner, monitoring o'z loyihangizda | Drift va qayta o'qitish siklini haqiqiy ma'lumotda |
| Tadqiqot yo'nalishi | 9-11, 18-qismlar chuqur; maqola o'qish odati (haftada bitta) | Ikki maqolani qayta ishlab chiqish | O'z savolingiz bo'yicha kichik tadqiqot va yozma hisobot |
3-misol shu g'oyani avtomatlashtiradi: qismlar orasidagi tayanchlar grafidan tanlangan rol uchun takrorlash tartibini chiqaradi.
T-shaklidagi mutaxassis. Keng asos (T ning gorizontal chizig'i — butun kurs) va bitta-ikkita chuqur yo'nalish (vertikal chiziq). Hammasini bir vaqtda chuqur o'rganishga urinish — charchashning eng tez yo'li.
O'rganish jurnali — rejaning "monitoringi" (27.11 dagi monitoring g'oyasi o'zingizga qo'llangan). Haftasiga 5 daqiqa yetarli:
## Hafta 14
- O'rgandim: GroupKFold va vaqt bo'yicha bo'lish farqi (18.2, 28.3 takror)
- Qildim: loyihada bo'lishni tuzatdim, AUC 0.84 -> 0.71 (halol raqam)
- Qiyin bo'ldi: kalibrlash egri chizig'ini guruhlar bo'yicha talqin qilish
- Keyingi hafta: 14.10 ni qayta o'qish, kalibrlashni loyihaga qo'shish
- Reja holati: 3 oylik bosqichdan 2 hafta orqada - normal, qayta tuzmaymanUch oydan keyin jurnal ikki ishni qiladi: rejani raqam bilan qayta tuzishga yordam beradi (qaysi qismlarga taxmindan ko'p vaqt ketdi) va "hech narsa o'rganmayapman" degan hissga qarshi dalil bo'ladi.
2.9. Jamoa va ochiq manbaga hissa
BIRINCHI HISSALAR (kichikdan boshlang):
hujjatdagi xato yoki noaniq joyni tuzatish
xato haqidagi xabarni (issue) minimal takrorlanadigan misol bilan yozish
mavjud xato uchun test qo'shish
"yangi boshlovchilar uchun" deb belgilangan kichik vazifa
QOIDALAR:
loyihaning hissa qo'shish qo'llanmasini o'qing
kod uslubi va testlarga rioya qiling; kichik, bitta maqsadli o'zgarish
sharhlarga xotirjam javob bering - kod ko'rib chiqish o'rganishdir
JAMOA ICHIDA:
kod ko'rib chiqish (review) - berish ham, olish ham
ichki seminar: o'qigan maqolangiz yoki xatodan saboq
"postmortem" - aybsiz tahlil
O'ZBEK TILIDA KONTENT:
atamalar lug'ati, tushuntirish maqolasi, ochiq ma'lumot to'plami
-> o'zingiz tushunganingizni tekshirishning ham eng yaxshi usuliYaxshi xato xabari (issue) — eng qadrli birinchi hissalardan biri. Namuna (kutubxona va versiyalar shartli):
**Sarlavha:** `fit` bir xil `random_state` bilan ikki xil natija beradi
**Kutilgan:** bir xil ma'lumot va `random_state=0` bilan ikki marta
o'qitilgan model bir xil bashorat beradi.
**Haqiqatda:** bashoratlar 12 ta qatorda farq qiladi.
**Takrorlash uchun minimal misol:**
import numpy as np
from kutubxona import Model
X = np.random.default_rng(0).normal(size=(200, 5))
y = (X[:, 0] > 0).astype(int)
a = Model(random_state=0).fit(X, y).predict(X)
b = Model(random_state=0).fit(X, y).predict(X)
print((a != b).sum()) # 12
**Muhit:** Python 3.x, kutubxona x.y.z, numpy a.b.c, OS
**Qo'shimcha:** `n_jobs=1` bilan muammo yo'qoladi - ehtimol parallel
ishlov tartibi bilan bog'liq.Yaxshi xabarning uch belgisi: minimal (faqat muammoni ko'rsatadigan kod), takrorlanadigan (urug'lar, versiyalar) va kutilgan/haqiqiy natija aniq ajratilgan. Bu 19.7 va 27.2 dagi reproduksiya ko'nikmasining boshqalarga foyda beradigan shakli.
2.10. Charchash va "men yetarli emasman" hissi
Bu soha tez o'zgaradi va har kuni "yangi narsa" chiqadi — hammani kuzatib bo'lmaydi va kerak ham emas. Bir nechta amaliy kuzatish:
- Imposter sindromi ("men haqiqiy mutaxassis emasman, tez orada bilib qolishadi") — bu sohada juda keng tarqalgan his, ayniqsa tez o'zgaradigan yo'nalishlarda. U ko'pincha haqiqiy bilim darajasini aks ettirmaydi. Amaliy choralar: o'rganish jurnali (har hafta nima o'rgandim, nima qildim — 3 oydan keyin o'qib chiqing), o'zingizni boshqalarning eng yaxshi natijasi bilan emas, o'zingizning 3 oy oldingi holatingiz bilan solishtirish, bilmaganingizni ochiq aytish ("buni tekshirib ko'raman") — bu zaiflik emas, professional odat.
- Charchash (burnout) belgilari: doimiy holsizlik, ishga qiziqishning yo'qolishi, uyqu buzilishi, kichik muammodan katta norozilik. Amaliy choralar: aniq ish vaqti chegaralari; bir vaqtda bitta o'rganish maqsadi (T-shakl); jismoniy harakat va uyqu; "hammasini kuzatish" o'rniga haftasiga bir-ikki manba. Belgilar uzoq davom etsa yoki kuchaysa — mutaxassis (shifokor, psixolog) bilan gaplashing; bu ham professional odat.
- Xato qilish — ish jarayonining bir qismi. Kurs davomida ko'p misollarda "kutilmagan natija" bo'ldi va biz uni halol yozdik. Sizning ishingizda ham shunday bo'ladi.
2.11. Tuzoqlar
Asosiy tuzoqlar: kutubxona nomlarini o'rganib, tamoyillarni unutish; har yangi modelga "o'tish", o'z ma'lumotingizda bazaviy bilan taqqoslamasdan; maqolaning abstractini o'qib, tajriba bo'limini o'tkazib yuborish; bitta urug' natijasiga ishonish; sozlanmagan bazaviy bilan taqqoslangan da'voni qabul qilish; "qayta ishlab chiqa olmadim" natijasini yashirish; o'rganish rejasini hech qachon qayta ko'rib chiqmaslik; hamma yo'nalishni bir vaqtda chuqur o'rganishga urinish; o'zini boshqalarning eng yaxshi natijalari bilan solishtirish; charchash belgilarini e'tiborsiz qoldirish.
3. Tez ma'lumotnoma
import numpy as np
def juftlashgan(a, b):
"""Bir xil urug'/bo'lishlardagi ikki usul natijasi: farq, SE, sezilarlimi."""
f = np.asarray(a) - np.asarray(b)
se = f.std(ddof=1) / np.sqrt(len(f))
return float(f.mean()), float(se), bool(abs(f.mean()) > 2 * se)
def qayta_ishlab_chiqish(usul, bazaviy, sozlangan_bazaviy, baho, urug_lar):
"""Da'voni tekshirish: har urug'da uchala variant bir xil bo'lishda."""
y = [baho(usul, s) for s in urug_lar]
b = [baho(bazaviy, s) for s in urug_lar]
k = [baho(sozlangan_bazaviy, s) for s in urug_lar]
return {"zaif": juftlashgan(y, b), "sozlangan": juftlashgan(y, k)}
def eng_sodda_munosib(natijalar, soddalik_tartibi):
"""natijalar: {nom: [urug' bo'yicha ball]}; eng yaxshidan sezilarli
yomon bo'lmagan eng sodda nom."""
eng = max(natijalar, key=lambda n: np.mean(natijalar[n]))
for nom in soddalik_tartibi:
farq, se, _ = juftlashgan(natijalar[eng], natijalar[nom])
if farq <= 2 * se:
return nom
return engMaqola o'qish kartasi
da'vo: ________________________________
bazaviy sozlangan: ha / yo'q / noma'lum
urug'/bo'lishlar: __ ta, variatsiya: ha / yo'q
farq > 2*SE: ha / yo'q / hisoblab bo'lmaydi
test qanday: ________ sizish xavfi: ________
ablation: ha / yo'q kod: ha / yo'q
mening vazifamga: mos / qisman / mos emas
qaror: e'tiborsiz / kuzatish / qayta ishlab chiqish / sinovTamoyillar kartasi — har loyiha boshida
| Savol | Qaysi tamoyil | Qayerda o'tilgan |
|---|---|---|
| Eng sodda bazaviy nima va u qancha beradi? | Bazaviy har doim | 12.6, 18.1, 28.1 |
| Test kelajakni / yangi guruhni ifodalaydimi? | Halol dizayn, sizishga qarshi bo'lish | 12.3, 17.8, 18.2 |
| Ikki variant farqi tasodif emasmi? | Juftlashgan taqqoslash, 2*SE | 11.8, 18.10 |
| Murakkabroq model narxiga arziydimi? | Eng sodda munosib model | 18.10, 27.14 |
| Testga necha marta qaradim? | Test bir marta | 12.3, 18.11 |
| Boshqa odam natijamni qayta ola oladimi? | Reproduksiya | 19.7, 27.2, 29.6 |
| Hisobotda cheklovlar va salbiy natijalar bormi? | Halol yozish | 8.9, 29.4 |
| Farazlar tekshirilganmi? | O'lchab tekshirish | 13.4, 28.11 |
Kurs xulosasi — bir qarashda
asoslar -> tahlil -> klassik ML -> DL/AI -> ishlab chiqarish -> karyera
bazaviy | halol dizayn | vaqt/guruh bo'yicha bo'lish | juftlashgan + 2*SE
eng sodda munosib | test bir marta | reproduksiya | halol yozish
maqola: 3 o'tish, tanqidiy savollar; da'vo: qayta ishlab chiq, bazaviyni sozla
reja: T-shakl, har 3 oyda qayta ko'rib chiq; hissa: kichikdan boshla4. Batafsil misollar
Misollar real numpy/sklearn bilan (Python 3.14). Har misol mustaqil ishlaydi; ma'lumot sintetik va urug' bilan yaratiladi. 4-misol kurs fayllarini o'qimaydi — qismlar ro'yxati kod ichida.
Misol 1 — Tamoyillar imtihoni: to'rt tuzoq bitta ma'lumotda
"""Tamoyillar imtihoni: kursdagi to'rt tuzoq bitta kichik ma'lumotda."""
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import GroupKFold, GroupShuffleSplit, KFold
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
def yarat(seed, mijozlar=300, oylar=6, nomzodlar=30):
"""Mijozning 6 oylik yozuvi; 'ketdi' yorlig'i mijoz darajasida (hamma oylarda bir xil)."""
rng = np.random.default_rng(seed)
n = mijozlar * oylar
guruh = np.repeat(np.arange(mijozlar), oylar)
z = rng.normal(0, 1, (mijozlar, 3)) # mijozning asl xulqi
x = z[guruh] + rng.normal(0, 0.8, (n, 3)) # oylik o'lchovlar
tarif = rng.integers(0, 5, mijozlar)[guruh].astype(float)
kun = rng.uniform(0, 2000, mijozlar)[guruh] # ro'yxatdan o'tgan kun
logit = -1.8 + 1.2 * z[:, 0] - 0.8 * z[:, 1] + 0.4 * z[:, 2]
ketdi = rng.random(mijozlar) < 1 / (1 + np.exp(-logit))
X = np.column_stack([x, tarif, kun])
yangi_belgilar = rng.normal(0, 1, (n, nomzodlar)) # "belgi fabrikasi" - foydasiz
return X, ketdi[guruh].astype(int), guruh, yangi_belgilar
def rf(seed=0):
return RandomForestClassifier(n_estimators=60, random_state=seed, n_jobs=1)
def lr():
return make_pipeline(StandardScaler(), LogisticRegression(max_iter=2000))
def auc_of(model, Xa, ya, Xb, yb):
return roc_auc_score(yb, model.fit(Xa, ya).predict_proba(Xb)[:, 1])
def main() -> None:
X, y, guruh, Z = yarat(0)
print(f"Ma'lumot: {len(y)} qator, {len(np.unique(guruh))} mijoz, "
f"ketganlar ulushi {y.mean():.3f}")
print("\n=== Tuzoq 1: bazaviysiz 'yaxshi' model (12.6, 18.1) ===")
sp = GroupShuffleSplit(n_splits=1, test_size=0.3, random_state=0)
a, b = next(sp.split(X, y, guruh))
m = rf().fit(X[a], y[a])
aniq = np.mean(m.predict(X[b]) == y[b])
baz = max(y[b].mean(), 1 - y[b].mean())
print(f" RandomForest aniqligi {aniq:.3f} - 'ajoyib'?")
print(f" bazaviy 'hech kim ketmaydi' aniqligi {baz:.3f}")
print(f" model bazaviydan {aniq - baz:+.3f} farq qiladi; AUC "
f"{roc_auc_score(y[b], m.predict_proba(X[b])[:, 1]):.3f}")
print("\n=== Tuzoq 2: tasodifiy bo'lish sizishi (12.3, 17.8, 18.2) ===")
for nom, bol in [("tasodifiy KFold",
KFold(5, shuffle=True, random_state=0).split(X)),
("mijoz bo'yicha GroupKFold", GroupKFold(5).split(X, y, guruh))]:
s = [auc_of(rf(), X[i], y[i], X[j], y[j]) for i, j in bol]
print(f" RF, {nom:<26} AUC {np.mean(s):.3f}")
print(" -> tasodifiy bo'lishda mijozning boshqa oylari o'quvda: model uni "
"'kun' va 'tarif' bo'yicha taniydi")
print("\n=== Tuzoq 3: bitta urug' natijasi (18.3, 18.10) ===")
f = []
for s in range(20):
sp = GroupShuffleSplit(n_splits=1, test_size=0.3, random_state=s)
a, b = next(sp.split(X, y, guruh))
f.append(auc_of(rf(s), X[a], y[a], X[b], y[b])
- auc_of(lr(), X[a], y[a], X[b], y[b]))
f = np.array(f)
se = f.std(ddof=1) / np.sqrt(len(f))
print(f" urug' 0: RF - LogReg = {f[0]:+.4f}")
print(f" 20 urug'da farq oralig'i: [{f.min():+.4f}, {f.max():+.4f}], "
f"RF yaxshiroq: {int((f > 0).sum())} / {len(f)}")
print(f" 20 urug' o'rtacha {f.mean():+.4f} (SE {se:.4f}), sezilarli: "
f"{abs(f.mean()) > 2 * se}")
if f.mean() > 2 * se:
tanlov = "RandomForest (sezilarli yaxshi)"
elif f.mean() < -2 * se:
tanlov = "LogReg (sezilarli yaxshi va soddaroq)"
else:
tanlov = "LogReg (soddaroq, farq sezilarsiz)"
print(f" qaror: {tanlov}")
print("\n=== Tuzoq 4: testga qarab belgi tanlash (12.3, 18.11) ===")
X2, y2, _, Z2 = yarat(1, mijozlar=1000) # yangi mijozlar - haqiqiy kelajak
asos = [0, 1, 2, 3]
natija = []
for s in range(5):
sp = GroupShuffleSplit(n_splits=1, test_size=0.3, random_state=100 + s)
a, b = next(sp.split(X, y, guruh))
A, B, C = (np.column_stack([M, W]) for M, W in
[(X[a], Z[a]), (X[b], Z[b]), (X2, Z2)])
tanlangan = list(asos)
joriy = auc_of(lr(), A[:, asos], y[a], B[:, asos], y[b])
boshlang = joriy
for _ in range(6): # ochko'z qo'shish, TEST bo'yicha
nomzod = [(auc_of(lr(), A[:, tanlangan + [k]], y[a],
B[:, tanlangan + [k]], y[b]), k)
for k in range(5, A.shape[1]) if k not in tanlangan]
eng, k = max(nomzod)
if eng <= joriy:
break
tanlangan.append(k)
joriy = eng
yangi_asos = auc_of(lr(), A[:, asos], y[a], C[:, asos], y2)
yangi_tan = auc_of(lr(), A[:, tanlangan], y[a], C[:, tanlangan], y2)
natija.append((boshlang, joriy, yangi_asos, yangi_tan, len(tanlangan) - 4))
if s == 0:
print(f" asosiy 4 belgi: test AUC {boshlang:.3f}")
print(f" +{len(tanlangan) - 4} 'yangi belgi' (test bo'yicha tanlangan): "
f"test AUC {joriy:.3f}")
print(f" 1000 yangi mijozda: asosiy {yangi_asos:.3f}, "
f"tanlangan {yangi_tan:.3f}")
r = np.array(natija)
opt = r[:, 1] - r[:, 3]
real = r[:, 3] - r[:, 2]
print(f" 5 takror: test bo'yicha 'yutuq' {np.mean(r[:, 1] - r[:, 0]):+.3f}, "
f"yangi mijozlarda haqiqiy yutuq {real.mean():+.3f} "
f"(SE {real.std(ddof=1) / np.sqrt(5):.3f})")
print(f" tanlangan modelning optimizmi (test - yangi): {opt.mean():+.3f}")
print(" ⭐ Tanlov validatsiyada, test - bir marta, oxirida")
if __name__ == "__main__":
main()Natijaning muhim qismi:
Ma'lumot: 1800 qator, 300 mijoz, ketganlar ulushi 0.170
=== Tuzoq 1: bazaviysiz 'yaxshi' model (12.6, 18.1) ===
RandomForest aniqligi 0.800 - 'ajoyib'?
bazaviy 'hech kim ketmaydi' aniqligi 0.844
model bazaviydan -0.044 farq qiladi; AUC 0.575
=== Tuzoq 2: tasodifiy bo'lish sizishi (12.3, 17.8, 18.2) ===
RF, tasodifiy KFold AUC 0.841
RF, mijoz bo'yicha GroupKFold AUC 0.643
-> tasodifiy bo'lishda mijozning boshqa oylari o'quvda: model uni 'kun' va 'tarif' bo'yicha taniydi
=== Tuzoq 3: bitta urug' natijasi (18.3, 18.10) ===
urug' 0: RF - LogReg = -0.1178
20 urug'da farq oralig'i: [-0.1459, +0.0022], RF yaxshiroq: 1 / 20
20 urug' o'rtacha -0.0825 (SE 0.0088), sezilarli: True
qaror: LogReg (sezilarli yaxshi va soddaroq)
=== Tuzoq 4: testga qarab belgi tanlash (12.3, 18.11) ===
asosiy 4 belgi: test AUC 0.789
+6 'yangi belgi' (test bo'yicha tanlangan): test AUC 0.804
1000 yangi mijozda: asosiy 0.732, tanlangan 0.721
5 takror: test bo'yicha 'yutuq' +0.018, yangi mijozlarda haqiqiy yutuq -0.008 (SE 0.001)
tanlangan modelning optimizmi (test - yangi): +0.041
⭐ Tanlov validatsiyada, test - bir marta, oxiridaNatija tahlili.
Ma'lumot kurs davomida ko'p uchragan shaklda: 300 mijozning har biri uchun 6 oylik yozuv, "ketdi" yorlig'i esa mijoz darajasida (bir mijozning hamma oylarida bir xil). Ketganlar ulushi 0.170.
Tuzoq 1 — bazaviysiz "yaxshi" model (12.6, 18.1). RandomForest aniqligi 0.800 — alohida qaralsa, yomon ko'rinmaydi. Lekin "hech kim ketmaydi" degan bazaviy 0.844 beradi: model bazaviydan 0.044 ga yomon. AUC 0.575 — tasodifdan biroz yaxshi, xolos. Nomutanosib sinflarda aniqlik o'z-o'zidan hech narsa demaydi 14.9-bob; bazaviy bo'lmasa, bu raqam hisobotga "80% aniqlik" deb kirib ketardi.
Tuzoq 2 — tasodifiy bo'lish sizishi (12.3, 17.8, 18.2). Bir xil model, bir xil ma'lumot: tasodifiy KFold AUC 0.841, mijoz bo'yicha GroupKFold 0.643. Farq 0.2 — bu "model sifati" emas, balki sizish: tasodifiy bo'lishda mijozning boshqa oylari o'quvda, model uni ro'yxatdan o'tgan kun va tarif bo'yicha "taniydi" va javobini eslab qoladi. Haqiqiy vazifa — yangi mijozlarni bashorat qilish, va unga faqat guruh bo'yicha bo'lish javob beradi.
Tuzoq 3 — bitta urug' natijasi (18.3, 18.10). RF va logistik regressiyani 20 xil mijozlar bo'linishida juftlashgan taqqosladik. Urug' 0 da farq -0.1178, lekin 20 urug'da farq -0.1459 dan +0.0022 gacha tebranadi — agar tasodifan o'sha bitta "omadli" urug' tanlanganida, "RF biroz yaxshi" degan xulosa chiqardi. 20 urug' o'rtachasi -0.0825 (SE 0.0088) — sezilarli: bu ma'lumotda logistik regressiya ham yaxshiroq, ham soddaroq. Qaror qoidasi natijadan hisoblandi.
Tuzoq 4 — testga qarab belgi tanlash (12.3, 18.11). Analitik "belgi fabrikasi"dan 30 ta yangi belgi oldi (aslida hammasi foydasiz shovqin) va ularni test AUC si oshsa qo'shdi. Birinchi takrorda 6 ta "foydali" belgi topildi, test AUC 0.789 dan 0.804 ga ko'tarildi. 1000 ta yangi mijozda esa tanlangan model asosiydan yomon: 0.721 va 0.732. 5 takror bo'yicha: test "yutuq" +0.018 ko'rsatdi, haqiqiy yutuq -0.008 (SE 0.001). Test bo'yicha tanlov testni validatsiyaga aylantirdi va u endi kelajak haqida optimistik gapiradi: tanlangan modelning test bahosi yangi mijozlardagidan o'rtacha 0.041 ga yuqori.
To'rt tuzoqning umumiy xususiyati: har birida raqam haqiqiy va kod xatosiz edi — muammo baholash dizaynida. Aynan shuning uchun bu tamoyillar kursning har qismida takrorlandi.
Misol 2 — Maqoladagi da'voni tekshirish: "+2% yaxshi"
"""Maqoladagi da'voni tekshirish: 'yangi usul bazaviydan +2% yaxshi'."""
import numpy as np
from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import SplineTransformer, StandardScaler
def yarat(seed, n=1000):
"""Signal asosan chiziqli, bitta belgida yumshoq egrilik; belgilar turli masshtabda."""
rng = np.random.default_rng(seed)
X = rng.normal(0, 1, (n, 8))
logit = (1.2 * X[:, 0] - 0.9 * X[:, 1] + 0.6 * X[:, 2] + 0.8 * np.tanh(2 * X[:, 3])
+ 0.3 * X[:, 4])
y = (rng.random(n) < 1 / (1 + np.exp(-logit))).astype(int)
masshtab = np.array([1, 1000, 0.01, 1, 50, 1, 1, 1])
return X * masshtab, y
def yangi_usul(seed):
return HistGradientBoostingClassifier(max_iter=150, learning_rate=0.05,
random_state=seed)
def zaif_bazaviy():
"""Maqoladagi bazaviy: masshtablashsiz, qattiq regularizatsiya, sozlanmagan."""
return LogisticRegression(C=0.004, max_iter=5000)
def sozlangan_bazaviy():
"""Halol bazaviy: masshtablash + spline + C ni CV bilan tanlash."""
q = make_pipeline(StandardScaler(), SplineTransformer(n_knots=4, degree=3),
LogisticRegression(max_iter=2000))
return GridSearchCV(q, {"logisticregression__C": [0.03, 0.3, 3.0]}, cv=3)
def baho(model, seed):
X, y = yarat(seed)
a, b, ya, yb = train_test_split(X, y, test_size=0.3, random_state=seed,
stratify=y)
return float(np.mean(model.fit(a, ya).predict(b) == yb))
def juft(nom, fy, fb):
"""Juftlashgan farq: (o'rtacha, SE); ikkala tomonga 2*SE qoidasi."""
f = np.array(fy) - np.array(fb)
se = f.std(ddof=1) / np.sqrt(len(f))
print(f" {nom:<27} farq {f.mean():+.4f} (SE {se:.4f}), "
f"musbat urug'lar {int((f > 0).sum())}/{len(f)}")
return f.mean(), se
def main() -> None:
print("=== 1. Maqoladagi da'vo: bitta urug' (0), bitta bo'lish ===")
y0, b0 = baho(yangi_usul(0), 0), baho(zaif_bazaviy(), 0)
print(f" yangi usul {y0:.4f} vs bazaviy {b0:.4f} -> "
f"'+{100 * (y0 - b0):.1f}% yaxshi'")
sinov = [(baho(yangi_usul(s), s) - baho(zaif_bazaviy(), s), s)
for s in range(1, 5)] + [(y0 - b0, 0)]
f, s = max(sinov)
print(f" 5 urug'dagi farqlar: "
+ ", ".join(f"{d:+.4f}" for d, _ in sorted(sinov, key=lambda t: t[1])))
print(f" agar muallif eng chiroylisini tanlasa (urug' {s}): '+{100 * f:.1f}%'")
print("\n=== 2. Qayta ishlab chiqish: 10 YANGI urug' (100-109), juftlashgan ===")
urug = range(100, 110)
yangi = [baho(yangi_usul(s), s) for s in urug]
zaif = [baho(zaif_bazaviy(), s) for s in urug]
kuchli = [baho(sozlangan_bazaviy(), s) for s in urug]
for nom, v in [("yangi usul", yangi), ("zaif bazaviy (maqoladagi)", zaif),
("sozlangan bazaviy", kuchli)]:
print(f" {nom:<26} o'rtacha aniqlik {np.mean(v):.4f} "
f"(urug'lar oralig'i {min(v):.4f}-{max(v):.4f})")
zf, zse = juft("yangi - zaif bazaviy", yangi, zaif)
kf, kse = juft("yangi - sozlangan bazaviy", yangi, kuchli)
print("\n=== 3. Xulosa (natijadan) ===")
print(f" zaif bazaviyga nisbatan da'vo turadimi: {zf > 2 * zse}")
print(f" sozlangan bazaviyga nisbatan turadimi: {kf > 2 * kse}")
if kf > 2 * kse:
print(" da'vo tasdiqlandi: sozlangan bazaviydan ham sezilarli yaxshi")
elif kf < -2 * kse:
print(" sozlangan bazaviy yangi usuldan SEZILARLI yaxshi -> 'yutuq'")
print(" usuldan emas, bazaviyning zaifligidan kelgan")
else:
print(" sozlangan bazaviy bilan farq sezilarsiz -> soddasi tanlanadi")
print(" ⭐ Maqolani o'qishda: bazaviy sozlanganmi, nechta urug', SE bormi?")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Maqoladagi da'vo: bitta urug' (0), bitta bo'lish ===
yangi usul 0.7167 vs bazaviy 0.6900 -> '+2.7% yaxshi'
5 urug'dagi farqlar: +0.0267, +0.0100, +0.0533, +0.0000, +0.0333
agar muallif eng chiroylisini tanlasa (urug' 2): '+5.3%'
=== 2. Qayta ishlab chiqish: 10 YANGI urug' (100-109), juftlashgan ===
yangi usul o'rtacha aniqlik 0.7363 (urug'lar oralig'i 0.6933-0.8000)
zaif bazaviy (maqoladagi) o'rtacha aniqlik 0.7103 (urug'lar oralig'i 0.6633-0.7800)
sozlangan bazaviy o'rtacha aniqlik 0.7587 (urug'lar oralig'i 0.7000-0.8100)
yangi - zaif bazaviy farq +0.0260 (SE 0.0084), musbat urug'lar 9/10
yangi - sozlangan bazaviy farq -0.0223 (SE 0.0085), musbat urug'lar 1/10
=== 3. Xulosa (natijadan) ===
zaif bazaviyga nisbatan da'vo turadimi: True
sozlangan bazaviyga nisbatan turadimi: False
sozlangan bazaviy yangi usuldan SEZILARLI yaxshi -> 'yutuq'
usuldan emas, bazaviyning zaifligidan kelgan
⭐ Maqolani o'qishda: bazaviy sozlanganmi, nechta urug', SE bormi?Natija tahlili.
1-bo'lim — da'vo. Maqolada yangi usul (gradient boosting) va bazaviy (logistik regressiya) bitta urug' va bitta bo'lishda solishtirilgan: 0.7167 va 0.6900, "+2.7% yaxshi". Beshta urug'dagi farqlar 0.0000 dan +0.0533 gacha — bitta urug' tasodifning qaysi nuqtasiga tushishiga qarab da'vo "0%" dan "+5.3%" gacha bo'lishi mumkin edi. Agar muallif (ongli yoki ongsiz) eng chiroyli natijani tanlasa, jadvalda +5.3% turardi.
2-bo'lim — qayta ishlab chiqish, 10 yangi urug'da, juftlashgan. Uchta variant: yangi usul (o'rtacha 0.7363), maqoladagi zaif bazaviy (0.7103) va sozlangan bazaviy — masshtablash, spline belgilar va C ni CV bilan tanlash (0.7587). Muhim: bu urug'larda urug'lar orasidagi tebranish (0.69-0.80 atrofida) usullar orasidagi farqdan katta — shuning uchun juftlashgan taqqoslash shart 18.10-bob.
- Yangi - zaif bazaviy:
+0.0260(SE0.0084), 10 urug'dan 9 tasida musbat — da'vo o'z shartlarida turadi. Ya'ni muallif yolg'on gapirmagan: sozlanmagan bazaviyga nisbatan yangi usul haqiqatan yaxshi. - Yangi - sozlangan bazaviy:
-0.0223(SE0.0085), 10 urug'dan faqat 1 tasida musbat — sozlangan bazaviy yangi usuldan sezilarli yaxshi.
3-bo'lim — xulosa natijadan hisoblandi: "yutuq" usuldan emas, bazaviyning zaifligidan kelgan. Bu ma'lumotda signal asosan chiziqli va silliq, belgilar esa turli masshtabda — masshtablashsiz va qattiq regularizatsiya qilingan logistik regressiya kichik masshtabli belgini "ko'rmaydi". Yangi usul bu muammoga chidamli bo'lgani uchun zaif bazaviydan yutdi; bazaviy to'g'ri sozlanganda esa ustunlik yo'qoldi va teskarisiga aylandi. "Eng sodda munosib model" qoidasi bu yerda aniq: sozlangan chiziqli model.
Bu natija umumiy qonun emas: boshqa ma'lumotda (kuchli o'zaro ta'sirlar, ko'p kategoriyalar) gradient boosting haqiqatan yutishi mumkin. Saboq boshqa: da'vo faqat halol taqqoslashda tekshiriladi — bir xil sozlash byudjeti, bir necha urug', juftlashgan farq va SE.
Misol 3 — O'rganish rejasi generatori: ko'nikmalar grafi va topologik tartib
"""O'rganish rejasi generatori: ko'nikmalar grafi (DAG) va topologik tartib."""
import heapq
QISMLAR = {
1: ("Kirish", 8), 2: ("NumPy", 14), 3: ("Pandas", 14), 4: ("Statistika", 14),
5: ("Vizualizatsiya", 14), 6: ("Tozalash", 12), 7: ("Ma'lumot yig'ish", 12),
8: ("EDA", 10), 9: ("Ehtimollik", 10), 10: ("Chiziqli algebra", 10),
11: ("Gipoteza testlari", 10), 12: ("ML asoslari", 10), 13: ("Regressiya", 12),
14: ("Klassifikatsiya", 14), 15: ("Daraxtlar", 14), 16: ("Nazoratsiz", 12),
17: ("Feature engineering", 10), 18: ("Baholash va sozlash", 12),
19: ("scikit-learn", 10), 20: ("Neyron tarmoqlar", 12), 21: ("PyTorch", 12),
22: ("Kompyuter ko'rish", 14), 23: ("NLP", 14), 24: ("Transformerlar", 12),
25: ("LLM", 14), 26: ("Generativ AI", 10), 27: ("MLOps", 14),
28: ("Maxsus mavzular", 12), 29: ("Loyihalar va karyera", 12),
}
TAYANADI = { # qism -> qaysi qismlarga tayanadi
2: [1], 3: [2], 4: [3], 5: [3], 6: [3], 7: [3], 8: [4, 5, 6],
9: [4], 10: [2], 11: [9], 12: [8, 10], 13: [12], 14: [13], 15: [14],
16: [10, 12], 17: [12], 18: [11, 17], 19: [18], 20: [10, 12], 21: [20],
22: [21], 23: [21], 24: [23], 25: [24], 26: [22, 24], 27: [19],
28: [18, 11], 29: [27, 18],
}
ROLLAR = {
"Ma'lumot tahlilchisi": [8, 11, 7, 29],
"ML muhandisi": [19, 27, 15, 29],
"NLP / LLM muhandisi": [25, 27, 29],
"Tadqiqotchi (sababiy tahlil)": [28, 18, 29],
}
SOAT_DARS = 1.5 # faraziy: bir darsni takrorlash + topshiriq
SOAT_HAFTA = 8 # faraziy: haftalik vaqt
def topologik(tugunlar):
"""Kahn algoritmi; teng holatda kichik raqam oldin (deterministik)."""
kirish = {t: 0 for t in tugunlar}
bola = {t: [] for t in tugunlar}
for t in tugunlar:
for p in TAYANADI.get(t, []):
if p in tugunlar:
kirish[t] += 1
bola[p].append(t)
navbat = [t for t in tugunlar if kirish[t] == 0]
heapq.heapify(navbat)
tartib = []
while navbat:
t = heapq.heappop(navbat)
tartib.append(t)
for b in sorted(bola[t]):
kirish[b] -= 1
if kirish[b] == 0:
heapq.heappush(navbat, b)
if len(tartib) != len(tugunlar):
raise ValueError(f"sikl: {' -> '.join(map(str, sikl_top(bola, tartib)))}")
return tartib
def sikl_top(bola, tartiblangan):
"""Tartiblanmay qolgan tugunlar ichidan bitta siklni DFS bilan topadi."""
qolgan = sorted(set(bola) - set(tartiblangan))
yol, holat = [], {}
def dfs(t):
holat[t] = 1
yol.append(t)
for b in sorted(bola[t]):
if b not in qolgan:
continue
if holat.get(b) == 1:
return yol[yol.index(b):] + [b]
if b not in holat:
r = dfs(b)
if r:
return r
holat[t] = 2
yol.pop()
return None
for t in qolgan:
if t not in holat:
r = dfs(t)
if r:
return r
return []
def ajdodlar(maqsadlar):
kerak, stek = set(), list(maqsadlar)
while stek:
t = stek.pop()
if t not in kerak:
kerak.add(t)
stek.extend(TAYANADI.get(t, []))
return kerak
def main() -> None:
print("=== 1. Graf tekshiruvi ===")
tartib = topologik(set(QISMLAR))
qirra = sum(len(v) for v in TAYANADI.values())
print(f" {len(QISMLAR)} tugun, {qirra} qirra, sikl yo'q; kurs tartibi "
f"topologikmi: {tartib == sorted(QISMLAR)}")
TAYANADI[3].append(12) # ataylab xato qirra
try:
topologik(set(QISMLAR))
except ValueError as e:
print(f" xato qirra (3-qism 12-qismga tayanadi) qo'shilganda: {e}")
TAYANADI[3].remove(12)
print("\n=== 2. Rollar bo'yicha takrorlash hajmi (faraziy soatlar) ===")
print(f" {'rol':<30} {'qism':>4} {'dars':>5} {'soat':>5} oy: 5 / 10 / 15 soat/hafta")
rejalar = {}
for rol, maqsad in ROLLAR.items():
kerak = ajdodlar(maqsad)
t = topologik(kerak)
dars = sum(QISMLAR[q][1] for q in t)
soat = dars * SOAT_DARS
rejalar[rol] = t
oylar = " / ".join(f"{soat / h / 4.33:4.1f}" for h in [5, 10, 15])
print(f" {rol:<30} {len(t):>4} {dars:>5} {soat:>5.0f} {oylar}")
rol = "ML muhandisi"
print(f"\n=== 3. '{rol}' uchun reja: {SOAT_HAFTA} soat/hafta ===")
hafta, qoldiq, bosqich = 0.0, [], {3: [], 6: [], 12: []}
for q in rejalar[rol]:
hafta += QISMLAR[q][1] * SOAT_DARS / SOAT_HAFTA
oy = hafta / 4.33
kalit = 3 if oy <= 3 else (6 if oy <= 6 else 12)
(bosqich[kalit] if oy <= 12 else qoldiq).append(f"{q} {QISMLAR[q][0]}")
for k, nom in [(3, "1-3 oy"), (6, "4-6 oy"), (12, "7-12 oy")]:
print(f" {nom}: " + ", ".join(bosqich[k]))
if qoldiq:
print(f" 12 oydan keyin qolgani: {', '.join(qoldiq)}")
else:
print(" hammasi 12 oy ichiga sig'di")
print(f" jami: {hafta:.1f} hafta ({hafta / 4.33:.1f} oy)")
chiqmagan = sorted(set(QISMLAR) - set(rejalar[rol]))
print(f" bu rol uchun keyinga qoldirilgan qismlar: {chiqmagan}")
print(" ⭐ Reja - taxmin: har 3 oyda natijaga qarab qayta tuzing")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Graf tekshiruvi ===
29 tugun, 37 qirra, sikl yo'q; kurs tartibi topologikmi: True
xato qirra (3-qism 12-qismga tayanadi) qo'shilganda: sikl: 3 -> 4 -> 8 -> 12 -> 3
=== 2. Rollar bo'yicha takrorlash hajmi (faraziy soatlar) ===
rol qism dars soat oy: 5 / 10 / 15 soat/hafta
Ma'lumot tahlilchisi 17 196 294 13.6 / 6.8 / 4.5
ML muhandisi 19 224 336 15.5 / 7.8 / 5.2
NLP / LLM muhandisi 21 248 372 17.2 / 8.6 / 5.7
Tadqiqotchi (sababiy tahlil) 17 196 294 13.6 / 6.8 / 4.5
=== 3. 'ML muhandisi' uchun reja: 8 soat/hafta ===
1-3 oy: 1 Kirish, 2 NumPy, 3 Pandas, 4 Statistika, 5 Vizualizatsiya
4-6 oy: 6 Tozalash, 8 EDA, 9 Ehtimollik, 10 Chiziqli algebra, 11 Gipoteza testlari, 12 ML asoslari, 13 Regressiya
7-12 oy: 14 Klassifikatsiya, 15 Daraxtlar, 17 Feature engineering, 18 Baholash va sozlash, 19 scikit-learn, 27 MLOps, 29 Loyihalar va karyera
hammasi 12 oy ichiga sig'di
jami: 42.0 hafta (9.7 oy)
bu rol uchun keyinga qoldirilgan qismlar: [7, 16, 20, 21, 22, 23, 24, 25, 26, 28]
⭐ Reja - taxmin: har 3 oyda natijaga qarab qayta tuzingNatija tahlili.
1-bo'lim — graf. 29 qism va 37 ta "tayanadi" qirrasi. Kahn algoritmi (teng holatda kichik raqam oldin) kursning o'z tartibini beradi — True: kurs qismlari tayanchlar bo'yicha to'g'ri joylashtirilgan. Ataylab xato qirra qo'shdik ("3-qism 12-qismga tayanadi" — Pandas ML asoslaridan keyin o'rganiladi degan ma'noda): algoritm tartiblay olmadi va DFS siklni aniq ko'rsatdi: 3 -> 4 -> 8 -> 12 -> 3. Reja tuzishdan oldin grafning sikl emasligini tekshirish — xuddi ma'lumot validatsiyasi kabi 27.3-bob.
2-bo'lim — rollar. Har rol uchun maqsad qismlarining barcha "ajdodlari" (tayanchlari) yig'ildi. ML muhandisi uchun 19 qism, 224 dars; har darsga faraziy 1.5 soat (takrorlash va topshiriq) — 336 soat. Haftasiga 5 soat bilan bu 15.5 oy, 10 soat bilan 7.8 oy, 15 soat bilan 5.2 oy. Bu raqamlar faraziy — o'z tezligingizni birinchi 2-3 haftada o'lchab, rejani yangilang. NLP / LLM muhandisi eng uzun yo'l (21 qism), chunki 25-qism butun chuqur o'rganish zanjiriga tayanadi.
3-bo'lim — ML muhandisi uchun oylar bo'yicha reja (haftasiga 8 soat): 1-3 oy — asoslar, 4-6 oy — tahlil va ML boshlanishi, 7-12 oy — klassik ML, baholash, MLOps va loyihalar. Jami 42.0 hafta (9.7 oy) — 12 oy ichiga sig'di. Rejadan tashqarida qolgan qismlar (7, 16, 20-26, 28) — "keraksiz" emas, balki bu rol uchun keyinroq: asosiy yo'l tugagach, T ning vertikal chizig'i sifatida tanlanadi.
Rejaning chegarasi: graf va soatlar qo'lda berilgan; haqiqiy tayanchlar murakkabroq (masalan, 28.11 sababiy xulosa 11-qismdan tashqari 13.10 ga ham tayanadi). Reja — boshlang'ich nuqta, har 3 oyda natijaga qarab qayta tuziladi.
Misol 4 — Kurs statistikasi: bosqichlar, tamoyillar va ramziy yakun
"""Kurs statistikasi: qismlar, bosqichlar va tamoyillar (ro'yxat kod ichida qo'lda)."""
QISMLAR = [ # (raqam, nom, darslar soni, bosqich)
(1, "Kirish", 8, "asoslar"), (2, "NumPy", 14, "asoslar"),
(3, "Pandas", 14, "asoslar"), (4, "Statistika", 14, "asoslar"),
(5, "Vizualizatsiya", 14, "asoslar"), (6, "Ma'lumotni tozalash", 12, "asoslar"),
(7, "Ma'lumot yig'ish", 12, "asoslar"), (8, "EDA", 10, "tahlil"),
(9, "Ehtimollik", 10, "tahlil"), (10, "Chiziqli algebra", 10, "tahlil"),
(11, "Gipoteza testlari", 10, "tahlil"), (12, "ML asoslari", 10, "ML"),
(13, "Regressiya", 12, "ML"), (14, "Klassifikatsiya", 14, "ML"),
(15, "Daraxtlar va ansambllar", 14, "ML"), (16, "Nazoratsiz o'rganish", 12, "ML"),
(17, "Feature engineering", 10, "ML"), (18, "Model baholash va sozlash", 12, "ML"),
(19, "scikit-learn to'liq", 10, "ML"), (20, "Neyron tarmoqlar", 12, "DL/AI"),
(21, "PyTorch", 12, "DL/AI"), (22, "Kompyuter ko'rish", 14, "DL/AI"),
(23, "NLP", 14, "DL/AI"), (24, "Transformerlar", 12, "DL/AI"),
(25, "Katta til modellari", 14, "DL/AI"), (26, "Generativ AI", 10, "DL/AI"),
(27, "MLOps va deploy", 14, "ishlab chiqarish"),
(28, "Maxsus mavzular", 12, "ishlab chiqarish"),
(29, "Loyihalar va karyera", 12, "karyera"),
]
BOSQICHLAR = ["asoslar", "tahlil", "ML", "DL/AI", "ishlab chiqarish", "karyera"]
TAMOYILLAR = { # tamoyil -> u muntazam ishlatilgan qismlar (taxminiy belgilash)
"bazaviy har doim": [12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26,
28, 29],
"test bir marta": [6, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29],
"vaqt/guruh bo'yicha bo'lish": [12, 17, 18, 19, 20, 23, 24, 25, 27, 28, 29],
"juftlashgan taqqoslash, 2*SE": [11, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29],
"eng sodda munosib model": [18, 21, 22, 23, 24, 25, 26, 27, 28, 29],
"reproduksiya va urug'lar": [1, 2, 6, 7, 8, 12, 19, 21, 22, 27, 29],
}
MISOL_DARSDA, VAZIFA_DARSDA = 4, 7 # har dars formati bo'yicha
def main() -> None:
jami = sum(d for _, _, d, _ in QISMLAR)
print("=== 1. Kurs xaritasi: bosqichlar ===")
print(f" {'bosqich':<17} {'qismlar':<8} {'dars':>4} {'ulush':>6}")
for b in BOSQICHLAR:
q = [(r, d) for r, _, d, bb in QISMLAR if bb == b]
dars = sum(d for _, d in q)
oraliq = f"{q[0][0]}-{q[-1][0]}" if len(q) > 1 else str(q[0][0])
print(f" {b:<17} {oraliq:<8} {dars:>4} {dars / jami:>6.1%} "
+ "#" * round(60 * dars / jami))
print(f" jami: {len(QISMLAR)} qism, {jami} dars, taxminan "
f"{jami * MISOL_DARSDA} ishlaydigan misol va {jami * VAZIFA_DARSDA} topshiriq")
print("\n=== 2. Qism uzunliklari ===")
uz = sorted(QISMLAR, key=lambda t: (t[2], t[0]))
print(f" eng qisqa: {uz[0][0]}-qism {uz[0][1]} ({uz[0][2]} dars); "
f"eng uzun: {', '.join(f'{r}-qism' for r, _, d, _ in uz if d == uz[-1][2])}"
f" ({uz[-1][2]} dars)")
print(f" o'rtacha qism: {jami / len(QISMLAR):.1f} dars")
print("\n=== 3. Tamoyillar: qayerda boshlandi va qancha yashadi ===")
print(f" {'tamoyil':<30} {'qism':>4} {'birinchi':>8} {'oxirgi':>6} "
f"{'bosqichlar':>10}")
bosqich_of = {r: b for r, _, _, b in QISMLAR}
qamrov = []
for t, qs in TAMOYILLAR.items():
bs = len({bosqich_of[q] for q in qs})
qamrov.append((len(qs), t))
print(f" {t:<30} {len(qs):>4} {min(qs):>8} {max(qs):>6} {bs:>10}")
qamrov.sort(reverse=True)
print(f" eng ko'p qismda ishlatilgani: '{qamrov[0][1]}' ({qamrov[0][0]} qism)")
zich = {r: sum(r in v for v in TAMOYILLAR.values()) for r, _, _, _ in QISMLAR}
for k in range(len(TAMOYILLAR), 0, -1):
qs = [r for r in sorted(zich) if zich[r] == k]
if qs:
print(f" {k} ta tamoyil birga ishlatilgan qismlar: {qs}")
bosh = [r for r in sorted(zich) if zich[r] == 0]
print(f" asosan vosita o'rganilgan qismlar (poydevor): {bosh}")
print("\n=== 4. Ramziy yakun ===")
tugatilgan = len(QISMLAR)
print(f" qismlar: [{'#' * tugatilgan}] {tugatilgan}/{len(QISMLAR)}")
print(f" darslar: {jami}/{jami} - kurs tugadi, o'rganish esa davom etadi")
print(" ⭐ Keyingi qadam: bitta loyiha, bitta maqola, bitta hissa")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Kurs xaritasi: bosqichlar ===
bosqich qismlar dars ulush
asoslar 1-7 88 25.3% ###############
tahlil 8-11 40 11.5% #######
ML 12-19 94 27.0% ################
DL/AI 20-26 88 25.3% ###############
ishlab chiqarish 27-28 26 7.5% ####
karyera 29 12 3.4% ##
jami: 29 qism, 348 dars, taxminan 1392 ishlaydigan misol va 2436 topshiriq
=== 2. Qism uzunliklari ===
eng qisqa: 1-qism Kirish (8 dars); eng uzun: 2-qism, 3-qism, 4-qism, 5-qism, 14-qism, 15-qism, 22-qism, 23-qism, 25-qism, 27-qism (14 dars)
o'rtacha qism: 12.0 dars
=== 3. Tamoyillar: qayerda boshlandi va qancha yashadi ===
tamoyil qism birinchi oxirgi bosqichlar
bazaviy har doim 16 12 29 4
test bir marta 17 6 29 5
vaqt/guruh bo'yicha bo'lish 11 12 29 4
juftlashgan taqqoslash, 2*SE 13 11 29 5
eng sodda munosib model 10 18 29 4
reproduksiya va urug'lar 11 1 29 6
eng ko'p qismda ishlatilgani: 'test bir marta' (17 qism)
6 ta tamoyil birga ishlatilgan qismlar: [29]
5 ta tamoyil birga ishlatilgan qismlar: [18, 21, 22, 23, 24, 25, 27, 28]
4 ta tamoyil birga ishlatilgan qismlar: [12, 19, 20, 26]
3 ta tamoyil birga ishlatilgan qismlar: [17]
2 ta tamoyil birga ishlatilgan qismlar: [6, 13, 15]
1 ta tamoyil birga ishlatilgan qismlar: [1, 2, 7, 8, 11, 14, 16]
asosan vosita o'rganilgan qismlar (poydevor): [3, 4, 5, 9, 10]
=== 4. Ramziy yakun ===
qismlar: [#############################] 29/29
darslar: 348/348 - kurs tugadi, o'rganish esa davom etadi
⭐ Keyingi qadam: bitta loyiha, bitta maqola, bitta hissaNatija tahlili.
1-bo'lim — kurs xaritasi raqamda. 348 darsning 25.3% i asoslarga (1-7), 11.5% i tahlil va matematikaga (8-11), 27.0% i klassik ML ga (12-19), 25.3% i chuqur o'rganish va AI ga (20-26), 7.5% i ishlab chiqarish va maxsus mavzularga (27-28), 3.4% i loyiha va karyeraga ajratilgan. Klassik ML eng katta bosqich — bu tasodif emas: baholash dizayni, sizish va juftlashgan taqqoslash aynan shu yerda o'rgatiladi, keyingi hamma bosqichlar ularga tayanadi. Har dars formati bo'yicha taxminan 1392 ishlaydigan misol va 2436 topshiriq.
2-bo'lim — qism uzunliklari: eng qisqasi 1-qism (8 dars), eng uzunlari 14 darsdan, o'rtacha 12.0 dars.
3-bo'lim — tamoyillar. Jadval qo'lda belgilangan (kurs matnini ko'rib chiqib, har tamoyil muntazam ishlatilgan qismlar): "test bir marta" 17 qismda, "bazaviy har doim" 16 qismda, "juftlashgan taqqoslash, 2*SE" 13 qismda. Reproduksiya birinchi — 1-qismdayoq boshlangan va 6 bosqichning hammasida uchraydi. 29-qismda oltita tamoyil ham birga ishlatilgan — loyiha va karyera qismi aynan ularni amaliyotga yig'adi. 18, 21-25, 27, 28-qismlarda beshtadan. 3, 4, 5, 9, 10-qismlar "poydevor": ularda vositalar (Pandas, statistika, vizualizatsiya, ehtimollik, chiziqli algebra) o'rganiladi, tamoyillar esa shu vositalar ustida keyinroq quriladi. Bu jadval taxminiy: aniq sonlar belgilash mezoniga bog'liq, lekin manzara aniq — tamoyillar kurs oxiriga kelib zichlashadi.
4-bo'lim — ramziy yakun: 29/29 qism, 348/348 dars. Kurs tugadi; o'rganish esa davom etadi.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "Kursni tugatdim — endi hammasini bilaman" | Kurs — asos va fikrlash usuli; soha doimiy o'zgaradi |
| "Kutubxona nomlarini bilish — eng muhimi" | Nomlar eskiradi; tamoyillar (bazaviy, dizayn, 2*SE) qoladi |
| "Maqolada yozilgan — demak to'g'ri" | Tajriba bo'limini tanqidiy o'qing: bazaviy, urug'lar, variatsiya (2-misol) |
| "Yangi usul bazaviydan yaxshi — demak yaxshi" | Bazaviy sozlanganmi? 2-misolda sozlangan bazaviy sezilarli yaxshi chiqdi |
| "Bitta tajriba yetarli" | Bitta urug' da'voni 0% dan +5.3% gacha o'zgartira oladi |
| "Test AUC oshdi — model yaxshilandi" | Testga qarab tanlasangiz — yo'q (1-misol, tuzoq 4) |
| "Qayta ishlab chiqa olmadim — vaqtim bekor ketdi" | Bu ham natija; uni yozing — o'zingiz va boshqalar uchun qimmatli |
| "Hamma yangi narsani kuzatishim kerak" | T-shakl: keng asos, bitta-ikkita chuqur yo'nalish |
| "Bilmasligimni aytsam — obro'm tushadi" | "Tekshirib ko'raman" — professional javob |
| "O'rganish rejasi bir marta tuziladi" | Har 3 oyda natijaga qarab qayta tuziladi |
6. Keng tarqalgan xatolar va yechimlari
1. Maqoladagi raqamni tekshirmasdan qabul qilish
if maqola_farqi > 0: joriy_qil(yangi_usul) # ⚠️
natija = qayta_ishlab_chiqish(yangi, zaif, sozlangan, baho, range(10)) # ✅2. Bazaviyni sozlamasdan taqqoslash
bazaviy = LogisticRegression() # ⚠️ standart, masshtabsiz
bazaviy = GridSearchCV(make_pipeline(StandardScaler(), LogisticRegression()),
{"logisticregression__C": [0.01, 0.1, 1, 10]}) # ✅ teng byudjet3. Bitta urug'
print(baho(yangi, 0) - baho(bazaviy, 0)) # ⚠️
print(juftlashgan([baho(yangi, s) for s in range(10)],
[baho(bazaviy, s) for s in range(10)])) # ✅ farq, SE, sezilarli4. Tasodifiy bo'lish guruhli ma'lumotda
cross_val_score(model, X, y, cv=KFold(5, shuffle=True)) # ⚠️ bir mijoz ikki tomonda
cross_val_score(model, X, y, cv=GroupKFold(5), groups=mijoz) # ✅5. Testga qarab tanlash
for belgi in nomzodlar: ... test_auc ... # ⚠️ test -> validatsiya
# tanlov: validatsiya yoki CV; test - bir marta, oxirida, qaror yozilgandan keyin # ✅6. Yangi kutubxonani "chunki mashhur" deb qabul qilish
import yangi_modny_kutubxona # ⚠️
# og'riq nuqtasi -> o'z ma'lumotingizda juftlashgan taqqoslash -> xarajat,
# litsenziya, qo'llab-quvvatlash -> oldindan yozilgan qabul mezoni # ✅7. Rejasiz o'rganish
# har kuni yangi mavzu, hech biri tugamaydi # ⚠️
# rol -> maqsad qismlar -> tayanchlar grafi -> tartib -> 3 oylik bosqichlar # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
Bu dars butun kursga tayanadi. Asosiy bog'lanishlar:
- 1-7-qismlar (o'tilgan): Asoslar — NumPy, Pandas, statistika, vizualizatsiya, tozalash, ma'lumot yig'ish; 1.8 dagi dastlabki yo'l xaritasi endi to'liq bosib o'tildi
- 8-11-qismlar (o'tilgan): EDA, ehtimollik, chiziqli algebra, gipoteza testlari — noaniqlikni o'lchash va bootstrap (11.8)
- 12-19-qismlar (o'tilgan): Klassik ML — bazaviy 12.6-bob, bo'lish va sizish (12.3, 12.9, 17.8), baholash dizayni va juftlashgan taqqoslash (18-qism), reproduksiya (19.7)
- 20-26-qismlar (o'tilgan): Neyron tarmoqlar, PyTorch, ko'rish, NLP, transformerlar, LLM, generativ AI — xuddi shu tamoyillar katta modellarda
- 27-28-qismlar (o'tilgan): MLOps va maxsus mavzular — tamoyillar ishlab chiqarishda va yangi turdagi vazifalarda
- 29.1-29.11-darslar (o'tilgan): Loyiha hayot sikli, to'liq loyiha, Kaggle, GitHub, portfolio, rezyume, intervyu, etika
- Kursdan keyin: har yangi loyiha, maqola va vosita — tamoyillar kartasi (3-bo'lim) bilan
8. Eng yaxshi amaliyotlar
Har loyiha boshida tamoyillar kartasidan o'ting: bazaviy, bo'lish, taqqoslash, test.
Maqolani uch o'tishda o'qing va tajriba bo'limiga tanqidiy savollar bering.
Muhim da'voni qayta ishlab chiqing: bazaviyni ham sozlang, bir necha urug', juftlashgan farq va SE.
Yangi vositani o'z ma'lumotingizda, oldindan yozilgan qabul mezoni bilan sinang.
O'rganishni g'oyalar bo'yicha takrorlang; T-shakl: keng asos, bitta-ikkita chuqur yo'nalish.
O'rganish jurnali yuriting; rejani har 3 oyda qayta ko'rib chiqing.
Kichik hissadan boshlang: hujjat, takrorlanadigan xato xabari, test.
Charchash belgilariga e'tibor bering: chegaralar, uyqu, harakat — kerak bo'lsa mutaxassis.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # nomutanosib ma'lumot (ketganlar 17%), model aniqligi 0.80 - yaxshimi?
2. # bir mijozning 6 oyi, tasodifiy KFold va GroupKFold - qaysi AUC katta?
3. # 20 urug'da farq [-0.15, +0.002] - bitta urug' bilan qanday xulosa chiqishi mumkin?
4. # 30 ta shovqin belgidan test bo'yicha tanlash - test AUC va yangi ma'lumotdagi AUC?
5. # maqola: bitta urug', +2.7% - 5 urug'dagi farqlar oralig'i?
6. # yangi usul sozlanmagan bazaviydan sezilarli yaxshi - sozlangandan-chi?
7. # "kurs tartibi topologikmi" tekshiruvi nimani ko'rsatadi?
8. # 3-qism 12-qismga tayansa nima bo'ladi?
9. # 336 soat, haftasiga 10 soat - necha oy?
10. # kursdagi eng katta bosqich qaysi?
11. # qaysi qismda oltita tamoyil ham ishlatilgan?
12. # qayta ishlab chiqish natija bermadi - nima qilish kerak?Javoblar
- Yo'q — bazaviy
0.844, model undan yomon (AUC0.575) - KFold (
0.841va0.643) — sizish tufayli - "RF biroz yaxshi" (
+0.0022) — noto'g'ri xulosa; o'rtacha-0.0825 - Test oshadi (
+0.018), yangi ma'lumotda pasayadi (-0.008) 0.0000dan+0.0533gacha- Yo'q — sozlangan bazaviy sezilarli yaxshi (
-0.0223, SE0.0085) - Qismlar tayanchlar bo'yicha to'g'ri tartiblangan (
True) - Sikl:
3 -> 4 -> 8 -> 12 -> 3— tartib yo'q - Taxminan
7.8oy (faraziy) - Klassik ML (
27.0%) - 29-qism
- Halol yozing: nima olindi, nima olinmadi, farq sabablari haqida farazlar
Vazifa 2: Xatolarni tuzating
1. natija = baho(yangi, seed=0) - baho(bazaviy, seed=0)
print("yangi usul", natija, "ga yaxshi - joriy qilamiz")
2. bazaviy = LogisticRegression(C=0.004) # maqoladagidek
yangi = HistGradientBoostingClassifier() # 50 marta sozlangan
3. cv = KFold(5, shuffle=True) # har mijozning 6 oyi
print(cross_val_score(rf, X, y, cv=cv).mean())
4. for k in nomzodlar:
if test_auc(belgilar + [k]) > test_auc(belgilar):
belgilar.append(k)
5. reja = ["hamma qismlar", "har kuni yangi mavzu"]Javoblar
1. f, se, ok = juftlashgan([baho(yangi, s) for s in range(10)],
[baho(bazaviy, s) for s in range(10)])
# ok bo'lsa ham - sozlangan bazaviy bilan ham taqqoslang
2. bazaviy = GridSearchCV(make_pipeline(StandardScaler(), LogisticRegression()),
{"logisticregression__C": [0.01, 0.1, 1, 10]})
# ikkalasiga bir xil sozlash byudjeti
3. cv = GroupKFold(5)
print(cross_val_score(rf, X, y, cv=cv, groups=mijoz).mean())
4. # tanlov CV yoki validatsiya bo'yicha; test - oxirida bir marta
5. # rol -> maqsad qismlar -> ajdodlar -> topologik tartib -> 3/6/12 oy,
# har 3 oyda qayta ko'rib chiqishVazifa 3: Tamoyillar imtihoni
Modellang (1-misol asosida):
- Beshinchi tuzoq qo'shing: vaqt bo'yicha sizish — mijozlarning kelajakdagi oylari o'quvda (28.3 ga qarang).
- Tuzoq 1 da aniqlik o'rniga PR-AUC va bazaviy PR-AUC (ijobiy ulush) ni solishtiring.
- Tuzoq 3 da urug'lar sonini 5, 10, 20, 50 qiling — SE va xulosa qanday o'zgaradi?
- Tuzoq 4 ni CV bo'yicha tanlash bilan takrorlang — optimizm yo'qoladimi?
Vazifa 4: Da'voni tekshirish
Modellang (2-misol asosida):
- Ma'lumotga kuchli o'zaro ta'sir qo'shing (
X0 * X3) — endi yangi usul sozlangan bazaviydan yutadimi? - Sozlash byudjetini tenglang: ikkalasiga ham 6 ta variant — natija?
- Ablation: yangi usulning qaysi parametri (chuqurlik, o'rganish tezligi) yutuqni beradi?
- "Da'vo kartasi" ni to'ldiring (3-bo'lim) — maqola uchun qaysi savollar "yo'q" javob oladi?
Vazifa 5: O'rganish rejasi
Modellang (3-misol asosida):
- O'z maqsad rolingizni qo'shing va rejani haftalik vaqtingiz bilan chiqaring.
- Har qismga "o'zimni baholash" (0-3) qo'shing: 3 ball bo'lgan qismlar takrorlanmasin — reja qanchaga qisqaradi?
- Tayanchlarni aniqroq qiling (masalan, 28 -> 13, 25 -> 27) — sikl paydo bo'lmasligini tekshiring.
- Bir xil darajadagi qismlarni parallel o'rganish varianti: grafning "qatlamlari"ni chiqaring.
Vazifa 6: Kurs statistikasi
Modellang (4-misol asosida):
- O'zingiz uchun har qismga "qanchalik ishonchliman" (1-5) belgilang va bosqichlar bo'yicha o'rtachasini chiqaring.
- Tamoyillar jadvalini o'z bilimingiz bilan to'ldiring: qaysi qismda qaysi tamoyilni o'zingiz qo'llagansiz?
- Tamoyillar zichligini bosqichlar bo'yicha hisoblang (o'rtacha tamoyil soni).
- "Ramziy yakun" ni o'z o'rganish jurnalingiz uchun moslang: haftalik progress chizig'i.
Vazifa 7: O'ylash
Kursni tugatgan hamkasbingiz: "Men 348 dars o'tdim, lekin har kuni yangi model chiqyapti — men baribir orqada qolyapman. Yana bitta kursni boshlasammikan? Yoki hammasini tashlab, faqat LLM ni o'rgansammi?"
Javob
Qisqa javob: yangi kursni boshlashdan oldin — bitta loyiha, bitta maqola va bitta hissa. Orqada qolish hissi tabiiy; lekin "yangi model" tez eskiradi, siz o'rgangan tamoyillar esa har yangi modelni baholashning asosi.
1. Nima eskirmaydi. 2-misolda "yangi usul" sozlanmagan bazaviydan +2.6% yaxshi ko'rindi, sozlangan bazaviydan esa sezilarli yomon chiqdi. Buni ko'rish uchun yangi kurs emas, kursdagi tamoyillar kerak edi: bazaviy, bir necha urug', juftlashgan farq va 2*SE.
2. Hammasini tashlab faqat LLM? LLM tizimlarini baholash (25.9-25.10), xavfsizligi 25.13-bob va deployi (27) — xuddi shu tamoyillarga tayanadi. 3-misoldagi graf bo'yicha "NLP / LLM muhandisi" yo'li 21 qismni o'z ichiga oladi — ya'ni "faqat LLM" degan yo'l yo'q, bor bilimingiz shu yo'lning katta qismi.
3. Aniq taklif (keyingi 3 oy):
# 1-oy: bitta to'liq loyiha (29.2-29.4) - o'z savolingiz, bazaviy,
# halol baholash, model kartasi, README
# 2-oy: bitta maqolani o'qish (3 o'tish) va kichik miqyosda qayta ishlab
# chiqish - natija qanday bo'lsa ham yozma hisobot
# 3-oy: ochiq manbaga bitta kichik hissa yoki o'zbek tilida bitta
# tushuntirish maqolasi
# har hafta: o'rganish jurnali (nima o'rgandim, nima qildim)4. Charchash haqida. "Hammasini kuzatish" — imkonsiz va shart emas. Haftasiga bir-ikki manba, bitta chuqur yo'nalish (T-shakl), aniq ish vaqti chegaralari. Holsizlik va qiziqish yo'qolishi uzoq davom etsa — mutaxassis bilan gaplashing.
Hamkasbga javob: "Sen 348 dars o'tding — bu kichik ish emas. Orqada qolish hissi bu sohada deyarli hammada bor. Lekin sen endi yangi modelni ko'rganingda 'u haqiqatan yaxshimi?' deb tekshira olasan — bu ko'pchilikda yo'q ko'nikma. Yangi kurs o'rniga uch oy: bitta loyiha, bitta maqolani qayta ishlab chiqish, bitta hissa. Keyin qaysi yo'nalish seni ko'proq qiziqtirishini o'zing ko'rasan."
Nimani mustahkamlaydi: 2.3, 2.5, 2.6, 2.8, 2.10-bo'limlar.
Xulosa
Bu darsda kursni bitta xaritaga yig'dik, uning asosiy tamoyillarini qayta sinovdan o'tkazdik va kursdan keyingi o'rganishni tizimli qilish yo'llarini ko'rdik.
Eng muhim uch fikr:
Tamoyillar — kursning eskirmaydigan qismi. 1-misolda to'rt tuzoq bitta kichik ma'lumotda qayta namoyon bo'ldi:
0.800aniqlikdagi model0.844lik bazaviydan yomon chiqdi; tasodifiy bo'lish AUC ni0.643dan0.841ga "ko'tardi"; bitta urug' RF ni yaxshiroq deb ko'rsatishi mumkin edi, 20 urug' esa logistik regressiyaning sezilarli ustunligini (-0.0825, SE0.0088) ko'rsatdi; testga qarab belgi tanlash test da+0.018"yutuq" berdi, yangi mijozlarda esa-0.008. Har holatda kod xatosiz edi — muammo dizaynda.Da'voni halol taqqoslash tekshiradi. 2-misolda "+2.7%" da'vosi bitta urug'da olingan edi (beshta urug'da
0dan+5.3%gacha); 10 yangi urug'da u zaif bazaviyga nisbatan turdi (+0.0260, SE0.0084), lekin sozlangan bazaviy yangi usuldan sezilarli yaxshi chiqdi (-0.0223, SE0.0085). Maqolani o'qishda birinchi savol: bazaviy sozlanganmi va nechta urug'?O'rganish — reja va odat, sprint emas. 3-misolda ko'nikmalar grafi har rol uchun takrorlash tartibini chiqardi va xato qirrani sikl sifatida ushladi; ML muhandisi yo'li faraziy hisobda 336 soat. 4-misolda kurs bosqichlari raqamga aylandi: 348 darsning eng katta ulushi (
27.0%) klassik ML ga — tamoyillar o'rgatilgan joyga — to'g'ri keldi, tamoyillar esa kurs oxiriga kelib zichlashdi.
Kurs xulosasi
Tabriklaymiz — siz 29 qism va 348 darsdan iborat Data Science kursini tugatdingiz.
Kurs "Data Science nima?" savolidan, NumPy massivi va birinchi groupby dan boshlandi. Keyin statistika va ehtimollik noaniqlikni o'lchashni o'rgatdi; EDA va vizualizatsiya — ma'lumotdan savol so'rashni; klassik ML — model qurishni va, eng muhimi, uni halol baholashni. Neyron tarmoqlar, PyTorch, kompyuter ko'rish, NLP, transformerlar, katta til modellari va generativ AI bu poydevor ustida qurildi. MLOps modelni ishlaydigan xizmatga aylantirdi, maxsus mavzular esa vaqt qatorlari, tavsiya tizimlari, RL, geografik ma'lumot, katta ma'lumot va sababiy xulosani qo'shdi. Oxirgi qism bu bilimni loyiha, portfolio, intervyu va mas'uliyatli ishga aylantirdi.
Kurs sizni hamma narsani biladigan qilmadi — buni hech bir kurs qila olmaydi. Lekin endi sizda bor narsa: ma'lumotni o'qish, savol qo'yish, bazaviy qurish, halol baholash, farqni SE bilan o'lchash, natijani — kutilmagan va salbiy natijani ham — halol yozish ko'nikmasi. Bu ko'nikma yangi vosita, yangi model va yangi sohada ham ishlaydi.
Keyingi qadamlar oddiy: bitta loyiha, bitta maqola, bitta hissa. O'z savolingiz bo'yicha to'liq loyiha qiling va uni ochiq yozing. Bitta maqolani qayta ishlab chiqing — natija qanday chiqsa ham. Bitta kichik hissa qo'shing: hujjatdagi tuzatish, xato xabari yoki o'zbek tilidagi tushuntirish. Va o'rganish jurnalini yuriting — uch oydan keyin uni o'qib, qancha yo'l bosganingizni ko'rasiz.
Sabr va omad tilaymiz. Kurs yakunlandi.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!