Poza normami: odkrywanie świata wartości odstających
Jak wartości odstające utrzymują Data Scientist w gotowości
Wartości odstające to punkty, które znajdują się w nienormalnej odległości od większości punktów w zbiorze danych. Zanim zagłębimy się w rozwiązanie jakiegokolwiek problemu z uczeniem maszynowym, kluczowym krokiem jest usunięcie niepotrzebnych wartości odstających. Omówmy korzenie Outliera.
Typowe przyczyny wartości odstających
- Błąd wprowadzania danych (błąd ludzki)
- Błąd eksperymentalny
- Błąd pomiaru (błąd instrumentalny)
- Błąd próbkowania (pobieranie danych z różnych/niewłaściwych źródeł)
- Zamierzony błąd (fałszywe wartości odstające utworzone w celu przetestowania metod wykrywania)
- Błąd naturalny (nie błąd, nowości w danych)
1. IQR (rozstęp międzykwartylowy)
IQR to środkowe 50% zbioru danych. Jest to zakres wartości
między trzecim a pierwszym kwartylem (Q3 — Q1). Służy do pomiaru zmienności poprzez podzielenie zbioru danych na kwartyle. Kwartyle to wartości, które dzielą twoje dane na 4 części, pod warunkiem, że dane są posortowane rosnąco.
IQR = Q3 — Q1
Q1 = 1. kwartyl (dolny kwartyl, który jest 25. percentylem, który dzieli dolne 25% danych)
Q2 = 2. kwartyl (mediana, która jest 50. percentylem)
Q3 = 3. kwartyl (górny kwartyl, który jest 75. percentylem, który dzieli górne 25% danych) % danych)
Uwaga : procent i percentyl to dwie różne rzeczy. Jeśli 25. percentyl wynosi 8, oznacza to po prostu, że 25% danych jest mniejszych niż 8. Jeśli 75. percentyl wynosi 40, oznacza to po prostu, że 75% danych ma mniej niż 40.
Jeśli wartość danych < Q1–1,5(IQR) LUB wartość danych > Q3+1,5(IQR), wówczas jest traktowana jako wartość odstająca.
#Python code for finding outliers
import numpy as np
data = [1,4,6,3,500,24,53]
sort_data = np.sort(data)
Q1 = np.percentile(data,25)
Q3 = np.percentile(data,75)
IQR = Q3-Q1
low_limit = Q1 - 1.5(IQR)
upper_limit = Q3 + 1.5(IQR)
outlier = []
for i in data:
if(i>upper_limit or i<low_limit):
outlier.append()
return outlier
Znany jest również jako wynik standardowy, który daje nam wyobrażenie o tym, jak daleko punkt danych znajduje się od średniej. Mówi, jak daleko punkt danych odbiega od średniej w odchyleniach standardowych. Wiemy, że jeśli dane mają rozkład normalny, to dane obejmują 99,7% punktów do 3 odchylenia standardowego. Możemy mieć nasze wartości odstające obliczone poza tym po obu stronach.
Więc jeśli otrzymamy z-score jako 2,5, to mówimy, że jest to odchylenie standardowe 2,5 powyżej średniej, a jeśli otrzymamy -2,5, to mówimy, że jest to odchylenie standardowe 2,5 poniżej średniej. Dlatego możemy stwierdzić, że z-score nie ma odchylenia standardowego powyżej lub poniżej tego, co oznacza, że każda wartość spada.
Główną zaletą Z-score jest to, że informuje, jaka wartość w % jest wartością odstającą.
Wynik Z = (x-μ)/σ
x to obserwacja w próbie
x̄ to średnia obserwacji w próbie
σ to odchylenie standardowe obserwacji w próbie
3. Sortuj dane i zobacz wartości ekstremalne
Jest to podstawowa metoda sortowania danych. Następnie szukaj ekstremalnych wartości i to będzie nasz odstający.
Na przykład podano nam wiek jako 4,6,9,2,10,12,102.
Krok 1: Sortuj dane: 2, 4,6,9,12,102
Krok 2: Znajdź ekstremalne wartości, które widzimy 102 to wartość ekstremalna, więc może to być dla nas wartość odstająca.
4. Wykreślanie wykresu punktowego, boxplot
- Scatterplot : To świetny wskaźnik, który pozwala nam zobaczyć, czy istnieje wzór między dwiema zmiennymi. Jest używany podczas parowania danych liczbowych lub podczas określania relacji między dwiema zmiennymi. Ale nie tylko to, możesz go również użyć do wykrywania wartości odstających.
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv("heart.csv")
fig,ax = plt.subplots(figsize = (10,6))
# Scatter with positive examples
pos = ax.scatter(df.age[df.target==1], df.thalach[df.target == 1], color="salmon", label="Heart Disease")
# Scatter with negative examples
neg = ax.scatter(df.age[df.target==0], df.thalach[df.target == 0], color="lightblue", label="No Heart Disease")
#customization
plt.title("Max heart rate in comparison to age")
plt.xlabel("Age")
plt.ylabel("Max heart rate")
plt.legend()
plt.show()
Visualization of Scatter plot
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
df = pd.read_csv("diabetes.csv")
#visualazing each feature to detect the presence of outliers
fig, axis = plt.subplots(nrows=1, ncols=8, figsize=(16, 6))
sns.boxplot(data=df[['Pregnancies']], ax=axis[0]);
sns.boxplot(data=df[['Glucose']], ax=axis[1]);
sns.boxplot(data=df[['BloodPressure']],ax=axis[2]);
sns.boxplot(data=df[['SkinThickness']], ax=axis[3]);
sns.boxplot(data=df[['Insulin']], ax=axis[4]);
sns.boxplot(data=df[['BMI']], ax=axis[5]);
sns.boxplot(data=df[['DiabetesPedigreeFunction']],ax=axis[6]);
sns.boxplot(data=df[['Age']], ax=axis[7]);
Visualization of Boxplot
Dziękuje za przeczytanie! Jeśli spodobał Ci się ten artykuł i chciałbyś przeczytać więcej moich prac, rozważ obserwowanie mnie na Medium. Nie mogę się doczekać, aby podzielić się z Tobą więcej w przyszłości.