Unit 10 / 11

Kebocoran Data dan Kebolehulangan: Bencana Senyap dan Disiplin

Keuntungan:

  • Keupayaan untuk mengenali jenis kebocoran data (sasaran, masa, prapemprosesan, baris terkumpul) dan menanyakan skor 'terlalu baik untuk menjadi kenyataan' sebagai penggera
  • Keupayaan untuk mengelakkan kebocoran dengan pemisahan awal set ujian, saluran paip dan pembahagian yang betul (kronologi/berkumpulan)
  • Keupayaan untuk membuat analisis boleh dihasilkan semula dengan benih tetap, kawalan versi dan penyingkiran langkah manual

Terdapat dua kesilapan yang membazirkan banyak usaha dalam sains data, dan kedua-duanya adalah berbahaya kerana ia membawa kepada bencana apabila semuanya "nampak baik-baik saja." Yang pertama ialah kebocoran data: model berfungsi hebat pada set ujian tetapi ranap dalam pengeluaran. Yang kedua ialah ketakbolehhasilan semula: anda menjalankan analisis enam bulan kemudian dan mendapat hasil yang sama sekali berbeza. Unit ini didedikasikan untuk mengetahui dan mengelakkan kedua-dua perangkap ini secara mendalam. AI boleh meningkatkan kedua-dua risiko (menjana dengan cepat, mencadangkan kebocoran tersembunyi, memudahkan anda mengambil langkah manual) tetapi juga boleh mengurangkannya jika digunakan dengan betul. Perbezaannya terletak pada disiplin.

Kebocoran data: model peramal

Kebocoran data ialah apabila model melihat maklumat semasa latihan yang tidak akan ada pada masa ramalan sebenar. Model "menipu" dengan maklumat ini, kelihatan hebat pada set ujian, tetapi ranap dalam pengeluaran tanpa maklumat itu. Gejala kebocoran hampir selalu sama: terlalu bagus untuk menjadi kenyataan. Sebelum anda bergembira apabila anda melihat ketepatan 99%, anda harus mencari kebocoran.

Jenis utama kebocoran adalah:

1. Kebocoran matlamat: Ciri adalah hasil daripada matlamat. Dalam ramalan "telah dibatalkan", lajur "tarikh pembatalan" atau "jumlah bayaran balik" adalah hasil daripada sasaran; Mereka hanya akan diisi apabila hasilnya jelas.

2. Kebocoran masa: Membawa maklumat masa depan ke masa lalu. Apabila mengira "purata 30 hari terakhir", masukkan hari selepas hari ramalan atau bahagikan siri masa secara rawak.

3. Kebocoran pra-pemprosesan: Transformasi pembelajaran seperti penskalaan, pengisian, pengekodan daripada semua data sebelum partition latihan/ujian. Purata data ujian mengganggu latihan.

4. Kebocoran baris pendua/berkumpulan: Baris kepunyaan orang yang sama hadir dalam kedua-dua latihan dan ujian (dua lawatan pesakit yang sama dalam set berbeza). Model menghafal orang itu.

Jenis bocor

Bagaimana dilahirkan

Cara mencegah

kebocoran sasaran

Lajur yang merupakan hasil daripada sasaran

Ujian "Adakah saya mempunyainya pada masa ramalan".

kebocoran masa

Membawa masa depan ke masa lalu

Pembahagian kronologi, kawalan tingkap

Kebocoran prapemprosesan

Penukaran pra-perpecahan

Saluran paip, muat hanya dari latihan

Kebocoran baris berkumpulan

Unit yang sama dalam dua set

Pisah mengikut kumpulan (GroupKFold)

Satu-satunya disiplin untuk mengelakkan kebocoran

Penyelesaian biasa untuk semua jenis kebocoran berpunca kepada satu ayat: Asingkan set ujian seawal mungkin untuk meniru masa depan sebenar, dan jangan "mengajar" apa-apa. Dalam amalan, ini bermakna: mula-mula bahagikan, kemudian pelajari semua transformasi hanya dari latihan dan gunakannya dalam saluran paip (struktur yang mengumpul semua langkah dalam satu rantai). Untuk setiap ciri, tanya soalan "adakah saya mempunyai maklumat ini pada masa ramalan?" Jika ada masa, bahagikan mengikut kronologi; Jika unit yang sama berulang, bahagikan mengikut kumpulan.

Awas: Aspek kebocoran yang paling berbahaya ialah ia menunjukkan dirinya sebagai satu kejayaan. Model yang buruk jelas akan menghasilkan hasil yang buruk dan akan diperhatikan; Model yang bocor berfungsi dengan baik, menggembirakan semua orang dan dimasukkan ke dalam pengeluaran — di situlah keruntuhan bermula. Itulah sebabnya keputusan "sangat baik" adalah sebab untuk membimbangkan, bukan perayaan.

Kebolehulangan: mendapat hasil yang sama dua kali

Kebolehulangan ialah keupayaan untuk mendapatkan hasil yang sama apabila anda menjalankan analisis sekali lagi pada masa lain, pada mesin lain. Tanpa ini, analisis anda adalah sampingan, bukan saintifik. Punca dan penyelesaian utama yang menjejaskan kebolehulangan:

Langkah manual: Menukar sel secara manual dalam Excel, mengedit carta secara manual. Penyelesaian: mempunyai setiap langkah dalam kod.

Rawak tidak tetap: Latihan model, persampelan, pemisahan melibatkan rawak. Penyelesaian: tetapkan benih rawak (nilai awal penjana rawak) (random_state=42).

Peralihan versi: Keputusan mungkin berubah apabila versi perpustakaan berubah. Penyelesaian: betulkan kebergantungan (requirements.txt, fail persekitaran).

Tiada penyimpanan rekod: Tidak jelas data mana, kod mana, parameter mana yang digunakan. Penyelesaian: kawalan versi (Git — sistem yang menyimpan semua versi kod) dan versi data.

"Ia hanya berfungsi pada mesin saya": Penyelesaian: dokumentasikan persekitaran, gunakan bekas (Docker) jika boleh.

tiga kes mini

Kes 1 — Sasaran kebocoran. Analisis kesihatan memaparkan lajur "ubat selepas keluar" dalam meramalkan "sama ada pesakit akan dimasukkan semula." Lajur ini diisi hanya selepas pesakit dilepaskan. Model itu memberikan 96%, dalam pengeluaran 61%. Projek 8 minggu itu adalah sampah. Pelajaran: tanya setiap ciri "adakah ia hadir pada masa ramalan?"

Kes 2 — Kebocoran prapemprosesan. Satu pasukan menskalakan semua data dan kemudian membahagikannya. Purata data ujian terlibat dalam penskalaan. Skor CV 89%, pengeluaran sebenar 76%. Kejayaan palsu itu hilang apabila saya berpindah ke Pipeline dan belajar tentang transformasi hanya dari latihan. Pengajaran: bahagi dahulu, ubah kemudian.

Kes 3 — Kegagalan untuk menghasilkan semula. Seorang penganalisis ingin mengemas kini carta yang dibentangkannya kepada pihak pengurusan tiga bulan kemudian tetapi tidak ingat bagaimana dia menghasilkannya; banyak langkah dilakukan secara manual dalam Excel. Hasilnya tidak membuahkan hasil dan kepercayaan telah goyah. Pelajaran: tiada langkah manual, semuanya dalam kod dan Git.

Empat templat yang boleh disalin

1) Pemeriksaan kebocoran:

Peranan anda: pemeriksa kebocoran. Sasaran: "churn" (0/1), tarikh rujukan ramalan: record_date. Saya akan memberikan anda senarai ciri ini. Untuk SETIAP ciri: (a) adakah ia akibat daripada matlamat, (b) adakah ia tersedia untuk saya pada masa ramalan, (c) adakah tetingkap masa termasuk masa hadapan? Tandakannya sebagai "tidak selamat/mencurigakan/bocor" dan tulis sebab. Ciri-ciri: [senarai]

2) Saluran paip bebas kebocoran:

Sediakan Talian Paip sklearn: kereta api/ujian belah pertama (berstrata, benih=42), KEMUDIAN muatkan semua prapemprosesan (imput, skala, pengekodan) ke dalam saluran paip daripada latihan SAHAJA. Terangkan mengapa kod itu bebas bocor, langkah manakah yang dipelajari di mana.

3) Kod senarai semak kebolehulangan:

Saya mahu membuat analisis saya boleh dibuat semula. Cadangkan kod/struktur yang menambah: (1) hard seed untuk semua rawak, (2) mencetak versi perpustakaan yang digunakan, (3) teg tarikh/versi untuk data dan output. Juga berikan saya senarai semak untuk memastikan tiada langkah manual.

4) Pembahagian berkumpulan (kebocoran unit yang sama):

Dalam data customer_id yang sama wujud dalam berbilang baris. Buat pemisahan (GroupKFold atauGroupShuffleSplit, group = customer_id) yang MENGHALANG pelanggan yang sama daripada berada dalam kedua-dua latihan dan ujian. Sertakan kod untuk mengesahkan bahawa tiada pelanggan berada dalam kedua-dua set selepas berpecah.

Gesaan lemah / Gesaan kuat

Gesaan yang lemah:

Model saya mengembalikan ketepatan 98%, bukankah itu hebat? Optimumkan kod.

Meraikan 98% menyembunyikan kebocoran. Sebelum mengoptimumkan, perlu dipersoalkan sama ada skor ini adalah sebenar atau tidak.

Gesaan kuat:

Peranan anda: pemeriksa kebocoran. Model saya mengembalikan ketepatan 98% pada set ujian, yang kedengaran "terlalu bagus untuk menjadi kenyataan" kepada saya. Semak: (1) adakah sebarang ciri hasil daripada sasaran, (2) adakah penukaran dilakukan sebelum pemisahan, (3) adalah unit yang sama dalam dua set, (4) adakah terdapat sebarang kebocoran masa. Senaraikan mana-mana perkara yang mencurigakan; Fokus pada mencari kebocoran, bukan membetulkan skor.

Di sini, markah yang tinggi dianggap sebagai tanda untuk dipersoalkan, bukan untuk diraikan.

Kesilapan biasa

  • Meraikan keputusan "sangat baik". Skor yang terlalu bagus untuk menjadi kenyataan ialah amaran kebocoran, bukan pencapaian.
  • Mempelajari transformasi daripada semua data sebelum pembahagian. Kebocoran yang paling biasa; Pisahkan dahulu dengan saluran paip.
  • Membahagikan siri masa secara rawak. Model melihat masa depan; Pembahagian kronologi adalah satu kemestian.
  • Meninggalkan unit yang sama dalam dua set. Model menghafal orang itu; Bahagikan mengikut kumpulan.
  • Tidak melangkah masuk secara manual dan menulis ke dalam kod. Analisis menjadi tidak boleh dibuat semula; semuanya harus dalam kod dan Git.
Petua: Tulis dua ayat "ikrar penghormatan" pada permulaan projek anda: "Saya tidak menyentuh set ujian dalam apa jua cara sebelum saya melihatnya dalam pengeluaran. Setiap langkah ada dalam kod dan benih telah ditetapkan." Jika anda tidak dapat menandatangani dua ayat ini dengan jujur, keputusan anda masih belum boleh dipercayai.

Secara ringkasnya

Kebocoran data dan tidak boleh dihasilkan semula ialah dua ralat senyap yang paling mahal dalam sains data. Kebocoran ialah visi model masa depan dan memperlihatkan dirinya sebagai kejayaan palsu; Penyelesaiannya adalah untuk membahagikan set ujian awal, pelajari transformasi hanya dari latihan (saluran paip), tanya setiap ciri soalan "Adakah saya mempunyainya pada masa ramalan" dan lakukan pemisahan yang betul (kronologi/berkumpulan). Kebolehulangan adalah dapat memperoleh hasil yang sama dua kali; penyelesaiannya ialah mengalih keluar langkah secara manual, menyematkan benih, membekukan versi, dan menyimpan segala-galanya dalam Git. AI boleh sama ada meningkatkan atau mengurangkan risiko ini; Disiplin anda yang menentukan.

Tugasan permohonan

Ambil senarai ciri model yang telah anda bina (atau yang andaian) dan tanya setiap ciri soalan "adakah saya mempunyai maklumat ini pada masa ramalan?" secara bertulis; Cari sekurang-kurangnya seorang calon yang bocor. Kemudian isi senarai semak untuk membuat analisis anda boleh dihasilkan semula: adakah benih telah ditetapkan, adakah terdapat langkah manual, adakah versi didaftarkan, adakah ia dalam Git. Perbaiki kekurangan.

senarai semak

  • [ ] Adakah saya menanyakan skor "terlalu baik untuk menjadi kenyataan" sebagai amaran kebocoran?
  • [ ] Adakah saya mempelajari semua transformasi selepas berpecah, hanya dari latihan?
  • [ ] Adakah saya telah membahagikan mengikut struktur masa/kumpulan (kronologi/GroupKFold)?
  • [ ] Adakah saya telah membuat semua rawak boleh diulang dengan benih tetap?
  • [ ] Adakah saya mengalih keluar langkah manual dan menyimpan semuanya dalam kod dan kawalan versi?