Cum să construiești un model de clasificare
In this tutorial, you'll learn how to build a classification model using Random Forest and Logistic Regression in sklearn, from data preparation to evaluation, for predicting discrete categories.
Problema
Vrei să prezici o categorie — dacă un email e spam sau nu, dacă un client va cumpăra sau nu, dacă o tranzacție e frauduloasă. Modelele de clasificare sunt soluția, dar alegerea algoritmului greșit sau implementarea incorectă duce la predicții slabe.
Soluția Greșită
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]
# Fara preprocesare, fara impartire, fara evaluare
model = RandomForestClassifier()
model.fit(X, y)
print(model.score(X, y))
Problema: Nu ai separat datele, nu ai scalat, nu ai evaluat corect. Scorul e artificial de mare.
Soluția Corectă
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
import pandas as pd
df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
predictii = model.predict(X_test)
print(classification_report(y_test, predictii))
Output:
precision recall f1-score support
0 0.95 0.97 0.96 100
1 0.93 0.89 0.91 60
accuracy 0.94 160
Implementare Pas cu Pas
1. Logistic Regression — rapid și interpretabil
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
pipeline = make_pipeline(
StandardScaler(),
LogisticRegression(max_iter=1000, random_state=42)
)
pipeline.fit(X_train, y_train)
print(f"Acuratete Logistic Regression: {pipeline.score(X_test, y_test):.2f}")
2. Random Forest — mai puternic, fără scalare
rf = RandomForestClassifier(n_estimators=200, max_depth=10, random_state=42)
rf.fit(X_train, y_train)
print(f"Acuratete Random Forest: {rf.score(X_test, y_test):.2f}")
3. Compară și alege cel mai bun model
from sklearn.metrics import roc_auc_score
# Probabilitati pentru ROC-AUC
prob_rf = rf.predict_proba(X_test)[:, 1]
prob_lr = pipeline.predict_proba(X_test)[:, 1]
print(f"AUC Random Forest: {roc_auc_score(y_test, prob_rf):.3f}")
print(f"AUC Logistic Regression: {roc_auc_score(y_test, prob_lr):.3f}")
Sfaturi pentru Prevenire
- Folosește
stratify=yîn train_test_split — menține proporția claselor - Pentru clase dezechilibrate, setează
class_weight="balanced" - Logistic Regression are nevoie de features scalate; Random Forest, nu
- Începe cu o Logistic Regression simplă ca baseline
- Salvează modelul cu
joblib.dumpdupă antrenare
Greșeli Comune
- Nu scalezi features pentru Logistic Regression — convergența e lentă sau greșită
- Ignori clasele dezechilibrate — acuratețea poate fi 95% dar clasa minoritară e ignorată
- Folosești prea mulți arbori în Random Forest — dincolo de 200, random forest se stabilizează, nu crește performanța
- Nu setezi random_state — rezultatele nu sunt reproductibile
- Evaluezi doar cu acuratețe — ignoră precizia, recall-ul și F1
Întrebări Frecvente
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. DodaTech tools integrate seamlessly with sklearn for enhanced productivity and security.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro