Главная
#Практика и карьера #Anomaly Detection #Data Science

Что такое выбросы в данных: как они ломают анализ и модели в Data Science в 2026 году

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

Содержание
  1. Что вообще называется выбросом
  2. Почему выбросы ломают анализ даже до обучения модели
  3. Как выбросы влияют на Machine Learning
  4. Самый известный способ искать выбросы: z-score
  5. Почему IQR часто надежнее
  6. Когда выброс удалять, а когда оставлять
  7. Связь с оптимизацией и функцией потерь
  8. Python: как искать выбросы на практике
  9. Какие ошибки делают чаще всего
  10. Что важно запомнить
  11. Kaggle notebook по теме:

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

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

Что вообще называется выбросом

Интуитивно выброс — это наблюдение, которое живет слишком далеко от основной массы данных. Если все клиенты тратят от 5 до 40 тысяч рублей, а одна запись показывает 4 миллиона, у нас возникает вопрос. Но слово «далеко» здесь не бытовое, а статистическое. Мы сравниваем точку не с ощущением нормы, а с распределением признака.

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

Почему выбросы ломают анализ даже до обучения модели

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

Раздел математики: математическая статистика.

(\mu = \frac{1}{n}\sum_{i=1}^{n} x_i)

Что означает каждый символ:
(\mu) — среднее значение признака;
(n) — число объектов в выборке;
(x_i) — значение признака у объекта с номером (i);
(\sum) — суммирование всех значений признака.

Роль формулы: среднее часто используется как базовое описание признака, а также участвует в стандартизации и во многих статистических процедурах. Если одно значение чрезмерно велико, оно смещает оценку центра распределения.

Численный пример: пусть доходы равны (10, 11, 12, 13, 14). Тогда среднее равно (\mu = \frac{10 + 11 + 12 + 13 + 14}{5} = 12). Если добавить выброс (100), новое среднее станет (\mu = \frac{10 + 11 + 12 + 13 + 14 + 100}{6} = \frac{160}{6} \approx 26.67). Центр данных перестал описывать типичное значение.

Это важный момент для Data Science: как только среднее и стандартное отклонение искажаются, страдают и признаки после стандартизации, и z-score, и все методы, которым важен адекватный масштаб.

Именно поэтому рядом особенно полезно понимать разницу между стандартизацией и нормализацией. Когда в признаке уже сидят экстремальные значения, вопрос preprocessing перестает быть чисто техническим: от выбора преобразования зависит, увидит ли модель структуру основной массы данных или будет продолжать жить вокруг крайних точек.

Как выбросы влияют на Machine Learning

Разные алгоритмы страдают по-разному. Линейная регрессия пытается подстроиться так, чтобы уменьшить ошибку на всех объектах. Если один объект имеет колоссальную ошибку, модель начинает тянуть прямую в его сторону. В результате она хуже описывает основную массу данных.

k-NN и k-means чувствительны к расстояниям, поэтому выбросы меняют геометрию пространства. Для кластеризации это особенно неприятно: один удаленный объект может утащить центр кластера. PCA начинает видеть главную компоненту не там, где лежит естественная вариативность данных, а там, где присутствует экстремальная точка.

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

Самый известный способ искать выбросы: z-score

Логика z-score очень интуитивна. Мы спрашиваем: насколько далеко наблюдение ушло от среднего в единицах стандартного отклонения. Если точка находится слишком далеко, она выглядит подозрительно.

Раздел математики: математическая статистика.

(z = \frac{x - \mu}{\sigma})

Что означает каждый символ:
(z) — стандартизированное отклонение точки;
(x) — текущее значение признака;
(\mu) — среднее значение признака;
(\sigma) — стандартное отклонение признака.

Где применяется: в предварительном анализе данных, мониторинге качества признаков и в простых схемах фильтрации выбросов. Обычно точки с |z| > 3 рассматривают как экстремальные.

Численный пример: пусть среднее равно (\mu = 50), стандартное отклонение равно (\sigma = 10), а наблюдение равно (x = 85). Тогда (z = \frac{85 - 50}{10} = 3.5). Такая точка уже находится далеко от центра и требует внимания.

Но у z-score есть ограничение: он сам опирается на среднее и стандартное отклонение, а они чувствительны к выбросам. Поэтому если экстремальных значений уже много, метод может потерять устойчивость.

Почему IQR часто надежнее

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

Раздел математики: описательная статистика.

(IQR = Q_3 - Q_1)

(x < Q_1 - 1.5 \cdot IQR \quad \text{или} \quad x > Q_3 + 1.5 \cdot IQR)

Что означает каждый символ:
(Q_1) — первый квартиль, ниже которого лежат 25% наблюдений;
(Q_3) — третий квартиль, ниже которого лежат 75% наблюдений;
(IQR) — межквартильный размах;
(x) — проверяемое наблюдение.

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

Численный пример: пусть (Q_1 = 20), (Q_3 = 40). Тогда (IQR = 40 - 20 = 20). Нижняя граница равна (20 - 1.5 \cdot 20 = -10), верхняя — (40 + 1.5 \cdot 20 = 70). Значение (95) будет считаться выбросом.

Когда выброс удалять, а когда оставлять

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

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

Поэтому корректный подход обычно состоит из трех шагов: сначала найти кандидатов в выбросы, потом объяснить их происхождение, и только затем выбирать действие. Возможные действия — удалить, ограничить значения сверху и снизу, заменить через winsorization, логарифмировать признак или использовать устойчивые модели и устойчивые статистики.

Связь с оптимизацией и функцией потерь

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

Раздел математики: оптимизация и теория машинного обучения.

(\mathrm{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2)

Что означает каждый символ:
(\mathrm{MSE}) — средняя квадратичная ошибка;
(n) — число объектов;
(y_i) — истинное значение цели;
(\hat{y}_i) — предсказание модели для объекта (i).

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

Численный пример: пусть у трех объектов ошибки равны (1, 2, 10). Тогда (\mathrm{MSE} = \frac{1^2 + 2^2 + 10^2}{3} = \frac{1 + 4 + 100}{3} = 35). Видно, что ошибка (10) доминирует в функции потерь.

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

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

Python: как искать выбросы на практике

На практике чаще всего начинают с визуализации и простых статистических критериев. Ниже пример на Python, где мы ищем выбросы по IQR.

import pandas as pd
# Импортируем pandas для работы с таблицей.

import numpy as np
# Импортируем numpy, чтобы удобно создавать пример данных.

data = pd.DataFrame({
    "income": [10, 11, 12, 13, 14, 15, 16, 100]
})
# Создаем признак income, где значение 100 выглядит подозрительно большим.

q1 = data["income"].quantile(0.25)
# Считаем первый квартиль, ниже которого лежат 25% наблюдений.

q3 = data["income"].quantile(0.75)
# Считаем третий квартиль, ниже которого лежат 75% наблюдений.

iqr = q3 - q1
# Находим межквартильный размах как разницу между Q3 и Q1.

lower_bound = q1 - 1.5 * iqr
# Строим нижнюю границу допустимого диапазона.

upper_bound = q3 + 1.5 * iqr
# Строим верхнюю границу допустимого диапазона.

outliers = data[(data["income"]  upper_bound)]
# Оставляем только те строки, которые вышли за границы по правилу IQR.

clean_data = data[(data["income"] >= lower_bound) & (data["income"] <= upper_bound)]
# Формируем очищенную выборку без найденных выбросов.

print("Q1:", q1)
# Печатаем первый квартиль.

print("Q3:", q3)
# Печатаем третий квартиль.

print("IQR:", iqr)
# Печатаем межквартильный размах.

print("Outliers:")
# Печатаем заголовок для найденных выбросов.

print(outliers)
# Показываем строки, которые метод пометил как выбросы.

Такой код полезен как старт. Но в реальном проекте почти всегда нужен следующий шаг: посмотреть boxplot, histogram, log-scale, сравнить поведение выбросов по сегментам и обсудить их природу с предметной областью.

А если становится ясно, что речь идёт не просто о редких числах в одном столбце, а о более сложной структуре аномального поведения, дальше уже естественно переходить к материалам про anomaly detection и Isolation Forest. Там тема раскрывается уже не как одномерная чистка, а как полноценная задача поиска подозрительных объектов в многомерном пространстве.

Какие ошибки делают чаще всего

Первая ошибка — удалять выбросы автоматически без понимания контекста. Вторая — считать, что любой выброс обязан быть ошибкой. Третья — искать выбросы по train и test вместе, тем самым подмешивая информацию из теста в preprocessing. Четвертая — удалять выбросы только в обучении, но забывать, что на проде они появятся снова.

Есть и еще одна тонкость. Выброс по одному признаку может быть нормальным объектом в многомерном пространстве. Например, очень высокий доход сам по себе редок, но для определенной возрастной группы и профессии он может быть ожидаемым. Поэтому для серьезных задач полезно смотреть не только на одномерные правила, но и на многомерные методы, такие как Isolation Forest, Local Outlier Factor или robust covariance.

Ровно по этой причине выбросы нельзя обсуждать отдельно от отбора признаков. Если в датасете уже слишком много шумовых или дублирующих измерений, полезно отдельно посмотреть и на осознанный feature selection: иногда проблема состоит не только в экстремальном объекте, но и в том, что мы вообще подали в модель лишний и нестабильный сигнал.

Что важно запомнить

Выбросы — это не мусор по умолчанию. Это экстремальные наблюдения, которые меняют статистическую картину данных и могут сильно влиять на обучение модели. Иногда их нужно удалять, иногда ограничивать, а иногда именно вокруг них и строится вся задача.

Хорошая работа с выбросами в Data Science начинается не с кнопки delete, а с вопроса: почему эта точка оказалась далеко от остальных и что она означает в контексте задачи. Если ответить на этот вопрос честно, дальше уже проще выбрать и правильную статистику, и правильную модель, и правильную стратегию preprocessing.

Kaggle notebook по теме:

https://www.kaggle.com/code/raedhabib/visualizing-and-handling-outliers/notebook

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

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

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