Одним из этапов очистки данных является поиск выбросов.
Выброс (аномалия) - это наблюдение, которое существенно выбивается из общего распределения и сильно отличается от других данных.
В данном разделе рассматриваются статистические методы поиска выбросов, а именно:
- Метод межквартиального размаха
- Метод z-отклонений (метод сигм)
-
Вычислить 25-ую и 75-ую квантили (1 и 3 квартили) -
$Q_{25}$ и$Q_{75}$ для признака, который мы исследуем -
Вычислить межквартильное расстояние:
$IQR=Q_{75}-Q_{25}$
-
Определить верхнюю и нижнюю границы Тьюки:
-
$bound_{upper} = Q_{75} + 1.5*IQR$ -
$bound_{lower} = Q_{25} - 1.5*IQR$
-
-
Найти наблюдения, которые выходят за пределы границ
Метод требует, чтобы признак, на основе которого происходит поиск выбросов, был распределен нормально.
Можно попробовать воспользоваться методами преобразования данных, например, логарифмированием, чтобы попытаться свести распределение к нормальному или хотя бы к симметричному.
Также можно добавить вариативности количеству квартильных размахов в левую и правую сторону распределений.
Правило трех сигм гласит: что, если распределение данных является нормальным, то 99.73% лежат в интервале:
-
$\mu$ - математическое ожидание (для выборки это среднее значение) -
$\sigma$ - стандартное отклонение.
Наблюдения, которые лежат за пределами этого интервала будут считаться выбросами.
- Вычислить среднее и стандартное отклонение
$\mu$ и$\sigma$ для признака, который мы исследуем - Определить верхнюю и нижнюю границы:
-
$bound_{upper} = \mu - 3 * \sigma$ -
$bound_{lower} = \mu + 3 * \sigma$
-
- Найти наблюдения, которые выходят за пределы границ
Метод требует, чтобы признак, на основе которого происходит поиск выбросов, был распределен нормально.
Можно попробовать воспользоваться методами преобразования данных, например, логарифмированием, чтобы попытаться свести распределение к нормальному или хотя бы к симметричному.
Также можно добавить вариативности количеству стандартных отклонений в левую и правую сторону распределений.
Методы реализованы в виде функций 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)