Регрессия в Python: линейная, полиномиальная и логистическая

Быстрые ссылки
Простая линейная регрессия: поиск трендов
Множественная линейная регрессия: переход к трём и более измерениям
Нелинейная регрессия: аппроксимация кривых
Логистическая регрессия: работа с бинарными метками
Введение
Собрать данные — только начало. Таблицы можно заполнить, но без инструментов анализа данные бесполезны. Регрессия помогает найти количественные связи между переменными и строить предсказательные модели. Python позволяет быстро экспериментировать, визуализировать и валидировать модели, а библиотеки вроде Seaborn, NumPy, Pandas и Pingouin делают процесс удобным и повторяемым.
Важно: регрессия — это модель. Она может объяснить шаблоны в данных, но не автоматически доказывает причинно-следственные связи.
Ключевые термины (1 строка каждый)
- Независимая переменная: фактор, которым объясняют изменения (обычно x).
- Зависимая переменная: то, что пытаются предсказать (обычно y).
- Коэффициент регрессии: число, определяющее вклад переменной в прогноз.
- R²: доля дисперсии отклика, объяснённая моделью.
- p-value: вероятность получить наблюдение при нулевой гипотезе.
Простая линейная регрессия: поиск трендов
Простая линейная регрессия моделирует связь между двумя переменными как прямую: y = m*x + b. Ниже показан рабочий пример на датасете чаевых (tips) из Seaborn.
Сначала импортируем Seaborn:
import seaborn as sns
Загрузим датасет tips:
tips = sns.load_dataset('tips')
Если вы в Jupyter Notebook, включите отрисовку графиков внутри блокнота:
%matplotlib inline
Построим рассеяние:
sns.relplot(x='total_bill', y='tip', data=tips)
Глядя на график, видно приближение линейного тренда: чем больше сумма счёта, тем выше чаевые. Построим линию регрессии:
sns.regplot(x='total_bill', y='tip', data=tips)
Для формального анализа используем Pingouin. Метод linear_regression вычислит коэффициенты:
import pingouin as pg
pg.linear_regression(tips['total_bill'], tips['tip']).round(2)
Совет: округление облегчает чтение таблицы. Обратите внимание на R² (в таблице как r2) — в примере оно около 0.46. Квадратный корень даёт коэффициент корреляции ≈ 0.68, что указывает на заметную положительную связь.
Коэффициенты модели переводятся в уравнение прямой. Если коэффициент при total_bill равен 0.11, а пересечение с осью y — 0.92, то модель выглядит так:
tip = 0.92 + 0.11 * total_bill
Функция-прогноз в Python:
def tip(total_bill):
return 0.92 + 0.11 * total_bill
Важно: в Python отступы значимы — используйте 4 пробела.
Пример прогноза для счёта 100 $:
tip(100)
Ожидаемый размер чаевых в примере — около 12 $.
Множественная линейная регрессия: учитывать больше факторов
Множественная регрессия расширяет идею на несколько независимых переменных. Форма уравнения: y = b0 + b1x1 + b2x2 + … . Рассмотрим пример, где помимо суммы счёта участвует размер компании (size).
pg.linear_regression(tips[['total_bill', 'size']], tips['tip']).round(2)
Обратите внимание на двойные скобки для передачи двумерного массива признаков. В примере r² остался близким к предыдущему значению, что означает, что модель объясняет схожую часть дисперсии. Это может указывать на корреляцию между признаками или на то, что новый признак не добавляет новую информацию.
Обновлённая модель-прогноз может выглядеть так:
def tip(total_bill, size):
return 0.67 + 0.09 * total_bill + 0.19 * size
Нелинейная регрессия: аппроксимация кривых
Линейные модели не всегда подходят. Часто данные имеют квадратичные или более сложные тренды. Рассмотрим пример с искусственной параболой.
Сгенерируем точки с помощью NumPy:
import numpy as np
x = np.linspace(-100, 100, 1000)
Построим квадратичную зависимость:
y = 4 * x**2 + 2 * x + 3
Создадим DataFrame в Pandas:
import pandas as pd
df = pd.DataFrame({'x': x, 'y': y})
Просмотр первых строк:
df.head()
Построим рассеяние:
sns.relplot(x='x', y='y', data=df)
Seaborn поддерживает полиномиальную аппроксимацию через параметр order в regplot:
sns.regplot(x='x', y='y', order=2, data=df)
Другой подход — явно добавить степенные признаки и решить задачу как линейную регрессию по новым признакам:
df['x2'] = df['x']**2
pg.linear_regression(df[['x', 'x2']], df['y']).round(2)
Поскольку данные генерировались по точной формуле, R² = 1. В реальных данных R² обычно ниже из-за шумов.
Простая функция для получения предсказания квадратичной модели:
def quad(x):
return 3 + 2 * x + 4 * x**2
Метод можно расширить на полиномы более высокой степени, но остерегайтесь переобучения.
Логистическая регрессия: бинарные ответы
Когда отклик бинарный (0/1), применяют логистическую регрессию. Она моделирует вероятность события через логистическую функцию.
Загрузим датасет пассажиров Титаника и проверим, зависела ли выживаемость от стоимости билета (fare):
titanic = sns.load_dataset('titanic')
titanic.head()
Seaborn умеет строить логистические кривые с помощью lmplot:
sns.lmplot(x='fare', y='survived', logistic=True, data=titanic)
Чтобы формально проверить связь, используем Pingouin:
pg.logistic_regression(titanic['fare'], titanic['survived']).round(2)
В статистическом выводе обращайте внимание на p-value (в таблице pval). В этом примере pval близко к 0, что указывает на статистически значимую связь между ценой билета и выживанием.
Важно
Низкий p-value указывает на статистическую значимость, но не доказывает причинность. Проверьте возможные искажения и отбрасывайте мультиколлинеарность.
Практическая методология для регрессионного анализа (шаги)
- Исследовательский анализ данных (EDA): визуализация распределений, диаграммы рассеяния, матрица корреляций.
- Подготовка данных: обработка пропусков, кодирование категорий, масштабирование, создание признаков.
- Разделение выборки: train / test (и опционально validation).
- Выбор модели: линейная, полиномиальная, логистическая, регуляризованные методы, деревья.
- Обучение и валидация: метрики (RMSE, MAE, AUC), кросс-валидация.
- Оценка устойчивости: проверка на мультиколлинеарность, анализ остатков, проверка гетероскедастичности.
- Интерпретация коэффициентов и проверка значимости.
- Деплой и мониторинг: SLI/SLO, регулярная переоценка модели.
Когда регрессия даёт ошибочные или вводящие в заблуждение результаты
- Если данные содержат сильные выбросы, модель может смещаться.
- Если признаки мультиколлинеарны, оценки коэффициентов нестабильны.
- Если зависимость не соответствует выбранной форме (линейности), модель плохо предсказывает.
- Если данные несбалансированы для классификации, логистическая регрессия даёт смещённые вероятности.
Альтернативные подходы
- Регуляризация: Ridge, Lasso — для борьбы с переобучением и мультиколлинеарностью.
- Деревья решений и ансамбли (Random Forest, Gradient Boosting) — для нелинейных зависимостей без явного создания признаков.
- SVM с ядрами — когда нужна нелинейная граница классификации.
- Нейронные сети — для сильно нелинейных и высокоразмерных задач.
Проверки и критерии приёмки
Критерии приёмки модели регрессии:
- Минимальная требуемая метрика на тестовой выборке (например, RMSE < X или AUC > 0.8).
- Отсутствие сильной автокорреляции остатков (тест Дарбина–Уотсона).
- Отсутствие сильной мультиколлинеарности (VIF < 10 для признаков).
- Стабильность метрик при кросс-валидации (малое стандартное отклонение).
- Интерпретируемость (если требуется) и соответствие бизнес-правилам.
Рольовые чеклисты
Аналитик:
- Провести EDA и визуализацию.
- Проверить пропуски и выбросы.
- Сформировать отчёт о корреляциях.
Data Scientist:
- Выбрать модель(и) и провести кросс-валидацию.
- Выполнить регуляризацию и подбор гиперпараметров.
- Подготовить поясняющую документацию для стейкхолдеров.
Инженер ML:
- Автоматизировать пайплайн препроцессинга.
- Реализовать мониторинг производительности модели.
- Обеспечить CI/CD для обновления модели.
Шаблон: чеклист для регрессионного эксперимента
Шаг | Что проверить |
---|---|
Данные | Нет ли пропусков, корректные типы колонок |
EDA | Гистограммы, ящики с усами, scatter matrix |
Преобразования | Масштабирование, кодирование категорий |
Модель | Выбранная архитектура и мотивация |
Валидация | Разбиение на train/test, кросс-валидация |
Метрики | RMSE/MAE для регрессии, AUC/Accuracy для классификации |
Интерпретация | Коэффициенты, доверительные интервалы |
Деплой | Сбор метрик, откат при деградации |
Примеры тестовых случаев и критерии приёмки
- Тест: модель воспроизводит R² ≥ baseline на тестовой выборке. Ожидаемый результат: True.
- Тест: при добавлении шума уровень метрик падает не более чем на 10%. Ожидаемый результат: True.
- Тест: коэффициенты значимы (p-value < 0.05) для действительно влияющих признаков. Ожидаемый результат: True.
Универсальные практики для надёжных выводов
- Всегда визуализируйте данные и остатки модели.
- Оцените влияние каждого признака (например, через permutation importance).
- Применяйте регуляризацию при большом числе признаков.
- Используйте стратифицированное разбиение для несбалансированных классов.
Мини‑методология: быстрый рецепт (5 шагов)
- Загрузить и почистить данные.
- Визуализировать ключевые отношения.
- Проверить корреляции и VIF.
- Обучить базовую модель и получить метрики.
- Итеративно улучшать: признаки → регуляризация → валидировать.
Ментальные модели и эвристики
- «Разбить проблему на признаки»: подумайте, какие факторы логично влияют на отклик.
- «Начни с простого»: сначала простая линейная модель — она даёт базовую интерпретацию.
- «Проверяй остатки»: систематические паттерны в остатках говорят о неверной модели.
Когда регрессия не подойдёт (галерея кейсов)
- Цель — распределение меток не зависит от признаков (нет предиктивной силы).
- Сильные нелинейности с высоким уровнем шума и сложными взаимодействиями, где деревья/ансамбли показывают преимущество.
- Задача с сильными требованиями к объясняемости, но данные не позволяют интерпретировать коэффициенты.
Пример плейбука для быстрой валидации (SOP)
- Скопировать исходный датасет и работать на копии.
- Провести предобработку: заполнение пропусков, удаление явных ошибок.
- Разделить выборку: 70/30 или 80/20.
- Обучить baseline-модель (линейную без регуляризации).
- Оценить метрики и проанализировать остатки.
- Добавить регуляризацию, снова оценить.
- Если нужна нелинейность — пробовать полиномы или ансамбли.
- Подготовить уменьшенную интерпретируемую модель для продакшна (если требуется).
Мониторинг и эксплуатация
- Следите за drift-метриками: среднее, стандартное отклонение признаков и целевой переменной.
- Реагируйте на деградацию модели: триггер — падение ключевой бизнес-метрики на заданный порог.
- Храните версии моделей и артефактов для возможности отката.
Безопасность и приватность
- Минимизируйте хранение персональных данных в тренировочных наборах.
- Анонимизируйте чувствительные поля перед публикацией модели.
- Проверьте соответствие требованиям локального законодательства по обработке данных.
Краткое резюме
Регрессия в Python — гибкий инструмент для анализа и предсказания. Начинайте с простых моделей, визуализируйте данные, проверяйте остатки и используйте регуляризацию при необходимости. Включайте проверку стабильности и мониторинг при деплое.
Краткий список литературы и полезных инструментов (ориентиры): Seaborn, Pandas, NumPy, Pingouin, scikit-learn, statsmodels.
1-line glossary:
- R²: доля объяснённой дисперсии, от 0 до 1.
Критические заметки:
- Не пытайтесь интерпретировать коэффициенты без проверки предпосылок (линейность, независимость остатков, нормальность ошибок при малых выборках).
Конец статьи.
Похожие материалы

Подключение iPhone к роботу‑пылесосу

Как эффективно работать со смартфона

Как просмотреть и удалить историю поиска YouTube

Регрессия в Python: линейная, полиномиальная, логистическая

Как смотреть франшизы: порядок выхода или хронология
