🔴 Сложный ⏱️ 25 минут

Линейная регрессия: предсказываем будущее по данным

Линейная регрессия: предсказываем будущее по данным

🎯 Зачем это нужно?

Представь, что ты продаёшь подержанные iPhone на Авито 📱. Как определить справедливую цену? Интуитивно понятно: чем новее телефон, тем дороже. Но насколько дороже? Вот тут нам поможет линейная регрессия!

🏠 Недвижимость: Сбер предсказывает цену квартиры по площади, району, этажу 📈 Финансы: Goldman Sachs прогнозирует курс валют по экономическим показателям
🎬 Стриминг: Netflix предсказывает рейтинг фильма по бюджету, жанру, актёрам 🛒 E-commerce: Wildberries планирует продажи по сезону, трендам, рекламе

📚 История вопроса

Метод придумал Карл Гаусс в 1795 году (ему было всего 18!) для предсказания орбиты астероида Церера 🪐. Астрономы потеряли астероид из виду, и нужно было понять, где его искать. Гаусс взял несколько наблюдений и построил прямую линию, которая лучше всего описывала траекторию.

Результат? Астероид нашли точно там, где предсказал Гаусс! С тех пор линейная регрессия стала основой всего машинного обучения.

💡 Интуиция

Представь: у тебя есть данные о площади квартир и их ценах в твоём районе. Если нарисовать точки на графике (x = площадь, y = цена), то они будут примерно выстраиваться вдоль прямой линии.

[МЕДИА: image_01] Описание: График рассеяния с точками данных квартир (площадь vs цена) и проведённой через них линией тренда Промпт: “scatter plot showing apartment data points, square meters on x-axis, price on y-axis, best-fit line drawn through points, modern data visualization style, clean background”

Линейная регрессия находит самую лучшую прямую линию через эти точки. “Лучшую” в смысле минимальной суммы квадратов ошибок - отсюда название метод наименьших квадратов (МНК).

Математически ищем функцию: y = w₁x + w₀

  • w₁ - наклон (на сколько растёт цена за каждый м²)
  • w₀ - сдвиг (базовая цена квартиры)

📐 Формальное определение

Дана выборка (xᵢ, yᵢ) для i = 1..n. Ищем параметры w₁, w₀ такие, что минимизируют функцию потерь:

L(w₁, w₀) = Σᵢ (yᵢ - ŷᵢ)² = Σᵢ (yᵢ - w₁xᵢ - w₀)²

где ŷᵢ = w₁xᵢ + w₀ - предсказание модели.

Аналитическое решение (формула МНК):

  • w₁ = Σᵢ(xᵢ - x̄)(yᵢ - ȳ) / Σᵢ(xᵢ - x̄)²
  • w₀ = ȳ - w₁x̄

где x̄, ȳ - средние значения.

Градиентный спуск:

# Обновляем веса в сторону антиградиента
w1 = w1 - learning_rate * L/w1
w0 = w0 - learning_rate * L/w0

🔍 Примеры с разбором

Пример 1: Цены на iPhone

Данные с Авито (условные):

  • 2 года, 25000₽
  • 1 год, 40000₽
  • 3 года, 15000₽
  • 0 лет, 50000₽

[МЕДИА: image_02] Описание: Пошаговое решение задачи линейной регрессии для цен iPhone Промпт: “step-by-step mathematical solution showing iPhone price regression, data points, calculations, formula derivation, educational diagram style”

Решение: x̄ = (2+1+3+0)/4 = 1.5 ȳ = (25000+40000+15000+50000)/4 = 32500

w₁ = [(2-1.5)(25000-32500) + (1-1.5)(40000-32500) + (3-1.5)(15000-32500) + (0-1.5)(50000-32500)] / [(2-1.5)² + (1-1.5)² + (3-1.5)² + (0-1.5)²] w₁ = [-3750 - 3750 - 26250 + 26250] / [0.25 + 0.25 + 2.25 + 2.25] = -7500 / 5 = -15000

w₀ = 32500 - (-15000) × 1.5 = 55000

Итого: Цена = 55000 - 15000 × возраст

Проверим: новый iPhone (0 лет) = 55000₽ ✅

Пример 2: Sklearn реализация

from sklearn.linear_model import LinearRegression
import numpy as np

# Данные: годы обучения vs зарплата (тыс. руб.)
X = np.array([[11], [16], [18], [20]])  # образование
y = np.array([50, 80, 100, 120])        # зарплата

model = LinearRegression()
model.fit(X, y)

print(f"Коэффициент: {model.coef_[0]:.1f}")     # наклон
print(f"Свободный член: {model.intercept_:.1f}") # сдвиг

# Предсказание для магистра (18 лет обучения)
prediction = model.predict([[18]])
print(f"Зарплата с магистратурой: {prediction[0]:.0f}к")

🎮 Практика

Базовый уровень 🟢

Задание 1: Данные о росте и весе:

  • Рост: 160см, Вес: 55кг
  • Рост: 170см, Вес: 65кг
  • Рост: 180см, Вес: 75кг

Найди формулу зависимости веса от роста.

Задание 2: Время в TikTok vs оценки:

  • 1 час → 4.5 балла
  • 3 часа → 3.5 балла
  • 5 часов → 2.5 балла

Сколько будет средний балл при 4 часах в день?

Задание 3: Напиши код на Python для предыдущей задачи используя sklearn.

Продвинутый уровень 🟡

Задание 4: Дана выборка (x,y): (1,3), (2,5), (3,7), (4,9), (5,11). Найди аналитически w₁ и w₀. Какая получилась R² метрика?

Задание 5: Реализуй градиентный спуск для линейной регрессии:

def gradient_descent(X, y, learning_rate=0.01, epochs=1000):
    w1, w0 = 0, 0  # начальные веса
    # твой код здесь
    return w1, w0

Задание 6: У тебя есть данные продаж мороженого vs температура. При какой температуре продажи максимальны, если регрессия даёт: продажи = 10×температура - 50?

Челлендж 🔴

Задание 7: Полиномиальная регрессия: как изменится решение, если добавить признак x²? Найди оптимальные w₂, w₁, w₀ для y = w₂x² + w₁x + w₀

Задание 8: Регуляризация: реализуй Ridge регрессию (L2 регуляризация). Как влияет параметр α на веса?

⚠️ Частые ошибки

Ошибка: “Линейная регрессия всегда работает хорошо” ✅ Правильно: Работает только при линейной зависимости
💡 Почему: Если данные нелинейны (например, экспоненциальный рост), линейная модель даст плохие предсказания

Ошибка: Не проверяют переобучение (overfitting) ✅ Правильно: Делят данные на train/validation/test 💡 Почему: Модель может отлично работать на обучающих данных, но плохо на новых

Ошибка: Забывают про выбросы (outliers) ✅ Правильно: Анализируют и обрабатывают аномальные значения 💡 Почему: Один выброс может сильно сместить всю прямую

Ошибка: Путают корреляцию и причинность ✅ Правильно: Корреляция ≠ причинность!
💡 Почему: То, что продажи мороженого коррелируют с утоплениями, не значит, что мороженое вызывает утопления (просто летом и то, и другое происходит чаще)

🎓 Главное запомнить

✅ Линейная регрессия ищет лучшую прямую через точки данных ✅ Минимизируем сумму квадратов ошибок: L = Σ(y - ŷ)²
✅ Применяется везде: от цен на Авито до алгоритмов Netflix

🔗 Связь с другими темами

Назад: В уроке 309 изучали основы машинного обучения - линейная регрессия это простейшая ML модель Вперёд: Далее изучим логистическую регрессию (для классификации), полиномиальную регрессию (для нелинейных данных), и регуляризацию (борьба с переобучением)

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!