Ответ
Прогноз по регрессии — это процесс применения обученной модели для предсказания непрерывного числового значения (например, цены, температуры, спроса) на основе новых входных данных. Вот как я это делаю на практике:
1. Подготовка модели и данных:
- Модель должна быть предварительно обучена на исторических данных. Важно, что новые данные для прогноза должны обрабатываться точно так же, как и тренировочные: применяется то же масштабирование (например,
StandardScaler), кодирование категориальных переменных и обработка пропусков.# Обучение scaler на тренировочных данных from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train)
Масштабирование новых данных с использованием ТОГО ЖЕ scaler
X_new_scaled = scaler.transform(X_new) # Важно: transform, НЕ fit_transform!
**2. Непосредственно прогноз:**
* Прогноз выполняется вызовом метода `.predict()` у обученного объекта модели. На вход подается подготовленный массив признаков.
```python
from sklearn.ensemble import RandomForestRegressor
# Обучение модели (делается один раз)
model = RandomForestRegressor(n_estimators=200, max_depth=10, random_state=42)
model.fit(X_train_scaled, y_train)
# Прогноз для новых данных
predictions = model.predict(X_new_scaled)
print(f"Прогнозируемые значения: {predictions}")
3. Интерпретация и оценка (если есть истинные значения):
- После получения прогнозов я оцениваю их качество на тестовой выборке, если истинные значения (
y_test) известны. Для этого использую метрики:- MAE (Mean Absolute Error): Средняя абсолютная ошибка. Легко интерпретируется (ошибка в тех же единицах, что и целевая переменная).
- RMSE (Root Mean Squared Error): Корень из средней квадратичной ошибки. Сильнее штрафует за большие выбросы в ошибках.
- R² (Коэффициент детерминации): Доля дисперсии целевой переменной, объясненная моделью. Значение 1 — идеальная модель, 0 — модель не лучше среднего.
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score import numpy as np
mae = mean_absolute_error(y_test, predictions) rmse = np.sqrt(mean_squared_error(y_test, predictions)) r2 = r2_score(y_test, predictions) print(f"MAE: {mae:.2f}, RMSE: {rmse:.2f}, R²: {r2:.2f}")
**Ключевой момент:** Качество прогноза напрямую зависит от репрезентативности тренировочных данных и корректности предположений модели (например, линейная регрессия предполагает линейную связь и нормальность остатков). Всегда нужно проводить анализ остатков после обучения.