Median memberi kita satu titik potong distribusi, tetapi analisis nyata sering menuntut titik potong lain: ambang nilai untuk 25% data terbawah, target untuk masuk kelompok 10% teratas, atau kuartil untuk laporan ringkas. Keluarga fungsi percentile dan quantile menyelesaikan masalah itu. Keduanya sebenarnya fungsi yang sama; perbedaannya hanya terletak pada skala argumen yang diterima.
Satu Keluarga, Dua Skala #
np.percentile menerima q pada skala 0-100, sedangkan np.quantile menerima q pada skala 0-1. Keduanya menghitung titik yang sama: percentile 75 identik dengan quantile 0.75. Mari kita buktikan pada data nilai ujian tujuh mahasiswa:
import numpy as np
nilai = np.array([65, 70, 72, 78, 85, 88, 92])
p75 = np.percentile(nilai, 75)
q75 = np.quantile(nilai, 0.75)
print("percentile 75 :", p75)
print("quantile 0.75 :", q75)
print("hasil sama :", p75 == q75)
kuartil = np.percentile(nilai, [25, 50, 75])
print("kuartil :", kuartil)
print("median :", np.median(nilai))Output yang Dihasilkan:
percentile 75 : 86.5
quantile 0.75 : 86.5
hasil sama : True
kuartil : [71. 78. 86.5]
median : 78.0Poin-poin penting dari kode di atas:
- Baris 5-6: argumen diberikan dalam skala berbeda (
75versus0.75), tetapi hasilnya identik86.5, sehingga perbandinganp75 == q75bernilaiTrue. - Baris 12: bila
qberupa list atau array, hasilnya pun array —[71. 78. 86.5]berisi Q1, Q2, dan Q3 sekaligus. - Baris 14: nilai median
78.0sama dengan percentile 50; definisi median sebagai titik potong 50% sudah kita bahas pada Chapter mean, median, dan percentile.
import numpy as np
nilai = np.array([65, 70, 72, 78, 85, 88, 92])
try:
np.quantile(nilai, 75)
except ValueError as e:
print("ValueError:", e)Output yang Dihasilkan:
ValueError: Quantiles must be in the range [0, 1]Lima Metode Interpolasi #
Bagaimana bila titik potong jatuh di antara dua data? NumPy menentukan posisi teoretis dengan rumus posisi = q × (n − 1), lalu menyelesaikannya sesuai metode interpolasi yang dipilih. Metode bawaan linear menginterpolasi antara dua data tetangga; empat metode lainnya memilih data yang memang ada. Mari kita amati kelimanya pada data lima elemen dengan q = 0.3:
import numpy as np
data = np.array([10, 20, 30, 40, 50])
posisi = 0.3 * (len(data) - 1)
print("posisi:", posisi)
for metode in ["linear", "lower", "higher", "midpoint", "nearest"]:
hasil = np.quantile(data, 0.3, method=metode)
print(f"{metode:9s}: {hasil}")Output yang Dihasilkan:
posisi: 1.2
linear : 22.0
lower : 20
higher : 30
midpoint : 25.0
nearest : 20Posisi teoretis 1.2 berada di antara indeks 1 (nilai 20) dan indeks 2 (nilai 30), lebih dekat ke indeks 1. Setiap metode menyelesaikan fraksi 0.2 itu dengan caranya sendiri:
| Metode | Cara menentukan hasil | Nilai pada posisi 1.2 |
|---|---|---|
linear | interpolasi: 20 + 0.2 × (30 − 20) | 22.0 |
lower | ambil data pada indeks 1 | 20 |
higher | ambil data pada indeks 2 | 30 |
midpoint | rata-rata lower dan higher: (20 + 30) / 2 | 25.0 |
nearest | data terdekat ke posisi (indeks 1, karena 0.2 < 0.5) | 20 |
Perhatikan juga tipe data hasil pada output: linear dan midpoint selalu mengembalikan float, sedangkan lower, higher, dan nearest mengembalikan elemen data asli sehingga tetap int64 untuk input integer.
IQR — Mengukur Sebaran dan Menemukan Nilai Ekstrem #
Kuartil pertama (Q1) dan ketiga (Q3) memotong data pada 25% dan 75%. Selisih keduanya, IQR (interquartile range), mengukur sebaran 50% data tengah dan menjadi dasar penyaringan nilai ekstrem yang tahan terhadap pencilan. Prosedur lengkapnya:
- Hitung Q1 dan Q3 dengan
np.percentile. - Hitung
IQR = Q3 − Q1. - Tentukan batas:
Q1 − 1.5 × IQRdanQ3 + 1.5 × IQR. - Nilai di luar kedua batas diperlakukan sebagai outlier.
import numpy as np
nilai = np.array([62, 70, 75, 68, 90, 85, 78, 73, 95, 66, 80, 25])
q1 = np.percentile(nilai, 25)
q3 = np.percentile(nilai, 75)
iqr = q3 - q1
bawah = q1 - 1.5 * iqr
atas = q3 + 1.5 * iqr
print("Q1 :", q1)
print("Q3 :", q3)
print("IQR:", iqr)
print("batas bawah :", bawah)
print("batas atas :", atas)
print("outlier :", nilai[(nilai < bawah) | (nilai > atas)])Output yang Dihasilkan:
Q1 : 67.5
Q3 : 81.25
IQR: 13.75
batas bawah : 46.875
batas atas : 101.875
outlier : [25]Mari kita bedah langkah demi langkah:
- Baris 5-6: Q1 bernilai
67.5dan Q381.25; keduanya dihitung dengan interpolasi linear bawaan. - Baris 7 (
q3 - q1): IQR13.75menggambarkan rentang 12 nilai tengah — jauh lebih stabil daripada selisih maksimum-minimum karena tidak menyentuh nilai ekstrem sama sekali. - Baris 9-10: batas bawah
46.875dan batas atas101.875menjadi pagar tempat data yang wajar berada. - Baris 17 (masker boolean): nilai
25berada di bawah batas bawah sehingga tertangkap sebagai outlier, sementara sebelas nilai ujian lainnya masih dalam pagar.
Teknik ini memakai kombinasi yang sudah kita kenal: percentile sebagai fondasi dan masker boolean untuk pemilihan elemen.