Keuntungan:
- Keupayaan untuk menghasilkan ciri terbitan yang bermakna dengan pengetahuan domain dan mengekodkan kategori kategori dengan kaedah yang sesuai (satu panas, label, sasaran)
- Keupayaan untuk menskalakan pembolehubah berangka mengikut jenis model (pestandardisasi, normalisasi) dan mengelakkan penskalaan yang tidak perlu atau tidak lengkap
- Keupayaan untuk mengelakkan kebocoran ciri dengan mempelajari semua transformasi selepas pembahagian latihan/ujian dan hanya dari latihan
Terdapat pepatah lama dalam pembelajaran mesin: "Pembelajaran mesin gunaan pada asasnya ialah kejuruteraan ciri." Kerana kejayaan model selalunya datang daripada input yang anda berikan kepada model, dan bukannya algoritma yang anda pilih. Kejuruteraan ciri ialah seni menghasilkan isyarat bermakna daripada data mentah yang boleh dipelajari oleh model. Kecerdasan buatan ialah sumber idea yang kaya pada peringkat ini: apabila anda bertanya "ciri apa yang boleh dihasilkan daripada data ini", ia menyenaraikan berpuluh-puluh cadangan. Tetapi beberapa cadangan ini mungkin berharga, ada yang tidak berguna, dan ada yang berbahaya (kebocoran). Tugas anda untuk menyelesaikannya.
Mengapa ciri kejuruteraan
Data mentah jarang datang kepada model dalam bentuk terbaiknya. Walaupun lajur "tarikh lahir" sahaja tidak bermakna, nilai "umur" yang dijana daripadanya adalah isyarat yang kuat. Anda boleh mengekstrak atribut seperti "hari dalam seminggu", "siang/malam", "adakah hari cuti" daripada "cap masa pesanan". Anda boleh menggabungkan dua lajur untuk menghasilkan nisbah ("nisbah hutang/pendapatan"). Di sini, kejuruteraan ciri sedang menterjemah pengetahuan domain kepada isyarat matematik; Dan itulah sebabnya ia adalah peringkat yang paling memerlukan kecerdasan manusia.
Menukar pembolehubah kategori kepada nombor: pengekodan
Model biasanya berfungsi dengan nombor, bukan teks. Menukar pembolehubah kategori (seperti bandar, warna, jenis produk) kepada nombor dipanggil pengekodan. Tiga kaedah biasa:
Pengekodan satu panas: Membuka lajur berasingan dengan nilai 0/1 untuk setiap kategori. Untuk "bandar", lajur Istanbul, Ankara, Izmir dibentuk; Jika pelanggan dari Istanbul, hanya lajur itu akan menjadi 1. Ideal apabila bilangan kategori adalah kecil; Jika terdapat terlalu banyak kategori, ia menghasilkan ratusan lajur (ini dipanggil "letupan saiz").
Pengekodan label: Memberi nombor kepada setiap kategori (Istanbul=0, Ankara=1). Ia mudah, tetapi ia mungkin secara tidak sengaja mengajar model satu urutan (seperti Ankara > Istanbul); jadi ia digunakan dengan berhati-hati dalam kategori tidak tertib.
Pengekodan sasaran: Menggantikan setiap kategori dengan purata pembolehubah sasaran dalam kategori tersebut. Ia sangat berkuasa, tetapi sumber kebocoran yang paling berbahaya: jika anda mengambil kira sasaran data ujian, model itu melihat masa depan. Ia harus dikira hanya daripada data latihan dan berhati-hati (dalam pengesahan silang).
Penskalaan: bilangan yang besar tidak mengatasi model
Sesetengah model (yang berasaskan jarak, model linear, rangkaian saraf) adalah sensitif kepada skala pembolehubah. Jika "pendapatan" (0-500,000) dan "umur" (0-100) jatuh ke dalam corak yang sama, pendapatan mungkin mendominasi hanya kerana ia lebih besar. Penskalaan membetulkan ini. Dua kaedah biasa: penyeragaman (menukar setiap nilai kepada "berapa banyak sisihan piawai dari min") dan normalisasi (normalisasi min-maks — memampatkan nilai ke dalam julat 0-1). Model berasaskan pokok (pokok keputusan, hutan rawak) tidak sensitif skala, ia tidak memerlukan penskalaan.
Awas: Parameter penskalaan dan pengekodan (min, sisihan piawai, pemetaan kategori-min) hendaklah hanya dikira daripada data latihan, kemudian perkara yang sama hendaklah digunakan pada data ujian. Termasuk data ujian adalah kebocoran dan menjadikan model anda kelihatan lebih baik daripada yang sebenarnya.
Inti kebocoran dalam kejuruteraan ciri
Penjanaan ciri ialah tempat kebocoran data paling kerap berlaku. Dua kesilapan biasa: Kebocoran masa — menghasilkan ciri yang merangkumi maklumat masa hadapan (termasuk hari selepas hari ramalan apabila mengira "purata 30 hari terakhir"). Kebocoran statistik — mengira ciri (purata skala, nilai pengekodan sasaran) daripada semua data sebelum pembahagian latihan/ujian. Peraturan: pelajari setiap transformasi selepas melakukan pembahagian kereta api/ujian terlebih dahulu dan hanya dari data latihan. Cara paling selamat untuk melakukan ini dengan kerap ialah menggunakan saluran paip — struktur yang mengumpul semua transformasi dalam satu rantai dan menggunakannya selepas berpecah.
Kaedah
untuk apa
Risiko kebocoran
nota
Pengekodan satu-panas
Pembolehubah dengan beberapa kategori
rendah
Meletup saiz dalam pelbagai kategori
Pengekodan label
Kategori yang diisih
rendah
Tidak teratur mengajarkan susunan yang salah
pengekodan sasaran
Berbilang kategori, isyarat kuat
sangat tinggi
Hanya dari pendidikan, dalam CV
penyeragaman
Model linear/jarak
sederhana
Parameter bergantung hanya pada pendidikan
Ciri tetingkap masa
siri masa
tinggi
Tambah masa depan
tiga kes mini
Kes 1 — Harta berharga. Pasukan kredit menjana ciri "nisbah hutang kepada pendapatan" daripada lajur "pendapatan bulanan" dan "bayaran hutang bulanan" mentah. Ciri terbitan tunggal ini meningkatkan ketepatan model daripada 71% kepada 79%; kerana ia adalah kadar, bukan pendapatan mutlak, yang benar-benar menentukan risiko. Pelajaran: nisbah yang dijana oleh pengetahuan domain adalah isyarat yang kuat.
Kes 2 — Kebocoran pengekodan sasaran. Satu pasukan menukar "kod pos" kepada nombor dengan pengekodan sasaran (kadar churn purata di kawasan itu), tetapi melakukannya daripada semua data sebelum berpecah. Model itu memberikan 94% pada set ujian, menurun kepada 68% dalam pengeluaran. 6 minggu usaha sia-sia. Pengajaran: pengekodan sasaran dilakukan dengan berhati-hati, hanya dalam latihan.
Kes 3 — Skala lupa. Seorang penganalisis memasukkan hasil (0-400,000) dan umur pelanggan (18-75) ke dalam model berasaskan jarak tanpa penskalaan. Model itu melihat hampir secara eksklusif pada pendapatan, menghancurkan kesan umur. Apabila penskalaan ditambahkan, pembahagian menjadi bermakna. Pengajaran: penskalaan tidak diabaikan dalam model jarak/linear.
Empat templat yang boleh disalin
1) Penjanaan idea ciri (penghapusan terpulang kepada anda):
Peranan anda: pembantu kejuruteraan ciri. Lajur df saya: tarikh_lahir, masa_pesanan (cap masa), pendapatan_tl, debt_tl, bandar, kategori_produk. Sasaran: "adakah pinjaman akan dibayar balik" (0/1). Cadangkan 15 ciri yang boleh dijana daripada lajur ini; nyatakan risiko kebocoran (rendah/sederhana/tinggi) bagi setiap satu. Tandai dengan jelas mereka yang mengandungi maklumat masa hadapan.
2) Pengekodan selamat (pasca perpecahan):
Tulis kod yang satu-panas mengekodkan "bandar" dan "kategori_produk". PENTING: muatkan pengekodan hanya pada data latihan, kemudian ubah data ujian (dengan sklearn OneHotEncoder). Terangkan cara anda mengendalikan kategori ghaib (handle_unknown) dalam pendidikan.
3) Penukaran bebas kebocoran dengan Talian Paip:
Sediakan sklearn Pipeline: gunakan StandardScaler pada lajur berangka, OneHotEncoder pada lajur kategori, tambah pengelas pada penghujungnya. Menjamin semua transformasi dipelajari SELEPAS keretapi/ujian berpecah dan hanya dari latihan. Terangkan kod dan sebab ia bebas bocor.
4) Ciri tetingkap masa (kawalan kebocoran):
Jana atribut "bilangan pesanan dalam 30 hari terakhir" untuk setiap pelanggan, tetapi JANGAN PERNAH sertakan data selepas hari ramalan. Jelaskan baris demi baris bahawa kod itu tidak melihat ke masa hadapan. Saya akan menyediakan ruangan tarikh rujukan.
Gesaan lemah / Gesaan kuat
Gesaan yang lemah:
Tambahkan sifat yang baik pada data ini.
"Baik" tidak ditentukan, sasarannya tidak jelas, tiada kawalan kebocoran. AI menjana ciri rawak, mungkin bocor.
Gesaan kuat:
Peranan anda: jurutera ciri. Sasaran: "berpusing dalam 30 hari" (0/1), tarikh rujukan anggaran: save_date. Terdapat sejarah transaksi dalam df.Tugas: Hasilkan 8 ciri, jawab soalan "Adakah saya mempunyai maklumat ini pada masa ramalan" untuk SETIAP. Menambah tarikh selepas tarikh rujukan dalam ciri tetingkap masa. Tulis kod dalam cara yang serasi saluran paip untuk dilaksanakan selepas bahagian kereta api/ujian.
Di sini, sasaran, masa rujukan dan kawalan kebocoran ditakrifkan dari awal.
Kesilapan biasa
- Mempelajari transformasi daripada semua data sebelum pembahagian. Jika parameter penskalaan/pengekodan melihat data ujian, kebocoran berlaku.
- Penggunaan pengekodan sasaran secara cuai. Ia adalah kaedah yang paling berkuasa tetapi paling bocor; hanya dari latihan, dalam pengesahan silang.
- Menambah masa depan dengan ciri tetingkap masa. Jika pengiraan "30 hari terakhir" dimasukkan selepas hari ramalan, model melihat masa hadapan.
- Penskalaan yang tidak perlu dalam model pokok dan penskalaan yang tidak lengkap dalam model linear. Keputusan penskalaan dibuat mengikut jenis model.
- Menambah setiap cadangan ciri AI tanpa soalan. Cadangan mungkin termasuk ciri yang tidak berguna dan bocor.
Petua: Tulis satu soalan untuk setiap ciri yang anda hasilkan: "Bolehkah saya mengira nilai ini dengan maklumat yang saya ada semasa saya membuat ramalan?" Jika jawapannya tidak jelas "ya", jangan gunakan ciri tersebut. Disiplin tunggal ini menghapuskan kebanyakan kebocoran berkaitan ciri.
Secara ringkasnya
Kejuruteraan ciri ialah seni menjana isyarat bermakna daripada data mentah dan selalunya menentukan kejayaan model lebih daripada algoritma. Pengekodan kategori (satu-panas, label, sasaran), penskalaan berangka (pestandardisasi, penormalan) dan menghasilkan ciri terbitan dengan pengetahuan domain ialah alat asas. Tetapi fasa ini juga merupakan nadi kepada kebocoran: semua transformasi mesti dipelajari selepas pembahagian latihan/ujian dan hanya daripada data latihan. AI menjana banyak idea; Penghakiman manusialah yang membezakan yang berharga daripada yang berbahaya.
Tugasan permohonan
Pilih pembolehubah sasaran dan reka sekurang-kurangnya lima ciri terbitan daripada lajur yang anda miliki. Bagi setiap daripada mereka, jawab soalan "adakah saya tersedia pada masa ramalan" secara bertulis dan hapuskan sekurang-kurangnya satu sebagai "risiko tinggi kebocoran". Kemudian kodkan ciri selamat dalam saluran paip untuk dilaksanakan selepas partition.
senarai semak
- [ ] Adakah saya menggunakan semua transformasi selepas perpecahan kereta api/ujian?
- [ ] Adakah saya hanya mempelajari parameter penskalaan/pengekodan daripada latihan?
- [ ] Adakah saya telah menjawab soalan "adakah saya mempunyainya pada masa ramalan" untuk setiap ciri?
- [ ] Adakah saya lebih berhati-hati dengan kaedah berisiko tinggi seperti pengekodan sasaran?
- [ ] Adakah saya telah memutuskan untuk membuat skala yang sesuai untuk jenis model (pokok/linear)?