Boxplot dan Heatmap Korelasi
Membaca sebaran data dan outlier lewat boxplot, serta membaca hubungan antar banyak variabel lewat heatmap korelasi.
Kenapa dua chart ini levelnya di atas rata-rata
Scatter plot dan histogram bagus untuk satu atau dua variabel. Tapi bagaimana kalau kamu punya 10 kolom dan ingin tahu semuanya sekaligus? Di sinilah boxplot dan heatmap bersinar. Boxplot merangkum sebaran satu variabel menjadi lima angka dalam satu gambar. Heatmap korelasi merangkum hubungan puluhan pasang variabel menjadi satu kotak warna. Keduanya adalah alat "pemindaian cepat" sebelum analisis mendalam, dan pewawancara kerja data sangat suka menanyakan cara membacanya.
Analogi: boxplot itu rontgen, heatmap itu peta cuaca
Boxplot seperti foto rontgen: kamu tidak melihat detail wajahnya, tapi langsung tahu struktur tulangnya, di mana yang normal dan di mana yang patah (outlier). Heatmap seperti peta cuaca di TV: warna merah berarti panas (korelasi kuat positif), biru berarti dingin (korelasi negatif), dan kamu langsung tahu wilayah mana yang perlu diperhatikan tanpa membaca satu pun angka.
Contoh 1: boxplot sederhana, pahami anatominya
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(3)
nilai_a = np.random.normal(70, 10, 200)
nilai_b = np.random.normal(70, 25, 200)
fig, ax = plt.subplots(figsize=(6, 4))
ax.boxplot([nilai_a, nilai_b], labels=["Kelas A", "Kelas B"])
ax.set_title("Sebaran Nilai Ujian")
ax.set_ylabel("Nilai")
plt.show()Cara membaca boxplot: garis tengah kotak adalah median (nilai tengah). Batas bawah dan atas kotak adalah kuartil 1 dan 3, jadi kotak itu menampung 50 persen data di tengah. Garis vertikal (whisker) menjangkau sampai data terjauh yang masih wajar. Titik-titik di luar whisker adalah outlier, kandidat untuk diselidiki.
Contoh 2: boxplot realistis untuk deteksi anomali gaji
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(11)
divisi = ["Kasir", "Barista", "Dapur", "Admin"]
gaji = [np.random.normal(3.2, 0.3, 40),
np.random.normal(3.5, 0.4, 40),
np.random.normal(3.8, 0.5, 40),
np.random.normal(5.0, 1.5, 40)] # juta rupiah
fig, ax = plt.subplots(figsize=(8, 4))
bp = ax.boxplot(gaji, labels=divisi, patch_artist=True)
for patch in bp["boxes"]:
patch.set_facecolor("#c4b5fd")
ax.set_title("Sebaran Gaji per Divisi")
ax.set_ylabel("Gaji (juta Rp)")
plt.xticks(rotation=15)
plt.tight_layout()
plt.show()Perhatikan divisi Admin: kotaknya paling tinggi (median gaji lebih besar) tapi juga paling lebar (sebarannya besar) dan kemungkinan punya outlier. Dalam satu gambar kamu dapat tiga insight: level tipikal, variasi, dan anomali. Inilah alasan boxplot jadi standar di laporan HR dan audit.
Contoh 3: heatmap korelasi antar variabel
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(21)
n = 300
iklan = np.random.uniform(1, 10, n)
pengunjung = iklan * 20 + np.random.normal(0, 15, n)
penjualan = pengunjung * 0.5 + np.random.normal(0, 10, n)
harga_rata = np.random.uniform(20, 50, n)
data = np.column_stack([iklan, pengunjung, penjualan, harga_rata])
nama = ["Iklan", "Pengunjung", "Penjualan", "Harga rata2"]
kor = np.corrcoef(data, rowvar=False)
fig, ax = plt.subplots(figsize=(6, 5))
im = ax.imshow(kor, cmap="coolwarm", vmin=-1, vmax=1)
ax.set_xticks(range(4), nama, rotation=30, ha="right")
ax.set_yticks(range(4), nama)
for i in range(4):
for j in range(4):
ax.text(j, i, f"{kor[i, j]:.2f}", ha="center",
color="white" if abs(kor[i, j]) > 0.5 else "black")
ax.set_title("Heatmap Korelasi")
fig.colorbar(im, ax=ax, label="Korelasi")
plt.tight_layout()
plt.show()Cara membaca: diagonal selalu 1 (variabel dengan dirinya sendiri). Kotak Iklan vs Penjualan yang merah pekat berarti korelasi positif kuat. Kotak yang pucat berarti hampir tidak berhubungan. Angka di tiap sel membuat heatmap tetap presisi, bukan cuma "merah kira-kira".
Jebakan umum 1: outlier langsung dibuang
SALAH: melihat titik outlier di boxplot lalu langsung menghapusnya supaya data "bersih". Outlier sering kali justru insight paling berharga: transaksi fraud, sensor rusak, atau pelanggan sultan yang perilakunya beda.
BENAR: selidiki dulu outlier itu. Catat, pisahkan analisis dengan dan tanpa outlier, dan laporkan keduanya. Menghapus tanpa jejak adalah cara tercepat kehilangan temuan penting.
Jebakan umum 2: korelasi tinggi dianggap hubungan sebab akibat
Heatmap yang menunjukkan korelasi 0.95 antara Iklan dan Penjualan menggoda untuk disimpulkan "iklan menyebabkan penjualan". Padahal bisa saja keduanya naik karena musim liburan, atau karena ada variabel ketiga yang tidak kamu ukur. Korelasi hanya bilang "bergerak bersama", tidak bilang "saling menyebabkan".
BENAR: pakai heatmap untuk memilih variabel mana yang layak diinvestigasi lebih dalam, lalu uji hubungannya dengan logika bisnis atau eksperimen.
Catatan teknis:
np.corrcoefmenghitung korelasi Pearson yang hanya menangkap hubungan linear. Kalau hubunganmu melengkung (misal efek diminishing return), Pearson bisa terlihat kecil padahal hubungannya kuat. Untuk kasus itu, pertimbangkan korelasi Spearman yang menangkap hubungan monoton apa pun bentuknya.
Ringkasan cepat
- Boxplot: median, kotak 50 persen tengah, whisker, dan titik outlier.
- Heatmap korelasi: pindai cepat hubungan puluhan pasang variabel.
- Outlier diselidiki dulu, bukan langsung dibuang.
- Korelasi kuat bukan bukti kausalitas.
Tantangan
Pindai data dengan boxplot dan heatmap
Dari dataset karyawan (kolom: divisi, gaji, masa_kerja_bulan, skor_kinerja): buat boxplot gaji per divisi untuk menemukan divisi dengan outlier, dan heatmap korelasi dari kolom numeriknya. Tulis 3 insight: satu dari boxplot, satu dari heatmap, dan satu hipotesis yang perlu divalidasi lebih lanjut.