Membuat rekomendasi berdasarkan masukan implisit dengan model faktorisasi matriks


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.

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 konten untuk pengguna dengan menggunakan model dengan fungsi ML.RECOMMEND.

Biaya

Tutorial ini menggunakan komponen Google Cloudyang 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  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

    Enable the BigQuery API.

    Enable the API

  7. Izin yang Diperlukan

    • Untuk membuat set data, Anda memerlukan izin IAM bigquery.datasets.create.

    • Untuk membuat model, Anda memerlukan izin berikut:

      • bigquery.jobs.create
      • bigquery.models.create
      • bigquery.models.getData
      • bigquery.models.updateData
    • 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.

Konsol

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka halaman BigQuery

  2. Di panel Explorer, klik nama project Anda.

  3. Klik View actions > Create dataset.

    Opsi menu Create dataset.

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

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

  1. Buat set data bernama bqml_tutorial dengan lokasi data yang ditetapkan ke US dan deskripsi BigQuery 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.

  2. Pastikan set data telah dibuat:

    bq ls

API

Panggil metode datasets.insert dengan resource set data yang ditentukan.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

DataFrame BigQuery

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.

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

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:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. 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;
  3. 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.
  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

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

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Explorer, luaskan project Anda, luaskan set data bqml_tutorial, lalu luaskan folder Models.

  3. Klik model mf_implicit, lalu klik tab Training

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

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. 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 Model faktorisasi matriks.

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:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

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

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. 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`);
  3. 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             |
    +---------------------+-----------------+---------------------------------+
    | ...                 | ...             | ...                             |
    +---------------------+-----------------+---------------------------------+
    

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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Langkah berikutnya