Работа с выбросами

Разведочный анализ данных на Python

George Boorman

Curriculum Manager, DataCamp

Что такое выброс?

  • Наблюдение, значительно отличающееся от остальных
    • Медианная цена дома: $400 000
    • Цена дома-выброса: $5 000 000

 

  • Важно понять, почему значение отличается:
    • Расположение, количество спален, общая площадь и т. д.

Большой дом с бассейном

1 Image credit: https://unsplash.com/@ralphkayden
Разведочный анализ данных на Python

Описательная статистика

print(salaries["Salary_USD"].describe())
count       518.000
mean     104905.826
std       62660.107
min        3819.000
25%       61191.000
50%       95483.000
75%      137496.000
max      429675.000
Name: Salary_USD, dtype: float64
Разведочный анализ данных на Python

Использование межквартильного размаха

Межквартильный размах (IQR)

  • IQR = 75-й процентиль − 25-й процентиль
Разведочный анализ данных на Python

IQR на диаграммах «ящик с усами»

sns.boxplot(data=salaries,
            y="Salary_USD")
plt.show()

Ящик с усами для зарплат специалистов по данным: нижняя граница ящика — 25-й процентиль, средняя линия — 50-й, верхняя — 75-й, выбросы показаны ромбами за пределами ящика

Разведочный анализ данных на Python

Использование межквартильного размаха

Межквартильный размах (IQR)

  • IQR = 75-й процентиль − 25-й процентиль
  • Верхние выбросы > 75-й процентиль + (1,5 * IQR)
  • Нижние выбросы < 25-й процентиль − (1,5 * IQR)
Разведочный анализ данных на Python

Определение пороговых значений

# 75th percentile
seventy_fifth = salaries["Salary_USD"].quantile(0.75)

# 25th percentile twenty_fifth = salaries["Salary_USD"].quantile(0.25)
# Interquartile range salaries_iqr = seventy_fifth - twenty_fifth
print(salaries_iqr)
76305.0
Разведочный анализ данных на Python

Выявление выбросов

# Upper threshold
upper = seventy_fifth + (1.5 * salaries_iqr)

# Lower threshold lower = twenty_fifth - (1.5 * salaries_iqr)
print(upper, lower)
251953.5 -53266.5
Разведочный анализ данных на Python

Фильтрация данных

salaries[(salaries["Salary_USD"] < lower) | (salaries["Salary_USD"] > upper)] \

[["Experience", "Employee_Location", "Salary_USD"]]
        Experience    Employee_Location    Salary_USD
29      Mid           US                   429675.0
67      Mid           US                   257805.0
80      Senior        US                   263534.0
83      Mid           US                   429675.0
133     Mid           US                   403895.0
410     Executive     US                   309366.0
441     Senior        US                   362837.0
445     Senior        US                   386708.0
454     Senior        US                   254368.0
Разведочный анализ данных на Python

Зачем искать выбросы?

  • Выбросы — это экстремальные значения

    • могут искажать представление о данных
  • Влияют на среднее значение и стандартное отклонение

  • Статистические тесты и модели машинного обучения требуют нормально распределённых данных

Разведочный анализ данных на Python

Что делать с выбросами?

Вопросы для анализа:

  • Почему возникли эти выбросы?
    • Более старшие должности / другие страны предполагают более высокую оплату
    • Возможно, стоит оставить их в наборе данных

 

  • Являются ли данные точными?
    • Могла ли произойти ошибка при сборе данных?
      • Если да — удалите эти значения
Разведочный анализ данных на Python

Удаление выбросов

no_outliers = salaries[(salaries["Salary_USD"] > lower) & (salaries["Salary_USD"] < upper)]
print(no_outliers["Salary_USD"].describe())
count       509.000000
mean     100674.567780
std       53643.050057
min        3819.000000
25%       60928.000000
50%       95483.000000
75%      134059.000000
max      248257.000000
Name: Salary_USD, dtype: float64
Разведочный анализ данных на Python

Распределение зарплат

Гистограмма зарплат с выбросами, где экстремальные значения достигают примерно 250 000–450 000 долларов

Гистограмма зарплат после удаления выбросов, по форме близкая к нормальному распределению

Разведочный анализ данных на Python

Давайте потренируемся!

Разведочный анализ данных на Python

Preparing Video For Download...