Binning (diskretisasi) mengubah fitur kontinu menjadi kategori berurutan. Teknik ini berguna ketika model tidak menerima nilai riil secara langsung atau ketika kita ingin membuat fitur seperti “kuintil pendapatan”.
Lebar sama vs. frekuensi sama #
Misalkan (x_1, \dots, x_n) adalah fitur numerik. Aturan binning membagi rentang ke interval (I_k) dan mengganti setiap (x_i) dengan label interval yang memuatnya.
- Bin lebar sama (
pandas.cut) membagi rentang menjadi interval dengan panjang identik. - Bin frekuensi sama (
pandas.qcut) membagi data terurut sehingga setiap interval berisi jumlah observasi yang hampir sama.
Bin frekuensi sama lebih stabil terhadap ekor distribusi yang berat, sedangkan bin lebar sama mempertahankan informasi jarak.
Visualisasi bin berbasis kuantil #
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rng = np.random.default_rng(18)
income = rng.lognormal(mean=10, sigma=0.55, size=1_000)
quantile_edges = np.quantile(income, np.linspace(0, 1, 6))
plt.hist(income, bins=40, color="steelblue", alpha=0.85)
for edge in quantile_edges[1:-1]:
plt.axvline(edge, color="darkorange", linestyle="--", alpha=0.8)
plt.title("Tepi bin kuantil (frekuensi sama, 5 bin)")
plt.xlabel("Pendapatan")
plt.ylabel("Jumlah")
plt.show()

Membandingkan qcut dan cut
#
quantile_bins = pd.qcut(income, q=5)
width_bins = pd.cut(income, bins=5)
quantile_counts = pd.Series(quantile_bins).value_counts(sort=False)
width_counts = pd.Series(width_bins).value_counts(sort=False)
indices = np.arange(len(quantile_counts))
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(indices - 0.2, quantile_counts.values, width=0.4, color="seagreen", alpha=0.8, label="qcut (frekuensi sama)")
ax.bar(indices + 0.2, width_counts.values, width=0.4, color="firebrick", alpha=0.6, label="cut (lebar sama)")
ax.set_xticks(indices)
ax.set_xticklabels([f"Bin {i}" for i in indices])
ax.set_ylabel("Jumlah sampel")
ax.legend()
ax.set_title("Distribusi jumlah sampel per bin")
plt.tight_layout()
plt.show()

Dengan qcut, setiap bin berisi jumlah sampel yang hampir seimbang. cut dengan lebar sama cenderung membuat bin tengah penuh dan bin ekstrem kosong.
Tips praktis #
- Potong (clip) outlier ekstrem sebelum membuat bin lebar sama; satu nilai ekstrem dapat memperlebar rentang dan mengosongkan bin lain.
- Simpan titik batas (edges) yang dihasilkan saat pelatihan dan gunakan kembali pada data produksi untuk menjaga konsistensi.
- Pada model berbasis pohon binning sering tidak diperlukan, tetapi pada model linear binning dapat menangkap efek non-linear tanpa menambah banyak fitur.