Selamat! Anda telah men-deploy model unicorn. Model Anda akan berjalan 24/7 tanpa masalah. Untuk memastikannya, Anda harus memantau pipeline machine learning (ML).
Menulis skema data untuk memvalidasi data mentah
Untuk memantau data, Anda harus terus memeriksanya dengan nilai statistik yang diharapkan dengan menulis aturan yang harus dipenuhi data. Kumpulan aturan ini disebut skema data. Tentukan skema data dengan mengikuti langkah-langkah berikut:
Pahami rentang dan distribusi fitur Anda. Untuk fitur kategoris, pahami kumpulan kemungkinan nilai.
Enkode pemahaman Anda ke dalam skema data. Berikut adalah contoh aturan:
- Pastikan rating yang dikirimkan pengguna selalu dalam rentang 1 hingga 5.
- Pastikan kata the paling sering muncul (untuk fitur teks bahasa Inggris).
- Pastikan setiap fitur kategoris ditetapkan ke nilai dari kumpulan nilai yang mungkin tetap.
Uji data Anda terhadap skema data. Skema Anda harus menangkap error data seperti:
- Anomali
- Nilai variabel kategoris yang tidak terduga
- Distribusi data yang tidak terduga
Menulis pengujian unit untuk memvalidasi rekayasa fitur
Meskipun data mentah Anda mungkin lulus skema data, model Anda tidak dilatih pada data mentah. Sebaliknya, model Anda dilatih menggunakan data yang telah di-engineer fitur. Misalnya, model Anda dilatih menggunakan fitur numerik yang dinormalisasi, bukan data numerik mentah. Karena data rekayasa fitur dapat sangat berbeda dengan data input mentah, Anda harus memeriksa data rekayasa fitur secara terpisah dari pemeriksaan pada data input mentah.
Tulis pengujian unit berdasarkan pemahaman Anda tentang data rekayasa fitur. Misalnya, Anda dapat menulis pengujian unit untuk memeriksa kondisi seperti berikut:
- Semua fitur numerik diskalakan, misalnya, antara 0 dan 1.
- Vektor enkode one-hot hanya berisi satu 1 dan N-1 nol.
- Distribusi data setelah transformasi sesuai dengan ekspektasi. Misalnya, jika Anda telah melakukan normalisasi menggunakan skor Z, rata-rata skor Z harus 0.
- Pengabaian ditangani, seperti dengan penskalaan atau pemangkasan.
Memeriksa metrik untuk mengetahui bagian data penting
Keseluruhan yang berhasil terkadang mengaburkan subset yang gagal. Dengan kata lain, model dengan metrik keseluruhan yang bagus mungkin masih membuat prediksi yang buruk untuk situasi tertentu. Contoh:
Model unicorn Anda berperforma baik secara keseluruhan, tetapi berperforma buruk saat membuat prediksi untuk gurun Sahara.
Jika Anda adalah jenis engineer yang puas dengan AUC yang bagus secara keseluruhan, Anda mungkin tidak akan melihat masalah model di gurun Sahara. Jika membuat prediksi yang baik untuk setiap region penting, Anda perlu melacak performa untuk setiap region. Subkumpulan data, seperti yang sesuai dengan gurun Sahara, disebut slice data.
Identifikasi slice data yang diinginkan. Kemudian, bandingkan metrik model untuk slice data ini dengan metrik untuk seluruh set data Anda. Memeriksa apakah model Anda berperforma baik di semua slice data akan membantu menghilangkan bias. Lihat Keadilan: Mengevaluasi Bias untuk mengetahui informasi selengkapnya.
Menggunakan metrik dunia nyata
Metrik model tidak selalu mengukur dampak model Anda di dunia nyata. Misalnya, mengubah hyperparameter dapat meningkatkan AUC model, tetapi bagaimana perubahan tersebut memengaruhi pengalaman pengguna? Untuk mengukur dampak di dunia nyata, Anda perlu menentukan metrik terpisah. Misalnya, Anda dapat mensurvei pengguna model untuk mengonfirmasi bahwa mereka benar-benar melihat unicorn saat model memprediksi bahwa mereka akan melakukannya.
Memeriksa diferensiasi performa pelatihan dan penayangan
Diferensiasi performa pelatihan dan penayangan berarti data input Anda selama pelatihan berbeda dengan data input Anda dalam penayangan. Tabel berikut menjelaskan dua jenis skew yang penting:
Jenis | Definisi | Contoh | Solusi |
---|---|---|---|
Ketidakseimbangan skema | Data input pelatihan dan penayangan tidak sesuai dengan skema yang sama. | Format atau distribusi data penayangan berubah saat model Anda terus dilatih dengan data lama. | Gunakan skema yang sama untuk memvalidasi data pelatihan dan penayangan. Pastikan Anda memeriksa statistik yang tidak diperiksa oleh skema secara terpisah, seperti fraksi nilai yang hilang |
Kemiringan fitur | Data yang dirancang berbeda antara pelatihan dan penayangan. | Kode rekayasa fitur berbeda antara pelatihan dan penayangan, yang menghasilkan data rekayasa yang berbeda. | Serupa dengan skema skew, terapkan aturan statistik yang sama di seluruh data pelatihan dan penyaluran yang dirancang. Melacak jumlah fitur yang terdeteksi miring, dan rasio contoh miring per fitur. |
Penyebab diferensiasi performa pelatihan dan penayangan bisa jadi tidak jelas. Selalu pertimbangkan data yang tersedia untuk model Anda pada waktu prediksi. Selama pelatihan, hanya gunakan fitur yang akan tersedia saat penayangan.
Latihan: Periksa pemahaman Anda
Misalnya, Anda memiliki toko online dan ingin memprediksi jumlah uang yang akan Anda hasilkan pada hari tertentu. Sasaran ML Anda adalah memprediksi pendapatan harian menggunakan jumlah pelanggan sebagai fitur.
Jawaban: Masalahnya adalah Anda tidak mengetahui jumlah pelanggan pada waktu prediksi, sebelum penjualan hari itu selesai. Jadi, fitur ini tidak berguna, meskipun fitur ini sangat prediktif terhadap pendapatan harian Anda. Terkait hal ini, saat Anda melatih model dan mendapatkan metrik evaluasi yang luar biasa (seperti 0,99 AUC), cari jenis fitur ini yang dapat masuk ke label Anda.
Memeriksa kebocoran label
Kebocoran label berarti label kebenaran dasar yang Anda coba prediksi telah secara tidak sengaja dimasukkan ke dalam fitur pelatihan. Kebocoran label terkadang sangat sulit dideteksi.
Latihan: Periksa pemahaman Anda
Misalnya, Anda membuat model klasifikasi biner untuk memprediksi apakah pasien rumah sakit baru menderita kanker atau tidak. Model Anda menggunakan fitur seperti berikut:
- Usia pasien
- Gender pasien
- Kondisi medis sebelumnya
- Nama rumah sakit
- Tanda-tanda vital
- Hasil tes
- Hereditas
Labelnya adalah sebagai berikut:
- Boolean: Apakah pasien menderita kanker?
Anda mempartisi data dengan cermat, memastikan bahwa set pelatihan Anda terisolasi dengan baik dari set validasi dan set pengujian. Model berperforma sangat baik pada set validasi dan set pengujian; metriknya fantastis. Sayangnya, model ini berperforma sangat buruk pada pasien baru di dunia nyata.
Jawaban: Salah satu fitur model adalah nama rumah sakit. Rumah sakit tertentu berspesialisasi dalam mengobati kanker. Selama pelatihan, model dengan cepat mempelajari bahwa pasien yang ditugaskan ke rumah sakit tertentu sangat mungkin menderita kanker. Jadi, nama rumah sakit menjadi fitur yang diberi bobot tinggi.
Pada waktu inferensi, sebagian besar pasien belum ditetapkan ke rumah sakit. Lagi pula, tujuan model ini adalah untuk mendiagnosis keberadaan atau tidak adanya kanker, lalu menggunakan diagnosis tersebut untuk menetapkan pasien ke rumah sakit yang sesuai. Akibatnya, selama inferensi, fitur nama rumah sakit belum tersedia dan model terpaksa mengandalkan fitur lain.
Memantau usia model di seluruh pipeline
Jika data penayangan berkembang seiring waktu, tetapi model Anda tidak dilatih ulang secara rutin, Anda akan melihat penurunan kualitas model. Lacak waktu sejak model dilatih ulang pada data baru dan tetapkan usia minimum untuk pemberitahuan. Selain memantau usia model saat ditayangkan, Anda harus memantau usia model di seluruh pipeline untuk mendeteksi macetnya pipeline.
Menguji apakah bobot dan output model stabil secara numerik
Selama pelatihan model, bobot dan output lapisan Anda tidak boleh berupa NaN (bukan angka) atau Inf (tak terbatas). Tulis pengujian untuk memeriksa nilai NaN dan Inf dari bobot dan output lapisan Anda. Selain itu, uji bahwa lebih dari setengah output lapisan bukan nol.
Memantau performa model
Prediktor kemunculan unicorn Anda lebih populer dari yang diperkirakan. Anda mendapatkan banyak permintaan prediksi dan lebih banyak data pelatihan. Anda merasa hal itu bagus sampai Anda menyadari bahwa model Anda membutuhkan lebih banyak memori dan waktu untuk dilatih. Anda memutuskan untuk memantau performa model dengan mengikuti langkah-langkah berikut:
- Melacak performa model berdasarkan versi kode, model, dan data. Dengan pelacakan tersebut, Anda dapat menentukan penyebab penurunan performa secara tepat.
- Uji langkah pelatihan per detik untuk versi model baru terhadap versi sebelumnya dan terhadap nilai minimum tetap.
- Mendeteksi kebocoran memori dengan menetapkan nilai minimum untuk penggunaan memori.
- Memantau waktu respons API dan melacak persentilnya. Meskipun waktu respons API mungkin berada di luar kendali Anda, respons lambat berpotensi menyebabkan metrik dunia nyata yang buruk.
- Memantau jumlah kueri yang dijawab per detik.
Menguji kualitas model live pada data yang ditayangkan
Anda telah memvalidasi model. Namun, bagaimana jika skenario dunia nyata, seperti perilaku unicorn, berubah setelah merekam data validasi Anda? Kemudian, kualitas model yang ditayangkan akan menurun. Namun, pengujian kualitas dalam penayangan sulit dilakukan karena data dunia nyata tidak selalu diberi label. Jika data penayangan Anda tidak diberi label, pertimbangkan pengujian berikut:
Selidiki model yang menunjukkan bias statistik yang signifikan dalam prediksi. Lihat Klasifikasi: Bias Prediksi.
Melacak metrik dunia nyata untuk model Anda. Misalnya, jika Anda mengklasifikasikan spam, bandingkan prediksi Anda dengan spam yang dilaporkan pengguna.
Mitigasi potensi perbedaan antara data pelatihan dan penayangan dengan menayangkan versi model baru pada sebagian kueri Anda. Saat Anda memvalidasi model penayangan baru, alihkan semua kueri secara bertahap ke versi baru.
Dengan menggunakan pengujian ini, jangan lupa untuk memantau degradasi yang tiba-tiba dan lambat dalam kualitas prediksi.
Pengacakan
Buat pipeline pembuatan data Anda dapat direproduksi. Misalnya, Anda ingin menambahkan fitur untuk melihat pengaruhnya terhadap kualitas model. Untuk eksperimen yang adil, set data Anda harus sama, kecuali untuk fitur baru ini. Dengan semangat tersebut, pastikan randomisasi dalam pembuatan data dapat dibuat deterministik:
- Buat seed generator angka acak (RNG). Pembuatan seed memastikan bahwa RNG menghasilkan nilai yang sama dalam urutan yang sama setiap kali Anda menjalankannya, sehingga membuat ulang set data Anda.
- Gunakan kunci hash invarian. Hashing adalah cara umum untuk memisahkan atau mengambil sampel data. Anda dapat melakukan hashing pada setiap contoh, dan menggunakan bilangan bulat yang dihasilkan untuk memutuskan bagian mana yang akan menempatkan contoh. Input ke fungsi hash Anda tidak boleh berubah setiap kali Anda menjalankan program pembuatan data. Jangan gunakan waktu saat ini atau angka acak dalam hash, misalnya, jika Anda ingin membuat ulang hash sesuai permintaan.
Pendekatan sebelumnya berlaku untuk sampling dan pemisahan data Anda.
Pertimbangan untuk hashing
Bayangkan lagi Anda mengumpulkan kueri Penelusuran dan menggunakan hashing untuk menyertakan atau mengecualikan kueri. Jika kunci hash hanya menggunakan kueri, maka di beberapa hari data, Anda akan selalu menyertakan kueri tersebut atau selalu mengecualikannya. Selalu menyertakan atau selalu mengecualikan kueri adalah hal yang buruk karena:
- Set pelatihan Anda akan melihat kumpulan kueri yang kurang beragam.
- Set evaluasi Anda akan dibuat sulit secara artifisial, karena tidak akan tumpang-tindih dengan data pelatihan Anda. Pada kenyataannya, pada waktu penayangan, Anda akan melihat beberapa traffic live dalam data pelatihan, sehingga evaluasi Anda harus mencerminkannya.
Sebagai gantinya, Anda dapat melakukan hashing pada kueri + tanggal, yang akan menghasilkan hashing yang berbeda setiap hari.