Sistem ML produksi: Memantau pipeline

Selamat! Anda telah men-deploy model unicorn. Model Anda seharusnya berjalan 24x7 tanpa masalah. Untuk memastikan bahwa program tersebut berfungsi, Anda harus memantau pipeline machine learning (ML) Anda.

Menulis skema data untuk memvalidasi data mentah

Untuk memantau data, Anda harus terus memeriksanya terhadap data yang nilai statistik dengan menulis aturan yang harus dipenuhi data. Koleksi ini aturan disebut skema data. Tentukan skema data dengan mengikuti langkah-langkah berikut:

  1. Pahami jangkauan dan distribusi fitur Anda. Untuk kategorik fitur, memahami seperangkat nilai yang mungkin.

  2. Mengenkode pemahaman Anda ke dalam skema data. Berikut ini adalah contoh aturan:

    • Pastikan bahwa rating yang dikirim pengguna selalu dalam rentang 1 hingga 5.
    • Pastikan kata the paling sering muncul (untuk teks bahasa Inggris ).
    • Memeriksa apakah setiap fitur kategori ditetapkan ke nilai dari set tetap dari nilai yang mungkin.
  3. Uji data Anda terhadap skema data. Skema Anda harus menangkap data seperti:

    • Anomali
    • Nilai yang tidak terduga dari variabel kategori
    • Distribusi data yang tidak terduga

Menulis pengujian unit untuk memvalidasi rekayasa fitur

Meskipun data mentah mungkin meneruskan skema data, model Anda tidak akan dilatih dengan data mentah. Sebaliknya, model Anda berlatih dengan data yang telah dirancang dan dirancang. Misalnya, model Anda dilatih dengan fitur numerik yang dinormalisasi dan bukan data numerik mentah. Karena data rekayasa fitur bisa sangat berbeda dari data input mentah, Anda harus memeriksa data rekayasa fitur secara terpisah dari pemeriksaan data input mentah.

Menulis pengujian unit berdasarkan pemahaman Anda tentang data rekayasa fitur. Misalnya, Anda bisa menulis pengujian unit untuk memeriksa kondisi seperti berikut ini:

  • Semua fitur numerik diskalakan, misalnya, antara 0 dan 1.
  • Dienkode one-hot vektor hanya berisi satu angka nol 1 dan N-1.
  • Distribusi data setelah transformasi sesuai dengan ekspektasi. Misalnya, jika Anda telah melakukan normalisasi menggunakan skor Z, rata-rata Skor Z harus 0.
  • Pencilan ditangani, seperti dengan penskalaan atau pemotongan (clipping).

Memeriksa metrik untuk irisan data penting

Keseluruhan yang berhasil terkadang mengaburkan subset yang gagal. Dengan kata lain, {i>SUMIF<i} memiliki daftar sel model dengan metrik keseluruhan yang bagus mungkin masih membuat prediksi yang buruk situasi tertentu. Contoh:

Model {i>unicorn<i} Anda berperforma baik secara keseluruhan, tetapi berperforma buruk saat membuat prediksi untuk gurun Sahara.

Jika Anda adalah jenis insinyur yang puas dengan keseluruhan AUC yang bagus, maka Anda mungkin tidak melihat masalah model di gurun Sahara. Jika membuat prediksi yang baik untuk setiap wilayah sangatlah penting, maka Anda perlu melacak performa untuk setiap wilayah. Subset data, seperti yang sesuai ke gurun Sahara, disebut irisan data.

Mengidentifikasi bagian data yang menarik. Kemudian bandingkan metrik model untuk potongan data ini dengan metrik untuk seluruh {i>dataset<i}. Memeriksa apakah model Anda berperforma baik di semua irisan data membantu menghilangkan bias. Lihat Keadilan: Mengevaluasi Bias untuk informasi selengkapnya.

Menggunakan metrik di dunia nyata

Metrik model tidak selalu mengukur dampak dunia nyata dari model Anda. Misalnya, mengubah hyperparameter dapat meningkatkan ABK model, tetapi apakah perubahan mempengaruhi {i>user experience<i}? Untuk mengukur dampak di dunia nyata, Anda perlu untuk menentukan metrik terpisah. Misalnya, Anda dapat menyurvei pengguna model Anda mengonfirmasi bahwa mereka benar-benar melihat unicorn ketika model memprediksi akan lebih baik.

Memeriksa ketidaksesuaian antara pelatihan dan penayangan

Sifat penayangan pelatihan berarti data input selama pelatihan berbeda dari data input Anda dalam penayangan. Tabel berikut menjelaskan dua jenis kecondongan penting:

Jenis Definisi Contoh Solusi
Kemiringan skema Data input pelatihan dan penayangan tidak sesuai dengan skema yang sama. Format atau distribusi perubahan data penayangan sementara model Anda terus berlatih dengan data lama. Gunakan skema yang sama untuk memvalidasi data pelatihan dan penayangan. Pastikan Anda memeriksa statistik yang tidak diperiksa secara terpisah skema Anda, seperti pecahan nilai yang hilang
Ketidaksesuaian fitur Data yang direkayasa berbeda antara pelatihan dan penayangan. Kode rekayasa fitur berbeda antara pelatihan dan inferensi, menghasilkan data rekayasa yang berbeda. Serupa dengan distorsi skema, terapkan aturan statistik yang sama di seluruh pelatihan dan menyajikan data yang direkayasa. Lacak nomornya fitur yang terdistorsi yang terdeteksi, dan rasio contoh yang condong per fitur.

Penyebab kecondongan penayangan pelatihan dan tidak terlalu jelas. Selalu pertimbangkan data yang tersedia untuk model Anda pada waktu prediksi. Selama pelatihan, hanya gunakan fitur yang akan Anda miliki saat menayangkan iklan.

Latihan: Memeriksa pemahaman Anda

Misalkan Anda memiliki toko {i>online<i} dan ingin memprediksi berapa banyak uang yang akan Anda hasilkan pada hari tertentu. Sasaran ML Anda adalah memprediksi harian menggunakan jumlah pelanggan sebagai fitur.

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

Periksa kebocoran label

Kebocoran label berarti bahwa label kebenaran dasar yang akan Anda mencoba memprediksi telah memasuki fitur pelatihan secara tidak sengaja. {i>Label<i} kebocoran terkadang sangat sulit dideteksi.

Latihan: Memeriksa pemahaman Anda

Misalkan Anda membangun model klasifikasi biner untuk memprediksi apakah seorang pasien rumah sakit baru mengalami kanker. Model Anda menggunakan fitur seperti berikut:

  • Usia pasien
  • Gender pasien
  • Kondisi medis sebelumnya
  • Nama rumah sakit
  • Tanda-tanda vital
  • Hasil tes
  • Keturunan

Labelnya adalah sebagai berikut:

  • Boolean: Apakah pasien menderita kanker?

Anda mempartisi data dengan hati-hati, memastikan set pelatihan Anda berfungsi dengan baik yang diisolasi dari set validasi dan set pengujian Anda. Model menjalankan sangat baik di set validasi dan set pengujian; metrik tersebut fantastis. Sayangnya, model ini berperforma sangat buruk pada pasien baru di dunia nyata.

Mengapa model yang unggul pada 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. Melacak waktu sejak model melatih ulang data baru dan menetapkan batas usia minimum untuk pemberitahuan. Selain memantau usia model saat menyajikan, Anda harus memantau usia model di seluruh pipeline untuk menangkap {i>pipelines<i}.

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 apakah lebih dari setengah output lapisan bukan nol.

Memantau performa model

Prediktor penampilan unicorn Anda lebih populer dari yang diharapkan! Anda mendapatkan banyak permintaan prediksi dan lebih banyak data pelatihan. Anda pikir hal ini sangat bagus sampai Anda menyadari bahwa model Anda menghabiskan lebih banyak memori dan waktu untuk berlatih. Anda memutuskan untuk memantau performa model dengan mengikuti langkah-langkah berikut:

  • Melacak performa model berdasarkan versi kode, model, dan data. Pelacakan tersebut memungkinkan Anda menemukan penyebab penurunan performa.
  • Menguji langkah pelatihan per detik untuk versi model baru versi sebelumnya dan memenuhi batas yang tetap.
  • Tangkap kebocoran memori dengan menetapkan batas penggunaan memori.
  • Pantau waktu respons API dan pantau persentilnya. Meskipun respons API waktu yang mungkin berada di luar kendali Anda, respons yang 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. Tetapi bagaimana jika skenario di dunia nyata, seperti unicorn, perilaku, berubah setelah merekam data validasi Anda? Kemudian, kualitas video Anda model akan menurun. Namun, menguji kualitas dalam penayangan sulit karena data yang sebenarnya tidak selalu diberi label. Jika data penayangan tidak diberi label, pertimbangkan pengujian berikut:

  • Membuat label menggunakan penilai manusia.

  • Selidiki model yang menunjukkan bias statistik yang signifikan dalam prediksi. Lihat Klasifikasi: Prediksi Bias.

  • Lacak metrik dunia nyata untuk model Anda. Misalnya, jika Anda mengklasifikasi spam, bandingkan prediksi Anda dengan spam yang dilaporkan pengguna.

  • Memitigasi potensi perbedaan antara data pelatihan dan inferensi dengan yang menyajikan versi model baru pada sebagian kecil kueri Anda. Saat Anda memvalidasi model penayangan baru, mengalihkan semua kueri ke versi baru secara bertahap.

Ketika menggunakan pengujian ini, ingatlah untuk memantau degradasi tiba-tiba dan lambat pada kualitas prediksi.

Pengacakan

Jadikan pipeline pembuatan data Anda dapat direproduksi. Misalnya Anda ingin menambahkan fitur untuk melihat pengaruhnya terhadap kualitas model. Untuk eksperimen yang adil, {i>dataset<i} Anda harus identik, kecuali untuk fitur baru ini. Oleh karena itu, pastikan pengacakan dalam pembuatan data dapat dilakukan determenistik:

  • Melakukan seed generator angka acak (RNG). Seeding memastikan bahwa RNG menghasilkan nilai yang sama dalam urutan yang sama setiap kali Anda menjalankannya, membuat ulang {i>dataset<i} Anda.
  • Gunakan kunci hash invarian. Hashing adalah cara umum untuk memisahkan atau sampel data. Anda dapat melakukan {i>hash <i}setiap contoh, dan menggunakan bilangan bulat yang dihasilkan untuk memutuskan di bagian mana untuk menempatkan contoh. Input ke fungsi {i>hash<i} Anda seharusnya tidak berubah setiap kali Anda menjalankan program pembuatan data. Jangan gunakan waktu saat ini atau angka acak dalam {i>hash<i} Anda, misalnya, jika Anda ingin membuat ulang {i>hash<i} sesuai permintaan.

Pendekatan sebelumnya berlaku untuk pengambilan sampel dan memisahkan data Anda.

Pertimbangan untuk {i>hashing<i}

Bayangkan lagi Anda mengumpulkan kueri Penelusuran dan menggunakan {i>hashing<i} untuk menyertakan atau mengecualikan kueri. Jika kunci {i>hash <i}hanya menggunakan kueri, lalu, dalam beberapa hari, Anda akan selalu menyertakan kueri tersebut atau selalu mengecualikannya. Selalu sertakan atau selalu kecualikan kueri tidak baik karena:

  • Set pelatihan Anda akan melihat kumpulan kueri yang kurang beragam.
  • Set evaluasi Anda akan sulit diartikan, karena mereka tidak tumpang tindih dengan data pelatihan. Kenyataannya, pada waktu inferensi, Anda akan telah melihat beberapa traffic langsung di data pelatihan Anda, jadi evaluasi, seharusnya mencerminkan hal itu.

Sebagai gantinya, Anda dapat melakukan hashing pada kueri + tanggal, yang akan menghasilkan hashing berbeda setiap harinya.

 

Gambar 7. Visualisasi animasi yang menunjukkan 
bagaimana proses {i>hashing<i} hanya pada
            menyebabkan data masuk ke bucket yang sama setiap hari, tetapi
            kueri ditambah waktu kueri menyebabkan data dapat berbeda
            bucket setiap hari. Tiga kategori tersebut adalah Pelatihan, Evaluasi, dan
            Diabaikan.
Gambar 7. Melakukan hashing pada kueri versus hashing pada waktu kueri + kueri.