← Назад к вопросам

Как делается прогноз по регрессии?

1.0 Junior🔥 221 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Прогноз по регрессии — процесс предсказания непрерывного числового значения на основе входных признаков. Это фундаментальная задача в машинном обучении, с множеством практических применений.

Общий процесс

Прогнозирование регрессии состоит из нескольких этапов:

  1. Подготовка данных: нормализация, обработка пропусков
  2. Обучение модели: подбор параметров на тренировочном наборе
  3. Валидация: оценка качества на тестовом наборе
  4. Получение предсказаний: применение обученной модели к новым данным

Типы регрессии

Линейная регрессия

Предполагает линейную зависимость между признаками и целевой переменной:

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler

# Нормализация данных
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# Обучение
model = LinearRegression()
model.fit(X_train_scaled, y_train)

# Предсказание
y_pred = model.predict(X_test_scaled)

# Интерпретация коэффициентов
for i, coef in enumerate(model.coef_):
    print(f"Признак {i}: {coef:.4f}")

Полиномиальная регрессия

Когда связь нелинейная, используются полиномиальные признаки:

from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X_train)

model = LinearRegression()
model.fit(X_poly, y_train)

X_test_poly = poly.transform(X_test)
y_pred = model.predict(X_test_poly)

Регуляризованные методы

Для предотвращения переобучения часто используются Ridge и Lasso:

from sklearn.linear_model import Ridge, Lasso

# Ridge (L2-регуляризация)
ridge = Ridge(alpha=1.0)
ridge.fit(X_train_scaled, y_train)
y_pred_ridge = ridge.predict(X_test_scaled)

# Lasso (L1-регуляризация)
lasso = Lasso(alpha=0.1)
lasso.fit(X_train_scaled, y_train)
y_pred_lasso = lasso.predict(X_test_scaled)

Продвинутые методы

Gradient Boosting для регрессии

Особенно эффективен для сложных нелинейных зависимостей:

from sklearn.ensemble import GradientBoostingRegressor
from xgboost import XGBRegressor

# XGBoost часто показывает лучшие результаты
model = XGBRegressor(
    n_estimators=100,
    learning_rate=0.1,
    max_depth=5,
    random_state=42,
    eval_metric="rmse"
)

model.fit(X_train, y_train, eval_set=[(X_test, y_test)], verbose=10)
y_pred = model.predict(X_test)

Метрики оценки

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import numpy as np

# MSE / RMSE
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)

# MAE (более робустна к выбросам)
mae = mean_absolute_error(y_test, y_pred)

# R² (доля объясненной дисперсии)
r2 = r2_score(y_test, y_pred)

print(f"RMSE: {rmse:.4f}")
print(f"MAE: {mae:.4f}")
print(f"R²: {r2:.4f}")

Предсказание с доверительными интервалами

Для практических приложений важны интервалы неопределённости:

from sklearn.ensemble import GradientBoostingRegressor

# Используем квантильную регрессию
model_lower = GradientBoostingRegressor(loss="quantile", alpha=0.05)
model_mean = GradientBoostingRegressor(loss="squared_error")
model_upper = GradientBoostingRegressor(loss="quantile", alpha=0.95)

model_lower.fit(X_train, y_train)
model_mean.fit(X_train, y_train)
model_upper.fit(X_train, y_train)

y_pred_lower = model_lower.predict(X_test)
y_pred_mean = model_mean.predict(X_test)
y_pred_upper = model_upper.predict(X_test)

print(f"Прогноз: {y_pred_mean[0]:.2f}")
print(f"Интервал: [{y_pred_lower[0]:.2f}, {y_pred_upper[0]:.2f}]")

Практические советы

  • Нормализуйте признаки перед использованием линейных моделей
  • Выбирайте метрику в зависимости от задачи (MAE для интерпретируемости, RMSE чувствительна к выбросам)
  • Кросс-валидация необходима для надёжной оценки
  • Анализируйте остатки (residuals) для диагностики проблем
  • Feature engineering часто более эффективен, чем усложнение модели

Выбор метода прогнозирования зависит от характера данных, требований к точности и интерпретируемости, а также наличия времени на обучение и инференс.