Menggunakan BigQuery ML untuk membuat rekomendasi dari data Google Analytics


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

  1. 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.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Make sure that billing is enabled for your Google Cloud project.

  6. BigQuery secara otomatis diaktifkan dalam project baru. Untuk mengaktifkan BigQuery dalam project yang sudah ada, buka

    Aktifkan API BigQuery.

    Mengaktifkan API

Langkah pertama: Buat set data Anda

Buat set data BigQuery untuk menyimpan model ML Anda:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka halaman BigQuery

  2. Di panel Explorer, klik nama project Anda.

  3. Klik View actions > Create dataset.

    Buat set data.

  4. 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.

      Halaman 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.

  1. Di konsol Google Cloud, klik tombol Buat kueri baru.

  2. 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
  3. (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.

    Query settings.

  4. Klik Run.

    Setelah kueri selesai berjalan, (bqml_tutorial.analytics_session_data) akan muncul di panel navigasi. Karena kueri ini menggunakan pernyataan CREATE TABLE untuk membuat tabel, Anda tidak akan melihat hasil kueri.

  5. Jika Anda melihat tabel yang dihasilkan, tabel itu akan terlihat seperti berikut:

    Query Results.

    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 artikel 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 untuk visitorId serta contentId-nya masing-masing yang terpusat dan diskalakan (FLOAT64).

Klausa FROMbqml_tutorial.analytics_session_data — menunjukkan bahwa Anda membuat kueri tabel analytics_session_data dalam set data bqml_tutorial. Set data ini ada di project BigQuery Anda jika petunjuk pada langkah kedua dan delapan telah diikuti.

Menjalankan kueri CREATE MODEL

Untuk menjalankan kueri CREATE MODEL guna membuat dan melatih model Anda:

  1. Di konsol Google Cloud, klik tombol Buat kueri baru.

  2. 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`
  3. 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 pernyataan CREATE 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:

  1. Di panel navigasi konsol Google Cloud, di bagian Resources, luaskan [PROJECT_ID] > bqml_tutorial, lalu klik my_implicit_mf_model.

  2. Klik tab Training, lalu klik Table. Hasilnya akan terlihat seperti berikut:

    Output ML.TRAINING_INFO.

    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:

  1. Di konsol Google Cloud, klik tombol Buat kueri baru.

  2. Masukkan kueri GoogleSQL berikut di area teks Query editor.

    #standardSQL
    SELECT
     *
    FROM
     ML.EVALUATE(MODEL `bqml_tutorial.my_implicit_mf_model`)
  3. (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.

    Query settings.

  4. Klik Run.

  5. Setelah kueri selesai, klik tab Results di bawah area teks kueri. Hasilnya akan terlihat seperti berikut:

    Output ML.EVALUATE.

    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, dan average_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 LIMITLIMIT 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:

  1. Di konsol Google Cloud, klik tombol Buat kueri baru.

  2. 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`)
  3. Klik Run.

    Setelah kueri selesai berjalan, (bqml_tutorial.recommend_content) akan muncul di panel navigasi Konsol Google Cloud. Karena kueri tersebut menggunakan pernyataan CREATE TABLE untuk membuat tabel, Anda tidak akan melihat hasil kueri.

  4. 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
  5. (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.

    Query settings.

  6. Klik Run.

  7. Setelah kueri selesai, klik tab Results di bawah area teks kueri. Hasilnya akan terlihat seperti berikut:

    Output ML.RECOMMEND.

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:

  1. Jika perlu, buka halaman BigQuery di konsol Google Cloud.

    Buka halaman BigQuery

  2. Di navigasi, klik set data bqml_tutorial yang telah Anda buat.

  3. Klik Delete dataset di sisi kanan jendela. Tindakan ini akan menghapus set data, tabel, dan semua data.

  4. 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:

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah berikutnya