1. Pengantar
Dalam codelab ini, kita akan membuat model prediksi skor film dengan model kustom BigQuery ML hanya menggunakan SQL dan men-deploy model di VertexAI. Anda akan mempelajari:
- Cara membuat set data BigQuery menggunakan Cloud Shell dan memuat data dari file
- Cara menggunakan BigQuery ML untuk supervised learning guna membuat model Prediksi Regresi Multi-kelas untuk prediksi Skor Film tanpa banyak coding, tetapi hanya menggunakan kueri SQL
Yang akan Anda bangun
Anda akan membuat
- Set Data BigQuery untuk menampung tabel dan komponen model
- Model BigQuery ML untuk memprediksi rating film menggunakan kueri SQL
- Men-deploy model di Vertex AI Model Registry
Persyaratan
2. Buat project Anda
- Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
- Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
- Buka BigQuery untuk mengaktifkan API. Anda juga dapat membuka UI web BigQuery secara langsung dengan memasukkan URL berikut di browser: https://console.cloud.google.com/bigquery
3. Mengaktifkan Cloud Shell
- Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan bq: Dari Cloud Console, klik Activate Cloud Shell di pojok kanan atas:
- Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda
gcloud config list project
- Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya:
gcloud config set project <PROJECT_ID>
Baca dokumentasi untuk mempelajari perintah gcloud dan penggunaannya.
4. Menyiapkan data pelatihan
Ini adalah langkah utama dalam semua project, produk, dan aplikasi terkait data yang memerlukan banyak keahlian domain selain teknologi untuk menyiapkan set data yang optimal dan menyiapkannya untuk project ML Anda. Untuk tujuan codelab ini, kita akan menggunakan file data yang sudah disiapkan.
5. Membuat dan memuat set data
Set data BigQuery adalah kumpulan tabel. Semua tabel dalam set data disimpan di lokasi data yang sama. Anda juga dapat melampirkan kontrol akses kustom untuk membatasi akses ke set data dan tabelnya.
- Di Cloud Shell, gunakan perintah bq mk untuk membuat set data bernama "movies".
bq mk --location=<<LOCATION>> movies
Tetapkan location ke region (asia-south1).
- Pastikan Anda sudah menyiapkan file data (.csv). Jalankan perintah berikut di Cloud Shell untuk meng-clone repositori dan membuka project:
git clone <<repository link>>
cd movie-score
- Gunakan perintah bq load untuk memuat file CSV ke tabel BigQuery (perhatikan bahwa Anda juga dapat langsung mengupload dari UI BigQuery):
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
Deskripsi Opsi: –source_format=CSV - menggunakan format data CSV saat mengurai file data. –skip_leading_rows=1 - melewati baris pertama dalam file CSV karena merupakan baris header. Movies.movies - argumen posisi pertama—menentukan tabel tempat data akan dimuat. ./movies.csv—argumen posisi kedua—menentukan file yang akan dimuat. Selain file lokal, perintah pemuatan bq dapat memuat file dari Cloud Storage dengan URI gs://my_bucket/path/to/file. Skema, yang dapat ditentukan dalam file skema JSON atau sebagai daftar yang dipisahkan koma (saya menggunakan daftar yang dipisahkan koma). Hore! Data csv kita sekarang dimuat di tabel movies.movies.
- Buat kueri dengan salah satu dari 3 cara berikut:
Kita dapat berinteraksi dengan BigQuery dengan tiga cara, kita akan mencoba dua di antaranya: a. UI web BigQuery b. Perintah bq c. API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
Saya telah menggunakan Ruang Kerja SQL Web BigQuery untuk menjalankan kueri. Ruang Kerja SQL terlihat seperti ini:
Menggunakan perintah bq:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
6. Memprediksi rating film dalam skala 1 hingga 10
BigQuery ML mendukung supervised learning dengan jenis model regresi logistik. Anda dapat menggunakan jenis model regresi logistik biner untuk memprediksi apakah suatu nilai termasuk dalam salah satu dari dua kategori berikut; atau, Anda dapat menggunakan jenis model regresi multi-class untuk memprediksi apakah suatu nilai termasuk dalam salah satu dari beberapa kategori. Ini dikenal sebagai masalah klasifikasi, karena adanya percobaan klasifikasi data ke dalam dua kategori atau lebih.
Catatan singkat tentang pilihan model: Ini adalah pilihan model eksperimental yang dipilih di sini, berdasarkan evaluasi hasil yang saya jalankan di beberapa model pada awalnya dan akhirnya melanjutkan dengan LOGISTIC REG agar tetap sederhana dan mendapatkan hasil yang lebih mendekati rating film sebenarnya dari beberapa database. Perhatikan bahwa ini hanya boleh dianggap sebagai contoh untuk menerapkan model dan BUKAN model yang direkomendasikan untuk kasus penggunaan ini. Salah satu cara lain untuk menerapkannya adalah dengan memprediksi hasil film sebagai BAIK / BURUK menggunakan model Regresi Logistik ini, bukan memprediksi skor.
Memilih data pelatihan
Kita telah membagi data film (dalam csv) menjadi 3 kategori dalam tabel menggunakan kolom "data_cat" yang memiliki salah satu dari 3 nilai - TRAIN, TEST, dan PREDICT. Memisahkan set data untuk tujuan pengujian dan pelatihan adalah aspek penting dari model. Jika Anda memerlukan informasi selengkapnya tentang cara memahami pemisahan set data, lihat dokumentasi.
Membuat model regresi logistik
Kita dapat menggunakan pernyataan CREATE MODEL dengan opsi 'LOGISTIC_REG' untuk membuat dan melatih model regresi logistik.
Jalankan kueri di bawah di Ruang Kerja SQL UI Web BigQuery:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
Detail Kueri:
- Pernyataan CREATE MODEL melatih model menggunakan data pelatihan dalam pernyataan SELECT
- Klausa OPTIONS menentukan jenis model dan opsi pelatihan. Di sini, opsi LOGISTIC_REG menentukan jenis model regresi logistik. Anda tidak perlu menentukan model regresi logistik biner versus model regresi logistik multi-class: BigQuery ML dapat menentukan model mana yang akan dilatih berdasarkan jumlah nilai unik dalam kolom label
- data_split_method='NO_SPLIT' memaksa BQML untuk melatih data sesuai kondisi kueri (data_cat = 'TRAIN'), perhatikan juga bahwa sebaiknya gunakan 'AUTO_SPLIT' dalam opsi ini untuk memungkinkan framework (atau layanan dalam hal ini) melakukan randomisasi partisi pemisahan pelatihan/pengujian
- Opsi input_label_cols menentukan kolom mana dalam pernyataan SELECT yang akan digunakan sebagai kolom label. Di sini, kolom labelnya adalah skor, sehingga model akan mempelajari mana dari 10 nilai skor yang paling mungkin berdasarkan nilai lain yang ada di setiap baris
- Opsi 'auto_class_weights=TRUE' menyeimbangkan label class dalam data pelatihan. Secara default, data pelatihan tidak diberi bobot. Jika label dalam data pelatihan tidak seimbang, model dapat belajar untuk lebih banyak memprediksi class label yang paling populer
- Pernyataan SELECT membuat kueri tabel yang kita muat dengan data csv. Klausa WHERE memfilter baris dalam tabel input sehingga hanya set data TRAIN yang dipilih pada langkah ini
Setelah dibuat, tampilan di bawah akan muncul di bagian SCHEMA di Ruang Kerja SQL BigQuery:
Label
Fitur
Mengevaluasi model regresi logistik
Setelah membuat model, evaluasi performa model menggunakan fungsi ML.EVALUATE. Fungsi ML.EVALUATE mengevaluasi nilai yang diprediksi berdasarkan data aktual. Kueri untuk mengevaluasi model adalah sebagai berikut:
SELECT
*
FROM
ML.EVALUATE (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘TEST'
)
)
Fungsi ML.EVALUATE menggunakan model yang dilatih di langkah sebelumnya dan data evaluasi yang ditampilkan oleh subkueri SELECT. Fungsi ini menampilkan satu baris statistik tentang model.
Karena Anda melakukan regresi logistik, hasilnya mencakup metrik yang Anda lihat pada screenshot di atas - presisi, recall, akurasi, skor f1, log_loss, roc_auc yang sangat penting dalam mengevaluasi performa model. Anda juga dapat memanggil ML.EVALUATE tanpa memberikan data input. ML.EVALUATE mengambil metrik evaluasi yang diperoleh selama pelatihan, yang menggunakan set data evaluasi yang dicadangkan secara otomatis.
Sekilas tentang metrik utama:
Presisi - Berapa proporsi identifikasi positif yang benar? Presisi = Positif Benar / (Positif Benar + Positif Palsu) Recall - Berapa proporsi positif yang sebenarnya diidentifikasi dengan benar? Recall = Positif Benar / (Positif Benar + Negatif Palsu) Akurasi - Metrik untuk mengevaluasi model klasifikasi, yaitu fraksi prediksi yang benar-benar benar dari model kita Akurasi = Jumlah prediksi yang benar / Jumlah total prediksi
Memprediksi rating film menggunakan ML.PREDICT
Kueri berikut memprediksi skor setiap film di bagian PREDICT set data.
SELECT
*
FROM
ML.PREDICT (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘PREDICT'
)
)
Berikut adalah cuplikan hasilnya:
Hasil model menunjukkan PREDIKSI SKOR film dalam skala 1 hingga 10 (klasifikasi). Anda mungkin bertanya-tanya mengapa ada beberapa baris prediksi untuk setiap film. Hal ini karena model telah menampilkan kemungkinan label yang diprediksi dan probabilitas kemunculan setiap label dalam urutan menurun.
Menganalisis hasil prediksi dan model
Selain itu, Anda dapat melakukan dua langkah analisis yang bagus sebagai bagian dari hasil prediksi:
- Untuk memahami alasan model Anda menghasilkan hasil prediksi ini, Anda dapat menggunakan fungsi ML.EXPLAIN_PREDICT
- Untuk mengetahui fitur mana yang paling penting guna menentukan kelompok pendapatan secara umum, Anda dapat menggunakan fungsi ML.GLOBAL_EXPLAIN
Anda dapat membaca langkah-langkah ini secara mendetail di dokumentasi.
7. Memprediksi rating film menggunakan BigQuery AutoML
AutoML sangat cocok jika Anda ingin layanan BigQuery membuat model untuk Anda dan bersantai sampai hasil model Anda dihasilkan. Kemampuan AUTOML tersedia langsung di BQML (model_type=AUTOML_CLASSIFIER atau AUTOML_REGRESSOR) dan jauh lebih mudah dipanggil jika data sudah ada di BigQuery.
CREATE OR REPLACE MODEL movies.auto_movies
OPTIONS(model_type='AUTOML_CLASSIFIER',
input_label_cols=['score'],
budget_hours=1.0)
AS
SELECT
* EXCEPT(id, data_cat)
FROM
movies.movies_score;
Setelah model dibuat, Anda dapat melakukan langkah-langkah untuk EVALUATE, PREDICT, dan EXPLAIN_PREDICT seperti yang kita bahas dalam model BQML kustom. Baca selengkapnya tentang BigQuery AutoML di dokumentasi.
8. Men-deploy Model BQML ke Vertex AI Model Registry dengan sekali klik
Kini Anda dapat melihat semua model ML dalam Vertex AI Model Registry, sehingga memudahkan organisasi Anda mengelola dan men-deploy model. Hal ini mencakup model yang dibuat dengan BigQuery ML, AutoML, dan model terlatih kustom. Berikut ini cara melakukannya:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
model_registry='vertex_ai',
vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
Sertakan opsi model_registry="vertex_ai" dalam kueri CREATE MODEL sehingga BigQuery ML dapat memilih model yang ingin didaftarkan secara eksplisit ke Vertex AI Model Registry. Anda dapat membaca selengkapnya di blog ini.
9. Ringkasan
Dalam waktu kurang dari 30 menit, kita telah:
- Menyiapkan BigQuery sebagai database untuk project analisis
- Membuat model prediksi kustom hanya menggunakan SQL data BigQuery dan tidak ada coding lainnya
- Membuat model BQ Auto ML hanya menggunakan kueri SQL
- Men-deploy model BQML ke Vertex AI Model Registry
10. Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam postingan ini, ikuti langkah-langkah berikut:
- Di konsol Google Cloud, buka halaman Manage resources
- Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project
11. Selamat
Selamat! Anda telah berhasil membuat Model Prediksi Skor Film dengan BQML kustom dan AutoML serta men-deploy model di Vertex AI Model Registry dan semua ini hanya menggunakan SQL.