Model machine learning yang paling canggih pun tidak bisa melampaui kualitas dataset yang melatihnya — prinsip garbage in, garbage out berlaku tanpa kecuali. Karena itu sebelum bicara model, kita perlu memahami bahan bakunya secara mendalam: bagaimana bentuk sebuah dataset berlabel, dari mana label itu berasal, dan apa akibatnya bila labelnya keliru. Pada chapter ini kita bedah anatomi dataset, memetakan tiga sumber label beserta risikonya, lalu membuktikan dengan kode bagaimana satu baris label yang salah sudah cukup menggeser gambaran data.

Anatomi Dataset Berlabel #

Dataset berlabel berbentuk tabel: setiap baris adalah satu sampel (sample) — satu email, satu pelanggan, satu rumah — dan setiap kolom adalah satu variabel. Kolom terbagi dua peran: fitur (X) yang mendeskripsikan sampel, dan label atau target (y) yang menjadi jawaban yang ingin diprediksi.

IstilahWujud dalam tabelPeran
SampelSatu barisSatu contoh yang dipelajari model
Fitur (X)Kolom-kolom deskriptif (frekuensi belanja, luas rumah)Masukan yang dipakai untuk memprediksi
Label / target (y)Satu kolom jawaban (churn, harga)Keluaran yang dipelajari; hanya dipakai saat melatih model

Bentuk inilah yang diminta scikit-learn: X berupa tabel dua dimensi berukuran (jumlah sampel, jumlah fitur), dan y berupa kolom satu dimensi sepanjang jumlah sampel. Dataset contoh resmi seperti iris dan wine yang dibundel scikit-learn juga mengikuti bentuk yang sama, sehingga latihan kita langsung kompatibel dengan dokumentasi resminya.

Dari Mana Label Berasal #

Label jarang turun dari langit. Tiga sumber paling umum:

SumberCara diperolehContohRisiko utama
HistorisHasil peristiwa masa lalu yang sudah tercatatMember yang terbukti berhenti → churn = 1Pola masa lalu bisa usang saat kebiasaan berubah
Manual (anotasi)Penilaian manusia satu per satuPetugas menandai email spam, dokter menandai hasil rontgenMahal, lambat, dan dua anotator bisa berbeda pendapat
Observasi / sensorPengukuran langsungTimbangan digital, sensor suhu, harga pasar aktualKesalahan alat dan gangguan pencatatan

Sumber label menentukan anggaran proyek sekaligus batas kualitas. Label historis gratis tetapi hanya tersedia untuk masa lalu; label manual bisa dirancang sesuai kebutuhan tetapi mahal dan subjektif; label sensor objektif tetapi sesekali salah catat. Proyek nyata sering memadukannya — misalnya label churn historis diperkaya sampel anotasi manual untuk memeriksa konsistensinya.

Kualitas Label dan Label Berisik #

Label berisik (noisy label) adalah label yang tidak menggambarkan kebenaran: siswa yang rajin tercatat tidak lulus karena salah pindah data, email sah ditandai spam karena tombol tergeser, atau anotator menilai berbeda pada kasus yang sama-sama meragukan. Dua label yang bertentangan untuk fitur yang nyaris identik adalah bentuk paling khasnya — dan tidak bisa dihindari sepenuhnya pada data nyata.

Dampaknya lurus ke depan: model belajar dari label, jadi label yang keliru diajarkan sebagai kebenaran. Beberapa baris salah pada ribuan data biasanya tertolerasi; error yang terkonsentrasi pada satu kelompok (misalnya satu petugas anotasi yang berbeda standar) jauh lebih merusak karena membentuk pola palsu yang diyakini model. Praktik yang sehat: periksa distribusi label, samakan panduan anotasi, dan sediakan sampel untuk diaudit ulang secara berkala.

Demo: Satu Label Keliru, Gambaran Ikut Bergeser #

Kita buktikan dampaknya dengan data nilai ujian 12 siswa: jam_belajar dan nilai sebagai fitur, lulus sebagai label. Pertama kita baca anatomi datanya, lalu bandingkan ringkasan per kelompok pada label bersih versus label yang satu barisnya keliru.

python
import pandas as pd

siswa = pd.DataFrame({
    "nama": ["Budi", "Siti", "Dewi", "Rani", "Agus", "Maya",
             "Joko", "Lina", "Tono", "Sari", "Yoga", "Ayu"],
    "jam_belajar": [2, 7, 1, 6, 3, 8, 2, 5, 4, 6, 1, 7],
    "nilai": [58, 85, 45, 82, 65, 90, 55, 78, 70, 80, 48, 88],
    "lulus": ["tidak", "lulus", "tidak", "lulus", "tidak", "lulus",
              "tidak", "lulus", "lulus", "lulus", "tidak", "lulus"],
})

fitur = ["jam_belajar", "nilai"]
X = siswa[fitur]
y = siswa["lulus"]

print("Bentuk X:", X.shape, "| Bentuk y:", y.shape)
print("Label unik:", sorted(y.unique()))
print()
print("Rerata fitur per label (label bersih):")
print(siswa.groupby("lulus")[fitur].mean().round(1))

berisik = siswa.copy()
berisik.loc[berisik["nama"] == "Dewi", "lulus"] = "lulus"

print()
print("Rerata fitur per label (satu label keliru: Dewi):")
print(berisik.groupby("lulus")[fitur].mean().round(1))

Output yang Dihasilkan:

text
Bentuk X: (12, 2) | Bentuk y: (12,)
Label unik: ['lulus', 'tidak']

Rerata fitur per label (label bersih):
       jam_belajar  nilai
lulus                    
lulus          6.1   81.9
tidak          1.8   54.2

Rerata fitur per label (satu label keliru: Dewi):
       jam_belajar  nilai
lulus                    
lulus          5.5   77.2
tidak          2.0   56.5

Mari kita telaah baris-baris kode di atas:

  1. siswa berbentuk tabel berlabel utuh: 12 baris sampel, dua kolom fitur, satu kolom label. Baris Dewi (jam_belajar = 1, nilai = 45) semestinya tidak lulus — nilainya paling rendah sekelas.
  2. X dan y memisahkan peran kolom: X berbentuk (12, 2), y berbentuk (12,) — persis format yang diminta scikit-learn.
  3. groupby("lulus")[fitur].mean() merangkum profil tiap kelompok label: dengan label bersih, kelompok lulus rata-rata belajar 6,1 jam dengan nilai 81,9; kelompok tidak lulus 1,8 jam dengan nilai 54,2 — dua kelompok terpisah jelas.
  4. berisik meniru kesalahan input: satu-satunya perubahan adalah label Dewi dari tidak menjadi lulus — skenario salah pindah data yang ringan sekalipun.

Akibatnya terbaca langsung: rata-rata nilai kelompok lulus merosot dari 81,9 ke 77,2, dan rata-rata jam belajarnya dari 6,1 ke 5,5 — hanya karena satu baris dari dua belas (8%) berpindah kelompok. Kelompok tidak lulus ikut bergeser naik dari 54,2 ke 56,5. Model yang dilatih pada label seperti ini akan mempelajari gambaran yang salah: “siswa bernilai 45-an bisa lulus”. Pada data ribuan baris satu kesalahan tertolerasi, tetapi persentase kesalahan yang sama pada data besar berarti ratusan baris menyesatkan.

Rangkuman #

  • Dataset berlabel bertumpu pada tiga istilah: sampel (baris), fitur X (kolom deskriptif dua dimensi), dan label y (kolom jawaban satu dimensi).
  • Label berasal dari tiga sumber utama — historis, anotasi manual, observasi/sensor — masing-masing dengan pola biaya dan risiko berbeda.
  • Label berisik mengajarkan kekeliruan sebagai kebenaran; dampaknya paling serius bila kesalahan terkonsentrasi pada satu kelompok.
  • Demo 12 siswa memperlihatkan satu label keliru (8% data) menggeser rata-rata kelompok hingga hampir lima poin nilai.
  • Memeriksa distribusi dan sampel label sebelum melatih model adalah langkah murah dengan dampak besar.

Anatomi X dan y sudah kita pegang; tata cara memisahkannya dari tabel — lengkap dengan jebakan bentuk data yang sering menjumpai pemula — kita bahas khusus pada chapter Fitur dan Target .

Referensi #

  1. scikit-learn — Toy datasets
  2. pandas — API reference: DataFrame.groupby