Перейти к основному содержимому

Линейная регрессия — Excel, R и Python

Аналитику Разработчику

От корреляции к модели

Корреляция (коэффициент Пирсона) измеряет силу линейной связи двух числовых переменных. Простая линейная регрессия подбирает прямую y = β₀ + β₁·x + ε, где y — отклик (например, чаевые), x — предиктор (сумма счёта), β₀ — свободный член (intercept), β₁ — наклон.

Регрессия даёт уравнение для прогноза и тест на значимость наклона. Она не доказывает причинность — см. Причинно-следственный анализ. Проверить производную простой функции или получить LaTeX для отчёта — SymPy — уравнения и производные; график scatter + линия — Matplotlib — примеры.

Теория углублена в Основы статистики; здесь — параллель в трёх средах на учебном наборе tips (счёт total_bill, чаевые tip).


Excel

Перед регрессией полезно уверенно пользоваться базовыми формуламиСУММ, СРЗНАЧ, ссылки на ячейки; примеры с разбором — Excel и Google Sheets — формулы — формулы в Lab.

ШагДействие
1Столбцы total_bill, tip; scatter plot
2Добавить линию тренда → линейная; показать уравнение на графике
3Функции НАКЛОН(y; x) и ОТРЕЗОК(y; x) — те же β₁ и β₀
4КОРРЕЛ — сверить с наклоном и масштабом данных

Надстройка "Анализ данных" → Регрессия выводит таблицу с R², стандартными ошибками и F-тестом — удобно сверить с R/Python.


R

tips <- read.csv("tips.csv", stringsAsFactors = FALSE)
fit <- lm(tip ~ total_bill, data = tips)
summary(fit)

summary() — коэффициенты, стандартные ошибки, t-тест для β₁, R². График:

plot(tips$total_bill, tips$tip, pch = 16, col = "#33333388")
abline(fit, col = "steelblue", lwd = 2)

Разбиение train/test для оценки прогноза на новых строках — sample(), затем lm() на обучающей части; метрика RMSE на тесте (Основы статистики — предсказание).


Python


import pandas as pd
import seaborn as sns
import statsmodels.formula.api as smf

tips = sns.load_dataset("tips")
model = smf.ols("tip ~ total_bill", data=tips).fit()
print(model.summary())

Для только прогноза без полной таблицы коэффициентов:

from sklearn.linear_model import LinearRegression

import numpy as np

X = tips[["total_bill"]].values
y = tips["tip"].values
reg = LinearRegression().fit(X, y)
print(reg.intercept_, reg.coef_[0])

Визуализация — sns.regplot(data=tips, x="total_bill", y="tip") (Python для анализа данных — Seaborn).


Сравнение результатов

ЭлементExcelR lmPython statsmodels
Наклон β₁НАКЛОНCoefficientstotal_bill coef
Перехват β₀ОТРЕЗОК(Intercept)Intercept
линия тренда / отчёт регрессииMultiple R-squaredR-squared
p-значение наклонаотчёт надстройки`Pr(>t

Числа должны совпасть с точностью до округления. Расхождение — сигнал проверить фильтры строк, пропуски или разные подмножества данных.


См. также

МатериалТема
Вероятность для аналитика данных — вероятностьперед регрессией
Табличные данные — Pandas, Polars, SQL и PySpark — таблицы + Excelоперации до модели
Простые приложения на R — R, tipsполный пример в R