เหนือกว่าบรรทัดฐาน: สำรวจโลกแห่งความผิดปกติ
วิธีที่ค่าผิดปกติทำให้ Data Scientist อยู่นิ่งๆ

Outliers คือจุดที่อยู่ในระยะที่ผิดปกติจากจุดส่วนใหญ่ในชุดข้อมูล ก่อนที่เราจะลงลึกในการแก้ปัญหาแมชชีนเลิร์นนิง ขั้นตอนสำคัญในการลบค่าผิดปกติออกหากไม่จำเป็น ให้เราพูดถึงรากเหง้าของ Outlier
สาเหตุทั่วไปของ Outliers
- ข้อผิดพลาดในการป้อนข้อมูล (ข้อผิดพลาดของมนุษย์)
- ข้อผิดพลาดในการทดลอง
- ข้อผิดพลาดในการวัด (ข้อผิดพลาดของเครื่องมือ)
- ข้อผิดพลาดในการสุ่มตัวอย่าง (ดึงข้อมูลจากแหล่งต่างๆ/ผิด)
- ข้อผิดพลาดโดยเจตนา (ค่าผิดปกติที่สร้างขึ้นเพื่อทดสอบวิธีการตรวจหา)
- ข้อผิดพลาดตามธรรมชาติ (ไม่ใช่ข้อผิดพลาด ความแปลกใหม่ในข้อมูล)
1. IQR (พิสัยระหว่างควอไทล์)
IQR อยู่ตรงกลาง 50% ของชุดข้อมูล เป็นช่วงของค่า
ระหว่างควอไทล์ที่สามและควอไทล์แรก (Q3 — Q1) ใช้เพื่อวัดความแปรปรวนโดยการแบ่งชุดข้อมูลออกเป็นควอไทล์ ควอไทล์คือค่าที่แบ่งข้อมูลของคุณออกเป็น 4 ส่วน โดยข้อมูลจะถูกจัดเรียงจากน้อยไปหามาก
IQR = Q3 — Q1
Q1 = ควอไทล์ที่ 1 (ควอไทล์ล่างซึ่งเป็นเปอร์เซ็นไทล์ที่ 25 ซึ่งแบ่งข้อมูล 25% ที่ต่ำกว่า) Q2
= ควอไทล์ที่ 2 (ค่ามัธยฐานซึ่งเป็นเปอร์เซ็นไทล์ที่ 50)
Q3 = ควอไทล์ที่ 3 (ควอไทล์บนซึ่งเป็นเปอร์เซ็นไทล์ที่ 75 ที่หาร 25 บน % ของข้อมูล)
หมายเหตุ : เปอร์เซ็นต์และเปอร์เซ็นไทล์เป็นสองสิ่งที่แตกต่างกัน ถ้าเปอร์เซ็นไทล์ที่ 25 เป็น 8 ก็หมายความว่า 25% ของข้อมูลน้อยกว่า 8 ถ้าเปอร์เซ็นไทล์ที่ 75 คือ 40 ก็หมายความว่า 75% ของข้อมูลน้อยกว่า 40
หากค่าข้อมูล < Q1–1.5(IQR) หรือค่าข้อมูล > Q3+1.5(IQR) จะถือว่าเป็นค่าผิดปกติ

#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
เรียกอีกอย่างว่าคะแนนมาตรฐานที่ทำให้เราทราบว่าจุดข้อมูลอยู่ห่างจากค่าเฉลี่ยเพียงใด มันบอกว่าจุดข้อมูลเบี่ยงเบนไปจากค่าเฉลี่ยในส่วนเบี่ยงเบนมาตรฐานแค่ไหน เรารู้ว่าหากข้อมูลเป็นไปตามการแจกแจงแบบปกติ ข้อมูลจะครอบคลุม 99.7% ของจุดไม่เกิน 3 ส่วนเบี่ยงเบนมาตรฐาน เราสามารถให้ค่าผิดปกติของเราคำนวณเกินกว่านั้นทั้งสองด้าน
ถ้าเราได้ค่า z-score เป็น 2.5 เราก็บอกว่ามันสูงกว่าค่าเฉลี่ย 2.5 ส่วนเบี่ยงเบนมาตรฐาน และถ้าเราได้ -2.5 เราก็บอกว่ามันคือ 2.5 ส่วนเบี่ยงเบนมาตรฐานต่ำกว่าค่าเฉลี่ย ดังนั้นเราจึงสามารถสรุปได้ว่าคะแนน z ไม่มีส่วนเบี่ยงเบนมาตรฐานสูงหรือต่ำกว่า ซึ่งหมายความว่าแต่ละค่าจะลดลง
ข้อได้เปรียบหลักของ z-score คือมันบอกคุณว่าค่าในหน่วย % เป็นค่าที่ผิดปกติมากน้อยเพียงใด
คะแนน Z = (x-μ)/σ
x คือการสังเกตในตัวอย่าง
x̄ คือค่าเฉลี่ยของการสังเกตในตัวอย่าง
σ คือค่าเบี่ยงเบนมาตรฐานของการสังเกตในตัวอย่าง

3. จัดเรียงข้อมูลและดูค่าสูงสุด
นี่เป็นวิธีพื้นฐานที่คุณสามารถจัดเรียงข้อมูลได้ หลังจากนั้นให้มองหาค่าสูงสุดและนั่นจะเป็นค่าผิดปกติของเรา
ตัวอย่างเช่น เราได้รับอายุเป็น 4,6,9,2,10,12,102
ขั้นตอนที่ 1 : จัดเรียงข้อมูล : 2, 4,6,9,12,102
ขั้นตอนที่ 2: มองหาค่าที่มากเกินไป เราจะเห็นว่า 102 เป็นค่าที่มากเกินไป ซึ่งนั่นอาจเป็นค่าผิดปกติสำหรับเรา
4. พล็อตกระจาย พล็อตบ็อกซ์
- Scatterplot : เป็นตัวบ่งชี้ที่ยอดเยี่ยมที่ช่วยให้เราเห็นว่ามีรูปแบบระหว่างตัวแปรสองตัวหรือไม่ ใช้เมื่อคุณจับคู่ข้อมูลตัวเลขหรือเมื่อคุณกำหนดความสัมพันธ์ระหว่างตัวแปรสองตัว แต่ไม่เพียงเท่านี้ คุณยังสามารถใช้สำหรับการตรวจจับค่าผิดปกติได้อีกด้วย
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
ขอบคุณที่อ่าน! หากคุณชอบงานชิ้นนี้และต้องการอ่านงานของฉันเพิ่มเติม โปรดติดตามฉันบนสื่อกลาง ฉันหวังว่าจะได้แบ่งปันกับคุณมากขึ้นในอนาคต