วิธีลบค่าผิดปกติใน 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 เพื่อตรวจจับค่าผิดปกติ