Главная
#Python и инструменты #Data Science #ML

Линейная регрессия в Data Science с нуля

Линейную регрессию часто показывают как первый алгоритм машинного обучения, но именно из-за этого ее нередко понимают слишком поверхностно. Обычно студенту говорят, что модель предсказывает число по формуле, затем показывают несколько коэффициентов, считают метрику и переходят дальше. Внешне все выглядит доступно, но внутренняя логика модели остается не до конца раскрытой. Человек запоминает, что регрессия нужна для предсказания непрерывной величины, но не всегда начинает видеть, каким образом данные превращаются в прогноз и почему обучение вообще сводится к задаче оптимизации.

Содержание
  1. Линейная регрессия ценна не простотой формулы, а прозрачностью мышления, которую она дает
  2. Когда линейная регрессия выглядит естественно в прикладной задаче
  3. Обучение линейной регрессии невозможно понять без функции ошибки
  4. Векторная запись делает устройство модели еще прозрачнее
  5. Что означают коэффициенты модели и почему их нельзя читать слишком наивно
  6. Python полезен здесь тогда, когда делает математическую идею воспроизводимой
  7. Что стоит действительно понять, если линейная регрессия изучается с нуля

Линейная регрессия ценна не простотой формулы, а прозрачностью мышления, которую она дает

Для Data Science это важный момент. Линейная регрессия полезна не потому, что она всегда побеждает по качеству. Напротив, в реальных проектах ее нередко обгоняют более сложные модели. Ее сила в другом: она очень ясно показывает, как математика, статистика и код соединяются в один рабочий механизм. Через нее удобно объяснять, что такое признак, что такое вес модели, почему ошибка должна быть измерима, зачем нужен train/test split и каким образом алгоритм находит параметры, а не угадывает их. Именно поэтому рядом с линейной регрессией почти всегда полезно обсуждать и baseline model как контрольную точку эксперимента.

Если смотреть на линейную регрессию академически, но без излишней сухости, то перед нами не просто формула, а дисциплинированная попытка приближенно описать зависимость между переменными. Есть объект наблюдения. У этого объекта есть набор признаков. Есть целевая величина, которую мы хотим оценить. Модель строит правило, по которому из признаков получается прогноз. Это правило должно быть достаточно простым, чтобы его можно было интерпретировать, и достаточно точным, чтобы оно приносило практическую пользу. А когда модель становится слишком гибкой или слишком шумной, следующим естественным шагом становится разговор про L1-регуляризацию и ограничение лишних коэффициентов.

Когда линейная регрессия выглядит естественно в прикладной задаче

Представим учебный кейс. У нас есть данные студентов: сколько часов в неделю они тратят на Python, сколько времени уделяют математике, сколько практических проектов завершили и какой итоговый балл получили на курсе. Если мы хотим оценить балл нового студента по тем же признакам, линейная регрессия оказывается разумной первой моделью. Она не пытается моделировать все тонкости человеческого обучения. Она делает более скромную вещь: оценивает вклад каждого фактора и складывает эти вклады в один итоговый прогноз.

Такой подход особенно полезен на старте в машинном обучении. Он заставляет серьезно относиться к признакам. Если признак выбран неудачно, коэффициент у него будет математически существовать, но содержательный смысл модели станет слабым. Если в выборке есть утечка, регрессия быстро покажет подозрительно хорошее качество. Если признаки почти дублируют друг друга, интерпретация коэффициентов начнет размываться. Иными словами, линейная регрессия учит видеть не только форму алгоритма, но и требования к данным.

Именно поэтому ее полезно изучать не как старый учебниковый метод, а как первую зрелую модель в Data Science. Она показывает, что машинное обучение начинается не с магии, а с аккуратной формализации зависимости между переменными.

Формула: раздел математики — линейная алгебра и математическая статистика
$$ \hat{y} = w_1 x_1 + w_2 x_2 + \dots + w_p x_p + b $$
Что означает эта формула

Это базовая запись линейной регрессии. Прогноз модели равен сумме вкладов признаков и свободного члена. Каждый признак участвует в прогнозе не сам по себе, а через свой коэффициент. Коэффициент показывает силу и направление влияния признака на ответ. Свободный член задает базовый уровень прогноза, от которого модель отталкивается.

Численный пример: (x_1 = 6, x_2 = 4, w_1 = 3, w_2 = 2, b = 10) (\hat{y} = 3 \cdot 6 + 2 \cdot 4 + 10 = 36)

Что означает каждый символ
  • \hat{y} — прогноз модели для конкретного объекта
  • x_j — значение j-го признака объекта
  • w_j — коэффициент при j-м признаке, который модель подбирает в обучении
  • p — количество признаков в модели
  • b — свободный член модели

Геометрический смысл этой формулы особенно важен. Если у нас один признак, модель ищет прямую на плоскости. Если признаков два, она ищет плоскость в трехмерном пространстве. Если признаков много, речь идет о гиперплоскости в многомерном пространстве. Эта интерпретация полезна не ради красивой метафоры. Она позволяет увидеть, что регрессия фактически подбирает положение поверхности, наиболее согласованное с наблюдаемыми данными.

Для машинного обучения это фундаментальная идея. Мы не просто вычисляем числа по формуле. Мы задаем форму зависимости между признаками и ответом. Если признаки действительно несут полезный сигнал, линейная поверхность может дать хороший baseline. Если связь сложнее и содержит выраженную нелинейность, регрессия станет первым честным индикатором того, что задачу нужно усложнять. Здесь очень кстати и отдельный материал про разницу между классификацией и регрессией, потому что он помогает не спутать форму прогноза с формой самой задачи.

Обучение линейной регрессии невозможно понять без функции ошибки

Одна и та же форма модели может иметь бесконечно много наборов коэффициентов. Следовательно, нужен строгий критерий, по которому один набор будет признан лучше другого. В линейной регрессии классическим критерием становится средняя квадратичная ошибка. Именно она связывает статистический смысл модели с задачей оптимизации.

Формула: раздел математики — математическая статистика и оптимизация
$$ \mathrm{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 $$
Что означает эта формула

Средняя квадратичная ошибка измеряет, насколько в среднем прогнозы модели отклоняются от истинных значений. Для каждого объекта мы берем разность между реальным ответом и прогнозом, возводим ее в квадрат, суммируем такие ошибки по всей выборке и делим на число наблюдений. Квадрат важен тем, что делает крупные промахи особенно заметными.

Численный пример: пусть (y = (20, 28, 35)), а (\hat{y} = (18, 30, 34)). Тогда ошибки равны ((20 - 18, 28 - 30, 35 - 34) = (2, -2, 1)), квадраты ошибок равны ((2^2, (-2)^2, 1^2) = (4, 4, 1)), а итоговая метрика равна (\mathrm{MSE} = \frac{4 + 4 + 1}{3} = 3).

Что означает каждый символ
  • MSE — средняя квадратичная ошибка модели
  • n — количество объектов в выборке
  • y_i — истинное значение целевой переменной для i-го объекта
  • \hat{y}_i — прогноз модели для i-го объекта
  • \sum — суммирование ошибок по всем объектам

Эта формула важна не только как метрика. Она отвечает на вопрос, что именно делает обучение. Модель подбирает коэффициенты так, чтобы значение ошибки стало как можно меньше. Следовательно, линейная регрессия — это уже полноценная задача оптимизации. Здесь хорошо видно, как статистическое измерение качества управляет алгоритмом.

С практической точки зрения это означает следующее: если в данных есть выбросы, средняя квадратичная ошибка будет реагировать на них сильно. Если модель допускает один очень грубый промах, MSE вырастет заметно сильнее, чем при нескольких небольших ошибках. Поэтому выбор функции ошибки всегда влияет на характер обучения. Именно поэтому рядом полезно держать и разбор как выбирать метрику для регрессии, чтобы не сводить линейную модель только к одной привычной формуле ошибки.

Векторная запись делает устройство модели еще прозрачнее

Когда объектов и признаков становится много, поэлементная запись теряет удобство. Тогда линейная регрессия записывается через матрицу признаков и вектор коэффициентов. Эта форма особенно полезна в Data Science, потому что она напрямую соответствует структуре данных в Python: таблица превращается в матрицу, коэффициенты — в вектор, а предсказания — в результат матричного умножения.

Формула: раздел математики — линейная алгебра и оптимизация
$$ \mathbf{w}^{*} = \arg\min_{\mathbf{w}} \lVert X\mathbf{w} - y \rVert_2^2 $$
Что означает эта формула

Эта запись говорит, что мы ищем оптимальный вектор коэффициентов, при котором сумма квадратов ошибок минимальна. Матрица признаков умножается на вектор коэффициентов и дает вектор прогнозов. Разность между прогнозами и реальными ответами образует вектор ошибок. Затем алгоритм ищет такой набор коэффициентов, который делает эту ошибку минимальной.

Численный пример: пусть X = \begin{bmatrix}1 \\ 2\end{bmatrix} и y = \begin{bmatrix}2 \\ 5\end{bmatrix}. Если взять w = 2, то Xw = \begin{bmatrix}2 \\ 4\end{bmatrix}, ошибка равна \begin{bmatrix}0 \\ -1\end{bmatrix}, а сумма квадратов ошибок равна 0^2 + (-1)^2 = 1. Если взять w = 3, то сумма квадратов ошибок станет 1^2 + 1^2 = 2. Следовательно, w = 2 в этом примере лучше, чем w = 3.

Что означает каждый символ
  • w* — оптимальный вектор коэффициентов модели
  • \(\arg\min\) — операция выбора аргумента, при котором функция принимает минимальное значение
  • X — матрица признаков обучающей выборки
  • w — текущий вектор коэффициентов
  • y — вектор истинных ответов
  • ||·||_2^2 — сумма квадратов компонент вектора ошибки

Здесь особенно хорошо видно соединение трех слоев. Линейная алгебра дает форму записи. Оптимизация определяет, какие коэффициенты считаются лучшими. Машинное обучение превращает это в процедуру обучения на данных. Именно поэтому линейная регрессия столь удобна для первого серьезного знакомства с ML: она прозрачна математически и при этом остается практически применимой. Если хочется отдельно разобрать сам механизм движения к минимуму, естественным продолжением становится и материал про градиентный спуск без магии.

Что означают коэффициенты модели и почему их нельзя читать слишком наивно

Одно из сильных преимуществ линейной регрессии — интерпретируемость. Если коэффициент положителен, рост признака обычно ведет к росту прогноза при прочих равных условиях. Если коэффициент отрицателен, связь направлена в противоположную сторону. Но здесь важно сделать профессиональную оговорку: формулировка «при прочих равных» в реальных данных далеко не всегда выполняется буквально. Признаки могут быть коррелированы, измерены в разных масштабах или частично дублировать друг друга.

По этой причине коэффициенты нельзя читать как абсолютную причинную истину. Линейная регрессия оценивает статистическую зависимость внутри конкретной выборки и внутри конкретного набора признаков. Если два признака тесно связаны, их коэффициенты могут становиться неустойчивыми. Если шкалы признаков сильно различаются, сравнение коэффициентов без предварительной стандартизации становится менее содержательным. Если в выборке есть сильные выбросы, модель может подстраиваться под них чрезмерно.

Тем не менее именно линейная регрессия впервые дает студенту возможность обсуждать модель не как черный ящик, а как осмысленное правило принятия решения. Для образовательной платформы это особенно ценно: студент видит, что машинное обучение можно анализировать, а не только запускать.

Python полезен здесь тогда, когда делает математическую идею воспроизводимой

Ниже приведен компактный пример на Python. Он связывает данные, подготовку признаков, обучение модели и расчет ошибки. Важен не масштаб примера, а прозрачность всей цепочки. Именно через такие небольшие сценарии линейная регрессия перестает быть формулой на слайде и становится рабочей процедурой.

import pandas as pd # подключаем pandas для работы с табличными данными
from sklearn.model_selection import train_test_split # импортируем разбиение на обучающую и проверочную части
from sklearn.pipeline import Pipeline # импортируем Pipeline, чтобы объединить подготовку данных и модель
from sklearn.preprocessing import StandardScaler # подключаем стандартизацию признаков
from sklearn.linear_model import LinearRegression # импортируем линейную регрессию
from sklearn.metrics import mean_squared_error # импортируем среднюю квадратичную ошибку frame = pd.DataFrame({ # создаем небольшой учебный датасет : [2, 3, 4, 5, 6, 7, 8, 9], # задаем часы практики Python : [1, 2, 2, 3, 3, 4, 5, 5], # задаем часы занятий математикой : [1, 1, 2, 2, 3, 3, 4, 4], # задаем число завершенных проектов : [18, 24, 29, 35, 41, 47, 55, 60], # задаем итоговый балл студента
}) # завершаем создание таблицы X = frame[[, , ]] # выделяем матрицу признаков
y = frame['final_score'] # выделяем целевую переменную X_train, X_valid, y_train, y_valid = train_test_split( # делим данные на train и validation X, y, test_size=0.25, random_state=42
) # оставляем часть объектов для честной проверки качества pipe = Pipeline([ # создаем единый пайплайн (, StandardScaler()), # сначала стандартизируем признаки (, LinearRegression()), # затем обучаем линейную регрессию
]) # завершаем описание пайплайна pipe.fit(X_train, y_train) # обучаем модель на обучающей части выборки
pred = pipe.predict(X_valid) # получаем прогнозы на проверочной части
mse = mean_squared_error(y_valid, pred) # считаем среднюю квадратичную ошибку
coefficients = pipe.named_steps['model'].coef_ # извлекаем коэффициенты обученной модели
intercept = pipe.named_steps['model'].intercept_ # извлекаем свободный член модели
next_score = pipe.predict([[6, 4, 3]]) # делаем прогноз для нового объекта print(frame) # выводим исходные данные
print({'mse': round(float(mse), 2)}) # печатаем значение ошибки
print({'coefficients': [round(float(v), 3) for v in coefficients]}) # печатаем коэффициенты модели
print({'intercept': round(float(intercept), 3)}) # печатаем свободный член
print({'next_score': round(float(next_score[0]), 2)}) # печатаем прогноз для нового наблюдения

Этот код отражает всю логику модели в прикладной форме. Таблица с признаками превращается в матрицу, затем проходит стандартизацию, после чего линейная регрессия подбирает коэффициенты. Ошибка измеряется на отложенной части выборки, а не на тех же данных, на которых модель обучалась. Это важный методологический момент: оценка качества должна быть честной, иначе модель будет казаться лучше, чем она есть на самом деле.

Обрати внимание на то, что стандартизация включена в пайплайн. Для линейной регрессии как таковой она не всегда обязательна, если нас интересует только прогноз. Но для устойчивой интерпретации коэффициентов и для корректной практики машинного обучения такой шаг часто полезен. Он делает признаки сопоставимыми по масштабу и помогает избежать грубых перекосов в численной трактовке весов.

Что стоит действительно понять, если линейная регрессия изучается с нуля

Линейная регрессия важна не потому, что она самая современная, а потому, что через нее очень ясно видна структура всей дисциплины. Модель строит прогноз как взвешенную сумму признаков. Качество измеряется через функцию ошибки. Обучение оказывается задачей оптимизации. Геометрический смысл помогает понять, что модель ищет поверхность, наиболее согласованную с данными. А код на Python переводит эту математическую конструкцию в воспроизводимый процесс.

Если эти идеи действительно усвоены, дальше становится намного легче разбирать регуляризацию, мультиколлинеарность, стандартизацию, интерпретацию коэффициентов и переход к более сложным моделям. В этом смысле линейная регрессия — не просто отдельный алгоритм, а фундаментальный учебный объект. Она показывает, как в Data Science мысль превращается в формальную модель, а модель — в рабочий инструмент. Поэтому рядом особенно органично работают и Ridge и Lasso в регрессии, и baseline-модель: первая тема показывает, как ограничивать хрупкость коэффициентов, вторая не даёт переоценить линейную модель просто потому, что она кажется математически красивой.

Поэтому линейную регрессию полезно изучать не как обязательный пункт road map, а как первую полноценную встречу с тем, как устроено машинное обучение в строгом, но понятном виде. Именно в этом и состоит ее настоящая ценность.

Kaggle Notebook по теме статьи: https://www.kaggle.com/code/kennethjohn/linear-regression-from-scratch/notebook

Что читать дальше

Связанные статьи по этой теме

Инструменты Python в 2026 году: современный стек для профессиональной разработки Что должен знать Junior Data Scientist в 2026 году? Как собрать GitHub-портфолио для Data Science
Вернуться в блог