Tutorial ini mengajarkan cara membuat model faktorisasi matriks dan melatihnya pada rating film pelanggan dalam set data movielens1m
. Kemudian, Anda
akan menggunakan model faktorisasi matriks untuk menghasilkan rekomendasi film bagi pengguna.
Menggunakan rating yang diberikan pelanggan untuk melatih model disebut pelatihan dengan masukan eksplisit. Model faktorisasi matriks dilatih menggunakan algoritma Alternating Least Squares saat Anda menggunakan masukan eksplisit sebagai data pelatihan.
Tujuan
Tutorial ini memandu Anda menyelesaikan tugas-tugas berikut:
- Membuat model faktorisasi matriks menggunakan pernyataan
CREATE MODEL
. - Mengevaluasi model menggunakan
fungsi
ML.EVALUATE
. - Membuat rekomendasi film untuk pengguna menggunakan model dengan
fungsi
ML.RECOMMEND
.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat dikenai biaya, termasuk:
- BigQuery
- BigQuery ML
Untuk informasi selengkapnya tentang biaya BigQuery, lihat halaman harga BigQuery.
Untuk informasi selengkapnya tentang biaya BigQuery ML, lihat harga BigQuery ML.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery secara otomatis diaktifkan dalam project baru.
Untuk mengaktifkan BigQuery dalam project yang sudah ada, buka
Enable the BigQuery API.
Izin yang Diperlukan
- Untuk membuat set data, Anda memerlukan izin
IAM
bigquery.datasets.create
. Untuk membuat resource koneksi, Anda memerlukan izin berikut:
bigquery.connections.create
bigquery.connections.get
Untuk membuat model, Anda memerlukan izin berikut:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
Untuk menjalankan inferensi, Anda memerlukan izin berikut:
bigquery.models.getData
bigquery.jobs.create
Untuk mengetahui informasi lebih lanjut tentang peran dan izin IAM di BigQuery, baca Pengantar IAM.
Membuat set data
Buat set data BigQuery untuk menyimpan model ML Anda:
Di konsol Google Cloud, buka halaman BigQuery.
Di panel Explorer, klik nama project Anda.
Klik
View actions > Create dataset.Di halaman Create dataset, lakukan hal berikut:
Untuk Dataset ID, masukkan
bqml_tutorial
.Untuk Location type, pilih Multi-region, lalu pilih US (multiple regions in United States).
Set data publik disimpan di
US
multi-region. Untuk mempermudah, simpan set data Anda di lokasi yang sama.Jangan ubah setelan default yang tersisa, lalu klik Create dataset.
Mengupload data Movielens
Upload data movielens1m
ke BigQuery menggunakan alat command line bq.
Ikuti langkah-langkah berikut untuk mengupload data movielens1m
:
Buka Cloud Shell:
Upload data rating ke tabel
ratings
. Di command line, tempelkan kueri berikut, lalu tekanEnter
:curl -O 'http://files.grouplens.org/datasets/movielens/ml-1m.zip' unzip ml-1m.zip sed 's/::/,/g' ml-1m/ratings.dat > ratings.csv bq load --source_format=CSV bqml_tutorial.ratings ratings.csv \ user_id:INT64,item_id:INT64,rating:FLOAT64,timestamp:TIMESTAMP
Upload data film ke tabel
movies
. Di command line, tempel kueri berikut dan tekanEnter
:sed 's/::/@/g' ml-1m/movies.dat > movie_titles.csv bq load --source_format=CSV --field_delimiter=@ \ bqml_tutorial.movies movie_titles.csv \ movie_id:INT64,movie_title:STRING,genre:STRING
Membuat model
Buat model faktorisasi matriks dan latih dengan data dalam tabel ratings
. Model dilatih untuk memprediksi rating untuk setiap pasangan item pengguna,
berdasarkan rating film yang diberikan pelanggan.
Pernyataan CREATE MODEL
berikut menggunakan kolom ini untuk membuat
rekomendasi:
user_id
—ID pengguna.item_id
—ID film.rating
—Rating eksplisit dari 1 hingga 5 yang diberikan pengguna kepada item.
Ikuti langkah-langkah berikut untuk membuat model:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, tempel kueri berikut dan klik Jalankan:
CREATE OR REPLACE MODEL `bqml_tutorial.mf_explicit` OPTIONS ( MODEL_TYPE = 'matrix_factorization', FEEDBACK_TYPE = 'explicit', USER_COL = 'user_id', ITEM_COL = 'item_id', L2_REG = 9.83, NUM_FACTORS = 34) AS SELECT user_id, item_id, rating FROM `bqml_tutorial.ratings`;
Pemrosesan kueri ini memerlukan waktu sekitar 10 menit, setelah itu model
mf_explicit
akan muncul di panel Explorer. Karena kueri tersebut menggunakan pernyataanCREATE MODEL
untuk membuat model, Anda tidak akan melihat hasil kueri.
Mendapatkan statistik pelatihan
Atau, Anda dapat melihat statistik pelatihan model di konsol Google Cloud.
Algoritma machine learning membuat model dengan membuat banyak iterasi model menggunakan parameter yang berbeda, lalu memilih versi model yang meminimalkan kerugian. Proses ini disebut minimalisasi risiko empiris. Statistik pelatihan model memungkinkan Anda melihat kerugian yang terkait dengan setiap iterasi model.
Ikuti langkah-langkah berikut untuk melihat statistik pelatihan model:
Di Konsol Google Cloud, buka halaman BigQuery.
Di panel Explorer, luaskan project Anda, luaskan set data
bqml_tutorial
, lalu luaskan folder Models.Klik model
mf_explicit
, lalu klik tab PelatihanDi bagian Lihat sebagai, klik Tabel. Hasilnya akan terlihat seperti berikut:
+-----------+--------------------+--------------------+ | Iteration | Training Data Loss | Duration (seconds) | +-----------+--------------------+--------------------+ | 11 | 0.3943 | 42.59 | +-----------+--------------------+--------------------+ | 10 | 0.3979 | 27.37 | +-----------+--------------------+--------------------+ | 9 | 0.4038 | 40.79 | +-----------+--------------------+--------------------+ | ... | ... | ... | +-----------+--------------------+--------------------+
Kolom Training Data Loss menunjukkan metrik kerugian yang dihitung setelah model dilatih. Karena ini adalah model faktorisasi matriks, kolom ini menampilkan rataan kuadrat galat (RKG).
Anda juga dapat menggunakan
fungsi ML.TRAINING_INFO
untuk melihat statistik pelatihan model.
Mengevaluasi model
Evaluasi performa model menggunakan fungsi ML.EVALUATE
.
Fungsi ML.EVALUATE
mengevaluasi prediksi rating film yang ditampilkan oleh
model terhadap rating film pengguna yang sebenarnya dari data pelatihan.
Ikuti langkah-langkah berikut untuk mengevaluasi model:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, tempel kueri berikut dan klik Jalankan:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.mf_explicit`, ( SELECT user_id, item_id, rating FROM `bqml_tutorial.ratings` ));
Hasilnya akan terlihat seperti berikut:
+---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+ | 0.48494444327829156 | 0.39433706592870565 | 0.025437895793637522 | 0.39017059802629905 | 0.6840033369412044 | 0.6840033369412264 | +---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+
Metrik penting dalam hasil evaluasi adalah skor 2. Skor R2 adalah ukuran statistik yang menentukan apakah prediksi regresi linear memperkirakan data sebenarnya. Nilai
0
menunjukkan bahwa model tidak menjelaskan variabilitas data respons di sekitar nilai rata-rata. Nilai1
menunjukkan bahwa model menjelaskan semua variabilitas data respons di sekitar nilai rata-rata.Untuk mengetahui informasi selengkapnya tentang output fungsi
ML.EVALUATE
, lihat Model faktorisasi matriks.
Anda juga dapat memanggil ML.EVALUATE
tanpa memberikan data input. Pelatihan ini akan
menggunakan metrik evaluasi yang dihitung selama pelatihan.
Mendapatkan prediksi rating untuk subkumpulan pasangan item pengguna
Gunakan ML.RECOMMEND
untuk mendapatkan prediksi rating untuk setiap film bagi lima
pengguna.
Ikuti langkah-langkah berikut untuk mendapatkan prediksi rating:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, tempel kueri berikut dan klik Jalankan:
SELECT * FROM ML.RECOMMEND( MODEL `bqml_tutorial.mf_explicit`, ( SELECT user_id FROM `bqml_tutorial.ratings` LIMIT 5 ));
Hasilnya akan terlihat seperti berikut:
+--------------------+---------+---------+ | predicted_rating | user_id | item_id | +--------------------+---------+---------+ | 4.2125303962491873 | 4 | 3169 | +--------------------+---------+---------+ | 4.8068920531981263 | 4 | 3739 | +--------------------+---------+---------+ | 3.8742203494732403 | 4 | 3574 | +--------------------+---------+---------+ | ... | ... | ... | +--------------------+---------+---------+
Membuat rekomendasi
Gunakan prediksi rating untuk membuat lima film teratas yang direkomendasikan untuk setiap pengguna.
Ikuti langkah-langkah berikut untuk membuat rekomendasi:
Di Konsol Google Cloud, buka halaman BigQuery.
Tulis prediksi rating ke tabel. Di editor kueri, tempel kueri berikut, lalu klik Jalankan:
CREATE OR REPLACE TABLE `bqml_tutorial.recommend` AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.mf_explicit`);
Gabungkan prediksi rating dengan informasi film, dan pilih lima hasil teratas per pengguna. Di editor kueri, tempel kueri berikut, lalu klik Run:
SELECT user_id, ARRAY_AGG(STRUCT(movie_title, genre, predicted_rating) ORDER BY predicted_rating DESC LIMIT 5) FROM ( SELECT user_id, item_id, predicted_rating, movie_title, genre FROM `bqml_tutorial.recommend` JOIN `bqml_tutorial.movies` ON item_id = movie_id ) GROUP BY user_id;
Hasilnya akan terlihat seperti berikut:
+---------+-------------------------------------+------------------------+--------------------+ | user_id | f0_movie_title | f0_genre | predicted_rating | +---------+-------------------------------------+------------------------+--------------------+ | 4597 | Song of Freedom (1936) | Drama | 6.8495752907364009 | | | I Went Down (1997) | Action/Comedy/Crime | 6.7203235758772877 | | | Men With Guns (1997) | Action/Drama | 6.399407352232001 | | | Kid, The (1921) | Action | 6.1952890198126731 | | | Hype! (1996) | Documentary | 6.1895766097451475 | +---------+-------------------------------------+------------------------+--------------------+ | 5349 | Fandango (1985) | Comedy | 9.944574012151549 | | | Breakfast of Champions (1999) | Comedy | 9.55661860430112 | | | Funny Bones (1995) | Comedy | 9.52778917835076 | | | Paradise Road (1997) | Drama/War | 9.1643621767929133 | | | Surviving Picasso (1996) | Drama | 8.807353289233772 | +---------+-------------------------------------+------------------------+--------------------+ | ... | ... | ... | ... | +---------+-------------------------------------+------------------------+--------------------+
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus resource satu per satu.
- Anda dapat menghapus project yang dibuat.
- Atau, Anda dapat menyimpan project dan menghapus set data.
Menghapus set data
Jika project Anda dihapus, semua set data dan semua tabel dalam project akan dihapus. Jika ingin menggunakan project tersebut lagi, Anda dapat menghapus set data yang Anda buat dalam tutorial ini:
Jika perlu, buka halaman BigQuery di konsol Google Cloud.
Di navigasi, klik set data bqml_tutorial yang telah Anda buat.
Klik Delete dataset di sisi kanan jendela. Tindakan ini akan menghapus set data, tabel, dan semua data.
Pada dialog Hapus set data, konfirmasi perintah hapus dengan mengetikkan nama set data Anda (
bqml_tutorial
), lalu klik Hapus.
Menghapus project Anda
Untuk menghapus project:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah selanjutnya
- Coba membuat model faktorisasi matriks berdasarkan masukan implisit.
- Untuk ringkasan BigQuery ML, lihat Pengantar BigQuery ML.
- Untuk mempelajari machine learning lebih lanjut, lihat Kursus singkat machine learning.