วิธีลบค่าผิดปกติใน python


ค่าผิดปกติ คือการสังเกตที่อยู่ห่างจากค่าอื่นๆ ในชุดข้อมูลอย่างผิดปกติ ค่าผิดปกติอาจเป็นปัญหาได้เนื่องจากอาจส่งผลต่อผลลัพธ์ของการวิเคราะห์

บทช่วยสอนนี้จะอธิบายวิธีการระบุและลบค่าผิดปกติใน Python

วิธีระบุค่าผิดปกติใน Python

ก่อนที่คุณจะสามารถลบค่าผิดปกติได้ คุณต้องตัดสินใจก่อนว่าคุณพิจารณาว่าอะไรคือค่าผิดปกติ มีสองวิธีทั่วไปในการทำเช่นนี้:

1. ใช้พิสัยระหว่างควอไทล์

ช่วงระหว่างควอไทล์ (IQR) คือความแตกต่างระหว่างเปอร์เซ็นไทล์ที่ 75 (Q3) และเปอร์เซ็นไทล์ที่ 25 (Q1) ในชุดข้อมูล โดยจะวัดการกระจายของค่าเฉลี่ย 50% ของค่า

คุณสามารถกำหนดให้การสังเกตเป็นค่าผิดปกติได้หากเป็น 1.5 เท่าของช่วงระหว่างควอร์ไทล์เหนือควอไทล์ที่ 3 (Q3) หรือ 1.5 เท่าของช่วงระหว่างควอไทล์ที่ต่ำกว่าควอร์ไทล์ที่ 1 (Q1)

ค่าผิดปกติ = การสังเกต > Q3 + 1.5*IQR หรือ Q1 – 1.5*IQR

2. ใช้คะแนน z

คะแนน z จะบอกคุณว่าค่าที่กำหนดมาจากค่าเฉลี่ยเป็นจำนวนเท่าใด เราใช้สูตรต่อไปนี้เพื่อคำนวณคะแนน z:

z = (X – μ) / σ

ทอง:

  • X คือค่าข้อมูลดิบค่าเดียว
  • μ คือค่าเฉลี่ยของประชากร
  • σ คือค่าเบี่ยงเบนมาตรฐานของประชากร

คุณสามารถกำหนดการสังเกตให้เป็นค่าผิดปกติได้หากคะแนน z น้อยกว่า -3 หรือมากกว่า 3

ค่าผิดปกติ = การสังเกตด้วยคะแนน z > 3 หรือ < -3

วิธีลบค่าผิดปกติใน Python

เมื่อคุณตัดสินใจว่าสิ่งใดที่คุณพิจารณาว่าเป็นค่าผิดปกติ คุณสามารถระบุและลบสิ่งเหล่านั้นออกจากชุดข้อมูลได้ เพื่ออธิบายวิธีการทำเช่นนี้ เราจะใช้ DataFrame แพนด้าต่อไปนี้:

 import numpy as np
import pandas as pd 
import scipy.stats as stats

#create dataframe with three columns 'A', 'B', 'C'
np.random.seed(10)
data = pd.DataFrame(np.random.randint(0, 10, size=(100, 3)), columns=['A', 'B', 'C'])

#view first 10 rows
data[:10]

           ABC
0 13.315865 7.152790 -15.454003
1 -0.083838 6.213360 -7.200856
2 2.655116 1.085485 0.042914
3 -1.746002 4.330262 12.030374
4 -9.650657 10.282741 2.286301
5 4.451376 -11.366022 1.351369
6 14.845370 -10.798049 -19.777283
7 -17.433723 2.660702 23.849673
8 11.236913 16.726222 0.991492
9 13.979964 -2.712480 6.132042

จากนั้นเราสามารถกำหนดและลบค่าผิดปกติได้โดยใช้วิธี z-score หรือวิธีช่วงระหว่างควอไทล์:

วิธี Z-score:

 #find absolute value of z-score for each observation
z = np.abs(stats.zscore(data))

#only keep rows in dataframe with all z-scores less than absolute value of 3 
data_clean = data[(z<3).all(axis=1)]

#find how many rows are left in the dataframe 
data_clean.shape

(99.3)

วิธีพิสัยระหว่างควอไทล์:

 #find Q1, Q3, and interquartile range for each column
Q1 = data.quantile(q=.25)
Q3 = data.quantile(q=.75)
IQR = data.apply(stats.iqr)

#only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3
data_clean = data[~((data < (Q1-1.5*IQR)) | (data > (Q3+1.5*IQR))).any(axis=1)]

#find how many rows are left in the dataframe 
data_clean.shape

(89.3)

เราจะเห็นว่าวิธีคะแนน za ระบุและลบการสังเกตหนึ่งรายการในฐานะค่าผิดปกติ ในขณะที่วิธีพิสัยระหว่างควอไทล์ระบุและลบการสังเกต 11 รายการทั้งหมดว่าเป็นค่าผิดปกติ

เมื่อใดควรลบค่าผิดปกติ

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

หากค่าผิดปกติกลายเป็นผลลัพธ์ของข้อผิดพลาดในการป้อนข้อมูล คุณสามารถตัดสินใจกำหนดค่าใหม่ เช่น ค่า เฉลี่ยหรือค่ามัธยฐาน ของชุดข้อมูลได้

หากค่านั้นเป็นค่าผิดปกติจริงๆ คุณสามารถเลือกที่จะลบค่านั้นออกได้หากจะมีผลกระทบสำคัญต่อการวิเคราะห์โดยรวมของคุณ เพียงอย่าลืมพูดถึงในรายงานหรือการวิเคราะห์ขั้นสุดท้ายของคุณว่าคุณได้ลบค่าผิดปกติออก

แหล่งข้อมูลเพิ่มเติม

หากคุณกำลังทำงานกับตัวแปรหลายตัวพร้อมกัน คุณอาจต้องการใช้ ระยะห่างของ Mahalanobis เพื่อตรวจจับค่าผิดปกติ

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *