Obsługa wartości odstających

Eksploracyjna analiza danych w Pythonie

George Boorman

Curriculum Manager, DataCamp

Czym jest wartość odstająca?

  • Obserwacja odległa od pozostałych punktów danych
    • Mediana ceny domu: 400 000 USD
    • Wartość odstająca: 5 000 000 USD

 

  • Należy rozważyć przyczynę różnicy:
    • Lokalizacja, liczba sypialni, powierzchnia itd.

Duży dom z basenem

1 Image credit: https://unsplash.com/@ralphkayden
Eksploracyjna analiza danych w Pythonie

Statystyki opisowe

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
Eksploracyjna analiza danych w Pythonie

Zastosowanie rozstępu ćwiartkowego

Rozstęp ćwiartkowy (IQR)

  • IQR = 75. - 25. percentyl
Eksploracyjna analiza danych w Pythonie

IQR na wykresach pudełkowych

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

Wykres pudełkowy wynagrodzeń specjalistów ds. danych: 25. percentyl na dole pudełka, 50. percentyl jako linia środkowa, 75. percentyl na górze pudełka, wartości odstające jako diamenty poza pudełkiem

Eksploracyjna analiza danych w Pythonie

Zastosowanie rozstępu ćwiartkowego

Rozstęp ćwiartkowy (IQR)

  • IQR = 75. - 25. percentyl
  • Górne wartości odstające > 75. percentyl + (1.5 * IQR)
  • Dolne wartości odstające < 25. percentyl - (1.5 * IQR)
Eksploracyjna analiza danych w Pythonie

Wyznaczanie progów

# 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
Eksploracyjna analiza danych w Pythonie

Identyfikacja wartości odstających

# 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
Eksploracyjna analiza danych w Pythonie

Filtrowanie danych

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
Eksploracyjna analiza danych w Pythonie

Po co szukać wartości odstających?

  • Wartości odstające to wartości skrajne

    • mogą nie odzwierciedlać danych dokładnie
  • Mogą zmieniać średnią i odchylenie standardowe

  • Testy statystyczne i modele ML wymagają rozkładu normalnego

Eksploracyjna analiza danych w Pythonie

Co zrobić z wartościami odstającymi?

Pytania, które należy zadać:

  • Dlaczego te wartości odstające istnieją?
    • Wyższe stanowiska / inne kraje oferują wyższe wynagrodzenia
    • Rozważenie pozostawienia ich w zbiorze danych

 

  • Czy dane są dokładne?
    • Czy mogło dojść do błędu podczas zbierania danych?
      • Jeśli tak, należy je usunąć
Eksploracyjna analiza danych w Pythonie

Usuwanie wartości odstających

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
Eksploracyjna analiza danych w Pythonie

Rozkład wynagrodzeń

Histogram wynagrodzeń przed usunięciem wartości odstających, z wartościami skrajnymi od ok. 250 000 do 450 000 dolarów

Histogram wynagrodzeń po usunięciu wartości odstających, zbliżony do rozkładu normalnego

Eksploracyjna analiza danych w Pythonie

Czas na ćwiczenia!

Eksploracyjna analiza danych w Pythonie

Preparing Video For Download...