Skip to content

Latest commit

 

History

History
114 lines (73 loc) · 6.35 KB

README.md

File metadata and controls

114 lines (73 loc) · 6.35 KB

Статистические методы поиска выбросов

Понятие выброса

Одним из этапов очистки данных является поиск выбросов.

Выброс (аномалия) - это наблюдение, которое существенно выбивается из общего распределения и сильно отличается от других данных.

В данном разделе рассматриваются статистические методы поиска выбросов, а именно:

  • Метод межквартиального размаха
  • Метод z-отклонений (метод сигм)

Метод межквартильного размаха

Алгоритм метода:

  1. Вычислить 25-ую и 75-ую квантили (1 и 3 квартили) - $Q_{25}$ и $Q_{75}$ для признака, который мы исследуем

  2. Вычислить межквартильное расстояние:

    • $IQR=Q_{75}-Q_{25}$
  3. Определить верхнюю и нижнюю границы Тьюки:

    • $bound_{upper} = Q_{75} + 1.5*IQR$

    • $bound_{lower} = Q_{25} - 1.5*IQR$

  4. Найти наблюдения, которые выходят за пределы границ

Недостатки метода:

Метод требует, чтобы признак, на основе которого происходит поиск выбросов, был распределен нормально.

Модификация метода:

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

Также можно добавить вариативности количеству квартильных размахов в левую и правую сторону распределений.

Метод z-отклонений (метод сигм)

Правило трех сигм гласит: что, если распределение данных является нормальным, то 99.73% лежат в интервале: $(\mu-3 \sigma$ , $\mu+3 \sigma)$, где

  • $\mu$ - математическое ожидание (для выборки это среднее значение)
  • $\sigma$ - стандартное отклонение.

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

Алгоритм метода:

  1. Вычислить среднее и стандартное отклонение $\mu$ и $\sigma$ для признака, который мы исследуем
  2. Определить верхнюю и нижнюю границы:
    • $bound_{upper} = \mu - 3 * \sigma$

    • $bound_{lower} = \mu + 3 * \sigma$

  3. Найти наблюдения, которые выходят за пределы границ

Недостатки метода:

Метод требует, чтобы признак, на основе которого происходит поиск выбросов, был распределен нормально.

Модификация метода:

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

Также можно добавить вариативности количеству стандартных отклонений в левую и правую сторону распределений.

Реализация методов

Методы реализованы в виде функций find_outliers_iqr() и find_outliers_z_score(). Функции представлены в файле find_outliers.py. К функциям предоставлена документация.

Пример использования

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

  • data (pandas.DataFrame): набор данных (таблица)
  • feature (str): имя признака, на основе которого происходит поиск выбросов

Использование классических подходов без модификаций:

# Метод межквартильного размаха
from outliers_lib.find_outliers import find_outliers_iqr

outliers_iqr, cleaned_iqr = find_outliers_iqr(data, feature)

# Метод z-отклонений
from outliers_lib.find_outliers import find_outliers_z_score

find_outliers_z_score
outliers_z_score, cleaned_z_score = find_outliers_z_score(data, feature)

Использование методов с предварительным логарифмированием:

outliers_iqr, cleaned_iqr = find_outliers_iqr(data, feature, log=True)
outliers_z_score, cleaned_z_score = find_outliers_z_score(data, feature, log=True)

Использование методов с предварительным логарифмированием и добавлением вариативности разброса:

outliers_iqr, cleaned_iqr = find_outliers_iqr(data, feature, log=True, left=2, right=2)
outliers_z_score, cleaned_z_score = find_outliers_z_score(data, feature, log=True, left=2, right=2)

Использованные инструменты и библиотеки

  • numpy (1.20.3)
  • pandas (1.3.4)

Дополнительные источники: