Selamat! Anda telah men-deploy model unicorn. Model Anda harus berjalan 24x7 tanpa masalah. Untuk memastikannya, Anda harus memantau pipeline machine learning (ML).
Menulis skema data untuk memvalidasi data mentah
Untuk memantau data, Anda harus terus-menerus memeriksanya terhadap nilai statistik yang diharapkan dengan menulis aturan yang harus dipenuhi oleh 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 set kemungkinan nilai.
Enkode pemahaman Anda ke dalam skema data. Berikut adalah contoh aturan:
- Pastikan rating yang dikirimkan pengguna selalu dalam rentang 1 hingga 5.
- Periksa apakah kata the paling sering muncul (untuk fitur teks bahasa Inggris).
- Pastikan setiap fitur kategoris ditetapkan ke nilai dari kumpulan tetap kemungkinan nilai.
Uji data Anda berdasarkan 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 dengan data mentah. Sebaliknya, model Anda dilatih berdasarkan data yang telah direkayasa fiturnya. Misalnya, model Anda dilatih dengan fitur numerik yang dinormalisasi, bukan data numerik mentah. Karena data yang direkayasa fitur dapat sangat berbeda dari data input mentah, Anda harus memeriksa data yang direkayasa fitur secara terpisah dari pemeriksaan pada data input mentah.
Tulis pengujian unit berdasarkan pemahaman Anda tentang data yang direkayasa fiturnya. Misalnya, Anda dapat menulis pengujian unit untuk memeriksa kondisi seperti berikut:
- Semua fitur numerik diskalakan, misalnya, antara 0 dan 1.
- Vektor yang dienkode one-hot hanya berisi satu angka 1 dan N-1 angka nol.
- Distribusi data setelah transformasi sesuai dengan ekspektasi. Misalnya, jika Anda telah menormalisasi menggunakan skor Z, rata-rata skor Z harus 0.
- Pencilan ditangani, seperti dengan penskalaan atau pemangkasan.
Memeriksa metrik untuk irisan data penting
Keseluruhan yang berhasil terkadang mengaburkan subset yang tidak berhasil. 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 secara keseluruhan bagus, maka Anda mungkin tidak menyadari masalah model di padang pasir Sahara. Jika membuat prediksi yang baik untuk setiap wilayah penting, Anda harus melacak performa untuk setiap wilayah. Subkumpulan data, seperti yang sesuai dengan gurun Sahara, disebut slice data.
Identifikasi irisan data yang menarik. Kemudian, bandingkan metrik model untuk slice data ini dengan metrik untuk seluruh set data Anda. Memeriksa bahwa model Anda berperforma baik di semua irisan 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 menyurvei pengguna model Anda untuk mengonfirmasi bahwa mereka benar-benar melihat unicorn saat model memprediksi bahwa mereka akan melihatnya.
Memeriksa diferensiasi performa pelatihan dan penayangan
Diferensiasi performa pelatihan dan penayangan berarti data input Anda selama pelatihan berbeda dari data input Anda dalam penayangan. Tabel berikut menjelaskan dua jenis kecondongan yang penting:
Jenis | Definisi | Contoh | Solusi |
---|---|---|---|
Penyimpangan 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 Anda secara terpisah, seperti fraksi nilai yang hilang |
Kemiringan fitur | Data yang direkayasa berbeda antara pelatihan dan penayangan. | Kode rekayasa fitur berbeda antara pelatihan dan penayangan, sehingga menghasilkan data yang direkayasa berbeda. | Mirip dengan diferensiasi skema, terapkan aturan statistik yang sama di seluruh data yang direkayasa untuk pelatihan dan penyaluran. Lacak jumlah fitur miring yang terdeteksi, dan rasio contoh miring per fitur. |
Penyebab diferensiasi performa pelatihan dan penayangan bisa sangat halus. Selalu pertimbangkan data yang tersedia untuk model Anda pada waktu prediksi. Selama pelatihan, gunakan hanya fitur yang akan tersedia saat penayangan.
Latihan: Periksa pemahaman Anda
Misalnya, Anda memiliki toko online dan ingin memprediksi jumlah uang yang akan Anda peroleh 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. Selain itu, saat Anda melatih model dan mendapatkan metrik evaluasi yang luar biasa (seperti AUC 0,99), cari jenis fitur yang dapat memengaruhi label Anda.
Memeriksa kebocoran label
Kebocoran label berarti label kebenaran dasar yang ingin Anda prediksi telah dimasukkan secara tidak sengaja ke dalam fitur pelatihan Anda. Kebocoran label terkadang sangat sulit dideteksi.
Latihan: Periksa pemahaman Anda
Misalnya, Anda membuat model klasifikasi biner untuk memprediksi apakah pasien baru di rumah sakit 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 sangat baik. Sayangnya, performa model sangat buruk pada pasien baru di dunia nyata.
Jawaban: Salah satu fitur model adalah nama rumah sakit. Rumah sakit tertentu memiliki spesialisasi 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 sangat penting.
Pada waktu inferensi, sebagian besar pasien belum ditetapkan ke rumah sakit. Bagaimanapun juga, tujuan model ini adalah untuk mendiagnosis ada atau tidaknya kanker, lalu menggunakan diagnosis tersebut untuk menugaskan pasien ke rumah sakit yang sesuai. Akibatnya, selama inferensi, fitur nama rumah sakit belum tersedia dan model dipaksa untuk mengandalkan fitur lain.
Memantau usia model di seluruh pipeline
Jika data penayangan berkembang seiring waktu, tetapi model Anda tidak dilatih ulang secara rutin, maka Anda akan melihat penurunan kualitas model. Lacak waktu sejak model dilatih ulang dengan data baru dan tetapkan batas usia untuk pemberitahuan. Selain memantau usia model saat penayangan, Anda harus memantau usia model di seluruh pipeline untuk mendeteksi kebuntuan pipeline.
Menguji apakah bobot dan output model stabil secara numerik
Selama pelatihan model, bobot dan output lapisan Anda tidak boleh NaN (bukan angka) atau Inf (tak terhingga). Tulis pengujian untuk memeriksa nilai NaN dan Inf dari bobot dan output lapisan Anda. Selain itu, uji bahwa lebih dari setengah output lapisan tidak nol.
Memantau performa model
Prediktor penampilan unicorn Anda lebih populer dari yang diperkirakan. Anda mendapatkan banyak permintaan prediksi dan bahkan lebih banyak data pelatihan. Anda mungkin berpikir bahwa hal itu bagus, hingga Anda menyadari bahwa model Anda membutuhkan lebih banyak memori dan waktu untuk dilatih. Anda memutuskan untuk memantau performa model dengan mengikuti langkah-langkah berikut:
- Lacak performa model berdasarkan versi kode, model, dan data. Pelacakan tersebut memungkinkan Anda menentukan penyebab pasti penurunan performa.
- 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.
- Pantau waktu respons API dan lacak persentilnya. Meskipun waktu respons API mungkin di luar kendali Anda, respons yang lambat berpotensi menyebabkan metrik dunia nyata yang buruk.
- Pantau jumlah kueri yang dijawab per detik.
Menguji kualitas model aktif 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, menguji kualitas dalam penayangan sulit dilakukan karena data dunia nyata tidak selalu diberi label. Jika data penayangan Anda tidak diberi label, pertimbangkan pengujian berikut:
Menyelidiki model yang menunjukkan bias statistik yang signifikan dalam prediksi. Lihat Klasifikasi: Bias Prediksi.
Lacak metrik dunia nyata untuk model Anda. Misalnya, jika Anda mengklasifikasikan spam, bandingkan prediksi Anda dengan spam yang dilaporkan pengguna.
Kurangi potensi perbedaan antara data pelatihan dan penayangan dengan menayangkan versi model baru pada sebagian kecil kueri Anda. Saat Anda memvalidasi model penyajian baru, alihkan semua kueri secara bertahap ke versi baru.
Dengan menggunakan pengujian ini, jangan lupa untuk memantau penurunan kualitas prediksi yang tiba-tiba dan lambat.
Pengacakan
Membuat 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 identik kecuali untuk fitur baru ini. Sejalan dengan hal tersebut, pastikan setiap pengacakan dalam pembuatan data dapat dilakukan secara deterministik:
- Beri seed pada generator angka acak (RNG). Penyiapan memastikan 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 membagi atau mengambil sampel data. Anda dapat melakukan hashing pada setiap contoh, dan menggunakan bilangan bulat yang dihasilkan untuk memutuskan di bagian mana contoh akan ditempatkan. 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 Anda, misalnya, jika Anda ingin membuat ulang hash sesuai permintaan.
Pendekatan sebelumnya berlaku untuk pengambilan sampel dan pemisahan data.
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 itu buruk karena:
- Set pelatihan Anda akan melihat sekumpulan kueri yang kurang beragam.
- Kumpulan evaluasi Anda akan menjadi sulit secara artifisial karena tidak akan tumpang-tindih dengan data pelatihan Anda. Pada kenyataannya, pada waktu penayangan, Anda akan melihat beberapa traffic aktif dalam data pelatihan, sehingga evaluasi Anda harus mencerminkannya.
Sebagai gantinya, Anda dapat melakukan hashing pada kueri + tanggal kueri, yang akan menghasilkan hashing yang berbeda untuk setiap hari.
