Outlier — IQR
outlier_iqr · outlier · number, text
2026-09-23
กำลังประมวลผล…
outlier_iqr · outlier · number, text
2026-09-23
วิธี IQR ดูจากตำแหน่งของข้อมูลแทนค่าเฉลี่ย จึงไม่ถูกค่าสุดโต่งดึงไปด้วย เป็นวิธีมาตรฐานที่ใช้ในกราฟกล่อง และเป็นจุดเริ่มต้นที่ดีที่สุดเมื่อยังไม่รู้ว่าข้อมูลกระจายตัวแบบไหน เครื่องมือนี้ทำเครื่องหมายไว้ในคอลัมน์ใหม่เป็นค่าเริ่มต้น ไม่ลบและไม่แก้ข้อมูลให้เอง
action กำหนดว่าจะทำเครื่องหมาย ทำให้ว่าง ดึงเข้าขอบ หรือลบแถว| ค่า | ผลลัพธ์ | |---|---| | Q1 = 11, Q3 = 13, k = 1.5 | ช่วงปกติคือ 8 ถึง 16 | | 100 | อยู่นอกช่วง จึงถูกทำเครื่องหมาย |
| Parameter | Type | Default |
|---|---|---|
column | string | — |
action | flag | remove | clamp | null | "flag" |
newColumnName | string | — |
k | number | 1.5 |
import json
def quantile(sorted_values, q):
if not sorted_values:
return 0
position = (len(sorted_values) - 1) * q
base = int(position)
rest = position - base
lower = sorted_values[base]
upper = sorted_values[base + 1] if base + 1 < len(sorted_values) else lower
return lower + rest * (upper - lower)
def outlier_iqr(values, k=1.5):
numbers = sorted(v for v in values if isinstance(v, (int, float)) and not isinstance(v, bool))
q1, q3 = quantile(numbers, 0.25), quantile(numbers, 0.75)
spread = q3 - q1
if spread == 0:
return {'bounds': None, 'flags': [None for _ in values]}
lower, upper = q1 - k * spread, q3 + k * spread
flags = [None if not isinstance(v, (int, float)) or isinstance(v, bool) else (v < lower or v > upper) for v in values]
return {'bounds': [round(lower, 3), round(upper, 3)], 'flags': flags}
values = [10, 10, 11, 11, 12, 12, 13, 13, 100]
print(json.dumps(outlier_iqr(values), ensure_ascii=False))
เปิดหน้า Outlier Review เลือกคอลัมน์ amount วิธี IQR และดูช่วงที่ระบบถือว่าปกติพร้อมรายการค่าที่หลุดช่วง ไล่ดูสิบค่าแรกว่าเป็นข้อมูลผิดจริงหรือเป็นยอดก้อนใหญ่ที่เกิดขึ้นได้ ถ้าเป็นข้อมูลผิด ให้เพิ่มขั้นตอนแบบ flag ไว้ก่อน แล้วค่อยตัดสินใจร่วมกับเจ้าของข้อมูลว่าจะลบหรือแก้
ใช้ outlier_mad เมื่อข้อมูลเบ้มากและ IQR ยังจับไม่พอ ใช้ outlier_zscore เมื่อข้อมูลกระจายตัวใกล้ปกติ และใช้ clamp_value เมื่อรู้ช่วงที่ถูกต้องอยู่แล้วโดยไม่ต้องคำนวณจากข้อมูล