Hantera extremvärden

Exploratory Data Analysis i Python

George Boorman

Curriculum Manager, DataCamp

Vad är ett extremvärde?

  • En observation långt ifrån övriga datapunkter
    • Medianpris för hus: 400 000 $
    • Extremvärdets huspris: 5 000 000 $

 

  • Undersök varför värdet avviker:
    • Läge, antal sovrum, total storlek osv.

Stort hus med swimmingpool

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

Använda deskriptiv statistik

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

Använda kvartilavståndet

Kvartilavstånd (IQR)

  • IQR = 75:e – 25:e percentilen
Exploratory Data Analysis i Python

IQR i lådagram

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

Lådagram över löner för dataprofessionella, med 25:e percentilen vid lådans nederkant, 50:e percentilen som mittlinjen, 75:e percentilen vid lådans överkant och extremvärden som diamanter utanför lådan

Exploratory Data Analysis i Python

Använda kvartilavståndet

Kvartilavstånd (IQR)

  • IQR = 75:e – 25:e percentilen
  • Övre extremvärden > 75:e percentilen + (1,5 * IQR)
  • Nedre extremvärden < 25:e percentilen - (1,5 * IQR)
Exploratory Data Analysis i Python

Identifiera tröskelvärden

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

Identifiera extremvärden

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

Filtrera våra data

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

Varför leta efter extremvärden?

  • Extremvärden är avvikande värden

    • kanske inte representerar datan rättvist
  • Kan påverka medelvärde och standardavvikelse

  • Statistiska tester och maskininlärningsmodeller kräver normalfördelade data

Exploratory Data Analysis i Python

Vad gör man med extremvärden?

Frågor att ställa:

  • Varför finns dessa extremvärden?
    • Mer seniora roller / andra länder ger högre lön
    • Överväg att behålla dem i datamängden

 

  • Är datan korrekt?
    • Kan ett fel ha uppstått vid datainsamlingen?
      • I så fall, ta bort dem
Exploratory Data Analysis i Python

Ta bort extremvärden

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

Lönefördelning

Histogram över löner innan extremvärden ersatts med medianen, med extrema värden från cirka 250 000 till 450 000 dollar

Histogram över löner efter att extremvärden ersatts med medianen, vilket nästan liknar en normalfördelning

Exploratory Data Analysis i Python

Nu kör vi en övning!

Exploratory Data Analysis i Python

Preparing Video For Download...