การจัดการค่าผิดปกติ

การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

George Boorman

Curriculum Manager, DataCamp

ค่าผิดปกติคืออะไร?

  • ข้อมูลที่อยู่ห่างจากจุดข้อมูลอื่น
    • ราคาบ้านมัธยฐาน: $400,000
    • ราคาบ้านที่เป็นค่าผิดปกติ: $5,000,000

 

  • ควรพิจารณาสาเหตุที่ค่านั้นแตกต่าง:
    • ทำเล จำนวนห้องนอน ขนาดโดยรวม เป็นต้น

บ้านหลังใหญ่พร้อมสระว่ายน้ำ

1 Image credit: https://unsplash.com/@ralphkayden
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การใช้สถิติเชิงพรรณนา

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
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การใช้พิสัยควอร์ไทล์

พิสัยควอร์ไทล์ (IQR)

  • IQR = เปอร์เซ็นไทล์ที่ 75 - เปอร์เซ็นไทล์ที่ 25
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

IQR ใน Box Plot

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

Box plot ของเงินเดือนผู้เชี่ยวชาญด้านข้อมูล แสดงเปอร์เซ็นไทล์ที่ 25 ที่ขอบล่างของกล่อง เปอร์เซ็นไทล์ที่ 50 เป็นเส้นกลาง เปอร์เซ็นไทล์ที่ 75 ที่ขอบบน และค่าผิดปกติแสดงด้วยรูปเพชรนอกกล่อง

การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การใช้พิสัยควอร์ไทล์

พิสัยควอร์ไทล์ (IQR)

  • IQR = เปอร์เซ็นไทล์ที่ 75 - เปอร์เซ็นไทล์ที่ 25
  • ค่าผิดปกติบน > เปอร์เซ็นไทล์ที่ 75 + (1.5 * IQR)
  • ค่าผิดปกติล่าง < เปอร์เซ็นไทล์ที่ 25 - (1.5 * IQR)
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การหาค่าขอบเขต

# 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
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การระบุค่าผิดปกติ

# 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
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การกรองข้อมูล

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
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

ทำไมต้องค้นหาค่าผิดปกติ?

  • ค่าผิดปกติคือค่าสุดขั้ว

    • อาจไม่ได้สะท้อนข้อมูลโดยรวมอย่างแม่นยำ
  • ส่งผลต่อค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน

  • การทดสอบทางสถิติและโมเดล machine learning ต้องการข้อมูลที่มีการกระจายแบบปกติ

การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

จะจัดการค่าผิดปกติอย่างไร?

คำถามที่ควรถาม:

  • ค่าผิดปกติเหล่านี้มีสาเหตุจากอะไร?
    • ตำแหน่งงานที่สูงขึ้น / ประเทศที่จ่ายสูงกว่า
    • พิจารณาเก็บค่าเหล่านี้ไว้ในชุดข้อมูล

 

  • ข้อมูลถูกต้องหรือไม่?
    • อาจเกิดข้อผิดพลาดในการเก็บข้อมูลหรือเปล่า?
      • ถ้าใช่ ให้ลบออก
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การลบค่าผิดปกติ

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
การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

การกระจายของเงินเดือน

Histogram ของเงินเดือนก่อนลบค่าผิดปกติ มีค่าสุดขั้วตั้งแต่ประมาณ 250,000 ถึง 450,000 ดอลลาร์

Histogram ของเงินเดือนหลังลบค่าผิดปกติออก ซึ่งมีรูปร่างใกล้เคียงกับการกระจายแบบปกติ

การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

มาฝึกกันเถอะ!

การวิเคราะห์ข้อมูลเชิงสำรวจด้วย Python

Preparing Video For Download...