Omgaan met uitschieters

Verkennende data-analyse in Python

George Boorman

Curriculum Manager, DataCamp

Wat is een uitschieter?

  • Een observatie ver weg van de rest
    • Mediane huizenprijs: $400,000
    • Uitschieter: $5,000,000

 

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

Groot huis met een zwembad

1 Image credit: https://unsplash.com/@ralphkayden
Verkennende data-analyse 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
Verkennende data-analyse in Python

De interkwartielafstand gebruiken

Interkwartielafstand (IQR)

  • IQR = 75e - 25e percentiel
Verkennende data-analyse 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

Verkennende data-analyse in Python

De interkwartielafstand gebruiken

Interkwartielafstand (IQR)

  • IQR = 75e - 25e percentiel
  • Bovenste uitschieters > 75e percentiel + (1,5 * IQR)
  • Onderste uitschieters < 25e percentiel - (1,5 * IQR)
Verkennende data-analyse 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
Verkennende data-analyse 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
Verkennende data-analyse in Python

Onze data subsetten

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
Verkennende data-analyse in Python

Waarom zoeken naar uitschieters?

  • Uitschieters zijn extreme waarden

    • ze vertegenwoordigen onze data mogelijk niet goed
  • Ze kunnen het gemiddelde en de standaardafwijking veranderen

  • Statistische toetsen en Machine Learning-modellen hebben normaal verdeelde data nodig

Verkennende data-analyse in Python

Wat doe je met uitschieters?

Vragen om te stellen:

  • Waarom bestaan deze uitschieters?
    • Senior rollen/andere landen betalen meer
    • Overweeg ze in de gegevensset te laten

 

  • Is de data juist?
    • Kon er een fout in de dataverzameling zitten?
      • Zo ja, verwijder ze
Verkennende data-analyse 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
Verkennende data-analyse in Python

Verdeling van salarissen

Histogram van salarissen met uitschieters (extreme waarden rond 250000–450000 dollar)

Histogram van salarissen na vervangen van uitschieters door de mediaan; lijkt bijna normaal verdeeld

Verkennende data-analyse in Python

Laten we oefenen!

Verkennende data-analyse in Python

Preparing Video For Download...