Skip to content

Cum să construiești un model de regresie

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn how to build a regression model using Linear Regression and Gradient Boosting in sklearn, predicting continuous numeric values like prices, temperatures, or sales.

Problema

Vrei să prezi o valoare numerică — prețul unei case, temperatura de mâine, vânzările lunii următoare. Modelele de regresie sunt soluția, dar o implementare greșită duce la predicții inexacte și erori mari.

Soluția Greșită

import pandas as pd
from sklearn.linear_model import LinearRegression

df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]

# Fara verificarea asumptiei de liniaritate
model = LinearRegression()
model.fit(X, y)
predictii = model.predict(X)

Problema: Regresia liniară presupune o relație liniară între features și target. Dacă relația e neliniară, predicțiile sunt proaste.

Soluția Corectă

from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error, r2_score
import pandas as pd
import numpy as np

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
)

model = GradientBoostingRegressor(n_estimators=200, random_state=42)
model.fit(X_train, y_train)
predictii = model.predict(X_test)

rmse = np.sqrt(mean_squared_error(y_test, predictii))
r2 = r2_score(y_test, predictii)
print(f"RMSE: {rmse:.2f}")
print(f"R2 Score: {r2:.3f}")

Output:

RMSE: 3.45
R2 Score: 0.923

Implementare Pas cu Pas

1. Linear Regression — baseline rapid

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error

lr = LinearRegression()
lr.fit(X_train, y_train)
pred_lr = lr.predict(X_test)

mae = mean_absolute_error(y_test, pred_lr)
r2 = r2_score(y_test, pred_lr)
print(f"MAE: {mae:.2f}, R2: {r2:.3f}")

2. Gradient Boosting — performanță superioară

gbr = GradientBoostingRegressor(
    n_estimators=300, learning_rate=0.05, max_depth=4, random_state=42
)
gbr.fit(X_train, y_train)
pred_gbr = gbr.predict(X_test)

print(f"RMSE Gradient Boosting: {np.sqrt(mean_squared_error(y_test, pred_gbr)):.2f}")

3. Compară rezultatele

print(f"R2 Linear Regression: {r2_score(y_test, pred_lr):.3f}")
print(f"R2 Gradient Boosting: {r2_score(y_test, pred_gbr):.3f}")

Sfaturi pentru Prevenire

  • Începe cu Linear Regression ca baseline — e rapid și interpretabil
  • Dacă R2 e sub 0.7, treci la modele neliniare (Gradient Boosting, Random Forest)
  • Scalează features pentru Linear Regression, dar nu e necesar pentru Gradient Boosting
  • Monitorizează RMSE în aceleași unități ca target-ul
  • Folosește learning_rate mic (0.01-0.1) cu mai mulți estimatori pentru Gradient Boosting

Greșeli Comune

  1. Nu verifici asumpția de liniaritate — Linear Regression pe date neliniare dă erori mari
  2. Ignori outlier-ii — regresia e sensibilă la valori extreme
  3. Folosești prea mulți estimatori în Gradient Boosting — duce la overfitting
  4. Nu scalezi features — coeficienții devin greu de interpretat
  5. Evaluezi doar cu R2 — ignoră RMSE și MAE care sunt mai intuitive

Întrebări Frecvente

### Care e diferența dintre RMSE și MAE?

RMSE penalizează mai mult erorile mari (diferența la pătrat), în timp ce MAE tratează toate erorile uniform. Alege RMSE când erorile mari sunt inacceptabile.

Când să folosesc Gradient Boosting în loc de Linear Regression?

Când relația dintre features și target e neliniară, ai multe date, și performanța e prioritară față de interpretabilitate.

Cum detectez overfitting în regresie?

Compară eroarea pe train și pe test. Dacă RMSE pe train e mult mai mic decât pe test, modelul face overfitting.

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