Model machine learning bukan pembaca pikiran: model hanya menghitung hubungan matematis antara kolom-kolom angka yang kita sediakan. Kolom masukan yang menjelaskan tiap baris data disebut feature, sedangkan kolom jawaban yang ingin diprediksi disebut target. Feature engineering adalah disiplin mengubah data mentah — tanggal, teks, angka dengan satuan campur aduk — menjadi feature yang membuat pekerjaan model menjadi mudah. Pada chapter ini kita membedah anatomi feature dan target, melihat jarak antara data mentah dan fitur siap pakai, dan memahami mengapa kualitas fitur sering lebih menentukan hasil daripada pilihan algoritma.

Feature dan Target dalam Satu Tabel #

Mari kita pakai data delapan hari operasional Toko Kopi Kita. Tujuannya sederhana: memprediksi gelas_terjual dari kondisi hari tersebut. Sebelum menyentuh model apa pun, kita perlu memisahkan kolom masukan dan kolom jawaban:

python
import pandas as pd

penjualan = pd.DataFrame({
    "tanggal": ["2026-01-05", "2026-01-06", "2026-01-07", "2026-01-08",
                "2026-01-09", "2026-01-10", "2026-01-11", "2026-01-12"],
    "suhu": [27, 30, 24, 29, 33, 28, 26, 31],
    "promo": [0, 1, 0, 0, 1, 0, 0, 1],
    "hari_dalam_minggu": [0, 1, 2, 3, 4, 5, 6, 0],
    "gelas_terjual": [120, 165, 95, 130, 190, 150, 140, 170],
})

fitur = ["suhu", "promo", "hari_dalam_minggu"]
X = penjualan[fitur]
y = penjualan["gelas_terjual"]

print("Data mentah:")
print(penjualan)
print()
print("Matriks fitur X:")
print(X)
print()
print("Target y:", y.tolist())
print("Bentuk X:", X.shape, "| panjang y:", len(y))

Output yang Dihasilkan:

text
Data mentah:
      tanggal  suhu  promo  hari_dalam_minggu  gelas_terjual
0  2026-01-05    27      0                  0            120
1  2026-01-06    30      1                  1            165
2  2026-01-07    24      0                  2             95
3  2026-01-08    29      0                  3            130
4  2026-01-09    33      1                  4            190
5  2026-01-10    28      0                  5            150
6  2026-01-11    26      0                  6            140
7  2026-01-12    31      1                  0            170

Matriks fitur X:
   suhu  promo  hari_dalam_minggu
0    27      0                  0
1    30      1                  1
2    24      0                  2
3    29      0                  3
4    33      1                  4
5    28      0                  5
6    26      0                  6
7    31      1                  0

Target y: [120, 165, 95, 130, 190, 150, 140, 170]
Bentuk X: (8, 3) | panjang y: 8

Mari kita telaah baris-baris kode di atas:

  1. Baris 3-10 (penjualan = pd.DataFrame(...)): data mentah delapan hari. Setiap baris adalah satu observasi (satu hari), dan kolom tanggal hanya berperan sebagai penanda — bukan masukan model.
  2. Baris 12 (fitur = [...]): kita menetapkan secara eksplisit kolom mana yang menjadi penjelas. Keputusan ini adalah inti feature engineering: suhu, promo, dan hari_dalam_minggu dipilih karena secara domain masuk akal menggerakkan penjualan.
  3. Baris 13-14 (X = ..., y = ...): X adalah matriks fitur berukuran (8, 3) — 8 observasi dikali 3 feature — dan y adalah vektor target sepanjang 8. Konvensi huruf besar X dan huruf kecil y berasal dari notasi statistika dan dipakai seragam di seluruh dokumentasi scikit-learn.
  4. Baris 23 (print("Bentuk X:", ...)): bentuk (8, 3) mengonfirmasi struktur yang dituntut model: baris untuk observasi, kolom untuk feature.

Perhatikan bahwa promo sudah berupa angka 0/1 dan hari_dalam_minggu sudah berupa angka 0-6 — pada bab-bab sebelumnya kita memang sudah rajin menyiapkan kolom. Tabel berikut merangkum peran tiap istilah:

IstilahPeranContoh pada tabel di atas
Feature (kolom X)Masukan penjelas bagi modelsuhu, promo, hari_dalam_minggu
Target (y)Jawaban yang diprediksigelas_terjual
Observasi (baris)Satu kejadian yang dipelajarisatu hari operasional
Matriks fitur Xkumpulan feature untuk semua observasitabel 8 × 3

Dari Data Mentah ke Fitur #

Data mentah jarang berbentuk matriks angka yang rapi. Kolom tanggal misalnya, tidak bisa langsung dipakai: 2026-01-10 sebagai teks tidak memberi model informasi bahwa hari itu adalah akhir pekan. Kita perlu membongkarnya menjadi feature yang berbicara bahasa model. Mari kita ambil deret penjualan harian, lalu bangun dua feature klasik: nilai penjualan kemarin (lag) dan penanda akhir pekan:

python
import pandas as pd

deret = pd.DataFrame({
    "tanggal": pd.to_datetime([
        "2026-01-05", "2026-01-06", "2026-01-07", "2026-01-08",
        "2026-01-09", "2026-01-10", "2026-01-11", "2026-01-12",
    ]),
    "gelas_terjual": [120, 165, 95, 130, 190, 150, 140, 170],
})

fitur_harian = deret.copy()
fitur_harian["lag_1"] = fitur_harian["gelas_terjual"].shift(1)
fitur_harian["is_weekend"] = fitur_harian["tanggal"].dt.dayofweek >= 5
fitur_harian = fitur_harian.dropna()

print(fitur_harian[["tanggal", "gelas_terjual", "lag_1", "is_weekend"]].to_string(index=False))

Output yang Dihasilkan:

text
   tanggal  gelas_terjual  lag_1  is_weekend
2026-01-06            165  120.0       False
2026-01-07             95  165.0       False
2026-01-08            130   95.0       False
2026-01-09            190  130.0       False
2026-01-10            150  190.0        True
2026-01-11            140  150.0        True
2026-01-12            170  140.0       False

Apa yang terjadi pada baris-baris kode tersebut:

  1. Baris 3-9 (deret = pd.DataFrame(...)): data mentah hanya dua kolom — tanggal dan nilai penjualan. Bentuk ini jujur menggambarkan cara data tercatat di lapangan, tetapi belum menjelaskan apa pun tentang pola.
  2. Baris 12 (shift(1)): menggeser kolom satu baris ke bawah, sehingga baris hari ini memuat angka kemarin. Sekarang model bisa memakai momentum penjualan sebagai penjelas.
  3. Baris 13 (dt.dayofweek >= 5): membaca tanggal, menghitung urutan harinya dalam minggu (Senin = 0, Minggu = 6), lalu membandingkan dengan 5. Hasilnya kolom boolean is_weekend yang siap dikonversi menjadi 0/1.
  4. Baris 14 (dropna()): baris pertama tidak punya “kemarin”, sehingga lag_1-nya kosong. Baris tersebut dibuang karena tidak lengkap — dari 8 observasi tersisa 7.

Transformasi seperti ini bisa dipandang sebagai penerjemahan: informasi yang sama, tetapi ditulis ulang dalam bentuk yang bisa dimanfaatkan model. Tabel berikut memetakan beberapa pola data mentah yang sering kita temui:

Data mentahFeature yang bisa dibuatKegunaannya
timestamp transaksihari_dalam_minggu, is_weekend, bulan, lag_1menangkap pola kalender dan momentum
Nilai transaksi (miring ke kanan)log1p(nilai), kelompok hargamenstabilkan sebaran, merangkum segmen
Kota pelanggankolom one-hot per kotamemasukkan informasi wilayah
Riwayat belanja pelangganrata-rata belanja, jumlah transaksi, recencymencitrakan entitas dalam satu angka

Kualitas Fitur Menentukan Hasil Model #

Ada pepatah lama di dunia machine learning: garbage in, garbage out — model yang diberi masukan buruk akan menghasilkan keluaran buruk, sebagus apa pun algoritmanya. Sebaliknya, feature yang tepat membuat model sederhana tampil seperti profesional. Prediksi penjualan di atas akan mudah bila model menerima lag_1 dan is_weekend, dan akan sulit bila model hanya menerima nomor urut baris.

Penting juga memahami batasnya: feature engineering tidak menciptakan informasi baru, hanya membuka informasi yang sudah ada di data. Bila cuaca memang menggerakkan penjualan tetapi kolom suhu tidak pernah dicatat, tidak ada transformasi yang bisa mengembalikannya. Karena itu sebagian besar waktu kerja seorang data scientist nyatanya habis di tahap ini — jauh lebih lama daripada waktu melatih modelnya.

Rangkuman #

  • Feature adalah kolom masukan penjelas; target adalah kolom jawaban. Keduanya dikemas sebagai matriks X dan vektor y dengan satu baris per observasi.
  • Data mentah (tanggal, teks, riwayat transaksi) biasanya belum bisa dipakai model dan harus diterjemahkan menjadi angka — misalnya tanggal menjadi is_weekend, riwayat menjadi lag_1.
  • Keputusan memilih dan membangun feature adalah bagian paling menentukan dari hasil model — sering lebih berdampak daripada mengganti algoritma.
  • Feature engineering hanya membuka informasi yang ada di data; informasi yang tidak pernah dicatat tidak bisa diciptakan belakangan.

Dengan peta ini, kita siap membahas teknik pertama dalam kotak peralatan feature engineering: mengubah nilai numerik itu sendiri — merapikan skala, meluruskan hubungan, dan mengelompokkan nilai. Kita mulai dari ragam transformasi variabel pada chapter berikutnya.

Referensi #

  1. pandas — User Guide
  2. scikit-learn — Preprocessing Data