Course
Вы обучили регрессионную модель, R² выглядит неплохо, коэффициенты интуитивно понятны. Но аккуратная сводная таблица может скрывать грубо неверно заданную модель. Один диаграмма рассеяния часто ловит то, что ускользает от чисел: график остатков.
В этой статье мы разберём, что такое графики остатков, как их читать, какие паттерны важно знать и как построить такой график в Python и R. Большинство начинающих вовсе пропускают диагностику. К концу материала вы этого делать не будете.
Что такое график остатков?
Остаток — это разница между предсказанием модели и фактом: остаток = наблюдаемое − предсказанное. График остатков показывает эти разрывы. По оси x откладывают предсказанные (подгоняемые) значения или объясняющую переменную; по оси y — остатки. Горизонтальная линия отсчёта на уровне нуля соответствует идеальному предсказанию.

Случайное рассеяние вокруг нуля: здоровый график остатков. Изображение автора.
Ключевая идея: если модель хорошо схватила зависимость, остатки должны выглядеть как шум. Случайно рассеяны вокруг нуля, без очевидного паттерна. Как только появляется форма, модель сообщает о том, что нельзя увидеть по одним лишь коэффициентам.
Как интерпретировать график остатков
Ищите паттерны. В идеале их быть не должно. Это и есть главное правило. А вот что выдают положение, разброс и форма остатков — здесь становится интересно.
Положение: центрировано ли рассеяние на нуле?
Если остатки располагаются выше нуля в одних областях подгоняемых значений и ниже — в других, модель смещена. Она систематически пере- или недопредсказывает в определённых зонах. Часто это указывает на пропущенную переменную или нелинейную связь, которую линейная модель уловить не может.
Разброс: остаётся ли дисперсия примерно постоянной?
Просканируйте слева направо. Если разброс остатков примерно одинаков для всех подгоняемых значений — это хороший знак. Если точки «раскрываются веером» по мере роста подгоняемых значений, дисперсия меняется. Это называется гетероскедастичностью. Она не «ломает» оценки коэффициентов, но делает стандартные ошибки ненадёжными — а это важно, если вы проводите проверку гипотез.
Форма: есть ли кривая или тренд?
Плоско и без паттернов — это то, что нужно. U-образная кривая или дуга говорит, что модели не хватает нелинейного члена. Кластеры или полосы указывают на подгруппы, которые модель сводит в одну. Отдельная точка, сильно удалённая от остальных, заслуживает проверки.
Типичные паттерны на графике остатков и их смысл
Четыре паттерна на графике остатков, сигнализирующие о проблемах модели. Изображение автора.
Случайное рассеяние вокруг нуля
Хороший исход. Точки примерно одинаково распределены выше и ниже нулевой линии, без заметного тренда — обычно это означает, что модель достаточно хорошо описывает связь. Некоторая случайность ожидаема.
Изогнутый паттерн
Изогнутая или дугообразная форма обычно означает немоделированную нелинейную зависимость. Модель проводит прямую через «гнущиеся» данные. Исправление — добавить полиномиальный член (например, x²) или применить преобразование к предиктору. Это один из самых частых паттернов на практике, особенно при моделировании, например, цен на жильё или биологического роста.
Воронка или веер
Остатки всё шире расходятся по мере роста подгоняемых значений: это гетероскедастичность, дисперсия непостоянна. Часто встречается в финансовых данных, где ошибки предсказания естественным образом масштабируются с величиной отклика. Разумный первый шаг — логарифмировать зависимую переменную; ещё один вариант — взвешенные наименьшие квадраты.
Кластеры или группы
Отчётливые группы на графике остатков обычно означают, что в данных есть подвыборки, которые модель не учитывает. Вероятно, в модель нужно добавить категориальную переменную (регион, группа лечения, тип продукта). Если видите две-три плотные полосы точек — начните с этого.
Крупные изолированные остатки
Одна точка, сильно удалённая от остальных, заслуживает внимания. Это может быть реальный выброс, ошибка ввода или наблюдение с необычными характеристиками. Не удаляйте автоматически. Сначала разберитесь. Оставлять или удалять — зависит от контекста, а не от удобства.
Для каждого из этих паттернов график остатков показывает симптом, а не диагноз. Он говорит, что что-то не так; почему — ещё предстоит выяснить.
Какие предпосылки регрессии помогают проверить графики остатков?
Понимая паттерны, полезно чётко знать, какие предпосылки регрессии график остатков может, а какие не может оценить.
- Линейность: Если связь между предикторами и откликом действительно линейна, при построении остатков против подгоняемых значений тренда не будет. Кривая или дуга — прямой визуальный признак нарушения линейности.
- Постоянная дисперсия: Паттерн «воронка» — ровно то, как выглядит гетероскедастичность. Если разброс растёт с подгоняемыми значениями, равенство дисперсий нарушено. График «остатки против подгоняемых» — пожалуй, самый частый инструмент для обнаружения этого.
- Независимость: Если наблюдения имеют естественный порядок (время, пространство, кластеры субъектов), можно построить остатки против этого порядка, чтобы проверить паттерны. Тренд в остатках на временной оси указывает на автокорреляцию. Обычный график «остатки против подгоняемых» этого может не показать; иногда нужен отдельный график «остатки против порядка».
- Выбросы и влияющие наблюдения: Крупные изолированные остатки помечают наблюдения, которые модель плохо предсказывает. Для влияния — наблюдений, которые несоразмерно тянут регрессионную прямую — более информативен график «остатки против рычага» (Residuals vs. Leverage), чем базовый график остатков.
Одно, что графики остатков не могут надёжно оценить, — нормальность. Плоский график «остатки против подгоняемых» не подтверждает нормальность ошибок. Для этого нужен Q-Q график. Это частый источник путаницы, его важно различать.
Как построить график остатков в Python
Стандартный рабочий процесс: scikit-learn для обучения модели и расчёта остатков, затем matplotlib для визуализации. Ниже полный пример простой линейной регрессии на данных по жилью:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# Sample data: square footage predicting home price
sqft = np.array([800, 1000, 1200, 1500, 1800, 2000, 2200, 2500, 3000, 3500])
price = np.array([150, 180, 210, 260, 300, 330, 370, 420, 500, 560])
# Reshape for sklearn and fit the model
X = sqft.reshape(-1, 1)
model = LinearRegression()
model.fit(X, price)
# Generate predictions and calculate residuals
predicted = model.predict(X)
residuals = price - predicted
# Plot residuals against fitted values
plt.figure(figsize=(8, 5))
plt.scatter(predicted, residuals, color='steelblue', edgecolors='white', s=80)
plt.axhline(y=0, color='red', linestyle='--', linewidth=1.2)
plt.xlabel('Fitted Values')
plt.ylabel('Residuals')
plt.title('Residual Plot')
plt.tight_layout()
plt.show()

Ключевая строка — residuals = price - predicted. Вызов axhline() добавляет нулевую линию отсчёта; без неё график читать значительно сложнее. Если рисунок выглядит примерно безпаттерновым, всё неплохо. Заметьте, остатки растут по величине при больших подгоняемых значениях. С 10 точками сложно быть уверенными, но это намекает на обсуждавшийся ранее «веер».
Чтобы глубже разобраться с регрессией в Python, наш курс Introduction to Regression with statsmodels in Python подробно проходит через обучение моделей, проверку предпосылок и интерпретацию.
Как построить график остатков в R
В R это немного проще «из коробки». После подгонки модели с помощью lm() встроенная функция plot() автоматически строит полный диагностический набор, включая график «остатки против подгоняемых».
# Same housing data in R
sqft <- c(800, 1000, 1200, 1500, 1800, 2000, 2200, 2500, 3000, 3500)
price <- c(150, 180, 210, 260, 300, 330, 370, 420, 500, 560)
# Fit the model and view diagnostics
housing_model <- lm(price ~ sqft)
plot(housing_model, which = 1) # which = 1 gives residuals vs. fitted
Аргумент which = 1 выводит только график «остатки против подгоняемых». Если его опустить, вы получите все четыре стандартных диагностических графика: остатки против подгоняемых, Q-Q, масштаб-расположение (scale-location) и остатки против рычага. Полезно, когда нужно быстро составить полную картину. R также подписывает индексы трёх самых экстремальных точек, избавляя вас от ручного поиска выбросов.
Полный разбор регрессии в R — в нашем курсе Introduction to Regression in R, где моделирование и диагностика разбираются с нуля.
Графики остатков и другие диагностические графики регрессии
График «остатки против подгоняемых» — отправная точка, а не вся картина. Несколько родственных графиков отвечают на другие вопросы.
График остатков и Q-Q график
График «остатки против подгоняемых» проверяет линейность и постоянство дисперсии. Q-Q график проверяет нормальность — следуют ли остатки нормальному распределению. Это разные вопросы. Чистый график остатков не гарантирует нормальности, а Q-Q график ничего не скажет о дисперсии. Обычно нужны оба.

Два разных графика — два разных вопроса о вашей модели. Изображение автора.
График остатков и график масштаб-расположения
График масштаб-расположения (scale-location, он же spread-location) строит квадратный корень из абсолютных стандартизованных остатков против подгоняемых значений. Он создан для выявления гетероскедастичности и часто делает «воронку» заметнее, чем сырой график остатков, потому что убирает знак остатка и фокусируется только на разбросе.
График остатков и график «остатки против рычага»
Рычаг (leverage) измеряет, насколько необычны значения предикторов у наблюдения, а не насколько плохо модель его предсказывает. Высокий рычаг в сочетании с большим остатком — потенциально влияющее наблюдение. График «остатки против рычага» помогает выявить такие комбинации и обычно подсвечивает самые проблемные точки по именам. Если беспокоит влияние отдельных наблюдений на модель, проверьте этот график.
Что делать, если график остатков показывает проблему
График остатков — это диагностика, а не приговор. Увидеть паттерн не значит, что модель бесполезна. Вот как типичные паттерны соотносятся со следующими шагами:
- Изогнутый паттерн: Рассмотрите добавление полиномиального члена или преобразование предиктора. Логарифм x или член x² часто выпрямляют зависимость.
- «Воронка»: Попробуйте логарифмическое или квадратнокорневое преобразование отклика. Если не помогает — взвешенные НКМ снижают влияние более «шумных» наблюдений.
- Крупные изолированные остатки: Разберите наблюдение. Сначала проверьте ошибки ввода. Если точка легитимна, подумайте, не нужно ли учесть в модели то, что делает её необычной.
- Кластеры или группы: Поискать неучтённую категориальную переменную. Иногда правильнее строить отдельные модели для подгрупп.
График остатков показывает симптомы. Он не указывает точную причину, и один и тот же паттерн может иметь несколько объяснений. Используйте его как повод задавать более точные вопросы.
Типичные ошибки при чтении графиков остатков
- Ожидание идеального случайного графика: Реальные данные «шумные». Пару нестандартных точек, лёгкая асимметрия, небольшая скучённость на крайних значениях — это нормально. Вопрос не в том, идеально ли график случаен, а в том, есть ли систематический паттерн, который лучшая модель устранила бы.
- Считать каждый выброс плохими данными: Большой остаток значит, что модель плохо предсказала наблюдение. Это не значит, что наблюдение неверно. Иногда выброс — самая интересная точка в наборе. Удаляйте только после того, как поймёте, что это.
- Предполагать, что график остатков доказывает нормальность: Это не так. Чистый график «остатки против подгоняемых» рассказывает о линейности и постоянстве дисперсии. Нормальность требует Q-Q графика. Эти два инструмента дополняют друг друга, а не заменяют.
- Смотреть на график без учёта контекста: График остатков для модели временного ряда нужно читать иначе, чем для поперечного сечения. То, что считать тревожным паттерном, зависит от структуры данных, объёма выборки и цели модели. Паттерн, который стоит исправлять в прогнозной модели, может быть игнорируем в исследовательском анализе.
Заключение
Обучили модель, посмотрели сводку, порадовались R² — на этом большинство останавливается. График остатков — следующий шаг, и он нередко рассказывает иную историю. Случайное рассеяние вокруг нуля — то, к чему вы стремитесь. Кривые, «воронки», кластеры и экстремальные изолированные точки каждый раз намекают на то, что модель чего-то не учла.
Ни один график не даёт полной картины. Сочетайте график «остатки против подгоняемых» с Q-Q графиком для нормальности, графиком масштаб-расположения для дисперсии и графиком рычага, если беспокоят влияющие наблюдения. Каждый отвечает на свой вопрос.
Если хотите пойти дальше, наш курс Intermediate Regression with statsmodels in Python подробно разбирает проверку предпосылок, включая действия при срабатывании диагностик. Для более широкого понимания предпосылок регрессии и оценки моделей наш туториал по предпосылкам линейной регрессии в Python — логичное продолжение.
Винод Чугани начал карьеру в Токио как самый молодой руководитель отдела продаж хедж‑фондов в JPMorgan, позже установил индивидуальный рекорд по продажам в Lehman Brothers, затем построил дистрибуционный бизнес электроники в 30 странах с выручкой свыше 100 млн сингапурских долларов, прежде чем переключиться на сферу данных. Выпускник по экономике из Duke и выпускник NYC Data Science Academy, он стал одним из трёх стипендиатов из более чем 100 заявителей на курс Hugo Bowne-Anderson "Building AI Applications" на платформе Maven. Сегодня он пишет для DataCamp, KDnuggets, Machine Learning Mastery и Statology на темы от статистики до агентного ИИ и наставляет специалистов по данным в NYC Data Science Academy, проведя более 1000 индивидуальных сессий.
FAQs
Что означает изогнутый паттерн на графике остатков?
Изогнутая или дугообразная форма обычно указывает на нелинейную связь между предиктором и откликом, которую модель не уловила. Поскольку линейная регрессия подгоняет прямую, любой изгиб истинной зависимости проявляется как систематическая кривая в остатках. Обычное решение — добавить полиномиальный член (например, x²) или применить логарифмическое либо квадратнокорневое преобразование к предиктору.
Сколько остатков может выглядеть как выбросы в нормальном наборе данных?
В хорошо подогнанной модели с нормально распределёнными ошибками примерно 5% стандартизованных остатков по случайности окажутся вне интервала ±2 и менее 0,3% — вне ±3, так что несколько экстремальных точек ожидаемы и не являются автоматической проблемой. Важно, образуют ли эти точки паттерн или одно наблюдение имеет настолько необычный остаток, что это указывает на возможную проблему с данными, требующую проверки.
Можно ли с помощью графика остатков проверить все предпосылки регрессии?
Нет — и это частый источник путаницы. График «остатки против подгоняемых» помогает проверить линейность, постоянство дисперсии и потенциально независимость, если построить остатки в порядке наблюдений. Он не может надёжно оценить нормальность; для этого нужен Q-Q график. Для влияющих наблюдений более информативен график «остатки против рычага». Считайте график остатков первым диагностическим шагом, а не единственным.
В чём разница между графиком остатков и графиком масштаб-расположения?
Оба оценивают дисперсию, но по-разному. График остатков показывает сырые остатки (положительные и отрицательные) против подгоняемых значений — полезно для обнаружения общих паттернов, включая кривизну и кластеры. График масштаб-расположения показывает квадратный корень из стандартизованных остатков (все положительные) против подгоняемых значений, поэтому лучше выявляет гетероскедастичность. Если «воронка» еле заметна, график масштаб-расположения обычно делает её нагляднее.
Нужно ли удалять выбросы, если график остатков показывает крупные изолированные остатки?
Не автоматически. Большой остаток означает, что модель плохо предсказала это наблюдение — не то, что наблюдение некорректно. Прежде чем что-то удалять, проверьте, не является ли точка ошибкой ввода, необычным, но легитимным случаем, или чем-то вне области применимости модели. Удалять валидные данные, чтобы улучшить график остатков, — это форма манипуляции моделью. Если наблюдение легитимно, честнее признать ограничения модели или рассмотреть иную структуру модели.
На что именно влияет гетероскедастичность на графике остатков?
Паттерн «воронка» не смещает оценки коэффициентов — модель по-прежнему даёт верный средний эффект. Нарушается надёжность стандартных ошибок, а значит — p-значений и доверительных интервалов. Если регрессию используют только для предсказаний, это может быть менее критично. Если вы тестируете гипотезы или строите доверительные интервалы, придётся либо преобразовать отклик, либо применять коррекции стандартных ошибок при неравных дисперсиях.
Подходят ли графики остатков для множественной регрессии так же, как для простой?
Да, и в множественной регрессии они даже важнее, потому что больше способов ошибиться. Стандартный подход — построить остатки против подгоняемых значений для общего обзора, затем против каждого предиктора отдельно, чтобы проверить нелинейные зависимости, которые модель могла упустить. Правила интерпретации те же: ищите паттерны и исследуйте всё систематическое.
Чем отличаются графики остатков для временных рядов и для поперечных данных?
В поперечной регрессии вы ищете пространственные паттерны — кривые, «воронки», кластеры — на графике «остатки против подгоняемых». В регрессии временного ряда нужно также проверить, не коррелированы ли остатки во времени, поскольку автокорреляция нарушает предпосылку независимости и делает стандартные ошибки ненадёжными. Постройте остатки против временного индекса и ищите тренды или колебательные паттерны; статистика Дарбина—Уотсона тоже тестирует автокорреляцию первого порядка. Обычный график «остатки против подгоняемых» сам по себе этого не выявит.

