Sistem ML produksi: Memantau pipeline

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:

  1. Pahami rentang dan distribusi fitur Anda. Untuk fitur kategoris, pahami set kemungkinan nilai.

  2. 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.
  3. 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.

Masalah apa yang mungkin Anda temui?
Klik di sini untuk melihat jawabannya

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.

Mengapa model yang unggul dalam set pengujian ini gagal total di dunia nyata?
Klik di sini untuk melihat jawabannya

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:

  • Membuat label menggunakan pemberi rating manusia.

  • 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.

Gambar 7. Visualisasi animasi yang menunjukkan cara hashing hanya pada
            kueri menyebabkan data masuk ke bucket yang sama setiap hari, tetapi hashing
            pada kueri ditambah waktu kueri menyebabkan data masuk ke bucket yang berbeda
            setiap hari. Tiga bucket tersebut adalah Pelatihan, Evaluasi, dan
            Diabaikan.
Gambar 7. Hashing pada kueri versus hashing pada kueri + tanggal kueri.