Satuan 5 / 11

Rekayasa Fitur: Menghasilkan Varian, Pengkodean, Penskalaan, dan Menghindari Kebocoran

Keuntungan:

  • Kemampuan untuk menghasilkan fitur turunan yang bermakna dengan pengetahuan domain dan mengkodekan kategori kategoris dengan metode yang sesuai (one-hot, label, target)
  • Kemampuan untuk menskalakan variabel numerik sesuai dengan jenis model (standardisasi, normalisasi) dan menghindari penskalaan yang tidak perlu atau tidak lengkap
  • Kemampuan untuk menghindari kebocoran fitur dengan mempelajari semua transformasi setelah pemisahan pelatihan/pengujian dan hanya dari pelatihan

Ada pepatah lama dalam pembelajaran mesin: "Pembelajaran mesin terapan pada dasarnya adalah rekayasa fitur." Karena keberhasilan suatu model sering kali berasal dari masukan yang Anda berikan kepada model tersebut, bukan algoritma yang Anda pilih. Rekayasa fitur adalah seni menghasilkan sinyal bermakna dari data mentah yang dapat dipelajari oleh model. Kecerdasan buatan adalah sumber ide yang kaya pada tahap ini: ketika Anda bertanya “fitur apa yang dapat dihasilkan dari data ini”, ia akan mencantumkan lusinan saran. Namun beberapa dari saran ini mungkin berharga, ada yang mungkin tidak berguna, dan ada pula yang mungkin berbahaya (bocor). Itu tugas Anda untuk menyelesaikannya.

Mengapa rekayasa fitur

Data mentah jarang sampai ke model dalam bentuk terbaiknya. Meskipun kolom "tanggal lahir" saja tidak ada artinya, nilai "usia" yang dihasilkan dari kolom tersebut merupakan sinyal yang kuat. Anda dapat mengekstrak atribut seperti "hari dalam seminggu", "siang/malam", "apakah ini hari libur" dari "stempel waktu pemesanan". Anda dapat menggabungkan dua kolom untuk menghasilkan rasio ("rasio utang/pendapatan"). Di sini, rekayasa fitur menerjemahkan pengetahuan domain menjadi sinyal matematika; Dan itulah mengapa tahap inilah yang paling membutuhkan kecerdasan manusia.

Mengubah variabel kategori menjadi angka: pengkodean

Model umumnya bekerja dengan angka, bukan teks. Mengubah variabel kategori (seperti kota, warna, jenis produk) menjadi angka disebut pengkodean. Tiga metode umum:

Enkode one-hot: Membuka kolom terpisah dengan nilai 0/1 untuk setiap kategori. Untuk "kota", kolom Istanbul, Ankara, Izmir dibentuk; Jika pelanggan berasal dari Istanbul, hanya kolom tersebut yang akan menjadi 1. Ideal jika jumlah kategori sedikit; Jika terdapat terlalu banyak kategori, maka akan dihasilkan ratusan kolom (ini disebut "ledakan ukuran").

Pengkodean label: Memberikan nomor untuk setiap kategori (Istanbul=0, Ankara=1). Ini sederhana, tetapi mungkin secara tidak sengaja mengajarkan model suatu urutan (seperti Ankara > Istanbul); jadi digunakan dengan hati-hati dalam kategori tidak berurutan.

Pengkodean target: Mengganti setiap kategori dengan rata-rata variabel target dalam kategori tersebut. Ini sangat kuat, tetapi merupakan sumber kebocoran yang paling berbahaya: jika Anda memperhitungkan target data pengujian, model tersebut melihat masa depan. Ini harus dihitung hanya dari data pelatihan dan hati-hati (dalam validasi silang).

Penskalaan: angka yang besar tidak membebani model

Beberapa model (model berbasis jarak, model linier, jaringan saraf) sensitif terhadap skala variabel. Jika “pendapatan” (0-500.000) dan “usia” (0-100) memiliki pola yang sama, pendapatan mungkin mendominasi hanya karena lebih besar. Penskalaan memperbaikinya. Dua metode umum: standardisasi (mengonversi setiap nilai menjadi "berapa banyak standar deviasi dari mean") dan normalisasi (normalisasi min-maks — memampatkan nilai ke dalam kisaran 0-1). Model berbasis pohon (pohon keputusan, hutan acak) tidak sensitif terhadap skala, sehingga tidak memerlukan penskalaan.

Perhatian: Parameter penskalaan dan pengkodean (rata-rata, deviasi standar, pemetaan rata-rata kategori) hanya boleh dihitung dari data pelatihan, kemudian hal yang sama harus diterapkan pada data pengujian. Menyertakan data pengujian merupakan kebocoran dan membuat model Anda terlihat lebih baik dari yang sebenarnya.

Inti dari kebocoran dalam rekayasa fitur

Pembuatan fitur adalah tempat paling sering terjadinya kebocoran data. Dua kesalahan umum: Kebocoran waktu — menghasilkan fitur yang menyertakan informasi masa depan (termasuk hari setelah hari perkiraan saat menghitung “rata-rata 30 hari terakhir”). Kebocoran statistik — menghitung fitur (rata-rata penskalaan, nilai pengkodean target) dari semua data sebelum pemisahan pelatihan/pengujian. Aturan: pelajari setiap transformasi setelah melakukan train/test split terlebih dahulu dan hanya dari data pelatihan. Cara teraman untuk melakukan ini secara rutin adalah dengan menggunakan pipeline — sebuah struktur yang mengumpulkan semua transformasi dalam satu rantai dan menerapkannya setelah pemisahan.

Metode

untuk apa

Risiko kebocoran

catatan

Pengkodean satu-panas

Variabel dengan beberapa kategori

rendah

Meledak ukuran dalam berbagai kategori

Pengkodean label

Kategori yang diurutkan

rendah

Rusak mengajarkan tatanan yang salah

pengkodean target

Multi-kategori, sinyal kuat

sangat tinggi

Sekadar dari pendidikan, di CV

standardisasi

Model linier/jarak

sedang

Parameter hanya bergantung pada pendidikan

Fitur jendela waktu

rangkaian waktu

tinggi

Tambahkan masa depan

tiga kasus mini

Kasus 1 — Properti berharga. Tim kredit menghasilkan fitur “rasio utang terhadap pendapatan” dari kolom mentah “pendapatan bulanan” dan “pembayaran utang bulanan”. Fitur turunan tunggal ini meningkatkan akurasi model dari 71% menjadi 79%; karena tingkat bunga, bukan pendapatan absolut, yang benar-benar menentukan risiko. Pelajaran: rasio yang dihasilkan oleh pengetahuan domain adalah sinyal yang kuat.

Kasus 2 — Kebocoran pengkodean target. Satu tim mengubah “kode pos” menjadi angka dengan pengkodean target (rata-rata tingkat churn di area tersebut), tetapi melakukannya dari semua data sebelum dipecah. Model ini menghasilkan 94% pada set pengujian, turun menjadi 68% pada produksi. Usaha 6 minggu terbuang sia-sia. Pelajaran: pengkodean target dilakukan dengan hati-hati, hanya dalam kerangka pelatihan.

Kasus 3 — Menskalakan lupa. Seorang analis memasukkan pendapatan (0-400.000) dan usia pelanggan (18-75) ke dalam model berbasis jarak tanpa penskalaan. Model ini hampir secara eksklusif hanya memperhatikan pendapatan, dan menghilangkan pengaruh usia. Ketika penskalaan ditambahkan, segmentasi menjadi bermakna. Pelajaran: penskalaan tidak diabaikan dalam model jarak/linier.

Empat templat yang dapat disalin

1) Pembuatan ide fitur (eliminasi terserah Anda):

Peran Anda: asisten teknik fitur. Kolom df saya: tanggal_lahir, waktu_pemesanan (cap waktu), pendapatan_tl, hutang_tl, kota, kategori_produk. Target: “apakah pinjaman akan terbayar” (0/1). Sarankan 15 fitur yang dapat dihasilkan dari kolom ini; tentukan risiko kebocoran (rendah/sedang/tinggi) untuk masing-masing. Tandai dengan jelas hal-hal yang berisi informasi masa depan.

2) Pengkodean aman (pasca-split):

Tulis kode yang mengkodekan "kota" dan "kategori_produk" one-hot. PENTING: sesuaikan pengkodean hanya dengan data pelatihan, lalu ubah data pengujian (dengan sklearn OneHotEncoder). Jelaskan bagaimana Anda menangani kategori yang tidak terlihat (handle_unknown) dalam pendidikan.

3) Konversi bebas kebocoran dengan Pipeline:

Siapkan sklearn Pipeline: terapkan StandardScaler ke kolom numerik, OneHotEncoder ke kolom kategorikal, tambahkan pengklasifikasi di akhir. Menjamin semua transformasi dipelajari SETELAH pelatihan/tes terpisah dan hanya dari pelatihan. Jelaskan kodenya dan mengapa bebas bocor.

4) Fitur jendela waktu (kontrol kebocoran):

Buat atribut "jumlah pesanan dalam 30 hari terakhir" untuk setiap pelanggan, namun JANGAN PERNAH menyertakan data setelah hari perkiraan. Jelaskan baris demi baris bahwa kode tersebut tidak melihat ke masa depan. Saya akan memberikan kolom tanggal referensi.

Perintah lemah / Perintah kuat

Perintah yang lemah:

Tambahkan properti bagus ke data ini.

“Baik” tidak terdefinisi, target tidak jelas, tidak ada pengendalian kebocoran. AI menghasilkan fitur acak, mungkin bocor.

Perintah yang kuat:

Peran Anda: insinyur fitur. Target: "churn dalam 30 hari" (0/1), perkiraan tanggal referensi: save_date. Ada riwayat transaksi di df.Task: Hasilkan 8 fitur, jawab pertanyaan "Apakah saya memiliki informasi ini pada saat prediksi" untuk SETIAP. Menambahkan tanggal setelah tanggal referensi pada fitur jendela waktu. Tulis kode dengan cara yang kompatibel dengan pipeline untuk dieksekusi setelah bagian pelatihan/pengujian.

Di sini, target, waktu referensi, dan pengendalian kebocoran ditentukan sejak awal.

Kesalahan umum

  • Mempelajari transformasi dari semua data sebelum pembagian. Jika parameter penskalaan/pengkodean melihat data pengujian, terjadi kebocoran.
  • Penggunaan kode target yang ceroboh. Ini adalah metode yang paling ampuh namun paling bocor; hanya dari pelatihan, dalam validasi silang.
  • Menambahkan masa depan dengan fitur jendela waktu. Jika penghitungan "30 hari terakhir" dimasukkan setelah hari perkiraan, model akan melihat masa depan.
  • Penskalaan yang tidak perlu pada model pohon dan penskalaan yang tidak lengkap pada model linier. Keputusan penskalaan dibuat sesuai dengan jenis model.
  • Menambahkan setiap saran fitur AI tanpa pertanyaan. Saran mungkin mencakup fitur yang tidak berguna dan bocor.
Tips: Tuliskan satu pertanyaan untuk setiap fitur yang Anda hasilkan: “Dapatkah saya menghitung nilai ini dengan informasi yang saya miliki saat membuat prediksi?” Jika jawabannya tidak jelas "ya", jangan gunakan fitur tersebut. Disiplin tunggal ini menghilangkan sebagian besar kebocoran terkait fitur.

Singkatnya

Rekayasa fitur adalah seni menghasilkan sinyal bermakna dari data mentah dan sering kali lebih menentukan keberhasilan model daripada algoritme. Pengkodean kategorikal (one-hot, label, target), penskalaan numerik (standardisasi, normalisasi) dan menghasilkan fitur turunan dengan pengetahuan domain adalah alat dasarnya. Namun fase ini juga merupakan inti dari kebocoran: semua transformasi harus dipelajari setelah pemisahan pelatihan/pengujian dan hanya dari data pelatihan. AI menghasilkan banyak ide; Penilaian manusialah yang membedakan mana yang berharga dan mana yang berbahaya.

Tugas aplikasi

Pilih variabel target dan rancang setidaknya lima fitur turunan dari kolom yang Anda miliki. Untuk masing-masing dari mereka, jawablah pertanyaan "apakah saya tersedia pada saat prediksi" secara tertulis dan hilangkan setidaknya satu sebagai "risiko kebocoran yang tinggi". Kemudian kodekan fitur aman dalam pipeline untuk diimplementasikan pasca-partisi.

daftar periksa

  • [ ] Apakah saya menerapkan semua transformasi setelah pemisahan pelatihan/pengujian?
  • [ ] Apakah saya hanya mempelajari parameter penskalaan/pengkodean dari pelatihan?
  • [ ] Sudahkah saya menjawab pertanyaan "apakah saya memilikinya pada saat prediksi" untuk setiap fitur?
  • [ ] Apakah saya sudah ekstra hati-hati dengan metode berisiko tinggi seperti pengkodean target?
  • [ ] Sudahkah saya memutuskan untuk menskalakan jenis model dengan tepat (pohon/linier)?