Обнаружение и удаление выбросов
Метод Z-оценки, метод IQR, концепция изолирующего леса и практическая обработка выбросов.
«Обнаружение и удаление выбросов» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Что такое выброс?
Выброс — это значение, сильно отличающееся от остальных данных. Оно может быть настоящим экстремальным значением, ошибкой ввода данных или сбоем датчика. Выбросы могут искажать средние значения, дисперсии и модели, поэтому выявляйте их целенаправленно.
Метод z-оценки
z-оценка показывает, на сколько стандартных отклонений значение отстоит от среднего: z = (x - mean) / std. Согласно распространённому правилу, любое наблюдение с |z| > 3 считается выбросом.
import numpy as np
data = np.array([10, 12, 11, 13, 12, 100])
z = (data - data.mean()) / data.std()
print(np.round(z, 2))Выявление выбросов с помощью scipy.stats.zscore
scipy.stats.zscore вычисляет z-оценки для массива. Объедините её с порогом, чтобы создать логическую маску выбросов.
from scipy import stats
z = np.abs(stats.zscore(data))
outliers = z > 3
print(data[outliers])Ограничение z-оценки
z-оценка использует mean и std, на которые сами выбросы могут влиять. При сильно асимметричных данных или экстремальных значениях z-оценки могут выявлять не все выбросы. Метод IQR более устойчив.
Метод IQR
Межквартильный размах IQR = Q3 - Q1 охватывает средние 50 процентов данных. Он вычисляется по квартилям, которые выбросы почти не сдвигают, поэтому этот показатель устойчив.
q1 = np.percentile(data, 25)
q3 = np.percentile(data, 75)
iqr = q3 - q1
print(q1, q3, iqr)Границы IQR
Границы Тьюки задают допустимый диапазон: нижняя граница = Q1 - 1.5*IQR, верхняя граница = Q3 + 1.5*IQR. Всё, что находится за его пределами, помечается как выброс. По этому же правилу строятся усы диаграммы boxplot.
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
mask = (data < lower) | (data > upper)
print(data[mask]) # outliersВизуализация на диаграмме размаха
boxplot визуализирует правило IQR: прямоугольник простирается от Q1 до Q3, линия показывает медиану, усы доходят до границ, а точки за их пределами отображаются как отдельные точки-выбросы.
# import matplotlib.pyplot as plt
# plt.boxplot(data)
# plt.show()Удаление выбросов
После выявления выбросов можно DROP строки с ними. Делайте это осторожно: удаление реальных данных может исказить результаты. Ведите запись о том, что удалили и почему.
clean = data[~mask]
print(clean) # outlier removedВинзоризация с помощью np.clip
Вместо удаления можно выполнить винзоризацию: ограничить экстремальные значения выбранными границами с помощью np.clip. Число строк при этом сохраняется, а влияние экстремальных значений уменьшается.
capped = np.clip(data, lower, upper)
print(capped) # extreme value pulled to the upper fenceОграничение по процентилям
Распространённый вариант винзоризации — ограничить значения 1-м и 99-м процентилями, симметрично удалив влияние только самых экстремальных 2 процентов значений.
lo, hi = np.percentile(data, [1, 99])
print(np.clip(data, lo, hi))REMOVE или CAP?
Выбирайте способ с учётом контекста: REMOVE явные ошибки (невозможные значения), CAP настоящие, но экстремальные значения, которые нужно сохранить, а иногда KEEP выбросы, если именно они являются сигналом (например, при обнаружении мошенничества). Документируйте принятое решение.
Быстрая проверка
Проверьте свои знания о выбросах.
Итоги
Инструменты для работы с выбросами:
- z-оценка: помечайте значения с
|z| > 3с помощьюscipy.stats.zscore(чувствительна к выбросам) - Границы IQR: от Q1-1.5*IQR до Q3+1.5*IQR (устойчивый метод, основа диаграмм boxplot)
- Удаляйте настоящие ошибки; выполняйте винзоризацию с помощью
np.clip, чтобы ограничить экстремальные значения - Всегда документируйте, почему значения были удалены или ограничены
Часто задаваемые вопросы
Урок «Обнаружение и удаление выбросов» бесплатный?
Да — полный текст урока «Обнаружение и удаление выбросов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Обнаружение и удаление выбросов»?
Метод Z-оценки, метод IQR, концепция изолирующего леса и практическая обработка выбросов. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Обнаружение и удаление выбросов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Обнаружение и удаление выбросов
- Кодирование категориальных переменных
- Масштабирование признаков: нормализация и стандартизация
- Создание конвейеров предварительной обработки