Meningkatkan performa model dengan penyesuaian hyperparameter

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

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

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

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 (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"
  }
}

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.

import google.cloud.bigquery

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

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

    Buka BigQuery

  2. Di editor kueri, tempel 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 konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel 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 berdasarkan metrik evaluasi yang dihitung selama pelatihan model.

Ikuti langkah-langkah berikut untuk mengevaluasi model:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel 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 kecocokan yang buruk untuk data; makin dekat skor R2 dengan 1, makin baik kecocokan modelnya.

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 NUM_TRIALS untuk menyetel jumlah uji coba menjadi dua puluh.
  • Opsi MAX_PARALLEL_TRIALS untuk menjalankan dua uji coba di setiap tugas pelatihan, dengan total sepuluh tugas dan dua puluh uji coba. Hal ini mengurangi waktu pelatihan yang diperlukan. Namun, kedua uji coba serentak tidak memberikan manfaat dari hasil pelatihan satu sama lain.
  • Opsi L1_REG untuk mencoba berbagai nilai regularisasi L1 dalam berbagai uji coba. Regularisasi L1 menghapus fitur yang tidak relevan dari model, yang membantu mencegah overfitting.

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

    Buka BigQuery

  2. Di editor kueri, tempel 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, dengan 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 konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel 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 di-tuning

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

Ikuti langkah-langkah berikut untuk mengevaluasi uji coba model:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel 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 dengan model dasar.

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

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

Menggunakan model yang di-tuning 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 yang berbeda dengan menentukan argumen TRIAL_ID. Prediksi ditampilkan di kolom predicted_label.

Ikuti langkah-langkah berikut untuk mendapatkan prediksi:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel 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 |
    +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+