Omgaan met uitschieters

Exploratory Data Analysis in Python

George Boorman

Curriculum Manager, DataCamp

Wat is een uitschieter?

  • Een waarneming ver van de rest
    • Medianes woningprijs: $400.000
    • Uitschieter: $5.000.000

 

  • Bedenk waarom de waarde afwijkt:
    • Locatie, aantal slaapkamers, grootte, etc.

Groot huis met zwembad

1 Image credit: https://unsplash.com/@ralphkayden
Exploratory Data Analysis in Python

Beschrijvende statistiek gebruiken

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 in Python

IQR gebruiken

Interkwartielafstand (IQR)

  • IQR = 75e - 25e percentiel
Exploratory Data Analysis in Python

IQR in boxplots

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

Boxplot van salarissen voor dataprofessionals, met het 25e percentiel onderaan de box, het 50e percentiel als middenlijn, het 75e percentiel bovenaan de box en uitschieters als ruiten buiten de box

Exploratory Data Analysis in Python

IQR gebruiken

Interkwartielafstand (IQR)

  • IQR = 75e - 25e percentiel
  • Bovenste uitschieters > 75e percentiel + (1,5 × IQR)
  • Onderste uitschieters < 25e percentiel - (1,5 × IQR)
Exploratory Data Analysis in Python

Drempels bepalen

# 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 in Python

Uitschieters identificeren

# 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 in Python

Subset van onze data maken

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 in Python

Waarom uitschieters zoeken?

  • Uitschieters zijn extreme waarden

    • vertegenwoordigen de data mogelijk niet goed
  • Kunnen het gemiddelde en de standaardafwijking veranderen

  • Statistische toetsen en ML-modellen vragen vaak normale verdeling

Exploratory Data Analysis in Python

Wat te doen met uitschieters?

Vragen om te stellen:

  • Waarom bestaan deze uitschieters?
    • Senior functies/landen betalen meer
    • Overweeg ze te laten staan

 

  • Is de data juist?
    • Kan er een meet-/invoerfout zijn?
      • Zo ja, verwijder ze
Exploratory Data Analysis in Python

Uitschieters verwijderen

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 in Python

Verdeling van salarissen

Histogram van salarissen met uitschieters inbegrepen, met extreme waarden rond 250000–450000 dollar

Histogram van salarissen na verwijderen van uitschieters; bijna normale verdeling

Exploratory Data Analysis in Python

Laten we oefenen!

Exploratory Data Analysis in Python

Preparing Video For Download...