Tutorial ini mengajarkan cara membuat
model faktorisasi matriks
dan melatihnya pada data sesi pengguna Google Analytics 360 di tabel
GA360_test.ga_sessions_sample
publik. Kemudian, Anda menggunakan model faktorisasi matriks untuk membuat rekomendasi konten bagi pengguna situs.
Penggunaan informasi preferensi pelanggan tidak langsung, seperti durasi sesi pengguna, untuk melatih model disebut pelatihan dengan masukan implisit. Model faktorisasi matriks dilatih menggunakan algoritma Weighted-Alternating Least Squares saat Anda menggunakan masukan implisit sebagai data pelatihan.
Membuat set data
Buat set data BigQuery untuk menyimpan model ML Anda.
Konsol
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).
Jangan ubah setelan default yang tersisa, lalu klik Create dataset.
bq
Untuk membuat set data baru, gunakan perintah bq mk
dengan flag --location
. Untuk daftar lengkap kemungkinan parameter, lihat referensi
perintah bq mk --dataset
.
Buat set data bernama
bqml_tutorial
dengan lokasi data yang ditetapkan keUS
dan deskripsiBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Perintah ini menggunakan pintasan
-d
, bukan flag--dataset
. Jika Anda menghapus-d
dan--dataset
, perintah defaultnya adalah membuat set data.Pastikan set data telah dibuat:
bq ls
API
Panggil metode datasets.insert
dengan resource set data yang ditentukan.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan BigQuery DataFrames di Panduan memulai BigQuery menggunakan BigQuery DataFrames. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi BigQuery DataFrames.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.
Menyiapkan data sampel
Ubah data dari tabel GA360_test.ga_sessions_sample
menjadi struktur yang lebih baik untuk pelatihan model, lalu tulis data ini ke tabel BigQuery. Kueri berikut menghitung durasi sesi
untuk setiap pengguna untuk setiap konten, yang kemudian dapat Anda gunakan sebagai
masukan implisit untuk menyimpulkan preferensi pengguna terhadap konten tersebut.
Ikuti langkah-langkah berikut untuk membuat tabel data pelatihan:
Di konsol Google Cloud , buka halaman BigQuery.
Buat tabel data pelatihan. Di editor kueri, tempel kueri berikut, lalu klik Jalankan:
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;
Melihat subset data pelatihan. Di editor kueri, tempel kueri berikut, lalu klik Jalankan:
SELECT * FROM `bqml_tutorial.analytics_session_data` LIMIT 5;
Hasilnya akan terlihat seperti berikut:
+---------------------+-----------+------------------+ | visitorId | contentId | session_duration | +---------------------+-----------+------------------+ | 7337153711992174438 | 100074831 | 44652 | +---------------------+-----------+------------------+ | 5190801220865459604 | 100170790 | 121420 | +---------------------+-----------+------------------+ | 2293633612703952721 | 100510126 | 47744 | +---------------------+-----------+------------------+ | 5874973374932455844 | 100510126 | 32109 | +---------------------+-----------+------------------+ | 1173698801255170595 | 100676857 | 10512 | +---------------------+-----------+------------------+
Buat model
Buat model faktorisasi matriks dan latih model tersebut pada data di tabel
analytics_session_data
. Model ini dilatih untuk memprediksi rating keyakinan untuk setiap pasangan visitorId
-contentId
. Rating keyakinan dibuat dengan pemusatan dan penskalaan berdasarkan durasi sesi median. Data yang durasi sesinya lebih dari 3,33 kali median akan difilter
sebagai pencilan.
Pernyataan CREATE MODEL
berikut menggunakan kolom ini untuk membuat
rekomendasi:
visitorId
—ID pengunjung.contentId
—ID konten.rating
—Rating implisit dari 0 hingga 1 dihitung untuk setiap pasangan konten-pengunjung, yang terpusat dan diskalakan.
Di konsol Google Cloud , buka halaman BigQuery.
Di editor kueri, tempel kueri berikut, lalu klik Run:
CREATE OR REPLACE MODEL `bqml_tutorial.mf_implicit` 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;
Kueri memerlukan waktu sekitar 10 menit untuk diselesaikan, setelah itu model
mf_implicit
akan muncul di panel Explorer. Karena kueri tersebut menggunakan pernyataanCREATE MODEL
untuk membuat model, Anda tidak akan melihat hasil kueri.
Mendapatkan statistik pelatihan
Secara opsional, Anda dapat melihat statistik pelatihan model di konsolGoogle 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 kiri, klik
Explorer:Jika Anda tidak melihat panel kiri, klik
Luaskan panel kiri untuk membuka panel.Di panel Explorer, luaskan project Anda dan klik Set data.
Klik set data
bqml_tutorial
. Anda juga dapat menggunakan fitur penelusuran atau filter untuk menemukan set data.Klik tab Model.
Klik model
mf_implicit
, lalu klik tab TrainingDi bagian Lihat sebagai, klik Tabel. Hasilnya akan terlihat mirip dengan berikut ini:
+-----------+--------------------+--------------------+ | Iteration | Training Data Loss | Duration (seconds) | +-----------+--------------------+--------------------+ | 5 | 0.0027 | 47.27 | +-----------+--------------------+--------------------+ | 4 | 0.0028 | 39.60 | +-----------+--------------------+--------------------+ | 3 | 0.0032 | 55.57 | +-----------+--------------------+--------------------+ | ... | ... | ... | +-----------+--------------------+--------------------+
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).
Mengevaluasi model
Evaluasi performa model menggunakan fungsi ML.EVALUATE
.
Fungsi ML.EVALUATE
mengevaluasi rating konten yang diprediksi yang ditampilkan oleh
model berdasarkan metrik evaluasi yang dihitung selama pelatihan.
Ikuti langkah-langkah berikut untuk mengevaluasi model:
Di konsol Google Cloud , buka halaman BigQuery.
Di editor kueri, tempel kueri berikut, lalu klik Run:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.mf_implicit`);
Hasilnya akan terlihat seperti berikut:
+------------------------+-----------------------+---------------------------------------+---------------------+ | mean_average_precision | mean_squared_error | normalized_discounted_cumulative_gain | average_rank | +------------------------+-----------------------+---------------------------------------+---------------------+ | 0.4434341257478137 | 0.0013381759837648962 | 0.9433280547112802 | 0.24031636088594222 | +------------------------+-----------------------+---------------------------------------+---------------------+
Untuk mengetahui informasi selengkapnya tentang output fungsi
ML.EVALUATE
, lihat Output.
Mendapatkan rating yang diprediksi untuk subset pasangan pengunjung-konten
Gunakan ML.RECOMMEND
untuk mendapatkan prediksi rating setiap konten
untuk lima pengunjung situs.
Ikuti langkah-langkah berikut untuk mendapatkan rating yang diprediksi:
Di konsol Google Cloud , buka halaman BigQuery.
Di editor kueri, tempel kueri berikut, lalu klik Run:
SELECT * FROM ML.RECOMMEND( MODEL `bqml_tutorial.mf_implicit`, ( SELECT visitorId FROM `bqml_tutorial.analytics_session_data` LIMIT 5 ));
Hasilnya akan terlihat seperti berikut:
+-------------------------------+---------------------+-----------+ | predicted_rating_confidence | visitorId | contentId | +-------------------------------+---------------------+-----------+ | 0.0033608418060270262 | 7337153711992174438 | 277237933 | +-------------------------------+---------------------+-----------+ | 0.003602395397293956 | 7337153711992174438 | 158246147 | +-------------------------------+---------------------+-- -------+ | 0.0053197670652785356 | 7337153711992174438 | 299389988 | +-------------------------------+---------------------+-----------+ | ... | ... | ... | +-------------------------------+---------------------+-----------+
Buat rekomendasi
Gunakan prediksi rating untuk membuat lima ID konten yang direkomendasikan teratas untuk setiap ID pengunjung.
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 Run:
CREATE OR REPLACE TABLE `bqml_tutorial.recommend_content` AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.mf_implicit`);
Pilih lima hasil teratas per pengunjung. Di editor kueri, tempel kueri berikut, lalu klik Run:
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;
Hasilnya akan terlihat seperti berikut:
+---------------------+-----------------+---------------------------------+ | visitorId | rec:contentId | rec:predicted_rating_confidence | +---------------------+-----------------+------------------------- ------+ | 867526255058981688 | 299804319 | 0.88170525357178664 | | | 299935287 | 0.54699439944935124 | | | 299410466 | 0.53424780863188659 | | | 299826767 | 0.46949603950374219 | | | 299809748 | 0.3379991197434149 | +---------------------+-----------------+---------------------------------+ | 2434264018925667659 | 299824032 | 1.3903516407308065 | | | 299410466 | 0.9921995618196483 | | | 299903877 | 0.92333625294129218 | | | 299816215 | 0.91856701667757279 | | | 299852437 | 0.86973661454890561 | +---------------------+-----------------+---------------------------------+ | ... | ... | ... | +---------------------+-----------------+---------------------------------+