Что такое предсказание?
Предсказание (prediction) — это применение обученной модели к новым данным для получения прогноза значения целевой переменной.
Жизненный цикл модели:
1. ОБУЧЕНИЕ (Training)
├── Данные: X_train, y_train
├── Процесс: model.fit(X_train, y_train)
└── Результат: Модель находит закономерности
2. ПРЕДСКАЗАНИЕ (Prediction)
├── Данные: X_new (БЕЗ y!)
├── Процесс: y_pred = model.predict(X_new)
└── Результат: Получаем предсказанные значения
Простая аналогия:
Обучение — это как учитель объясняет правило: "Площадь прямоугольника = длина × ширина"
Предсказание — это применение правила: дан прямоугольник 5×3, площадь = 15
Метод predict() в sklearn
Базовый синтаксис:
from sklearn.linear_model import LinearRegression
# 1. Создание модели
model = LinearRegression()
# 2. Обучение (модель учится на данных)
model.fit(X_train, y_train)
# 3. Предсказание (модель применяет знания)
y_pred = model.predict(X_test)
Что принимает predict():
# predict() принимает массив признаков (X)
# Форма: (n_samples, n_features)
# Предсказание для одного объекта
X_new = np.array([[65, 2, 5]]) # 2D массив! Даже для одного объекта
y_pred = model.predict(X_new)
print(y_pred) # [45.23] — одно предсказание
# Предсказание для нескольких объектов
X_new = np.array([
[65, 2, 5],
[70, 3, 7],
[80, 3, 9]
])
y_pred = model.predict(X_new)
print(y_pred) # [45.23, 52.10, 61.45] — три предсказания
Что возвращает predict():
y_pred = model.predict(X_test)
# Возвращает numpy array
print(type(y_pred)) # <class 'numpy.ndarray'>
# Размер = количество объектов
print(y_pred.shape) # (20,) — 20 предсказаний
# Можно индексировать
print(y_pred[0]) # Первое предсказание
print(y_pred[-1]) # Последнее предсказание
Типы предсказаний
1. Предсказание на тестовой выборке
Цель: Оценить качество модели на данных, которые она не видела
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_absolute_error
# Разделение данных
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Обучение
model = LinearRegression()
model.fit(X_train, y_train)
# Предсказание на test
y_test_pred = model.predict(X_test)
# Сравнение с реальными значениями
print("Реальные значения:", y_test.values[:5])
print("Предсказанные:", y_test_pred[:5])
# Оценка качества
r2 = r2_score(y_test, y_test_pred)
mae = mean_absolute_error(y_test, y_test_pred)
print(f"R² на тестовой выборке: {r2:.4f}")
print(f"Средняя ошибка: {mae:.2f}")
2. Предсказание на обучающей выборке
Цель: Проверить, как модель работает на данных, на которых обучалась
# Предсказание на train
y_train_pred = model.predict(X_train)
# Оценка
train_r2 = r2_score(y_train, y_train_pred)
test_r2 = r2_score(y_test, y_test_pred)
print(f"R² на train: {train_r2:.4f}")
print(f"R² на test: {test_r2:.4f}")
# Анализ переобучения
if train_r2 - test_r2 > 0.1:
print("⚠️ Возможно переобучение!")
else:
print("✅ Модель генерализует хорошо")
3. Предсказание для новых данных
Цель: Применить модель в реальной жизни для прогнозирования
# Новая квартира, которую хотим оценить
new_apartment = np.array([[75, 3, 5, 1.2]]) # площадь, комнаты, этаж, до метро
# Предсказание
predicted_price = model.predict(new_apartment)
print(f"Предсказанная цена: {predicted_price[0]:.2f} тыс. руб.")