Deteksi Outlier dengan IQR Method
Waktu lagi eksplorasi data (EDA), kita sering nemuin data yang “aneh” alias beda banget dari mayoritas data lainnya. Data kayak gini disebut outlier. Nah, salah satu cara paling populer buat nemuin outlier secara numerik (bukan cuma lihat-lihat dari chart) adalah pakai IQR Method atau Interquartile Range Method.
Beda sama boxplot yang sifatnya visual, IQR Method ini kasih kita angka pasti: batas bawah dan batas atas data yang dianggap “normal”. Di luar batas itu, otomatis dicap sebagai outlier.
💡 Emang Kenapa Sih Perlu IQR Method?
- Kasih angka pasti, bukan cuma perkiraan visual dari chart.
- Gampang diotomatisasi lewat kode, cocok buat data yang besar.
- Bisa jadi dasar buat filter atau bersihin data sebelum modeling.
- Nggak kepengaruh sama nilai ekstrem, beda sama rata-rata (mean).
- Salah satu teknik wajib pas tahap Data Cleaning & EDA.
Emang IQR Method Bisa Ngapain Aja?
IQR Method bukan cuma buat itung-itungan doang, tapi beneran bantu proses analisis, di antaranya:
- Nentuin rentang data yang dianggap “normal” secara statistik.
- Nemuin data ekstrem tinggi maupun ekstrem rendah sekaligus.
- Jadi dasar buat bikin keputusan: data ini dibuang, diperbaiki, atau dibiarin.
- Ngasih angka objektif yang bisa dipakai berulang kali di dataset lain.
- Sering dipasangin sama boxplot buat validasi visual.
IQR Method ini sering banget dipakai diam-diam di balik proses analisis berikut:
- Bersihin data sebelum training model machine learning
- Analisis gaji karyawan yang kelewat tinggi/rendah
- Deteksi transaksi mencurigakan (fraud detection)
- Quality control di data sensor/produksi pabrik
- Riset kesehatan (misal: nemuin hasil lab pasien yang nggak wajar)
Enaknya Pakai IQR Method
- Rumusnya simpel, cukup pakai Q1, Q3, dan IQR.
- Nggak sensitif sama nilai ekstrem kayak mean/standar deviasi.
- Bisa diterapin ke banyak kolom numerik sekaligus lewat perulangan.
- Hasilnya berupa angka pasti, gampang dijadiin syarat filter data.
Tapi Ya, IQR Method Juga Ada Minusnya
- Kurang cocok buat data yang distribusinya udah aneh dari awal (skewed banget).
- Batas 1.5 x IQR itu cuma konvensi umum, bukan aturan mutlak.
- Nggak ngasih tau “kenapa” data itu outlier, cuma nunjukin “mana” yang outlier.
Kenalan Yuk sama Komponen IQR Method
Sebelum praktik, penting banget paham dulu tiap komponen dari rumus IQR ini artinya apa:
| Komponen | Artinya |
|---|---|
| Q1 (Kuartil 1) | Nilai di mana 25% data ada di bawahnya |
| Q3 (Kuartil 3) | Nilai di mana 75% data ada di bawahnya |
| IQR (Interquartile Range) | Selisih antara Q3 dan Q1 (Q3 – Q1) |
| Batas Bawah | Q1 – (1.5 x IQR), di bawah ini dianggap outlier |
| Batas Atas | Q3 + (1.5 x IQR), di atas ini dianggap outlier |
1. Siapin Tools-nya Dulu
Buat ngitung IQR di Python, kita cuma butuh dua library utama: pandas buat handle datanya, dan numpy buat bantu perhitungan angka. Kalau kamu pakai Google Colab, dua-duanya udah otomatis ke-install, jadi tinggal import aja.
Import Library
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns2. Siapin Dataset-nya
Biar praktiknya gampang dan bisa langsung dicoba tanpa upload file, kita bikin dummy dataset dulu. Anggap aja ini data gaji karyawan (dalam juta rupiah), lengkap sama beberapa data ekstrem yang udah disengaja biar keliatan hasil deteksinya.
np.random.seed(42)
gaji_normal = np.random.normal(loc=8, scale=2, size=95)
gaji_outlier = [25, 28, 0.5, 30, 1]
gaji = np.concatenate([gaji_normal, gaji_outlier])
np.random.shuffle(gaji)
df = pd.DataFrame({
"Karyawan_ID": range(1, len(gaji)+1),
"Gaji_Juta": np.round(gaji, 2)
})
df.head()Pastiin kolom yang mau dianalisis itu bertipe numerik, misalnya kolom Gaji_Juta di atas.
3. Hitung Q1, Q3, dan IQR
Nah, ini bagian intinya. Kita hitung dulu Q1 dan Q3 pakai fungsi .quantile() dari pandas, terus cari selisihnya buat dapetin IQR.
Bentuk Dasarnya
Q1 = df["Gaji_Juta"].quantile(0.25)
Q3 = df["Gaji_Juta"].quantile(0.75)
IQR = Q3 - Q1
print("Q1 :", Q1)
print("Q3 :", Q3)
print("IQR :", IQR)Biar makin ngerti:
- .quantile(0.25) ngasih nilai di titik 25% data (Q1).
- .quantile(0.75) ngasih nilai di titik 75% data (Q3).
- IQR = Q3 – Q1 nunjukin rentang sebaran 50% data di tengah.
4. Tentukan Batas Bawah dan Batas Atas
Setelah dapet nilai IQR, kita bisa tentuin batas normal data pakai rumus 1.5 x IQR. Data yang jatuh di luar batas ini otomatis dianggap outlier.
batas_bawah = Q1 - 1.5 * IQR
batas_atas = Q3 + 1.5 * IQR
print("Batas Bawah :", batas_bawah)
print("Batas Atas :", batas_atas)Yuk Coba Langsung
import pandas as pd
import numpy as np
np.random.seed(42)
gaji_normal = np.random.normal(loc=8, scale=2, size=95)
gaji_outlier = [25, 28, 0.5, 30, 1]
gaji = np.concatenate([gaji_normal, gaji_outlier])
np.random.shuffle(gaji)
df = pd.DataFrame({
"Karyawan_ID": range(1, len(gaji)+1),
"Gaji_Juta": np.round(gaji, 2)
})
Q1 = df["Gaji_Juta"].quantile(0.25)
Q3 = df["Gaji_Juta"].quantile(0.75)
IQR = Q3 - Q1
batas_bawah = Q1 - 1.5 * IQR
batas_atas = Q3 + 1.5 * IQR
print(batas_bawah, batas_atas)Kalau kode ini dijalanin, kita bakal dapet dua angka: batas bawah dan batas atas. Di luar dua angka ini, data dianggap outlier.

5. Filter dan Tampilkan Outlier
Sekarang kita tinggal filter data mana aja yang jatuh di luar batas normal itu.
Bentuk Dasarnya
outliers = df[(df["Gaji_Juta"] < batas_bawah) | (df["Gaji_Juta"] > batas_atas)]
data_bersih = df[(df["Gaji_Juta"] >= batas_bawah) & (df["Gaji_Juta"] <= batas_atas)]
print("Jumlah outlier:", len(outliers))
outliers.sort_values(by="Gaji_Juta", ascending=False)Kolom outliers isinya baris-baris data yang dianggap nyimpang, sedangkan data_bersih isinya data yang masih di rentang normal.

6. Validasi Pakai Boxplot
Biar makin yakin, hasil dari IQR Method ini biasanya divalidasi lagi pakai boxplot. Kalau angka batas bawah/atas kita bener, titik-titik outlier di boxplot harusnya sejalan sama data yang ke-filter tadi.
plt.figure(figsize=(8,5))
sns.boxplot(x=df["Gaji_Juta"], color="skyblue")
plt.title("Boxplot Deteksi Outlier - Gaji Karyawan (Juta Rupiah)")
plt.xlabel("Gaji (Juta Rupiah)")
plt.show()
plt.figure(figsize=(8,5))
sns.histplot(df["Gaji_Juta"], bins=20, kde=True, color="steelblue")
plt.axvline(batas_bawah, color="red", linestyle="--", label="Batas Bawah")
plt.axvline(batas_atas, color="red", linestyle="--", label="Batas Atas")
plt.title("Distribusi Gaji Karyawan dengan Batas IQR")
plt.xlabel("Gaji (Juta Rupiah)")
plt.legend()
plt.show()
7. Cara Baca Hasil IQR Method
Setelah dapet semua angka dan chart-nya, begini cara bacanya:
- Kalau IQR-nya kecil → data mayoritas ngumpul rapat di tengah.
- Kalau IQR-nya besar → data mayoritas cukup tersebar/bervariasi.
- Semakin banyak data di luar batas bawah/atas → makin banyak juga outlier yang perlu dicek.
- Outlier nggak selalu berarti data salah, bisa juga itu memang kondisi nyata (misal gaji direktur yang emang tinggi).

Biar Nggak Lupa, Ini Rangkumannya
| Fungsi | Kegunaan | Contoh |
|---|---|---|
| .quantile(0.25) | Menghitung nilai Kuartil 1 (Q1). | df["gaji"].quantile(0.25) |
| .quantile(0.75) | Menghitung nilai Kuartil 3 (Q3). | df["gaji"].quantile(0.75) |
| Q3 - Q1 | Menghitung IQR (Interquartile Range). | IQR = Q3 - Q1 |
| Q1 - 1.5*IQR / Q3 + 1.5*IQR | Menentukan batas bawah dan batas atas data normal. | batas_atas = Q3 + 1.5*IQR |
Kalau Digabung, Alurnya Kayak Gini
📝 Catatan Dikit
Angka 1.5 pada rumus batas IQR itu konvensi yang paling umum dipakai, tapi bukan aturan mutlak. Di beberapa kasus (misal deteksi outlier yang lebih ketat), angka ini bisa diganti jadi 3 biar cuma nangkep outlier yang ekstrem banget.
Abis Ini Belajar Apa Lagi?
🚀 Kalau udah pede sama IQR Method, lanjut aja ke materi-materi ini:
- Boxplot (versi visual dari IQR Method)
- Z-Score Method buat deteksi outlier
- Data Cleaning & Handling Missing Values
- Bar Chart untuk Perbandingan Antar Kategori
- Heatmap Korelasi dengan Seaborn
Materi-materi ini lanjutan dari dasar yang udah kamu pelajarin, dan sering banget dipakai bareng-bareng pas tahap Exploratory Data Analysis (EDA).
Penutup
IQR Method itu salah satu teknik paling simpel tapi powerful buat nemuin outlier secara numerik. Cuma dengan ngitung Q1, Q3, dan IQR, kita udah bisa dapet batas pasti mana data yang normal dan mana yang menyimpang.
Kalau kamu baru mulai belajar EDA, IQR Method ini cocok banget jadi pelengkap boxplot sebelum lanjut ke teknik deteksi outlier lain yang lebih kompleks.
🎉 Keren!
Sekarang kamu udah paham dasar-dasar IQR Method, mulai dari ngitung Q1-Q3-IQR, nentuin batas normal, filter outlier, sampai validasi hasilnya pakai boxplot. Ini modal penting sebelum lanjut ke teknik deteksi outlier dan data cleaning yang lebih rumit.
