Cheat sheet va protokol kartasi
12 qadam — kartaga chop etiladigan shakl
python16 qator
import pandas as pd show(pd.DataFrame([ {"#": 1, "Qadam": "Faylni och, shaklini ko'r", "Kod": "df.shape, df.head(), df.info()"}, {"#": 2, "Qadam": "Target ni aniqla", "Kod": "df[target].value_counts()"}, {"#": 3, "Qadam": "Vazifa turini belgila", "Kod": "sinf soni -> klassifikatsiya / regressiya"}, {"#": 4, "Qadam": "Bo'sh qiymatlarni sana", "Kod": "df.isna().sum()"}, {"#": 5, "Qadam": "Tuzoq ustunlarni tashla", "Kod": "ID, leakage, matn-son"}, {"#": 6, "Qadam": "SPLIT (hammasidan oldin)", "Kod": "train_test_split(stratify=y)"}, {"#": 7, "Qadam": "Baza qur", "Kod": "DummyClassifier / DummyRegressor"}, {"#": 8, "Qadam": "Pipeline bilan birinchi model", "Kod": "Pipeline([tayyorlash, model])"}, {"#": 9, "Qadam": "To'g'ri metrikani tanla", "Kod": "F1 / PR-AUC / MAE"}, {"#": 10, "Qadam": "Cross-validation", "Kod": "cross_val_score(cv=5)"}, {"#": 11, "Qadam": "Xato tahlili", "Kod": "qaysi qatorlarda xato qilyapti?"}, {"#": 12, "Qadam": "Saqla va hujjatlashtir", "Kod": "joblib + manifest + DATASHEET"}, ]))
| # | Qadam | Kod |
|---|---|---|
| 1 | Faylni och, shaklini ko'r | df.shape, df.head(), df.info() |
| 2 | Target ni aniqla | df[target].value_counts() |
| 3 | Vazifa turini belgila | sinf soni -> klassifikatsiya / regressiya |
| 4 | Bo'sh qiymatlarni sana | df.isna().sum() |
| 5 | Tuzoq ustunlarni tashla | ID, leakage, matn-son |
| 6 | SPLIT (hammasidan oldin) | train_test_split(stratify=y) |
| 7 | Baza qur | DummyClassifier / DummyRegressor |
| 8 | Pipeline bilan birinchi model | Pipeline([tayyorlash, model]) |
| 9 | To'g'ri metrikani tanla | F1 / PR-AUC / MAE |
| 10 | Cross-validation | cross_val_score(cv=5) |
| 11 | Xato tahlili | qaysi qatorlarda xato qilyapti? |
| 12 | Saqla va hujjatlashtir | joblib + manifest + DATASHEET |
Birinchi 10 daqiqa — ko'chirib ishlatiladigan kod
python20 qator
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.dummy import DummyClassifier df = pd.read_csv("yangi.csv") print(df.shape) print(df.dtypes.to_string()) print(df.isna().sum().to_string()) print(df[TARGET].value_counts(normalize=True)) # har ustunda nechta noyob qiymat — ID va matn-son tuzoqlarini ochadi for c in df.columns: print(f"{c:<24} noyob={df[c].nunique():<6} tur={df[c].dtype}") y = df[TARGET] X = df.drop(columns=[TARGET]) Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y) baza = DummyClassifier(strategy="most_frequent").fit(Xtr, ytr) print("BAZA:", baza.score(Xte, yte))
Pipeline shabloni
python17 qator
from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler, OneHotEncoder SON = X.select_dtypes("number").columns.tolist() MATN = X.select_dtypes("object").columns.tolist() tayyorlash = ColumnTransformer([ ("son", Pipeline([("imp", SimpleImputer(strategy="median")), ("sc", StandardScaler())]), SON), ("matn", Pipeline([("imp", SimpleImputer(strategy="most_frequent")), ("oh", OneHotEncoder(handle_unknown="ignore"))]), MATN), ]) quvur = Pipeline([("tayyorlash", tayyorlash), ("model", MODEL)]) quvur.fit(Xtr, ytr)
Model tanlash jadvali
python16 qator
show(pd.DataFrame([ {"Vaziyat": "Jadval, kam ma'lumot (<1000)", "Birinchi tanlov": "LogisticRegression / Ridge", "Keyin": "RandomForest"}, {"Vaziyat": "Jadval, ko'p ma'lumot", "Birinchi tanlov": "LightGBM / XGBoost", "Keyin": "stacking"}, {"Vaziyat": "Ko'p kategorik ustun", "Birinchi tanlov": "CatBoost", "Keyin": "target encoding + boosting"}, {"Vaziyat": "Matn", "Birinchi tanlov": "TF-IDF + LogisticRegression", "Keyin": "fine-tuned transformer"}, {"Vaziyat": "Rasm", "Birinchi tanlov": "tayyor CNN (transfer learning)", "Keyin": "fine-tuning"}, {"Vaziyat": "Vaqt qatori", "Birinchi tanlov": "naive baza + lag + Ridge", "Keyin": "boosting (differensiyalangan)"}, {"Vaziyat": "Tushuntirish majburiy", "Birinchi tanlov": "chiziqli model / bitta daraxt", "Keyin": "SHAP bilan boosting"}, ]))
| Vaziyat | Birinchi tanlov | Keyin |
|---|---|---|
| Jadval, kam ma'lumot (<1000) | LogisticRegression / Ridge | RandomForest |
| Jadval, ko'p ma'lumot | LightGBM / XGBoost | stacking |
| Ko'p kategorik ustun | CatBoost | target encoding + boosting |
| Matn | TF-IDF + LogisticRegression | fine-tuned transformer |
| Rasm | tayyor CNN (transfer learning) | fine-tuning |
| Vaqt qatori | naive baza + lag + Ridge | boosting (differensiyalangan) |
| Tushuntirish majburiy | chiziqli model / bitta daraxt | SHAP bilan boosting |
Metrika tanlash
python9 qator
show(pd.DataFrame([ {"Holat": "Klassifikatsiya, muvozanatli", "Metrika": "accuracy, ROC-AUC"}, {"Holat": "Klassifikatsiya, nomutanosib", "Metrika": "F1, PR-AUC, recall@precision"}, {"Holat": "Xato narxi assimetrik", "Metrika": "maxsus: FN va FP ga vazn"}, {"Holat": "Regressiya, chetdagi qiymat bor", "Metrika": "MAE (RMSE emas)"}, {"Holat": "Regressiya, katta xato juda yomon", "Metrika": "RMSE"}, {"Holat": "Nisbiy xato muhim", "Metrika": "MAPE (nolga ehtiyot bo'ling)"}, {"Holat": "Reyting / tartib", "Metrika": "NDCG, MAP"}, ]))
| Holat | Metrika |
|---|---|
| Klassifikatsiya, muvozanatli | accuracy, ROC-AUC |
| Klassifikatsiya, nomutanosib | F1, PR-AUC, recall@precision |
| Xato narxi assimetrik | maxsus: FN va FP ga vazn |
| Regressiya, chetdagi qiymat bor | MAE (RMSE emas) |
| Regressiya, katta xato juda yomon | RMSE |
| Nisbiy xato muhim | MAPE (nolga ehtiyot bo'ling) |
| Reyting / tartib | NDCG, MAP |
Natija yomon bo'lsa — qaror daraxti
python14 qator
show(pd.DataFrame([ {"Belgi": "Train past, test past", "Tashxis": "underfitting", "Harakat": "murakkabroq model, ko'proq feature, kamroq regularizatsiya"}, {"Belgi": "Train yuqori, test past", "Tashxis": "overfitting", "Harakat": "ko'proq ma'lumot, regularizatsiya, soddaroq model"}, {"Belgi": "Ikkisi ham juda yuqori", "Tashxis": "LEAKAGE ehtimoli", "Harakat": "feature importance ga qara, ustunni olib tashlab o'lcha"}, {"Belgi": "CV tarqoq (katta std)", "Tashxis": "ma'lumot kam yoki bir xil emas", "Harakat": "ko'proq burma, stratifikatsiya, ko'proq ma'lumot"}, {"Belgi": "Bitta sinf umuman topilmaydi", "Tashxis": "nomutanosiblik", "Harakat": "class_weight, threshold, metrikani almashtir"}, {"Belgi": "Offline yaxshi, prod yomon", "Tashxis": "drift yoki zanjir farqi", "Harakat": "kirish taqsimotini solishtir, Pipeline bir xilmi tekshir"}, ]))
| Belgi | Tashxis | Harakat |
|---|---|---|
| Train past, test past | underfitting | murakkabroq model, ko'proq feature, kamroq regularizatsiya |
| Train yuqori, test past | overfitting | ko'proq ma'lumot, regularizatsiya, soddaroq model |
| Ikkisi ham juda yuqori | LEAKAGE ehtimoli | feature importance ga qara, ustunni olib tashlab o'lcha |
| CV tarqoq (katta std) | ma'lumot kam yoki bir xil emas | ko'proq burma, stratifikatsiya, ko'proq ma'lumot |
| Bitta sinf umuman topilmaydi | nomutanosiblik | class_weight, threshold, metrikani almashtir |
| Offline yaxshi, prod yomon | drift yoki zanjir farqi | kirish taqsimotini solishtir, Pipeline bir xilmi tekshir |
Tez eslatmalar
python12 qator
show(pd.DataFrame([ {"Mavzu": "Split", "Eslatma": "Hamma narsadan OLDIN. stratify=y klassifikatsiyada"}, {"Mavzu": "Scaler", "Eslatma": "fit faqat train da. Pipeline ichida bo'lsa — muammo yo'q"}, {"Mavzu": "Vaqt qatori", "Eslatma": "Xronologik split, TimeSeriesSplit, differensiyalash"}, {"Mavzu": "Guruhlangan ma'lumot", "Eslatma": "GroupShuffleSplit — bitta obyekt bitta bo'lakda"}, {"Mavzu": "Daraxtlar", "Eslatma": "Scaling kerak emas"}, {"Mavzu": "KNN, SVM, NN", "Eslatma": "Scaling SHART"}, {"Mavzu": "random_state", "Eslatma": "Har joyda qo'ying — takrorlanish uchun"}, {"Mavzu": "Neyron tarmoq", "Eslatma": "Kamida 3 seed, eng yomonini ham yozing"}, {"Mavzu": "Test to'plami", "Eslatma": "Bir marta. Ikkinchi marta qarasangiz — u val"}, {"Mavzu": "Saqlash", "Eslatma": "Pipeline + manifest + aylanma sinov"}, ]))
| Mavzu | Eslatma |
|---|---|
| Split | Hamma narsadan OLDIN. stratify=y klassifikatsiyada |
| Scaler | fit faqat train da. Pipeline ichida bo'lsa — muammo yo'q |
| Vaqt qatori | Xronologik split, TimeSeriesSplit, differensiyalash |
| Guruhlangan ma'lumot | GroupShuffleSplit — bitta obyekt bitta bo'lakda |
| Daraxtlar | Scaling kerak emas |
| KNN, SVM, NN | Scaling SHART |
| random_state | Har joyda qo'ying — takrorlanish uchun |
| Neyron tarmoq | Kamida 3 seed, eng yomonini ham yozing |
| Test to'plami | Bir marta. Ikkinchi marta qarasangiz — u val |
| Saqlash | Pipeline + manifest + aylanma sinov |
Kutubxona import to'plami
python19 qator
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import (train_test_split, cross_val_score, GridSearchCV, StratifiedKFold, GroupShuffleSplit, TimeSeriesSplit) from sklearn.pipeline import Pipeline from sklearn.compose import ColumnTransformer from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.dummy import DummyClassifier, DummyRegressor from sklearn.linear_model import LogisticRegression, Ridge, Lasso from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier from sklearn.metrics import (accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, average_precision_score, confusion_matrix, classification_report, mean_absolute_error, r2_score) import joblib
Oxirgi so'z
python13 qator
show(pd.DataFrame([ {"Qoida": "1. Baza birinchi", "Nega": "Baza bo'lmasa, natija ma'nosiz"}, {"Qoida": "2. Split hammasidan oldin", "Nega": "Keyin qilingan har amal leakage xavfi"}, {"Qoida": "3. Pipeline majburiy", "Nega": "Leakage ni tuzilish darajasida to'xtatadi"}, {"Qoida": "4. Har raqam o'lchangan bo'lsin", "Nega": "Taxmin qilingan raqam — yolg'on"}, {"Qoida": "5. Taxminingiz rad etilsa, yozib qo'ying", "Nega": "Eng qimmatli bilim shu yerda"}, ])) print() print("Bu kitobda men bir necha marta xato taxmin qildim va o'lchov meni rad etdi:") print("CNN markazlashgan rasmda ustun kelmadi, LSTM beqaror chiqdi, TF-IDF") print("transformerdan yuqori bo'ldi, ustun tartibi muhim emas ekan.") print() print("Har safar men taxminni emas, O'LCHOVNI yozdim. Siz ham shunday qiling.")
Chiqish
Bu kitobda men bir necha marta xato taxmin qildim va o'lchov meni rad etdi: CNN markazlashgan rasmda ustun kelmadi, LSTM beqaror chiqdi, TF-IDF transformerdan yuqori bo'ldi, ustun tartibi muhim emas ekan. Har safar men taxminni emas, O'LCHOVNI yozdim. Siz ham shunday qiling.
| Qoida | Nega |
|---|---|
| 1. Baza birinchi | Baza bo'lmasa, natija ma'nosiz |
| 2. Split hammasidan oldin | Keyin qilingan har amal leakage xavfi |
| 3. Pipeline majburiy | Leakage ni tuzilish darajasida to'xtatadi |
| 4. Har raqam o'lchangan bo'lsin | Taxmin qilingan raqam — yolg'on |
| 5. Taxminingiz rad etilsa, yozib qo'ying | Eng qimmatli bilim shu yerda |
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.