Asosiy qismga o'tish

Cheat sheet va protokol kartasi

48-bob 9 kod bloki 1774 so'z

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"},
]))
#QadamKod
1Faylni och, shaklini ko'rdf.shape, df.head(), df.info()
2Target ni aniqladf[target].value_counts()
3Vazifa turini belgilasinf soni -> klassifikatsiya / regressiya
4Bo'sh qiymatlarni sanadf.isna().sum()
5Tuzoq ustunlarni tashlaID, leakage, matn-son
6SPLIT (hammasidan oldin)train_test_split(stratify=y)
7Baza qurDummyClassifier / DummyRegressor
8Pipeline bilan birinchi modelPipeline([tayyorlash, model])
9To'g'ri metrikani tanlaF1 / PR-AUC / MAE
10Cross-validationcross_val_score(cv=5)
11Xato tahliliqaysi qatorlarda xato qilyapti?
12Saqla va hujjatlashtirjoblib + 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"},
]))
VaziyatBirinchi tanlovKeyin
Jadval, kam ma'lumot (<1000)LogisticRegression / RidgeRandomForest
Jadval, ko'p ma'lumotLightGBM / XGBooststacking
Ko'p kategorik ustunCatBoosttarget encoding + boosting
MatnTF-IDF + LogisticRegressionfine-tuned transformer
Rasmtayyor CNN (transfer learning)fine-tuning
Vaqt qatorinaive baza + lag + Ridgeboosting (differensiyalangan)
Tushuntirish majburiychiziqli model / bitta daraxtSHAP 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"},
]))
HolatMetrika
Klassifikatsiya, muvozanatliaccuracy, ROC-AUC
Klassifikatsiya, nomutanosibF1, PR-AUC, recall@precision
Xato narxi assimetrikmaxsus: FN va FP ga vazn
Regressiya, chetdagi qiymat borMAE (RMSE emas)
Regressiya, katta xato juda yomonRMSE
Nisbiy xato muhimMAPE (nolga ehtiyot bo'ling)
Reyting / tartibNDCG, 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"},
]))
BelgiTashxisHarakat
Train past, test pastunderfittingmurakkabroq model, ko'proq feature, kamroq regularizatsiya
Train yuqori, test pastoverfittingko'proq ma'lumot, regularizatsiya, soddaroq model
Ikkisi ham juda yuqoriLEAKAGE ehtimolifeature importance ga qara, ustunni olib tashlab o'lcha
CV tarqoq (katta std)ma'lumot kam yoki bir xil emasko'proq burma, stratifikatsiya, ko'proq ma'lumot
Bitta sinf umuman topilmaydinomutanosiblikclass_weight, threshold, metrikani almashtir
Offline yaxshi, prod yomondrift yoki zanjir farqikirish 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"},
]))
MavzuEslatma
SplitHamma narsadan OLDIN. stratify=y klassifikatsiyada
Scalerfit faqat train da. Pipeline ichida bo'lsa — muammo yo'q
Vaqt qatoriXronologik split, TimeSeriesSplit, differensiyalash
Guruhlangan ma'lumotGroupShuffleSplit — bitta obyekt bitta bo'lakda
DaraxtlarScaling kerak emas
KNN, SVM, NNScaling SHART
random_stateHar joyda qo'ying — takrorlanish uchun
Neyron tarmoqKamida 3 seed, eng yomonini ham yozing
Test to'plamiBir marta. Ikkinchi marta qarasangiz — u val
SaqlashPipeline + 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.
QoidaNega
1. Baza birinchiBaza bo'lmasa, natija ma'nosiz
2. Split hammasidan oldinKeyin qilingan har amal leakage xavfi
3. Pipeline majburiyLeakage ni tuzilish darajasida to'xtatadi
4. Har raqam o'lchangan bo'lsinTaxmin qilingan raqam — yolg'on
5. Taxminingiz rad etilsa, yozib qo'yingEng qimmatli bilim shu yerda

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar