Tutorial ini memperkenalkan analis data pada model faktorisasi matriks di BigQuery ML. BigQuery ML memungkinkan pengguna membuat dan menjalankan model machine learning di BigQuery menggunakan kueri SQL. Tujuannya adalah mendemokrasikan machine learning dengan memungkinkan praktisi SQL membuat model menggunakan alat yang ada dan meningkatkan kecepatan pengembangan dengan meniadakan kebutuhan akan pemindahan data.
Dalam tutorial ini, Anda akan mempelajari cara membuat model faktorisasi matriks dari masukan implisit menggunakan tabel contoh GA360_test.ga_sessions_sample
untuk membuat rekomendasi dengan ID pengunjung dan ID konten.
Tabel ga_sessions_sample
berisi informasi tentang bagian data sesi yang dikumpulkan oleh Google Analytics 360 dan dikirim ke BigQuery.
Tujuan
Dalam tutorial ini, Anda akan menggunakan:
- BigQuery ML: Untuk membuat model rekomendasi implisit menggunakan pernyataan
CREATE MODEL
. - Fungsi
ML.EVALUATE
: Untuk mengevaluasi model ML. - Fungsi
ML.WEIGHTS
: Untuk memeriksa bobot faktor laten yang dihasilkan selama pelatihan. - Fungsi
ML.RECOMMEND
: Untuk menghasilkan rekomendasi bagi pengguna.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, 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
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
- BigQuery secara otomatis diaktifkan dalam project baru.
Untuk mengaktifkan BigQuery dalam project yang sudah ada, buka
Aktifkan API BigQuery.
Langkah pertama: Buat set data Anda
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.
Langkah kedua: Muat data Analytics 360 ke BigQuery
Sering kali, rating dalam data Anda tidak akan mencerminkan nilai yang ditetapkan pengguna secara eksplisit. Dalam skenario ini, kita dapat membuat proxy untuk nilai-nilai ini sebagai rating implisit dan menggunakan algoritma yang berbeda untuk menghitung rekomendasi. Dalam contoh ini, kita akan mengambil sampel set data Analytics 360. Contoh ini didasarkan pada artikel berikut.
Berikut adalah kueri yang akan dijalankan untuk membuat set data dengan rating implisit dari
durasi sesi yang dimiliki pengunjung di halaman dari
cloud-training-demos.GA360_test.ga_sessions_sample
. Tujuan dari kueri ini adalah untuk membuat set data dengan tiga kolom yang dapat kita petakan ke kolom pengguna, kolom item, dan kolom rating.
Di konsol Google Cloud, klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di area teks Query editor.
#standardSQL CREATE OR REPLACE TABLE bqml_tutorial.analytics_session_data AS WITH visitor_page_content AS ( SELECT fullVisitorID, ( SELECT MAX( IF (index=10, value, NULL)) FROM UNNEST(hits.customDimensions)) AS latestContentId, (LEAD(hits.time, 1) OVER (PARTITION BY fullVisitorId ORDER BY hits.time ASC) - hits.time) AS session_duration FROM `cloud-training-demos.GA360_test.ga_sessions_sample`, UNNEST(hits) AS hits WHERE # only include hits on pages hits.type = "PAGE" GROUP BY fullVisitorId, latestContentId, hits.time ) # aggregate web stats SELECT fullVisitorID AS visitorId, latestContentId AS contentId, SUM(session_duration) AS session_duration FROM visitor_page_content WHERE latestContentId IS NOT NULL GROUP BY fullVisitorID, latestContentId HAVING session_duration > 0 ORDER BY latestContentId
(Opsional) Untuk menetapkan lokasi pemrosesan, klik More > Query settings. Untuk Processing location, pilih
US
. Langkah ini bersifat opsional karena lokasi pemrosesan terdeteksi secara otomatis berdasarkan lokasi set data.Klik Run.
Setelah kueri selesai berjalan, (
bqml_tutorial.analytics_session_data
) akan muncul di panel navigasi. Karena kueri ini menggunakan pernyataanCREATE TABLE
untuk membuat tabel, Anda tidak akan melihat hasil kueri.Jika Anda melihat tabel yang dihasilkan, tabel itu akan terlihat seperti berikut:
Perhatikan bahwa hasil ini khusus untuk cara data diekspor ke BigQuery. Kueri untuk mengekstrak data Anda sendiri mungkin berbeda.
Langkah ketiga: Buat Model Rekomendasi Implisit Anda
Selanjutnya, Anda membuat model rekomendasi implisit menggunakan tabel Google Analytics yang dimuat pada langkah sebelumnya. Kueri GoogleSQL berikut
digunakan untuk membuat model yang akan digunakan untuk memprediksi rating keyakinan untuk
setiap pasangan visitorId
contentId
. Rating dibuat dengan pemusatan dan penskalaan berdasarkan durasi sesi median, dan memfilter data yang durasi sesinya lebih dari 3,33 kali median sebagai pencilan.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model` OPTIONS (model_type='matrix_factorization', feedback_type='implicit', user_col='visitorId', item_col='contentId', rating_col='rating', l2_reg=30, num_factors=15) AS SELECT visitorId, contentId, 0.3 * (1 + (session_duration - 57937) / 57937) AS rating FROM `bqml_tutorial.analytics_session_data` WHERE 0.3 * (1 + (session_duration - 57937) / 57937) < 1
Detail kueri
Klausa CREATE MODEL
digunakan untuk membuat dan melatih model bernama bqml_tutorial.my_implicit_mf_model
.
Klausa OPTIONS(model_type='matrix_factorization', feedback_type='IMPLICIT',
user_col='visitorId', ...)
menunjukkan bahwa Anda membuat model faktorisasi matriks. Karena feedback_type='IMPLICIT'
ditentukan, model faktorisasi matriks implisit akan dilatih.
Contoh cara membuat model faktorisasi matriks eksplisit dijelaskan dalam Membuat model faktorisasi matriks eksplisit.
Pernyataan SELECT
kueri ini menggunakan kolom berikut untuk membuat
rekomendasi.
visitorId
—ID pengunjung (INT64).contentId
—ID konten (INT64).rating
—Rating implisit dari 0 hingga 1 dihitung untukvisitorId
sertacontentId
-nya masing-masing yang terpusat dan diskalakan (FLOAT64).
Klausa FROM
—bqml_tutorial.analytics_session_data
—
menunjukkan bahwa Anda membuat kueri tabel analytics_session_data
di
set data bqml_tutorial
. {i>Dataset<i} ini ada di project BigQuery Anda jika petunjuk pada langkah dua dan delapan diikuti.
Menjalankan kueri CREATE MODEL
Untuk menjalankan kueri CREATE MODEL
guna membuat dan melatih model Anda:
Di konsol Google Cloud, klik tombol Buat kueri baru.
Masukkan kueri GoogleSQL berikut di area teks Query editor.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.my_implicit_mf_model` OPTIONS (model_type='matrix_factorization', feedback_type='implicit', user_col='visitorId', item_col='contentId', rating_col='rating', l2_reg=30, num_factors=15) AS SELECT visitorId, contentId, 0.3 * (1 + (session_duration - 57937) / 57937) AS rating FROM `bqml_tutorial.analytics_session_data`
Klik Run.
Kueri memerlukan waktu sekitar 12 menit untuk diselesaikan, setelah itu model Anda (
my_implicit_mf_model
) akan muncul di panel navigasi. Karena kueri tersebut menggunakan pernyataanCREATE MODEL
untuk membuat model, Anda tidak akan melihat hasil kueri.
Langkah keempat (opsional): Dapatkan statistik pelatihan
Untuk melihat hasil pelatihan model, Anda dapat menggunakan fungsi ML.TRAINING_INFO
, atau Anda dapat melihat statistik di konsol Google Cloud. Dalam tutorial ini, Anda akan menggunakan konsol Google Cloud.
Algoritma machine learning membuat model dengan memeriksa banyak contoh dan mencoba menemukan model yang meminimalkan kerugian. Proses ini disebut minimalisasi risiko empiris.
Untuk melihat statistik pelatihan model yang dihasilkan saat Anda menjalankan
kueri CREATE MODEL
:
Di panel navigasi konsol Google Cloud, di bagian Resources, luaskan [PROJECT_ID] > bqml_tutorial, lalu klik my_implicit_mf_model.
Klik tab Training, lalu klik Table. Hasilnya akan terlihat seperti berikut:
Kolom Training Data Loss menunjukkan metrik kerugian yang dihitung setelah model dilatih menggunakan set data pelatihan. Karena Anda melakukan faktorisasi matriks, kolom ini adalah rataan kuadrat galat (RKG). Secara default, model faktorisasi matriks tidak akan membagi data, sehingga kolom Evaluation Data Loss tidak akan ditampilkan kecuali jika set data holdout ditentukan karena pembagian data berpotensi menghilangkan semua peringkat untuk pengguna atau item. Akibatnya, model tidak akan memiliki informasi faktor laten tentang pengguna atau item yang tidak ada.
Untuk mengetahui detail selengkapnya tentang fungsi
ML.TRAINING_INFO
, lihat referensi sintaksis ML BigQuery.
Langkah kelima: Evaluasi model Anda
Setelah membuat model, Anda mengevaluasi performa pemberi rekomendasi menggunakan fungsi ML.EVALUATE
. Fungsi ML.EVALUATE
mengevaluasi prediksi rating terhadap rating yang sebenarnya.
Kueri yang digunakan untuk mengevaluasi model adalah sebagai berikut:
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
Detail kueri
Pernyataan SELECT
paling atas mengambil kolom dari model Anda.
Klausa FROM
menggunakan fungsi ML.EVALUATE
terhadap model Anda: bqml_tutorial.my_implicit_mf_model
.
Menjalankan kueri ML.EVALUATE
Untuk menjalankan kueri ML.EVALUATE
yang mengevaluasi model:
Di konsol Google Cloud, klik tombol Buat kueri baru.
Masukkan kueri GoogleSQL berikut di area teks Query editor.
#standardSQL SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
(Opsional) Untuk menetapkan lokasi pemrosesan, klik More > Query settings. Untuk Processing location, pilih
US
. Langkah ini bersifat opsional karena lokasi pemrosesan terdeteksi secara otomatis berdasarkan lokasi set data.Klik Run.
Setelah kueri selesai, klik tab Results di bawah area teks kueri. Hasilnya akan terlihat seperti berikut:
Karena Anda melakukan faktorisasi matriks implisit, hasilnya mencakup kolom berikut:
mean_average_precision
mean_squared_error
normalized_discounted_cumulative_gain
average_rank
mean_average_precision
,normalized_discounted_cumulative_gain
, danaverage_rank
adalah metrik peringkat yang dijelaskan di sini: Metrik faktorisasi matriks implisit
Langkah keenam: Prediksi rating dan buat rekomendasi
Gunakan model Anda untuk memprediksi rating dan membuat rekomendasi
Temukan semua keyakinan rating contentId
untuk sekumpulan visitorIds
ML.RECOMMEND
tidak perlu menggunakan argumen tambahan selain model, tetapi dapat menggunakan tabel opsional. Jika tabel input hanya memiliki satu kolom yang
cocok dengan nama input user
atau kolom item
input, semua
rating item yang diprediksi untuk setiap user
akan dihasilkan, begitu pula sebaliknya. Perlu
diketahui bahwa jika seluruh users
atau seluruh items
berada dalam tabel input, hasil
yang akan ditampilkan adalah tidak meneruskan argumen opsional ke ML.RECOMMEND
.
Berikut adalah contoh kueri untuk mengambil semua prediksi keyakinan rating untuk 5 pengunjung.
#standardSQL SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`, ( SELECT visitorId FROM `bqml_tutorial.analytics_session_data` LIMIT 5))
Detail kueri
Pernyataan SELECT
paling atas mengambil kolom visitorId
, contentId
, dan
predicted_rating_confidence
. Kolom terakhir ini dihasilkan oleh
fungsi ML.RECOMMEND
. Saat Anda menggunakan fungsi ML.RECOMMEND
, nama kolom output untuk model faktorisasi matriks implisit adalah predicted_rating-column-name_confidence
. Untuk model faktorisasi matriks implisit, predicted_rating_confidence
adalah estimasi keyakinan untuk pasangan user
/item
. Tingkat keyakinan ini kira-kira terletak
antara 0 dan 1, dengan keyakinan yang lebih tinggi menunjukkan bahwa user
lebih memilih
item
daripada item
dengan tingkat keyakinan yang lebih rendah.
Fungsi ML.RECOMMEND
digunakan untuk memprediksi rating menggunakan model Anda: bqml_tutorial.my_implicit_mf_model
.
Pernyataan SELECT
bertingkat pada kueri ini hanya memilih kolom visitorId
dari tabel asli yang digunakan untuk pelatihan.
Klausa LIMIT
—LIMIT 5
—akan memfilter 5
visitorId
secara acak untuk dikirim ke ML.RECOMMEND
.
Menemukan rating untuk semua pasangan visitorId contentId
Setelah mengevaluasi model, langkah berikutnya adalah menggunakannya untuk mendapatkan rating keyakinan. Anda menggunakan model Anda untuk memprediksi keyakinan setiap kombinasi item pengguna dalam kueri berikut:
#standardSQL SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Detail kueri
Pernyataan SELECT
paling atas mengambil kolom visitorId
, contentId
, dan
predicted_rating_confidence
. Kolom terakhir ini dihasilkan oleh
fungsi ML.RECOMMEND
. Saat Anda menggunakan fungsi ML.RECOMMEND
, nama kolom output untuk model faktorisasi matriks implisit adalah predicted_rating-column-name_confidence
. Untuk model faktorisasi matriks implisit, predicted_rating_confidence
adalah estimasi keyakinan untuk pasangan user
/item
. Tingkat keyakinan ini kira-kira terletak
antara 0 dan 1, dengan keyakinan yang lebih tinggi menunjukkan bahwa user
lebih memilih
item
daripada item
dengan tingkat keyakinan yang lebih rendah.
Fungsi ML.RECOMMEND
digunakan untuk memprediksi rating menggunakan model Anda: bqml_tutorial.my_implicit_mf_model
.
Salah satu cara untuk menyimpan hasilnya ke tabel adalah:
#standardSQL CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` OPTIONS() AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Jika terjadi error Query Exceeded Resource Limits
untuk ML.RECOMMEND
, coba lagi
dengan tingkat penagihan yang lebih tinggi. Di alat command line BigQuery, parameter ini dapat ditetapkan menggunakan --maximum_billing_tier
.
Membuat rekomendasi
Kueri berikut menggunakan ML.RECOMMEND
untuk menghasilkan 5 contentId
teratas yang direkomendasikan per visitorId
.
#standardSQL SELECT visitorId, ARRAY_AGG(STRUCT(contentId, predicted_rating_confidence) ORDER BY predicted_rating_confidence DESC LIMIT 5) AS rec FROM `bqml_tutorial.recommend_content` GROUP BY visitorId
Detail kueri
Pernyataan SELECT
menggabungkan hasil dari kueri ML.RECOMMEND
menggunakan GROUP BY visitorId
untuk menggabungkan contentId
dan
predicted_rating_confidence
dalam urutan menurun, serta hanya mempertahankan 5 ID konten teratas.
Dengan kueri rekomendasi sebelumnya, kita dapat mengurutkan berdasarkan prediksi rating dan menampilkan prediksi item teratas untuk setiap pengguna. Kueri berikut menggabungkan
item_ids
dengan movie_ids
yang ada dalam tabel movielens.movie_titles
yang diupload sebelumnya dan menghasilkan rekomendasi 5 film teratas per pengguna.
Menjalankan kueri ML.RECOMMEND
Untuk menjalankan kueri ML.RECOMMEND
yang menghasilkan rekomendasi 5 ID konten teratas
per ID pengunjung:
Di konsol Google Cloud, klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di area teks Query editor.
#standardSQL CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` OPTIONS() AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.my_implicit_mf_model`)
Klik Run.
Setelah kueri selesai berjalan, (
bqml_tutorial.recommend_content
) akan muncul di panel navigasi Konsol Google Cloud. Karena kueri ini menggunakan pernyataanCREATE TABLE
untuk membuat tabel, Anda tidak akan melihat hasil kuerinya.Tulis kueri baru lainnya. Masukkan kueri GoogleSQL berikut di area teks Query editor setelah kueri sebelumnya selesai berjalan.
#standardSQL SELECT visitorId, ARRAY_AGG(STRUCT(contentId, predicted_rating_confidence) ORDER BY predicted_rating_confidence DESC LIMIT 5) AS rec FROM `bqml_tutorial.recommend_content` GROUP BY visitorId
(Opsional) Untuk menetapkan lokasi pemrosesan, klik More > Query settings. Untuk Processing location, pilih
US
. Langkah ini bersifat opsional karena lokasi pemrosesan terdeteksi secara otomatis berdasarkan lokasi set data.Klik Run.
Setelah kueri selesai, klik tab Results di bawah area teks kueri. Hasilnya akan terlihat seperti berikut:
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 kembali project tersebut, Anda dapat menghapus set data yang dibuat 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.
Di kotak dialog Delete dataset, konfirmasi perintah hapus dengan mengetikkan nama set data Anda (
bqml_tutorial
), lalu klik Delete.
Menghapus project Anda
Untuk menghapus project:
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Untuk mempelajari machine learning lebih lanjut, lihat Kursus singkat machine learning.
- Untuk ringkasan BigQuery ML, lihat Pengantar BigQuery ML.
- Untuk mempelajari konsol Google Cloud lebih lanjut, lihat Menggunakan konsol Google Cloud.