Линейная регрессия: предсказываем будущее по данным
🎯 Зачем это нужно?
Представь, что ты продаёшь подержанные 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
💪 Начать тренировку