Prediksi Rating Film dengan BQML menggunakan SQL

1. Pengantar

Dalam codelab ini, kita akan membuat model prediksi skor film dengan model kustom BigQuery ML hanya menggunakan SQL dan men-deploy model tersebut di VertexAI. Anda akan mempelajari:

  1. Cara membuat set data BigQuery menggunakan Cloud Shell dan memuat data dari file
  2. 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 ML BigQuery untuk memprediksi rating film menggunakan kueri SQL
  • Men-deploy model di Vertex AI Model Registry

Persyaratan

  • Browser, seperti Chrome atau Firefox
  • Project Google Cloud yang mengaktifkan penagihan

2. Buat project Anda

  1. Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
  2. Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
  3. 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

  1. Anda akan menggunakan Cloud Shell, yakni lingkungan command line yang berjalan di Google Cloud dan telah dilengkapi dengan bq: Dari Cloud Console, klik Activate Cloud Shell di pojok kanan atas: 6757b2fb50ddcc2d.png
  2. 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
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda
gcloud config list project
  1. 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 di 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.

  1. Di Cloud Shell, gunakan perintah bq mk untuk membuat set data yang disebut "movies".
bq mk --location=<<LOCATION>> movies

Tetapkan location ke suatu wilayah (asia-south1).

  1. 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
  1. Gunakan perintah bq load untuk memuat file CSV Anda ke dalam tabel BigQuery (perhatikan bahwa Anda juga dapat langsung mengunggah 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 menguraikan file data. –skip_lead_rows=1 - lewati baris pertama di file CSV karena ini adalah baris header. Movies.movies - argumen posisi pertama—menentukan tabel mana yang harus memuat data. ./movies.csv—argumen posisi kedua—menentukan file yang akan dimuat. Selain file lokal, perintah pemuatan bq dapat memuat file dari Cloud Storage dengan gs://my_bucket/path/to/file URI. 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.

  1. 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 {i>bq<i} c. API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

Saya telah menggunakan Ruang Kerja BigQuery Web SQL untuk menjalankan kueri. Ruang Kerja SQL akan terlihat seperti ini:

109a0b2c7155e9b3.pngS

Menggunakan perintah bq:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

6. Memprediksi rating film pada 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 masuk ke dalam salah satu dari dua kategori; atau, Anda dapat menggunakan jenis model regresi multi-kelas untuk memprediksi apakah suatu nilai termasuk dalam salah satu dari beberapa kategori. Ini dikenal sebagai masalah klasifikasi, karena mereka mencoba mengklasifikasikan data ke dalam dua atau lebih kategori.

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 menggunakan LOGISTIC REG untuk membuatnya tetap sederhana dan untuk mendapatkan hasil yang lebih dekat dengan rating film sebenarnya dari beberapa database. Perhatikan bahwa ini sebaiknya dianggap hanya sebagai sampel untuk menerapkan model dan BUKAN model yang direkomendasikan untuk kasus penggunaan ini. Salah satu cara lain untuk menerapkan hal ini adalah dengan memprediksi hasil film sebagai BAIK / BURUK menggunakan model Regresi Logistik ini, bukan memprediksi skor.

Memilih data pelatihan Anda

Kami telah membagi data film (dalam csv) menjadi 3 kategori dalam tabel menggunakan {i>field<i} "data_cat" yang memiliki salah satu dari 3 nilai - TRAIN, TEST, dan PREDICT. Memisahkan set data untuk tujuan pengujian dan pelatihan merupakan aspek penting model. Jika Anda memerlukan informasi selengkapnya tentang cara memahami pemisahan set data, baca 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 ini 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:

  1. Pernyataan CREATE MODEL melatih model menggunakan data pelatihan dalam pernyataan SELECT
  2. Klausa OPSI menentukan jenis model dan opsi pelatihan. Di sini, opsi LOGISTIC_REG menentukan jenis model regresi logistik. Tidak perlu menentukan model regresi logistik biner versus model regresi logistik multiclass: BigQuery ML dapat menentukan model mana yang akan dilatih berdasarkan jumlah nilai unik dalam kolom label
  3. data_split_method=‘NO_SPLIT&#39; memaksa BQML untuk melatih data sesuai kondisi kueri (data_cat = ‘TRAIN'), juga perhatikan bahwa lebih baik menggunakan ‘AUTO_SPLIT' dalam opsi ini untuk mengizinkan framework (atau dalam kasus ini layanan) untuk mengacak partisi pemisahan pelatihan/pengujian
  4. Opsi input_label_cols menentukan kolom mana dalam pernyataan SELECT yang akan digunakan sebagai kolom label. Di sini, kolom label adalah skor, sehingga model akan mempelajari mana dari 10 nilai skor yang paling mungkin berdasarkan nilai lain yang ada di setiap baris
  5. Parameter 'auto_class_weights=TRUE' menyeimbangkan label kelas dalam data pelatihan. Secara default, data pelatihan tidak diberi bobot. Jika label dalam data pelatihan tidak seimbang, model dapat belajar memprediksi kelas label yang paling populer dengan lebih cermat
  6. Pernyataan SELECT melakukan kueri pada tabel yang kita muat dengan data CSV. Klausa WHERE menyaring baris-baris dalam tabel input sehingga hanya {i>dataset<i} TRAIN yang dipilih pada langkah ini

Setelah dibuat, kode di bawah ini akan muncul di bagian SCHEMA pada Workspace SQL BigQuery:

Label

93efd0c1a7883690.pngS

Fitur

8c539338df1a9652.pngS

Mengevaluasi model regresi logistik

Setelah membuat model, evaluasi performa model menggunakan fungsi ML.EVALUATE. Fungsi ML.EVALUATE mengevaluasi nilai prediksi terhadap data sebenarnya. 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 mengambil model yang dilatih pada langkah sebelumnya dan data evaluasi yang ditampilkan oleh subkueri SELECT. Fungsi ini menampilkan satu baris statistik tentang model tersebut.

b54b0ebd6514a498.png

Karena Anda melakukan regresi logistik, hasilnya mencakup metrik yang Anda lihat pada screenshot di atas - presisi, perolehan, 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 berasal selama pelatihan, yang menggunakan set data evaluasi yang dicadangkan secara otomatis.

Sekilas tentang metrik utama:

Presisi - Berapa proporsi identifikasi positif yang sebenarnya benar? Presisi = Positif Benar / (Positif Benar + Positif Palsu) Penarikan - Berapa proporsi positif aktual yang diidentifikasi dengan benar? Akurasi = Positif Benar / (Positif Benar + Negatif Palsu) - Metrik untuk mengevaluasi model klasifikasi, yaitu pecahan prediksi yang benar-benar didapat model kita Akurasi = Jumlah prediksi benar / Jumlah total prediksi

Memprediksi rating film menggunakan ML.PREDICT

Kueri berikut memprediksi skor setiap film di bagian PREDICT {i>dataset<i}.

SELECT
  *
FROM
  ML.PREDICT (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘PREDICT'
     )
  )

Di bawah ini adalah cuplikan hasilnya:

1efb91967acc1f0c.pngS

Hasil model menunjukkan SKOR yang diprediksi dari film dalam skala 1 sampai 10 (klasifikasi). Anda pasti bertanya-tanya mengapa ada beberapa baris prediksi terhadap setiap film. Hal itu karena model telah menampilkan kemungkinan label yang diprediksi dan probabilitas kemunculan masing-masing label dalam urutan menurun.

Menganalisis hasil prediksi dan model

Selain itu, Anda dapat melakukan dua langkah analisis yang bagus sebagai bagian dari hasil prediksi:

  1. Untuk memahami alasan model Anda menghasilkan hasil prediksi ini, Anda dapat menggunakan fungsi ML.EXPLAIN_PREDICT
  2. Untuk mengetahui fitur mana yang paling penting untuk menentukan golongan 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 bagus 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 untuk 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 telah kita bahas dalam model BQML kustom. Baca BigQuery AutoML lebih lanjut dalam dokumentasi.

8. Satu Klik untuk Men-deploy Model BQML ke Vertex AI Model Registry

Sekarang Anda dapat melihat semua model ML dalam Vertex AI Model Registry, sehingga memudahkan organisasi Anda untuk mengelola dan men-deploy model. Ini termasuk model yang dibangun dengan BigQuery ML, AutoML, dan model terlatih khusus. 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 model_registry="vertex_ai" di kueri CREATE MODEL sehingga BigQuery ML dapat memilih dan memilih model mana yang secara eksplisit ingin didaftarkan ke Vertex AI Model Registry. Anda dapat membaca info selengkapnya di blog ini.

9. Ringkasan

Dalam waktu kurang dari 30 menit, kami akan mendapatkan:

  1. Menyiapkan BigQuery sebagai database kami untuk project analisis
  2. Membuat model prediksi kustom hanya menggunakan SQL data BigQuery dan tanpa coding lain
  3. Membuat model ML Otomatis BQ dengan hanya menggunakan kueri SQL
  4. Model BQML di-deploy ke Vertex AI Model Registry

10. Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam posting ini, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Manage resources
  2. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project

11. Selamat

Selamat! Anda telah berhasil membuat Model Prediksi Skor Film dengan AutoML dan kustom BQML, serta men-deploy model tersebut di Vertex AI Model Registry dan semua ini hanya menggunakan SQL.