Статья Автор: Деникина Н.В., Деникин А.В.

Предсказания в машинном обучении

Что такое предсказание?

Предсказание (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} тыс. руб.")

 

Печать