Гид по технологиям

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

8 min read Data Science Обновлено 20 Sep 2025
Регрессия в Python: линейная, полиномиальная, логистическая
Регрессия в Python: линейная, полиномиальная, логистическая

Логотип Python/Seaborn поверх стилизованной диаграммы с гистограммой, волнообразной линией и точками, символизирующий визуализацию данных.

Быстрые ссылки

  • Простая линейная регрессия: поиск трендов

  • Множественная линейная регрессия: переход к трём и более измерениям

  • Нелинейная регрессия: аппроксимация кривых

  • Логистическая регрессия: работа с бинарными метками

Введение

Собрать данные — только начало. Таблицы можно заполнить, но без инструментов анализа данные бесполезны. Регрессия помогает найти количественные связи между переменными и строить предсказательные модели. 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)

Точечный график: чаевые по сравнению с суммой счёта в Seaborn.

Глядя на график, видно приближение линейного тренда: чем больше сумма счёта, тем выше чаевые. Построим линию регрессии:

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)

Результат простой линейной регрессии Pingouin в блокноте Jupyter.

Совет: округление облегчает чтение таблицы. Обратите внимание на 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()

Вывод первых значений x и y в DataFrame Pandas.

Построим рассеяние:

sns.relplot(x='x', y='y', data=df)

Точечный график, демонстрирующий параболическу форму данных.

Seaborn поддерживает полиномиальную аппроксимацию через параметр order в regplot:

sns.regplot(x='x', y='y', order=2, data=df)

Параболическая аппроксимация, выполненная Seaborn.

Другой подход — явно добавить степенные признаки и решить задачу как линейную регрессию по новым признакам:

df['x2'] = df['x']**2
pg.linear_regression(df[['x', 'x2']], df['y']).round(2)

Результат квадратичной регрессии с Pingouin.

Поскольку данные генерировались по точной формуле, 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)

Результат логистической регрессии в Pingouin.

В статистическом выводе обращайте внимание на p-value (в таблице pval). В этом примере pval близко к 0, что указывает на статистически значимую связь между ценой билета и выживанием.

Важно

Низкий p-value указывает на статистическую значимость, но не доказывает причинность. Проверьте возможные искажения и отбрасывайте мультиколлинеарность.

Практическая методология для регрессионного анализа (шаги)

  1. Исследовательский анализ данных (EDA): визуализация распределений, диаграммы рассеяния, матрица корреляций.
  2. Подготовка данных: обработка пропусков, кодирование категорий, масштабирование, создание признаков.
  3. Разделение выборки: train / test (и опционально validation).
  4. Выбор модели: линейная, полиномиальная, логистическая, регуляризованные методы, деревья.
  5. Обучение и валидация: метрики (RMSE, MAE, AUC), кросс-валидация.
  6. Оценка устойчивости: проверка на мультиколлинеарность, анализ остатков, проверка гетероскедастичности.
  7. Интерпретация коэффициентов и проверка значимости.
  8. Деплой и мониторинг: 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 шагов)

  1. Загрузить и почистить данные.
  2. Визуализировать ключевые отношения.
  3. Проверить корреляции и VIF.
  4. Обучить базовую модель и получить метрики.
  5. Итеративно улучшать: признаки → регуляризация → валидировать.

Ментальные модели и эвристики

  • «Разбить проблему на признаки»: подумайте, какие факторы логично влияют на отклик.
  • «Начни с простого»: сначала простая линейная модель — она даёт базовую интерпретацию.
  • «Проверяй остатки»: систематические паттерны в остатках говорят о неверной модели.

Когда регрессия не подойдёт (галерея кейсов)

  • Цель — распределение меток не зависит от признаков (нет предиктивной силы).
  • Сильные нелинейности с высоким уровнем шума и сложными взаимодействиями, где деревья/ансамбли показывают преимущество.
  • Задача с сильными требованиями к объясняемости, но данные не позволяют интерпретировать коэффициенты.

Пример плейбука для быстрой валидации (SOP)

  1. Скопировать исходный датасет и работать на копии.
  2. Провести предобработку: заполнение пропусков, удаление явных ошибок.
  3. Разделить выборку: 70/30 или 80/20.
  4. Обучить baseline-модель (линейную без регуляризации).
  5. Оценить метрики и проанализировать остатки.
  6. Добавить регуляризацию, снова оценить.
  7. Если нужна нелинейность — пробовать полиномы или ансамбли.
  8. Подготовить уменьшенную интерпретируемую модель для продакшна (если требуется).

Мониторинг и эксплуатация

  • Следите за drift-метриками: среднее, стандартное отклонение признаков и целевой переменной.
  • Реагируйте на деградацию модели: триггер — падение ключевой бизнес-метрики на заданный порог.
  • Храните версии моделей и артефактов для возможности отката.

Безопасность и приватность

  • Минимизируйте хранение персональных данных в тренировочных наборах.
  • Анонимизируйте чувствительные поля перед публикацией модели.
  • Проверьте соответствие требованиям локального законодательства по обработке данных.

Краткое резюме

Регрессия в Python — гибкий инструмент для анализа и предсказания. Начинайте с простых моделей, визуализируйте данные, проверяйте остатки и используйте регуляризацию при необходимости. Включайте проверку стабильности и мониторинг при деплое.


Краткий список литературы и полезных инструментов (ориентиры): Seaborn, Pandas, NumPy, Pingouin, scikit-learn, statsmodels.

1-line glossary:

  • R²: доля объяснённой дисперсии, от 0 до 1.

Критические заметки:

  • Не пытайтесь интерпретировать коэффициенты без проверки предпосылок (линейность, независимость остатков, нормальность ошибок при малых выборках).

Конец статьи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

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

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

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

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

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

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

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

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

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

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

Проверка целостности файлов — MD5, SHA и утилиты
Инструменты

Проверка целостности файлов — MD5, SHA и утилиты