Pemrosesan awal data untuk ML: opsi dan rekomendasi

Dokumen ini adalah bagian pertama dari seri dua bagian yang mengeksplorasi topik rekayasa data dan rekayasa fitur untuk pembelajaran mesin (ML), dengan fokus pada tugas pembelajaran yang diawasi. Bagian pertama ini membahas praktik terbaik untuk prapemrosesan data dalam pipeline ML di Google Cloud. Dokumen ini berfokus pada penggunaan TensorFlow dan pustaka TensorFlow Transform ( tf.Transform ) open source untuk menyiapkan data, melatih model, dan menyajikan model untuk prediksi. Dokumen ini menyoroti tantangan prapemrosesan data untuk ML, serta menjelaskan opsi dan skenario untuk melakukan transformasi data di Google Cloud secara efektif.

Dokumen ini mengasumsikan bahwa Anda sudah familiar dengan BigQuery , Dataflow , Vertex AI , dan TensorFlow Keras API.

Dokumen kedua, Pemrosesan awal data untuk ML dengan Google Cloud , memberikan tutorial langkah demi langkah tentang cara mengimplementasikan pipeline tf.Transform .

Perkenalan

ML membantu Anda secara otomatis menemukan pola yang kompleks dan berpotensi berguna dalam data. Pola-pola ini diringkas dalam model ML yang kemudian dapat digunakan pada titik data baru—sebuah proses yang disebut membuat prediksi atau melakukan inferensi .

Membangun model ML adalah proses multilangkah. Setiap langkah menghadirkan tantangan teknis dan konseptual tersendiri. Seri dua bagian ini berfokus pada tugas pembelajaran yang diawasi dan proses pemilihan, transformasi, dan penambahan data sumber untuk menciptakan sinyal prediktif yang kuat terhadap variabel target. Operasi ini menggabungkan pengetahuan domain dengan teknik ilmu data. Operasi adalah inti dari rekayasa fitur .

Ukuran set data pelatihan untuk model ML dunia nyata dapat dengan mudah sama dengan atau lebih besar dari satu terabyte (TB). Oleh karena itu, Anda memerlukan kerangka pemrosesan data berskala besar agar dapat memproses kumpulan data tersebut secara efisien dan terdistribusi. Saat Anda menggunakan model ML untuk membuat prediksi, Anda harus menerapkan transformasi yang sama seperti yang Anda gunakan untuk data pelatihan pada titik data baru. Dengan menerapkan transformasi yang sama, Anda menyajikan kumpulan data langsung ke model ML seperti yang diharapkan oleh model tersebut.

Dokumen ini membahas tantangan-tantangan ini untuk berbagai tingkat perincian operasi rekayasa fitur: agregasi level instance, full-pass, dan time-window. Dokumen ini juga menjelaskan opsi dan skenario untuk melakukan transformasi data untuk ML di Google Cloud.

Dokumen ini juga memberikan ringkasan TensorFlow Transform ( tf.Transform ), sebuah pustaka untuk TensorFlow yang memungkinkan Anda menentukan transformasi data level instance dan full-pass melalui pipeline prapemrosesan data. Alur ini dijalankan dengan Apache Beam , dan membuat artefak yang memungkinkan Anda menerapkan transformasi yang sama selama prediksi seperti saat model disajikan.

Memproses data sebelumnya untuk ML

Bagian ini memperkenalkan operasi prapemrosesan data dan tahapan kesiapan data. Bagian ini juga membahas jenis operasi prapemrosesan dan rinciannya.

Rekayasa data dibandingkan dengan rekayasa fitur

Pemrosesan awal data untuk ML melibatkan rekayasa data dan rekayasa fitur. Rekayasa data adalah proses mengubah data mentah menjadi data siap pakai . Rekayasa fitur kemudian menyesuaikan data yang telah disiapkan untuk membuat fitur yang diharapkan oleh model ML. Istilah-istilah ini mempunyai arti sebagai berikut:

Data mentah (atau hanya data )
Data dalam bentuk sumbernya, tanpa persiapan sebelumnya untuk ML. Dalam konteks ini, data mungkin dalam bentuk mentah (dalam data lake) atau dalam bentuk transformasi (dalam gudang data). Data yang diubah yang ada di gudang data mungkin telah dikonversi dari bentuk mentah aslinya untuk digunakan untuk analisis. Namun, dalam konteks ini, data mentah berarti data tersebut belum disiapkan secara khusus untuk tugas ML Anda. Data juga dianggap data mentah jika dikirim dari sistem streaming yang pada akhirnya memanggil model ML untuk melakukan prediksi.
Data yang sudah disiapkan
Kumpulan data dalam formulir siap untuk tugas ML Anda: sumber data telah diurai, digabungkan, dan dimasukkan ke dalam bentuk tabel. Data yang disiapkan dikumpulkan dan diringkas hingga perincian yang tepat—misalnya, setiap baris dalam kumpulan data mewakili pelanggan unik, dan setiap kolom mewakili informasi ringkasan untuk pelanggan, seperti total pembelanjaan dalam enam minggu terakhir. Dalam tabel data yang telah disiapkan, kolom yang tidak relevan telah dihilangkan, dan catatan yang tidak valid telah disaring. Untuk tugas pembelajaran yang diawasi, fitur target hadir.
Fitur yang direkayasa
Kumpulan data dengan fitur yang disesuaikan yang diharapkan oleh model—yaitu, fitur yang dibuat dengan melakukan operasi khusus ML tertentu pada kolom dalam kumpulan data yang telah disiapkan, dan membuat fitur baru untuk model Anda selama pelatihan dan prediksi, seperti yang dijelaskan nanti dalam operasi Pra-pemrosesan . Contoh operasi ini mencakup penskalaan kolom numerik ke nilai antara 0 dan 1, pemotongan nilai, dan fitur kategorikal enkode one-hot .

Diagram berikut, Gambar 1, menunjukkan langkah-langkah yang terlibat dalam menyiapkan data yang telah diproses sebelumnya:

Diagram alur menunjukkan perpindahan data mentah ke data siap pindah ke fitur rekayasa.
Gambar 1. Aliran data dari data mentah ke data siap pakai, fitur rekayasa, hingga pembelajaran mesin.

Dalam praktiknya, data dari sumber yang sama seringkali berada pada tahap kesiapan yang berbeda. Misalnya, bidang dari tabel di gudang data Anda mungkin digunakan secara langsung sebagai fitur rekayasa. Pada saat yang sama, bidang lain dalam tabel yang sama mungkin perlu melalui transformasi sebelum menjadi fitur rekayasa. Demikian pula, operasi rekayasa data dan rekayasa fitur dapat digabungkan dalam langkah prapemrosesan data yang sama.

Operasi pra-pemrosesan

Pemrosesan awal data mencakup beberapa operasi. Setiap operasi dirancang untuk membantu ML membangun model prediktif yang lebih baik. Detail operasi prapemrosesan ini berada di luar cakupan dokumen ini, namun beberapa operasi dijelaskan secara singkat di bagian ini.

Untuk data terstruktur, operasi prapemrosesan data mencakup hal berikut:

  • Pembersihan data: menghapus atau memperbaiki catatan yang memiliki nilai yang rusak atau tidak valid dari data mentah, dan menghapus catatan yang kehilangan banyak kolom.
  • Pemilihan dan partisi instans: memilih titik data dari kumpulan data masukan untuk membuat kumpulan pelatihan, evaluasi (validasi), dan pengujian . Proses ini mencakup teknik pengambilan sampel acak berulang, pengambilan sampel kelas minoritas yang berlebihan, dan partisi bertingkat.
  • Penyetelan fitur: meningkatkan kualitas fitur untuk ML, yang mencakup penskalaan dan normalisasi nilai numerik, memasukkan nilai yang hilang, memotong outlier, dan menyesuaikan nilai yang distribusinya miring.
  • Transformasi fitur: mengonversi fitur numerik menjadi fitur kategorikal (melalui bucketisasi ), dan mengonversi fitur kategorikal menjadi representasi numerik (melalui enkode one-hot, pembelajaran dengan counts , penyematan fitur renggang, dll.). Beberapa model hanya bekerja dengan fitur numerik atau kategorikal, sementara model lainnya dapat menangani fitur tipe campuran. Meskipun model menangani kedua jenis tersebut, model dapat memperoleh manfaat dari representasi berbeda (numerik dan kategorikal) dari fitur yang sama.
  • Ekstraksi fitur: mengurangi jumlah fitur dengan membuat representasi data berdimensi lebih rendah dan lebih kuat menggunakan teknik seperti PCA , ekstraksi penyematan , dan hashing .
  • Pemilihan fitur: memilih subkumpulan fitur masukan untuk melatih model, dan mengabaikan fitur yang tidak relevan atau berlebihan, menggunakan metode filter atau wrapper . Pemilihan fitur juga dapat melibatkan penghapusan fitur jika fitur tersebut kehilangan sejumlah besar nilai.
  • Konstruksi fitur: membuat fitur baru dengan menggunakan teknik umum, seperti perluasan polinomial (dengan menggunakan fungsi matematika univariat) atau persilangan fitur (untuk menangkap interaksi fitur). Fitur juga dapat dibangun dengan menggunakan logika bisnis dari domain kasus penggunaan ML.

Saat Anda bekerja dengan data tidak terstruktur (misalnya, gambar, audio, atau dokumen teks), pembelajaran mendalam menggantikan rekayasa fitur berbasis pengetahuan domain dengan menggabungkannya ke dalam arsitektur model. Lapisan konvolusional adalah praprosesor fitur otomatis. Membangun arsitektur model yang tepat memerlukan pengetahuan empiris tentang data. Selain itu, diperlukan beberapa tahap pra-pemrosesan, seperti berikut:

  • Untuk dokumen teks: stemming dan lemmatization , perhitungan TF-IDF , dan ekstraksi n-gram , pencarian penyematan.
  • Untuk gambar: kliping, pengubahan ukuran, pemotongan, Gaussian blur, dan filter canary.
  • Untuk semua jenis data (termasuk teks dan gambar): pembelajaran transfer , yang memperlakukan semua lapisan kecuali lapisan terakhir dari model yang dilatih sepenuhnya sebagai langkah rekayasa fitur.

Granularitas pra-pemrosesan

Bagian ini membahas rincian jenis transformasi data. Hal ini menunjukkan mengapa perspektif ini sangat penting ketika menyiapkan titik data baru untuk prediksi menggunakan transformasi yang diterapkan pada data pelatihan.

Operasi pra-pemrosesan dan transformasi dapat dikategorikan sebagai berikut, berdasarkan rincian operasi:

  • Transformasi tingkat instans selama pelatihan dan prediksi . Ini adalah transformasi langsung, yang hanya memerlukan nilai dari instance yang sama untuk transformasi. Misalnya, transformasi tingkat instans mungkin mencakup pemotongan nilai fitur ke ambang batas tertentu, memperluas fitur lain secara polinomial, mengalikan dua fitur, atau membandingkan dua fitur untuk membuat tanda Boolean.

    Transformasi ini harus diterapkan secara identik selama pelatihan dan prediksi, karena model akan dilatih berdasarkan fitur yang ditransformasikan, bukan pada nilai masukan mentah. Jika data tidak ditransformasikan secara identik, model akan berperilaku buruk karena disajikan dengan data yang memiliki distribusi nilai yang tidak digunakan untuk melatihnya. Untuk informasi selengkapnya, lihat diskusi tentang kemiringan penyajian pelatihan di bagian Tantangan pra-pemrosesan .

  • Transformasi tingkat penuh selama pelatihan, namun transformasi tingkat instans selama prediksi . Dalam skenario ini, transformasi bersifat stateful, karena transformasi tersebut menggunakan beberapa statistik yang telah dihitung sebelumnya untuk melakukan transformasi. Selama pelatihan, Anda menganalisis seluruh data pelatihan untuk menghitung kuantitas seperti minimum, maksimum, mean, dan varians untuk mentransformasikan data pelatihan, data evaluasi, dan data baru pada waktu prediksi.

    Misalnya, untuk menormalkan fitur numerik untuk pelatihan, Anda menghitung rata-rata (μ) dan deviasi standarnya (σ) di seluruh data pelatihan. Perhitungan ini disebut operasi full-pass (atau analisa ). Saat Anda menyajikan model untuk prediksi, nilai titik data baru dinormalisasi untuk menghindari distorsi penyajian pelatihan. Oleh karena itu, nilai μ dan σ yang dihitung selama pelatihan digunakan untuk menyesuaikan nilai fitur, yang merupakan operasi tingkat instans sederhana berikut:

    $$ value_{scaled} = (value_{raw} - \mu) \div \sigma $$

    Transformasi full-pass meliputi hal berikut:

    • MinMax menskalakan fitur numerik menggunakan min dan max yang dihitung dari dataset pelatihan.
    • Fitur numerik penskalaan standar (normalisasi skor-z) menggunakan μ dan σ yang dihitung pada kumpulan data pelatihan.
    • Mengelompokkan fitur numerik menggunakan kuantil.
    • Menghitung nilai yang hilang menggunakan median (fitur numerik) atau mode (fitur kategorikal).
    • Mengonversi string (nilai nominal) menjadi bilangan bulat (indeks) dengan mengekstraksi semua nilai berbeda (kosa kata) dari fitur kategori masukan.
    • Menghitung kemunculan suatu istilah (nilai fitur) di semua dokumen (instance) untuk menghitung TF-IDF.
    • Menghitung PCA fitur masukan untuk memproyeksikan data ke ruang berdimensi lebih rendah (dengan fitur bergantung linier).

    Anda sebaiknya hanya menggunakan data pelatihan untuk menghitung statistik seperti μ, σ, min , dan max . Jika Anda menambahkan data pengujian dan evaluasi untuk operasi ini, Anda membocorkan informasi dari data evaluasi dan pengujian untuk melatih model. Hal ini akan mempengaruhi reliabilitas hasil tes dan evaluasi. Untuk memastikan bahwa Anda menerapkan transformasi yang konsisten ke semua kumpulan data, Anda menggunakan statistik yang sama yang dihitung dari data pelatihan untuk mentransformasikan data pengujian dan evaluasi.

  • Agregasi sejarah selama pelatihan dan prediksi . Hal ini melibatkan pembuatan agregasi, derivasi, dan tanda bisnis sebagai sinyal masukan untuk tugas prediksi—misalnya, membuat metrik keterkinian, frekuensi, dan moneter (RFM) bagi pelanggan untuk membangun model kecenderungan. Jenis fitur ini dapat dihitung sebelumnya dan disimpan di penyimpanan fitur untuk digunakan selama pelatihan model, penilaian batch, dan penyajian prediksi online. Anda juga dapat melakukan rekayasa fitur tambahan (misalnya, transformasi dan penyesuaian) pada agregasi ini sebelum pelatihan dan prediksi.

  • Agregasi historis selama pelatihan, namun agregasi real-time selama prediksi . Pendekatan ini melibatkan pembuatan fitur dengan merangkum nilai real-time dari waktu ke waktu. Dalam pendekatan ini, instance yang akan dikumpulkan ditentukan melalui klausa jendela temporal. Misalnya, Anda dapat menggunakan pendekatan ini jika ingin melatih model yang memperkirakan waktu perjalanan taksi berdasarkan metrik lalu lintas untuk rute tersebut dalam 5 menit terakhir, dalam 10 menit terakhir, dalam 30 menit terakhir, dan pada waktu lain. interval. Anda juga dapat menggunakan pendekatan ini untuk memprediksi kegagalan bagian mesin berdasarkan rata-rata pergerakan nilai suhu dan getaran yang dihitung selama 3 menit terakhir. Meskipun agregasi ini dapat disiapkan secara offline untuk pelatihan, agregasi ini dihitung secara real-time dari aliran data selama penayangan.

    Lebih tepatnya, saat Anda menyiapkan data pelatihan, jika nilai agregat tidak ada dalam data mentah, nilai tersebut dibuat selama fase rekayasa data. Data mentah biasanya disimpan dalam database dengan format (entity, timestamp, value) . Pada contoh sebelumnya, entity adalah pengidentifikasi segmen rute untuk rute taksi dan pengidentifikasi bagian mesin untuk kegagalan mesin. Anda dapat menggunakan operasi windowing untuk menghitung (entity, time_index, aggregated_value_over_time_window) dan menggunakan fitur agregasi sebagai masukan untuk pelatihan model Anda.

    Saat model untuk prediksi real-time (online) disajikan, model mengharapkan fitur yang berasal dari nilai agregat sebagai masukan. Oleh karena itu, Anda dapat menggunakan teknologi pemrosesan aliran seperti Apache Beam untuk menghitung agregasi dari titik data real-time yang dialirkan ke sistem Anda. Teknologi pemrosesan aliran mengumpulkan data waktu nyata berdasarkan jangka waktu saat titik data baru tiba. Anda juga dapat melakukan rekayasa fitur tambahan (misalnya, transformasi dan penyesuaian) pada agregasi ini sebelum pelatihan dan prediksi.

Saluran ML di Google Cloud

Bagian ini membahas komponen inti dari pipeline end-to-end yang umum untuk melatih dan menyajikan model TensorFlow ML di Google Cloud menggunakan layanan terkelola. Bab ini juga membahas di mana Anda dapat menerapkan berbagai kategori operasi prapemrosesan data, dan tantangan umum yang mungkin Anda hadapi saat menerapkan transformasi tersebut. Bagian Cara kerja tf.Transform menunjukkan bagaimana pustaka Transformasi TensorFlow membantu mengatasi tantangan ini.

Arsitektur tingkat tinggi

Diagram berikut, gambar 2, menunjukkan arsitektur tingkat tinggi dari pipeline ML pada umumnya untuk melatih dan menyajikan model TensorFlow. Label A, B, dan C dalam diagram mengacu pada tempat berbeda di pipeline tempat prapemrosesan data dapat dilakukan. Detail tentang langkah-langkah ini disediakan di bagian berikut.

Diagram arsitektur menunjukkan tahapan pemrosesan data.
Gambar 2. Arsitektur tingkat tinggi untuk pelatihan dan penyajian ML di Google Cloud.

Jalur pipa terdiri dari langkah-langkah berikut:

  1. Setelah data mentah diimpor, data tabular disimpan di BigQuery, dan data lain seperti gambar, audio, dan video, disimpan di Cloud Storage. Bagian kedua dari seri ini menggunakan data tabel yang disimpan di BigQuery sebagai contoh.
  2. Rekayasa data (persiapan) dan rekayasa fitur dijalankan dalam skala besar menggunakan Dataflow. Eksekusi ini menghasilkan set pelatihan, evaluasi, dan pengujian yang siap ML yang disimpan di Cloud Storage. Idealnya, kumpulan data ini disimpan sebagai file TFRecord , yang merupakan format yang dioptimalkan untuk komputasi TensorFlow.
  3. Paket pelatih model TensorFlow dikirimkan ke Pelatihan Vertex AI, yang menggunakan data yang telah diproses sebelumnya dari langkah sebelumnya untuk melatih model. Output dari langkah ini adalah TensorFlow SavedModel terlatih yang diekspor ke Cloud Storage.
  4. Model TensorFlow yang dilatih diterapkan ke Vertex AI Prediction sebagai layanan yang memiliki REST API sehingga dapat digunakan untuk prediksi online. Model yang sama juga dapat digunakan untuk pekerjaan prediksi batch.
  5. Setelah model diterapkan sebagai REST API, aplikasi klien dan sistem internal dapat memanggil API dengan mengirimkan permintaan dengan beberapa titik data, dan menerima respons dari model dengan prediksi.
  6. Untuk mengatur dan mengotomatisasi alur ini, Anda dapat menggunakan Vertex AI Pipelines sebagai penjadwal untuk menjalankan langkah-langkah persiapan data, pelatihan model, dan penerapan model.

Anda juga dapat menggunakan Vertex AI Feature Store untuk menyimpan fitur masukan untuk membuat prediksi. Misalnya, Anda dapat secara berkala membuat fitur rekayasa dari data mentah terbaru dan menyimpannya di Vertex AI Feature Store. Aplikasi klien mengambil fitur masukan yang diperlukan dari Vertex AI Feature Store dan mengirimkannya ke model untuk menerima prediksi.

Dimana melakukan preprocessing

Pada gambar 2, label A, B, dan C menunjukkan bahwa operasi prapemrosesan data dapat dilakukan di BigQuery, Dataflow, atau TensorFlow. Bagian berikut menjelaskan cara kerja masing-masing opsi ini.

Opsi A: BigQuery

Biasanya, logika diimplementasikan di BigQuery untuk operasi berikut:

  • Sampling: memilih subset dari data secara acak.
  • Pemfilteran: menghapus contoh yang tidak relevan atau tidak valid.
  • Partisi: memisahkan data untuk menghasilkan set pelatihan, evaluasi, dan pengujian.

Skrip BigQuery SQL dapat digunakan sebagai kueri sumber untuk pipeline prapemrosesan Dataflow, yang merupakan langkah pemrosesan data pada gambar 2. Misalnya, jika sistem digunakan di Kanada, dan gudang data memiliki transaksi dari seluruh dunia, pemfilteran akan dilakukan. mendapatkan data pelatihan khusus Kanada paling baik dilakukan di BigQuery. Rekayasa fitur di BigQuery sederhana dan skalabel, serta mendukung penerapan transformasi fitur agregasi historis dan tingkat instance.

Namun, kami menyarankan Anda menggunakan BigQuery untuk rekayasa fitur hanya jika Anda menggunakan model untuk prediksi batch (penilaian), atau jika fitur telah dihitung sebelumnya di BigQuery, namun disimpan di Vertex AI Feature Store untuk digunakan selama prediksi online. Jika Anda berencana menerapkan model untuk prediksi online, dan jika Anda tidak memiliki fitur rekayasa di penyimpanan fitur online, Anda harus mereplikasi operasi prapemrosesan SQL untuk mengubah titik data mentah yang dihasilkan sistem lain. Dengan kata lain, Anda perlu mengimplementasikan logika tersebut dua kali: satu kali di SQL untuk melakukan praproses data pelatihan di BigQuery, dan kedua kali dalam logika aplikasi yang menggunakan model untuk melakukan praproses titik data online untuk prediksi.

Misalnya, jika aplikasi klien Anda ditulis dalam Java, Anda perlu mengimplementasikan ulang logika di Java. Hal ini dapat menimbulkan kesalahan karena perbedaan implementasi, seperti yang dijelaskan di bagian kemiringan penyajian pelatihan pada tantangan Pra-pemrosesan di bagian selanjutnya dalam dokumen ini. Ini juga merupakan biaya tambahan untuk mempertahankan dua implementasi yang berbeda. Setiap kali Anda mengubah logika dalam SQL untuk melakukan praproses data pelatihan, Anda perlu mengubah implementasi Java sesuai dengan praproses data pada waktu penyajian.

Jika Anda menggunakan model hanya untuk prediksi batch (misalnya, menggunakan prediksi batch Vertex AI ), dan jika data untuk penilaian bersumber dari BigQuery, Anda dapat menerapkan operasi prapemrosesan ini sebagai bagian dari skrip BigQuery SQL. Dalam hal ini, Anda dapat menggunakan skrip SQL prapemrosesan yang sama untuk menyiapkan data pelatihan dan penilaian.

Transformasi stateful tingkat penuh tidak cocok untuk diterapkan di BigQuery. Jika Anda menggunakan BigQuery untuk transformasi menyeluruh, Anda memerlukan tabel tambahan untuk menyimpan kuantitas yang diperlukan oleh transformasi stateful, seperti rata-rata dan varians untuk menskalakan fitur numerik. Selain itu, penerapan transformasi menyeluruh menggunakan SQL di BigQuery menciptakan peningkatan kompleksitas dalam skrip SQL, dan menciptakan ketergantungan yang rumit antara pelatihan dan penilaian skrip SQL.

Opsi B: Aliran Data

Seperti yang ditunjukkan dalam gambar 2, Anda dapat mengimplementasikan operasi prapemrosesan yang mahal secara komputasi di Apache Beam, dan menjalankannya dalam skala besar menggunakan Dataflow. Dataflow adalah layanan penskalaan otomatis yang terkelola sepenuhnya untuk pemrosesan data batch dan streaming. Saat menggunakan Dataflow, Anda juga dapat menggunakan pustaka khusus eksternal untuk pemrosesan data, tidak seperti BigQuery.

Dataflow dapat melakukan transformasi tingkat instans, serta transformasi fitur agregasi historis dan real-time. Khususnya, jika model ML Anda mengharapkan fitur masukan seperti total_number_of_clicks_last_90sec , fungsi jendela Apache Beam dapat menghitung fitur ini berdasarkan agregasi nilai jendela waktu dari data peristiwa (streaming) waktu nyata (misalnya, peristiwa klik). Dalam pembahasan sebelumnya tentang granularitas transformasi , hal ini disebut sebagai "Agregasi historis selama pelatihan, namun agregasi real-time selama prediksi."

Diagram berikut, gambar 3, menunjukkan peran Dataflow dalam memproses data aliran untuk prediksi hampir real-time.

Arsitektur untuk menggunakan data aliran untuk prediksi.
Gambar 3. Arsitektur tingkat tinggi menggunakan aliran data untuk prediksi di Dataflow.

Seperti yang ditunjukkan dalam gambar 3, selama pemrosesan, peristiwa yang disebut titik data diserap ke dalam Pub/Sub . Dataflow menggunakan titik data ini, menghitung fitur berdasarkan agregat dari waktu ke waktu, lalu memanggil API model ML yang diterapkan untuk prediksi. Prediksi kemudian dikirim ke antrean Pub/Sub keluar. Dari Pub/Sub, prediksi dapat digunakan oleh sistem hilir seperti pemantauan atau kontrol, atau prediksi dapat dikirim kembali (misalnya, sebagai notifikasi) ke klien asli yang meminta. Prediksi juga dapat disimpan di penyimpanan data berlatensi rendah seperti Cloud Bigtable untuk pengambilan waktu nyata. Cloud Bigtable juga dapat digunakan untuk mengumpulkan dan menyimpan agregasi ini secara real-time sehingga dapat dicari saat diperlukan untuk prediksi.

Implementasi Apache Beam yang sama dapat digunakan untuk memproses data pelatihan secara batch yang berasal dari penyimpanan data offline seperti BigQuery dan memproses aliran data real-time untuk menyajikan prediksi online.

Dalam arsitektur umum lainnya, seperti arsitektur yang ditunjukkan pada gambar 2, aplikasi klien secara langsung memanggil API model yang diterapkan untuk prediksi online. Dalam hal ini, jika operasi prapemrosesan diterapkan di Dataflow untuk menyiapkan data pelatihan, operasi tersebut tidak diterapkan pada data prediksi yang langsung masuk ke model. Oleh karena itu, transformasi seperti ini harus diintegrasikan ke dalam model saat digunakan untuk prediksi online.

Aliran data dapat digunakan untuk melakukan transformasi menyeluruh, dengan menghitung statistik yang diperlukan dalam skala besar. Namun, statistik ini perlu disimpan di suatu tempat untuk digunakan selama prediksi guna mengubah titik data prediksi. Dengan menggunakan pustaka TensorFlow Transform ( tf.Transform ), Anda dapat langsung menyematkan statistik ini ke dalam model alih-alih menyimpannya di tempat lain. Pendekatan ini dijelaskan nanti di Cara kerja tf.Transform .

Opsi C: TensorFlow

Seperti yang ditunjukkan pada gambar 2, Anda dapat mengimplementasikan operasi prapemrosesan dan transformasi data dalam model TensorFlow itu sendiri. Seperti yang ditunjukkan pada gambar, prapemrosesan yang Anda terapkan untuk melatih model TensorFlow menjadi bagian integral dari model saat model diekspor dan di-deploy untuk prediksi. Transformasi dalam model TensorFlow dapat dilakukan dengan salah satu cara berikut:

  • Menerapkan semua logika transformasi tingkat instans dalam fungsi input_fn dan fungsi serving_fn . Fungsi input_fn menyiapkan kumpulan data menggunakan tf.data.Dataset API untuk melatih model. Fungsi serving_fn menerima dan menyiapkan data untuk prediksi.
  • Menempatkan kode transformasi langsung di model TensorFlow Anda dengan menggunakan lapisan prapemrosesan Keras atau membuat lapisan khusus .

Kode logika transformasi dalam fungsi serving_fn mendefinisikan antarmuka penyajian SavedModel Anda untuk prediksi online. Jika Anda menerapkan transformasi yang sama yang digunakan untuk menyiapkan data pelatihan dalam kode logika transformasi fungsi serving_fn , hal ini memastikan bahwa transformasi yang sama diterapkan ke titik data prediksi baru saat disajikan.

Namun, karena model TensorFlow memproses setiap titik data secara independen atau dalam batch kecil, Anda tidak dapat menghitung agregasi dari semua titik data. Akibatnya, transformasi menyeluruh tidak dapat diterapkan dalam model TensorFlow Anda.

Tantangan pra-pemrosesan

Berikut ini adalah tantangan utama dalam penerapan pra-pemrosesan data:

  • Kemiringan penyajian pelatihan . Kemiringan penyajian pelatihan mengacu pada perbedaan antara efektivitas (kinerja prediktif) selama pelatihan dan selama penyajian. Kemiringan ini dapat disebabkan oleh perbedaan antara cara Anda menangani data dalam pelatihan dan alur penyajian. Misalnya, jika model Anda dilatih pada fitur yang diubah secara logaritmik, namun model tersebut disajikan dengan fitur mentah selama penayangan, keluaran prediksi mungkin tidak akurat.

    Jika transformasi menjadi bagian dari model itu sendiri, penanganan transformasi tingkat instance dapat dilakukan dengan mudah, seperti yang dijelaskan sebelumnya di Opsi C: TensorFlow . Dalam hal ini, antarmuka penyajian model (fungsi serving_fn ) mengharapkan data mentah, sementara model secara internal mengubah data ini sebelum menghitung keluarannya. Transformasinya sama dengan yang diterapkan pada titik data pelatihan dan prediksi mentah.

  • Transformasi menyeluruh . Anda tidak dapat menerapkan transformasi menyeluruh seperti transformasi penskalaan dan normalisasi dalam model TensorFlow Anda. Dalam transformasi full-pass, beberapa statistik (misalnya, nilai max dan min untuk menskalakan fitur numerik) harus dihitung pada data pelatihan terlebih dahulu, seperti yang dijelaskan dalam Opsi B: Dataflow . Nilai-nilai tersebut kemudian harus disimpan di suatu tempat untuk digunakan selama penyajian model untuk prediksi guna mengubah titik data mentah baru sebagai transformasi tingkat instans, yang menghindari kemiringan penyajian pelatihan. Anda dapat menggunakan pustaka TensorFlow Transform ( tf.Transform ) untuk menyematkan statistik secara langsung ke model TensorFlow Anda. Pendekatan ini dijelaskan nanti di Cara kerja tf.Transform .

  • Mempersiapkan data di awal untuk efisiensi pelatihan yang lebih baik . Menerapkan transformasi tingkat instans sebagai bagian dari model dapat menurunkan efisiensi proses pelatihan. Degradasi ini terjadi karena transformasi yang sama diterapkan berulang kali pada data pelatihan yang sama pada setiap epoch. Bayangkan Anda memiliki data pelatihan mentah dengan 1.000 fitur, dan Anda menerapkan campuran transformasi tingkat instans untuk menghasilkan 10.000 fitur. Jika Anda menerapkan transformasi ini sebagai bagian dari model Anda, dan kemudian memasukkan data pelatihan mentah ke model, 10.000 operasi ini akan diterapkan sebanyak N kali pada setiap instans, dengan N adalah jumlah periode. Selain itu, jika Anda menggunakan akselerator (GPU atau TPU), akselerator tersebut tidak digunakan saat CPU melakukan transformasi tersebut, yang bukan merupakan penggunaan akselerator mahal Anda secara efisien.

    Idealnya, data pelatihan ditransformasikan sebelum pelatihan, menggunakan teknik yang dijelaskan dalam Opsi B: Aliran Data , yang mana 10.000 operasi transformasi diterapkan hanya sekali pada setiap instans pelatihan. Data pelatihan yang diubah kemudian disajikan ke model. Tidak ada transformasi lebih lanjut yang diterapkan, dan akselerator selalu sibuk. Selain itu, penggunaan Dataflow membantu Anda melakukan praproses data dalam jumlah besar dalam skala besar, menggunakan layanan yang terkelola sepenuhnya.

    Mempersiapkan data pelatihan terlebih dahulu dapat meningkatkan efisiensi pelatihan. Namun, menerapkan logika transformasi di luar model (pendekatan yang dijelaskan dalam Opsi A: BigQuery atau Opsi B: Dataflow ) tidak menyelesaikan masalah kemiringan penyajian pelatihan. Kecuali Anda menyimpan fitur rekayasa di penyimpanan fitur untuk digunakan dalam pelatihan dan prediksi, logika transformasi harus diimplementasikan di suatu tempat untuk diterapkan pada titik data baru yang datang untuk prediksi, karena antarmuka model mengharapkan data yang diubah. Pustaka TensorFlow Transform ( tf.Transform ) dapat membantu Anda mengatasi masalah ini, seperti yang dijelaskan di bagian berikut.

Bagaimana tf.Transform bekerja

Pustaka tf.Transform berguna untuk transformasi yang memerlukan penyelesaian penuh. Output dari perpustakaan tf.Transform diekspor sebagai grafik TensorFlow yang mewakili logika transformasi tingkat instance dan statistik yang dihitung dari transformasi full-pass, untuk digunakan dalam pelatihan dan penyajian. Menggunakan grafik yang sama untuk pelatihan dan penyajian dapat mencegah penyimpangan, karena transformasi yang sama diterapkan di kedua tahap. Selain itu, pustaka tf.Transform dapat berjalan dalam skala besar di pipeline pemrosesan batch di Dataflow untuk menyiapkan data pelatihan terlebih dahulu dan meningkatkan efisiensi pelatihan.

Diagram berikut, gambar 4, menunjukkan bagaimana perpustakaan tf.Transform memproses dan mentransformasikan data untuk pelatihan dan prediksi. Prosesnya dijelaskan di bagian berikut.

Diagram menunjukkan aliran dari data mentah melalui tf.Transform ke prediksi.
Gambar 4. Perilaku tf.Transform untuk prapemrosesan dan transformasi data.

Transformasikan data pelatihan dan evaluasi

Anda melakukan praproses data pelatihan mentah menggunakan transformasi yang diterapkan di tf.Transform Apache Beam API, dan menjalankannya dalam skala besar di Dataflow. Pra-pemrosesan terjadi dalam fase berikut:

  • Fase analisis: Selama fase analisis, statistik yang diperlukan (seperti rata-rata, varians, dan kuantil) untuk transformasi stateful dihitung pada data pelatihan dengan operasi full-pass. Fase ini menghasilkan sekumpulan artefak transformasi, termasuk grafik transform_fn . Grafik transform_fn adalah grafik TensorFlow yang memiliki logika transformasi sebagai operasi tingkat instance. Ini mencakup statistik yang dihitung dalam fase analisis sebagai konstanta.
  • Fase transformasi: Selama fase transformasi, grafik transform_fn diterapkan pada data pelatihan mentah, di mana statistik yang dihitung digunakan untuk memproses rekaman data (misalnya, untuk menskalakan kolom numerik) dengan cara tingkat instans.

Pendekatan dua fase seperti ini mengatasi tantangan pra-pemrosesan dalam melakukan transformasi menyeluruh.

Ketika data evaluasi diproses sebelumnya, hanya operasi tingkat instans yang diterapkan, menggunakan logika dalam grafik transform_fn dan statistik dihitung dari fase analisis dalam data pelatihan. Dengan kata lain, Anda tidak menganalisis data evaluasi secara menyeluruh untuk menghitung statistik baru, seperti μ dan σ, untuk menormalkan fitur numerik dalam data evaluasi. Sebagai gantinya, Anda menggunakan statistik yang dihitung dari data pelatihan untuk mengubah data evaluasi dalam cara tingkat instans.

Data pelatihan dan evaluasi yang diubah disiapkan dalam skala besar menggunakan Dataflow, sebelum digunakan untuk melatih model. Proses persiapan data batch ini mengatasi tantangan pra-pemrosesan dalam mempersiapkan data terlebih dahulu guna meningkatkan efisiensi pelatihan. Seperti yang ditunjukkan pada gambar 4, antarmuka internal model mengharapkan fitur yang diubah.

Lampirkan transformasi ke model yang diekspor

Seperti disebutkan, grafik transform_fn yang dihasilkan oleh pipeline tf.Transform disimpan sebagai grafik TensorFlow yang diekspor. Grafik yang diekspor terdiri dari logika transformasi sebagai operasi tingkat instans, dan semua statistik yang dihitung dalam transformasi full-pass sebagai konstanta grafik. Saat model terlatih diekspor untuk ditayangkan, grafik transform_fn dilampirkan ke SavedModel sebagai bagian dari fungsi serving_fn -nya.

Saat menyajikan model untuk prediksi, antarmuka penyajian model mengharapkan titik data dalam format mentah (yaitu, sebelum transformasi apa pun). Namun, antarmuka internal model mengharapkan data dalam format yang diubah.

Grafik transform_fn , yang sekarang menjadi bagian dari model, menerapkan semua logika pra-pemrosesan pada titik data masuk. Ia menggunakan konstanta yang disimpan (seperti μ dan σ untuk menormalkan fitur numerik) dalam operasi tingkat instans selama prediksi. Oleh karena itu, grafik transform_fn mengubah titik data mentah menjadi format yang diubah. Format yang ditransformasikan inilah yang diharapkan oleh antarmuka internal model untuk menghasilkan prediksi, seperti terlihat pada gambar 4.

Mekanisme ini menyelesaikan tantangan prapemrosesan dari kemiringan penyajian pelatihan, karena logika (implementasi) yang sama yang digunakan untuk mentransformasikan data pelatihan dan evaluasi diterapkan untuk mentransformasikan titik data baru selama penyajian prediksi.

Ringkasan opsi pra-pemrosesan

Tabel berikut merangkum opsi prapemrosesan data yang dibahas dalam dokumen ini. Dalam tabel, "T/A" adalah singkatan dari "tidak berlaku".

Opsi pemrosesan awal data Tingkat instans
(transformasi tanpa kewarganegaraan)

Lulus penuh selama pelatihan dan tingkat instans selama penayangan (transformasi stateful)

Agregasi (jendela) real-time selama pelatihan dan penayangan (transformasi streaming)

BigQuery (SQL)

Penilaian batch: Oke — penerapan transformasi yang sama diterapkan pada data selama pelatihan dan penilaian batch.

Prediksi online: Tidak disarankan —Anda dapat memproses data pelatihan, namun hal ini mengakibatkan penyajian pelatihan menjadi miring karena Anda memproses penyajian data menggunakan alat yang berbeda.

Penilaian batch: Tidak disarankan .

Prediksi online: Tidak disarankan .

Meskipun Anda dapat menggunakan statistik yang dihitung menggunakan BigQuery untuk transformasi batch/online tingkat instance, hal ini tidak mudah karena Anda harus mengelola penyimpanan statistik untuk diisi selama pelatihan dan digunakan selama prediksi.

Penskoran batch: N/A —agregat seperti ini dihitung berdasarkan peristiwa waktu nyata.

Prediksi online: Tidak disarankan —Anda dapat memproses data pelatihan, namun hal ini mengakibatkan penyajian pelatihan menjadi miring karena Anda memproses penyajian data menggunakan alat yang berbeda.

Aliran Data (Apache Beam)

Penilaian batch: Oke — penerapan transformasi yang sama diterapkan pada data selama pelatihan dan penilaian batch.

Prediksi online: Oke —jika data pada waktu penayangan berasal dari Pub/Sub untuk digunakan oleh Dataflow. Jika tidak, akan mengakibatkan pelatihan-serving yang miring.

Penilaian batch: Tidak disarankan .

Prediksi online: Tidak disarankan .

Meskipun Anda dapat menggunakan statistik yang dihitung menggunakan Dataflow untuk transformasi batch/online tingkat instans, hal ini tidak mudah karena Anda harus memelihara penyimpanan statistik untuk diisi selama pelatihan dan digunakan selama prediksi.

Penskoran batch: N/A —agregat seperti ini dihitung berdasarkan peristiwa waktu nyata.

Prediksi online: Oke —transformasi Apache Beam yang sama diterapkan pada data selama pelatihan (batch) dan penyajian (stream).

Aliran Data (Apache Beam + TFT)

Penilaian batch: Oke — implementasi transformasi yang sama diterapkan pada data selama pelatihan dan penilaian batch.

Prediksi online: Direkomendasikan —untuk menghindari distorsi penyajian pelatihan dan menyiapkan data pelatihan terlebih dahulu.

Penilaian batch: Direkomendasikan .

Prediksi online: Direkomendasikan .

Kedua penggunaan tersebut direkomendasikan karena logika transformasi dan statistik yang dihitung selama pelatihan disimpan sebagai grafik TensorFlow yang dilampirkan ke model yang diekspor untuk ditayangkan.

Penskoran batch: N/A —agregat seperti ini dihitung berdasarkan peristiwa waktu nyata.

Prediksi online: Oke —transformasi Apache Beam yang sama diterapkan pada data selama pelatihan (batch) dan penyajian (stream).

Aliran Tensor *
( input_fn & serving_fn )

Penilaian batch: Tidak disarankan .

Prediksi online: Tidak disarankan .

Untuk efisiensi pelatihan dalam kedua kasus, sebaiknya persiapkan data pelatihan terlebih dahulu.

Penilaian batch: Tidak Mungkin .

Prediksi online: Tidak Mungkin .

Penskoran batch: N/A —agregat seperti ini dihitung berdasarkan peristiwa waktu nyata.

Prediksi online: Tidak Mungkin .

* Dengan TensorFlow, transformasi seperti penyilangan, penyematan, dan enkode one-hot harus dilakukan secara deklaratif sebagai kolom feature_columns .

Apa berikutnya