Meningkatkan performa model dengan penyesuaian hyperparameter

Tutorial ini mengajarkan cara menggunakan penyesuaian hyperparameter di BigQuery ML untuk menyesuaikan model machine learning dan meningkatkan performanya.

Anda melakukan penyesuaian hyperparameter dengan menentukan opsi NUM_TRIALS dari pernyataan CREATE MODEL, yang dikombinasikan dengan opsi khusus model lainnya. Saat Anda menetapkan opsi ini, BigQuery ML akan melatih beberapa versi, atau uji coba model, masing-masing dengan parameter yang sedikit berbeda, dan menampilkan uji coba yang memiliki performa terbaik.

Tutorial ini menggunakan tabel sampel publik tlc_yellow_trips_2018, yang berisi informasi tentang perjalanan taksi di New York City pada tahun 2018.

Tujuan

Tutorial ini memandu Anda menyelesaikan tugas berikut:

  • Menggunakan pernyataan CREATE MODEL `CREATE MODEL` untuk membuat model regresi linear dasar.
  • Mengevaluasi model dasar menggunakan fungsi ML.EVALUATE.
  • Menggunakan pernyataan CREATE MODEL dengan opsi penyesuaian hyperparameter untuk melatih dua puluh uji coba model regresi linear.
  • Meninjau uji coba menggunakan fungsi ML.TRIAL_INFO.
  • Mengevaluasi uji coba menggunakan fungsi ML.EVALUATE.
  • Mendapatkan prediksi tentang perjalanan taksi dari model optimal di antara uji coba dengan menggunakan fungsi ML.PREDICT.

Biaya

Tutorial ini menggunakan komponen yang dapat ditagih Google Cloud, termasuk:

  • BigQuery
  • BigQuery ML

Untuk mengetahui informasi selengkapnya tentang biaya BigQuery, lihat halaman harga BigQuery.

Sebelum memulai

  1. Login keakun Anda. Google Cloud 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify 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 BigQuery API.

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    Mengaktifkan API

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 konsol Google Cloud , buka halaman BigQuery.

    Buka halaman BigQuery

  2. Di panel Explorer, klik nama project Anda.

  3. Klik View actions > 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.

    • Jangan ubah setelan default yang tersisa, lalu klik Create dataset.

bq

Untuk membuat set data baru, gunakan perintah bq mk --dataset.

  1. Buat set data bernama bqml_tutorial dengan lokasi data ditetapkan ke US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Pastikan set data telah dibuat:

    bq ls

API

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

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

Membuat tabel data pelatihan

Buat tabel data pelatihan, berdasarkan subset data tabel tlc_yellow_trips_2018.

Ikuti langkah-langkah berikut untuk membuat tabel:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempelkan kueri berikut, lalu klik Run:

    CREATE OR REPLACE TABLE `bqml_tutorial.taxi_tip_input`
    AS
    SELECT * EXCEPT (tip_amount), tip_amount AS label
    FROM
      `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2018`
    WHERE
      tip_amount IS NOT NULL
    LIMIT 100000;

Membuat model regresi linear dasar

Buat model regresi linear tanpa penyesuaian hyperparameter dan latih model tersebut pada data tabel taxi_tip_input.

Ikuti langkah-langkah berikut untuk membuat model:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempelkan kueri berikut, lalu klik Run:

    CREATE OR REPLACE MODEL `bqml_tutorial.baseline_taxi_tip_model`
      OPTIONS (
        MODEL_TYPE = 'LINEAR_REG'
      )
    AS
    SELECT
      *
    FROM
      `bqml_tutorial.taxi_tip_input`;

    Kueri membutuhkan waktu sekitar 2 menit untuk menyelesaikannya.

Mengevaluasi model dasar

Evaluasi performa model menggunakan fungsi ML.EVALUATE. Fungsi ML.EVALUATE mengevaluasi rating konten yang diprediksi yang ditampilkan oleh model terhadap metrik evaluasi yang dihitung selama pelatihan model.

Ikuti langkah-langkah berikut untuk mengevaluasi model:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempelkan kueri berikut, lalu klik Run:

    SELECT *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.baseline_taxi_tip_model`);

    Hasilnya akan terlihat seperti berikut:

    +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+
    | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error |      r2_score       | explained_variance  |
    +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+
    |  2.5853895559690323 | 23760.416358496139 |   0.017392406523370374 | 0.0044248227819481123 | -1934.5450533482465 | -1934.3513857946277 |
    +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+
    

Nilai r2_score untuk model dasar adalah negatif, yang menunjukkan kesesuaian yang buruk untuk data; semakin dekat skor R2 ke 1, semakin baik kesesuaian model.

Membuat model regresi linear dengan penyesuaian hyperparameter

Buat model regresi linear dengan penyesuaian hyperparameter dan latih model tersebut pada data tabel taxi_tip_input.

Anda menggunakan opsi penyesuaian hyperparameter berikut dalam pernyataan CREATE MODEL:

Opsi penyesuaian hyperparameter lainnya yang didukung oleh model menggunakan nilai defaultnya, sebagai berikut:

  • L1_REG: 0
  • HPARAM_TUNING_ALGORITHM: 'VIZIER_DEFAULT'
  • HPARAM_TUNING_OBJECTIVES: ['R2_SCORE']

Ikuti langkah-langkah berikut untuk membuat model:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempelkan kueri berikut, lalu klik Run:

    CREATE OR REPLACE MODEL `bqml_tutorial.hp_taxi_tip_model`
      OPTIONS (
        MODEL_TYPE = 'LINEAR_REG',
        NUM_TRIALS = 20,
        MAX_PARALLEL_TRIALS = 2,
        L1_REG = HPARAM_RANGE(0, 5))
    AS
    SELECT
      *
    FROM
      `bqml_tutorial.taxi_tip_input`;

    Kueri membutuhkan waktu sekitar 20 menit untuk menyelesaikannya.

Mendapatkan informasi tentang uji coba pelatihan

Dapatkan informasi tentang semua uji coba, termasuk nilai hyperparameter, tujuan, dan statusnya, menggunakan fungsi ML.TRIAL_INFO. Fungsi ini juga menampilkan informasi tentang uji coba mana yang memiliki performa terbaik, berdasarkan informasi ini.

Ikuti langkah-langkah berikut untuk mendapatkan informasi uji coba:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempelkan kueri berikut, lalu klik Run:

    SELECT *
    FROM
      ML.TRIAL_INFO(MODEL `bqml_tutorial.hp_taxi_tip_model`)
    ORDER BY is_optimal DESC;

    Hasilnya akan terlihat seperti berikut:

    +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+
    | trial_id |           hyperparameters           | hparam_tuning_evaluation_metrics  |   training_loss    |     eval_loss      |  status   | error_message | is_optimal |
    +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+
    |        7 |      {"l1_reg":"4.999999999999985"} |  {"r2_score":"0.653653627638174"} | 4.4677841296238165 |  4.478469742512195 | SUCCEEDED | NULL          |       true |
    |        2 |  {"l1_reg":"2.402163664510254E-11"} | {"r2_score":"0.6532493667964732"} |  4.457692508421795 |  4.483697081650438 | SUCCEEDED | NULL          |      false |
    |        3 |  {"l1_reg":"1.2929452948742316E-7"} |  {"r2_score":"0.653249366811995"} |   4.45769250849513 |  4.483697081449748 | SUCCEEDED | NULL          |      false |
    |        4 |  {"l1_reg":"2.5787102060628228E-5"} | {"r2_score":"0.6532493698925899"} |  4.457692523040582 |  4.483697041615808 | SUCCEEDED | NULL          |      false |
    |      ... |                             ...     |                           ...     |              ...   |             ...    |       ... |          ...  |        ... |
    +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+
    

    Nilai kolom is_optimal menunjukkan bahwa uji coba 7 adalah model optimal yang ditampilkan oleh penyesuaian.

Mengevaluasi uji coba model yang disesuaikan

Evaluasi performa uji coba menggunakan fungsi ML.EVALUATE. Fungsi ML.EVALUATE mengevaluasi rating konten yang diprediksi yang ditampilkan oleh model terhadap metrik evaluasi yang dihitung selama pelatihan untuk semua uji coba.

Ikuti langkah-langkah berikut untuk mengevaluasi uji coba model:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempelkan kueri berikut, lalu klik Run:

    SELECT *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.hp_taxi_tip_model`)
    ORDER BY r2_score DESC;

    Hasilnya akan terlihat seperti berikut:

    +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    | trial_id | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error |      r2_score      | explained_variance |
    +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    |        7 |   1.151814398002232 |  4.109811493266523 |     0.4918733252641176 |    0.5736103414025084 | 0.6652110305659145 | 0.6652144696114834 |
    |       19 |  1.1518143358927102 |  4.109811921460791 |     0.4918672150119582 |    0.5736106106914161 | 0.6652109956848206 | 0.6652144346901685 |
    |        8 |   1.152747850702547 |  4.123625876152422 |     0.4897808307399327 |    0.5731702310239184 | 0.6640856984144734 |  0.664088410199906 |
    |        5 |   1.152895108945439 |  4.125775524878872 |    0.48939088205957937 |    0.5723300569616766 | 0.6639105860807425 | 0.6639132416838652 |
    |      ... |                ...  |                ... |                    ... |                   ... |                ... |                ... |
    +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    

    Nilai r2_score untuk model optimal, yaitu uji coba 7, adalah 0.66521103056591446, yang menunjukkan peningkatan signifikan dibandingkan model dasar.

Anda dapat mengevaluasi uji coba tertentu dengan menentukan argumen TRIAL_ID dalam fungsi ML.EVALUATE.

Untuk mengetahui informasi selengkapnya tentang perbedaan antara ML.TRIAL_INFO tujuan dan ML.EVALUATE metrik evaluasi, lihat Fungsi penayangan model.

Menggunakan model yang disesuaikan untuk memprediksi tip taksi

Gunakan model optimal yang ditampilkan oleh penyesuaian untuk memprediksi tip untuk berbagai perjalanan taksi. Model optimal otomatis digunakan oleh fungsi ML.PREDICT, kecuali jika Anda memilih uji coba lain dengan menentukan argumen TRIAL_ID. Prediksi ditampilkan di kolom predicted_label.

Ikuti langkah-langkah berikut untuk mendapatkan prediksi:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempelkan kueri berikut, lalu klik Run:

    SELECT *
    FROM
      ML.PREDICT(
        MODEL `bqml_tutorial.hp_taxi_tip_model`,
        (
          SELECT
            *
          FROM
            `bqml_tutorial.taxi_tip_input`
          LIMIT 5
        ));

    Hasilnya akan terlihat seperti berikut:

    +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
    | trial_id |  predicted_label   | vendor_id |   pickup_datetime   |  dropoff_datetime   | passenger_count | trip_distance | rate_code | store_and_fwd_flag | payment_type | fare_amount | extra | mta_tax | tolls_amount | imp_surcharge | total_amount | pickup_location_id | dropoff_location_id | data_file_year | data_file_month | label |
    +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
    |        7 |  1.343367839584448 | 2         | 2018-01-15 18:55:15 | 2018-01-15 18:56:18 |               1 |             0 | 1         | N                  | 1            |           0 |     0 |       0 |            0 |             0 |            0 | 193                | 193                 |           2018 |               1 |     0 |
    |        7 | -1.176072791783461 | 1         | 2018-01-08 10:26:24 | 2018-01-08 10:26:37 |               1 |             0 | 5         | N                  | 3            |        0.01 |     0 |       0 |            0 |           0.3 |         0.31 | 158                | 158                 |           2018 |               1 |     0 |
    |        7 |  3.839580104168765 | 1         | 2018-01-22 10:58:02 | 2018-01-22 12:01:11 |               1 |          16.1 | 1         | N                  | 1            |        54.5 |     0 |     0.5 |            0 |           0.3 |         55.3 | 140                | 91                  |           2018 |               1 |     0 |
    |        7 |  4.677393985230036 | 1         | 2018-01-16 10:14:35 | 2018-01-16 11:07:28 |               1 |            18 | 1         | N                  | 2            |        54.5 |     0 |     0.5 |            0 |           0.3 |         55.3 | 138                | 67                  |           2018 |               1 |     0 |
    |        7 |  7.938988937253062 | 2         | 2018-01-16 07:05:15 | 2018-01-16 08:06:31 |               1 |          17.8 | 1         | N                  | 1            |        54.5 |     0 |     0.5 |            0 |           0.3 |        66.36 | 132                | 255                 |           2018 |               1 | 11.06 |
    +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
    

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 Google Cloud konsol.

    Buka halaman BigQuery

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

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

  4. Pada 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 Google Cloud konsol, buka halaman Manage resources.

    Buka Kelola resource

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

Langkah berikutnya