Обробка викидів

Exploratory Data Analysis у Python

George Boorman

Curriculum Manager, DataCamp

Що таке викид?

  • Спостереження, що сильно відрізняється від інших точок даних
    • Медіанна ціна будинку: $400,000
    • Викид: ціна будинку $5,000,000

 

  • Варто з'ясувати, чому значення інше:
    • Локація, кількість спалень, загальна площа тощо

Великий будинок із басейном

1 Image credit: https://unsplash.com/@ralphkayden
Exploratory Data Analysis у 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
Exploratory Data Analysis у Python

Використання міжквартильного розмаху

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

  • IQR = 75-й − 25-й перцентиль
Exploratory Data Analysis у Python

IQR у боксплотах

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

Боксплот зарплат фахівців з даних: 25-й перцентиль унизу коробки, 50-й — середня лінія, 75-й — угорі, викиди — ромби поза коробкою

Exploratory Data Analysis у Python

Використання міжквартильного розмаху

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

  • IQR = 75-й − 25-й перцентиль
  • Верхні викиди > 75-й перцентиль + (1,5 × IQR)
  • Нижні викиди < 25-й перцентиль − (1,5 × IQR)
Exploratory Data Analysis у 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
Exploratory Data Analysis у 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
Exploratory Data Analysis у 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
Exploratory Data Analysis у Python

Навіщо шукати викиди?

  • Викиди — це екстремальні значення

    • можуть неточно відображати наші дані
  • Впливають на середнє та стандартне відхилення

  • Статистичні тести й моделі машинного навчання потребують нормально розподілених даних

Exploratory Data Analysis у Python

Що робити з викидами?

Питання до розгляду:

  • Чому виникають ці викиди?
    • Вищі посади / інші країни платять більше
    • Можна залишити їх у наборі даних

 

  • Чи дані точні?
    • Чи могла статися помилка під час збору даних?
      • Якщо так — видаліть їх
Exploratory Data Analysis у 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
Exploratory Data Analysis у Python

Розподіл зарплат

Гістограма зарплат після заміни викидів медіаною; екстремальні значення приблизно від 250000 до 450000 доларів

Гістограма зарплат після заміни викидів медіаною, що майже нагадує нормальний розподіл

Exploratory Data Analysis у Python

Давайте потренуємось!

Exploratory Data Analysis у Python

Preparing Video For Download...