Gestire gli outlier

Analisi esplorativa dei dati in Python

George Boorman

Curriculum Manager, DataCamp

Cos'è un outlier?

  • Un'osservazione lontana dagli altri punti dati
    • Prezzo mediano casa: $400.000
    • Prezzo outlier: $5.000.000

 

  • Chiediti perché il valore è diverso:
    • Posizione, numero di stanze, dimensioni, ecc.

Grande casa con piscina

1 Crediti immagine: https://unsplash.com/@ralphkayden
Analisi esplorativa dei dati in Python

Statistiche descrittive

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
Analisi esplorativa dei dati in Python

Usare l'intervallo interquartile

Intervallo interquartile (IQR)

  • IQR = 75º - 25º percentile
Analisi esplorativa dei dati in Python

IQR nei box plot

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

Box plot degli stipendi per i data professional: 25º percentile in basso al box, 50º come linea centrale, 75º in alto, outlier come rombi fuori dal box

Analisi esplorativa dei dati in Python

Usare l'intervallo interquartile

Intervallo interquartile (IQR)

  • IQR = 75º - 25º percentile
  • Outlier superiori > 75º percentile + (1,5 * IQR)
  • Outlier inferiori < 25º percentile - (1,5 * IQR)
Analisi esplorativa dei dati in Python

Identificare le soglie

# 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
Analisi esplorativa dei dati in Python

Identificare gli outlier

# 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
Analisi esplorativa dei dati in Python

Sottoinsiemi dei dati

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
Analisi esplorativa dei dati in Python

Perché cercare gli outlier?

  • Gli outlier sono valori estremi

    • possono non rappresentare bene i dati
  • Possono alterare media e deviazione standard

  • Test statistici e modelli ML spesso richiedono dati ~normali

Analisi esplorativa dei dati in Python

Cosa fare con gli outlier?

Domande da farti:

  • Perché esistono questi outlier?
    • Ruoli più senior/paesi diversi pagano di più
    • Valuta se mantenerli nel dataset

 

  • I dati sono accurati?
    • Errore nella raccolta dati?
      • Se sì, rimuovili
Analisi esplorativa dei dati in Python

Rimuovere gli outlier

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
Analisi esplorativa dei dati in Python

Distribuzione degli stipendi

Istogramma degli stipendi con outlier inclusi, con valori estremi da circa 250000 a 450000 dollari

Istogramma degli stipendi dopo aver rimosso gli outlier, che quasi sembra una distribuzione normale

Analisi esplorativa dei dati in Python

Ayo berlatih!

Analisi esplorativa dei dati in Python

Preparing Video For Download...