Notebook Bab 4 ini punya dua bagian. Bagian Demo tinggal Anda jalankan lalu amati keluarannya; bagian Mini Project berisi soal dan data yang Anda kerjakan sendiri.
Fitur kategorikal harus diubah menjadi angka. Pilihan encoding menentukan hasil, terutama pada kategori berkardinalitas tinggi.
🔎 Amati. Dengan akurasi yang setara, target encoding memakai satu kolom sedangkan one-hot memakai ~498 kolom. Pada kardinalitas tinggi itu penghematan dimensi dan memori yang besar sekaligus lebih skalabel. One-hot masih kompetitif di sini karena regresi logistik ter-regularisasi, tetapi ordinal jelas terburuk karena memaksakan urutan angka palsu pada kategori nominal yang tidak berurutan.
Section 2 - Mini Project
Soal
Anda diberi data dengan kolom kategorikal berkardinalitas tinggi (merek_produk) dan satu kolom numerik (harga). Targetnya terjual (1/0).
Tugas:
Bandingkan minimal dua strategi encoding pada merek_produk (misalnya one-hot dan target encoding), semuanya di dalam pipeline.
Tangani kategori yang belum pernah muncul saat inferensi (unseen category).
Laporkan akurasi CV tiap strategi.
Luaran: kode pipeline, tabel akurasi, dan 2-3 kalimat kesimpulan pilihan encoding.
Kriteria penilaian: (a) encoder di dalam pipeline (tidak di-fit pada seluruh data); (b) penanganan unseen category eksplisit; (c) perbandingan adil (model sama).
# DATA AWAL (jangan diubah) - merek berkardinalitas tinggi.merek_ids = [f'merek_{i}'for i inrange(300)]efek_merek =dict(zip(merek_ids, rng.normal(0, 2.2, len(merek_ids))))merek = rng.choice(merek_ids, 3000)harga = rng.gamma(2.0, 50000, 3000)logit = np.array([efek_merek[m] for m in merek]) -0.000004* hargaterjual = (rng.random(3000) <1/ (1+ np.exp(-logit))).astype(int)produk = pd.DataFrame({'merek_produk': merek, 'harga': harga, 'terjual': terjual})print('Data:', produk.shape, '| kardinalitas merek:', produk['merek_produk'].nunique())produk.head()
Data: (3000, 3) | kardinalitas merek: 300
merek_produk
harga
terjual
0
merek_206
445441.984515
0
1
merek_279
52423.000250
1
2
merek_292
139674.416744
0
3
merek_247
206692.312882
1
4
merek_89
77615.890626
1
# Kerjakan di sini.# Petunjuk: ColumnTransformer + TargetEncoder / OneHotEncoder(handle_unknown='ignore').