Keuntungan:
- Kemampuan untuk mengenali jenis kebocoran data (target, waktu, prapemrosesan, baris yang dikelompokkan) dan menanyakan skor 'terlalu bagus untuk menjadi kenyataan' sebagai alarm
- Kemampuan mencegah kebocoran dengan pemisahan awal set pengujian, saluran pipa, dan pembagian yang benar (kronologis/berkelompok)
- Kemampuan untuk membuat analisis dapat direproduksi dengan seed tetap, kontrol versi, dan penghapusan langkah-langkah manual
Ada dua kesalahan yang paling menyia-nyiakan upaya dalam ilmu data, dan keduanya berbahaya karena dapat menyebabkan bencana ketika segala sesuatunya "tampak baik-baik saja". Yang pertama adalah kebocoran data: model berfungsi dengan baik pada set pengujian tetapi mengalami error saat produksi. Yang kedua adalah irreproducibility: Anda menjalankan analisis enam bulan kemudian dan mendapatkan hasil yang sangat berbeda. Unit ini didedikasikan untuk mengetahui dan menghindari dua jebakan ini secara mendalam. AI dapat meningkatkan kedua risiko tersebut (muncul dengan cepat, menyarankan kebocoran tersembunyi, memudahkan Anda mengambil langkah manual) namun juga dapat menguranginya jika digunakan dengan benar. Perbedaannya terletak pada disiplin.
Kebocoran data: model waskita
Kebocoran data terjadi ketika model melihat informasi selama pelatihan yang tidak dimiliki model pada saat prediksi sebenarnya. Model "menipu" dengan informasi ini, tampak hebat di set pengujian, tetapi gagal dalam produksi tanpa informasi tersebut. Gejala kebocoran hampir selalu sama: terlalu bagus untuk menjadi kenyataan. Sebelum Anda bersukacita ketika melihat akurasi 99%, Anda harus mencari kebocorannya.
Jenis kebocoran utama adalah:
1. Kebocoran sasaran: Suatu fitur adalah hasil dari sasaran. Dalam perkiraan "dibatalkan", kolom "tanggal pembatalan" atau "jumlah pengembalian dana" adalah hasil dari target; Mereka hanya akan diisi jika hasilnya jelas.
2. Kebocoran waktu: Membawa informasi masa depan ke masa lalu. Saat menghitung "rata-rata 30 hari terakhir", sertakan hari setelah hari perkiraan, atau bagi rangkaian waktu secara acak.
3. Kebocoran pra-pemrosesan: Transformasi pembelajaran seperti penskalaan, pengisian, pengkodean dari semua data sebelum partisi pelatihan/pengujian. Rata-rata data pengujian mengganggu pelatihan.
4. Kebocoran baris duplikat/dikelompokkan: Baris milik orang yang sama hadir dalam pelatihan dan pengujian (dua kunjungan pasien yang sama dalam set berbeda). Model menghafal orang tersebut.
Tipe kebocoran
Bagaimana lahirnya
Bagaimana cara mencegahnya
kebocoran sasaran
Kolom itulah hasil dari target
Tes "Apakah saya memilikinya pada saat prediksi".
kebocoran waktu
Membawa masa depan ke masa lalu
Pembagian kronologis, kontrol jendela
Kebocoran pra-pemrosesan
Konversi pra-pemisahan
Pipeline, pas baru dari latihan
Kebocoran baris yang dikelompokkan
Unit yang sama dalam dua set
Dibagi berdasarkan grup (GrupKFold)
Satu-satunya disiplin untuk mencegah kebocoran
Solusi umum untuk semua jenis kebocoran diringkas dalam satu kalimat: Pisahkan set pengujian sedini mungkin untuk meniru masa depan yang sebenarnya, dan jangan "mengajarkan" apa pun padanya. Dalam praktiknya, ini berarti: pertama bagi, lalu pelajari semua transformasi hanya dari pelatihan dan terapkan dalam pipeline (struktur yang mengumpulkan semua langkah dalam satu rantai). Untuk setiap fitur, ajukan pertanyaan "apakah saya memiliki informasi ini pada saat prediksi?" Jika ada waktu, bagilah secara kronologis; Jika unit yang sama berulang, bagilah berdasarkan kelompok.
Perhatian: Aspek yang paling berbahaya dari sebuah kebocoran adalah bahwa kebocoran tersebut menampilkan dirinya sebagai suatu keberhasilan. Model yang buruk jelas akan memberikan hasil yang buruk dan akan diperhatikan; Model yang bocor berfungsi dengan baik, menyenangkan semua orang, dan mulai diproduksi — di situlah keruntuhan dimulai. Itu sebabnya hasil yang "sangat bagus" patut diwaspadai, bukan dirayakan.
Reproduksibilitas: mendapatkan hasil yang sama dua kali
Reproduksibilitas adalah kemampuan untuk mendapatkan hasil yang sama ketika Anda menjalankan analisis lagi di lain waktu, di komputer lain. Tanpa ini, analisis Anda hanya bersifat insidentil, tidak ilmiah. Penyebab utama dan solusi yang mengganggu reproduktifitas:
Langkah manual: Mengubah sel di Excel secara manual, mengedit bagan secara manual. Solusi: miliki setiap langkah dalam kode.
Keacakan tidak tetap: Pelatihan model, pengambilan sampel, pemisahan melibatkan keacakan. Solusi: perbaiki seed acak (nilai awal generator acak) (random_state=42).
Pergeseran versi: Hasilnya mungkin berubah ketika versi perpustakaan berubah. Solusi: perbaiki dependensi (requirements.txt, file lingkungan).
Tidak ada pencatatan: Tidak jelas data apa, kode apa, parameter apa yang digunakan. Solusi: kontrol versi (Git — sistem yang menyimpan semua versi kode) dan pembuatan versi data.
"Ini hanya berfungsi di mesin saya": Solusi: dokumentasikan lingkungan, gunakan container (Docker) jika memungkinkan.
tiga kasus mini
Kasus 1 — Kebocoran target. Analisis kesehatan menampilkan kolom "pengobatan pasca-pulang" dalam memprediksi "apakah pasien akan dirawat kembali". Kolom ini diisi hanya setelah pasien dipulangkan. Model memberi 96%, dalam produksi 61%. Proyek 8 minggu itu sampah. Pelajaran: tanyakan pada setiap fitur “apakah hadir pada saat prediksi?”
Kasus 2 — Pemrosesan awal kebocoran. Satu tim menskalakan semua data dan kemudian membaginya. Rata-rata data uji terlibat dalam penskalaan. Skor CV 89%, produksi aktual 76%. Kesuksesan palsu hilang ketika saya pindah ke Pipeline dan belajar tentang transformasi hanya dari pelatihan. Pelajaran: bagi dulu, ubah nanti.
Kasus 3 — Kegagalan untuk mereproduksi. Seorang analis ingin memperbarui grafik yang dia presentasikan kepada manajemen tiga bulan kemudian namun tidak dapat mengingat bagaimana dia menghasilkannya; banyak langkah dilakukan secara manual di Excel. Hasilnya tidak berhasil dan kepercayaan terguncang. Pelajaran: tidak ada langkah manual, semuanya ada dalam kode dan Git.
Empat templat yang dapat disalin
1) Pemeriksaan kebocoran:
Peran Anda: pemeriksa kebocoran. Target: "churn" (0/1), tanggal referensi perkiraan: record_date. Saya akan memberi Anda daftar fitur ini. Untuk fitur SETIAP: (a) apakah ini merupakan konsekuensi dari tujuan, (b) apakah tersedia bagi saya pada saat prediksi, (c) apakah rentang waktu mencakup masa depan? Tandai sebagai "tidak aman/mencurigakan/bocor" dan tulis alasannya. Fitur: [daftar]
2) Pipa bebas bocor:
Siapkan sklearn Pipeline: kereta/pengujian terpisah pertama (bertingkat, seed=42), LALU masukkan semua pra-pemrosesan (imputekan, penskalaan, encode) ke dalam pipeline HANYA dari pelatihan. Jelaskan mengapa kode tersebut bebas kebocoran, langkah mana yang dipelajari di mana.
3) Kode daftar periksa reproduktifitas:
Saya ingin membuat analisis saya dapat direproduksi. Sarankan kode/struktur yang menambahkan: (1) hard seed untuk semua keacakan, (2) versi perpustakaan pencetakan yang digunakan, (3) tag tanggal/versi untuk data dan keluaran. Beri saya juga daftar periksa untuk memastikan tidak ada langkah manual.
4) Partisi yang dikelompokkan (kebocoran unit yang sama):
Dalam data, customer_id yang sama ada di beberapa baris. Buat pemisahan (GroupKFold atauGroupShuffleSplit, group = customer_id) yang MENCEGAH pelanggan yang sama mengikuti pelatihan dan pengujian. Sertakan kode untuk memverifikasi bahwa tidak ada pelanggan di kedua set setelah pemisahan.
Perintah lemah / Perintah kuat
Perintah yang lemah:
Model saya menghasilkan akurasi 98%, bukankah itu bagus? Optimalkan kodenya.
Merayakan 98% menyembunyikan kebocoran. Sebelum melakukan optimasi, perlu dipertanyakan apakah skor tersebut nyata atau tidak.
Perintah yang kuat:
Peran Anda: pemeriksa kebocoran. Model saya mengembalikan akurasi 98% pada set pengujian, yang bagi saya terdengar "terlalu bagus untuk menjadi kenyataan". Periksa: (1) apakah ada fitur yang sesuai dengan hasil target, (2) apakah konversi dilakukan sebelum pemisahan, (3) apakah unit yang sama dalam dua set, (4) apakah ada kebocoran waktu. Buat daftar hal-hal yang mencurigakan; Fokuslah untuk menemukan kebocorannya, bukan memperbaiki skornya.
Di sini, skor tinggi diperlakukan sebagai tanda untuk dipertanyakan, bukan untuk dirayakan.
Kesalahan umum
- Merayakan hasil yang "sangat bagus". Skor yang terlalu bagus untuk menjadi kenyataan adalah peringatan kebocoran, bukan pencapaian.
- Mempelajari transformasi dari semua data sebelum pembagian. Kebocoran paling umum; Pisahkan dulu dengan pipa.
- Memisahkan deret waktu secara acak. Model tersebut melihat masa depan; Pembagian kronologis adalah suatu keharusan.
- Meninggalkan unit yang sama dalam dua set. Model mengingat orang tersebut; Bagilah berdasarkan kelompok.
- Tidak masuk secara manual dan menulis ke dalam kode. Analisisnya menjadi tidak dapat direproduksi; semuanya harus dalam kode dan Git.
Tip: Tulislah dua kalimat "janji kehormatan" di awal proyek Anda: "Saya belum pernah menyentuh set pengujian dengan cara apa pun sebelum saya melihatnya dalam produksi. Setiap langkah ada dalam kode dan benihnya sudah diperbaiki." Jika Anda tidak dapat menandatangani kedua kalimat ini dengan jujur, hasil Anda belum dapat diandalkan.
Singkatnya
Kebocoran data dan non-reprodusibilitas adalah dua kesalahan diam (silent error) yang paling mahal dalam ilmu data. Kebocoran adalah visi model tentang masa depan dan menampilkan dirinya sebagai kesuksesan palsu; Solusinya adalah dengan membagi set pengujian lebih awal, mempelajari transformasi hanya dari pelatihan (pipeline), menanyakan setiap fitur pertanyaan "Apakah saya memilikinya pada saat prediksi" dan melakukan pemisahan yang benar (kronologis/dikelompokkan). Reproduksibilitas adalah mampu memperoleh hasil yang sama dua kali; solusinya adalah menghapus langkah-langkah secara manual, menyematkan seed, membekukan versi, dan menyimpan semuanya di Git. AI dapat meningkatkan atau mengurangi risiko-risiko ini; Disiplin Andalah yang menentukan.
Tugas aplikasi
Ambil daftar fitur dari model yang telah Anda buat (atau model hipotetis) dan tanyakan pada setiap fitur pertanyaan "apakah saya memiliki informasi ini pada saat prediksi?" secara tertulis; Temukan setidaknya satu kandidat kebocoran. Kemudian isi daftar periksa agar analisis Anda dapat direproduksi: apakah seed sudah diperbaiki, apakah ada langkah manual, apakah versinya terdaftar, apakah ada di Git. Perbaiki kekurangannya.
daftar periksa
- [ ] Apakah saya menanyakan skor "terlalu bagus untuk menjadi kenyataan" sebagai peringatan kebocoran?
- [ ] Apakah saya mempelajari semua transformasi pasca-split, hanya dari pelatihan?
- [ ] Apakah saya sudah membaginya berdasarkan waktu/struktur grup (kronologis/GroupKFold)?
- [ ] Sudahkah saya membuat semua keacakan dapat diulang dengan benih tetap?
- [ ] Apakah saya menghapus langkah-langkah manual dan menyimpan semuanya dalam kode dan kontrol versi?