Melakukan rekayasa fitur dengan klausa TRANSFORM


Tutorial ini mengajarkan cara menggunakan klausa TRANSFORM dari pernyataan CREATE MODEL untuk melakukan rekayasa fitur sekaligus membuat dan melatih model. Dengan menggunakan klausa TRANSFORM, Anda dapat menentukan satu atau beberapa fungsi pra-pemrosesan untuk mengubah data input yang Anda gunakan untuk melatih model. Prapemrosesan yang Anda terapkan ke model akan otomatis diterapkan saat Anda menggunakan model dengan fungsi ML.EVALUATE dan ML.PREDICT.

Tutorial ini menggunakan set data bigquery-public-data.ml_datasets.penguin publik.

Tujuan

Tutorial ini memandu Anda menyelesaikan tugas-tugas berikut:

Biaya

Tutorial ini menggunakan komponen Google Cloudyang dapat ditagih, termasuk:

  • BigQuery
  • BigQuery ML

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

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

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.

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

    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 dengan nilai yang diisi.

bq

Untuk membuat set data baru, gunakan perintah bq mk dengan flag --location. Untuk daftar lengkap parameter yang mungkin, lihat referensi perintah bq mk --dataset.

  1. Buat set data bernama bqml_tutorial dengan lokasi data 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"
  }
}

Membuat model

Buat model regresi linear untuk memprediksi berat penguin dan melatihnya di tabel contoh penguins.

Klausa OPTIONS(model_type='linear_reg', input_label_cols=['body_mass_g']) menunjukkan bahwa Anda membuat model regresi linear. Model regresi linear menghasilkan nilai berkelanjutan dari kombinasi linear fitur input. Kolom body_mass_g adalah kolom label input. Untuk model regresi linear, kolom label harus bernilai riil (artinya, nilai kolom harus berupa bilangan riil).

Klausa TRANSFORM kueri ini menggunakan kolom berikut dari pernyataan SELECT:

  • body_mass_g: Digunakan dalam pelatihan tanpa perubahan apa pun.
  • culmen_depth_mm: Digunakan dalam pelatihan tanpa perubahan apa pun.
  • flipper_length_mm: Digunakan dalam pelatihan tanpa perubahan apa pun.
  • bucketized_culmen_length: Dihasilkan dari culmen_length_mm dengan mengelompokkan culmen_length_mm berdasarkan kuantil menggunakan fungsi analisis ML.QUANTILE_BUCKETIZE().
  • culmen_length_mm: Nilai culmen_length_mm asli, yang ditransmisikan ke nilai STRING dan digunakan dalam pelatihan.
  • species_sex: Dihasilkan dari persilangan species dan sex menggunakan fungsi ML.FEATURE_CROSS.

Anda tidak perlu menggunakan semua kolom dari tabel pelatihan dalam klausa TRANSFORM.

Klausa WHEREWHERE body_mass_g IS NOT NULL AND RAND() < 0.2—mengecualikan baris dengan bobot penguin NULL, dan menggunakan fungsi RAND untuk mengambil sampel data secara acak.

Ikuti langkah-langkah berikut untuk membuat model:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel kueri berikut dan klik Jalankan:

    CREATE OR REPLACE MODEL `bqml_tutorial.penguin_transform`
      TRANSFORM(
        body_mass_g,
        culmen_depth_mm,
        flipper_length_mm,
        ML.QUANTILE_BUCKETIZE(culmen_length_mm, 10) OVER () AS bucketized_culmen_length,
        CAST(culmen_length_mm AS string) AS culmen_length_mm,
        ML.FEATURE_CROSS(STRUCT(species, sex)) AS species_sex)
      OPTIONS (
        model_type = 'linear_reg',
        input_label_cols = ['body_mass_g'])
    AS
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL
      AND RAND() < 0.2;

    Kueri memerlukan waktu sekitar 15 menit untuk diselesaikan, setelah itu model penguin_transform akan muncul di panel Explorer. Karena kueri tersebut menggunakan pernyataan CREATE MODEL untuk membuat model, Anda tidak akan melihat hasil kueri.

Mengevaluasi model

Evaluasi performa model menggunakan fungsi ML.EVALUATE. Fungsi ML.EVALUATE mengevaluasi bobot penguin yang diprediksi yang ditampilkan oleh model terhadap bobot penguin yang sebenarnya dari data pelatihan.

Pernyataan SELECT dan klausa FROM bertingkat dari kueri ini sama dengan pernyataan dan klausa dalam kueri CREATE MODEL. Karena Anda menggunakan klausa TRANSFORM saat membuat model, Anda tidak perlu menentukan kolom dan transformasi lagi dalam fungsi ML.EVALUATE. Fungsi ini otomatis mengambilnya dari 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 dan klik Jalankan:

    SELECT
      *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.penguin_transform`,
        (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            body_mass_g IS NOT NULL
        ));

    Hasilnya akan terlihat seperti berikut:

    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error |      r2_score      | explained_variance |
    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    |   64.21134350607677 | 13016.433317859564 |   7.140935762696211E-4 |     15.31788461553515 | 0.9813042531507734 | 0.9813186268757634 |
    +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
    

    Metrik penting dalam hasil evaluasi adalah skor 2. Skor R2 adalah ukuran statistik yang menentukan apakah prediksi regresi linear memperkirakan data sebenarnya. Nilai 0 menunjukkan bahwa model tidak menjelaskan variabilitas data respons di sekitar nilai rata-rata. Nilai 1 menunjukkan bahwa model menjelaskan semua variabilitas data respons di sekitar nilai rata-rata.

    Untuk mengetahui informasi selengkapnya tentang output fungsi ML.EVALUATE, lihat Model regresi.

    Anda juga dapat memanggil ML.EVALUATE tanpa memberikan data input. Pelatihan ini akan menggunakan metrik evaluasi yang dihitung selama pelatihan.

Menggunakan model untuk memprediksi berat penguin

Gunakan model dengan fungsi ML.PREDICT untuk memprediksi berat penguin jantan.

Fungsi ML.PREDICT menghasilkan output nilai yang diprediksi di kolom predicted_label_column_name, dalam hal ini predicted_body_mass_g.

Saat menggunakan fungsi ML.PREDICT, Anda tidak perlu meneruskan semua kolom yang digunakan dalam pelatihan model. Hanya kolom yang Anda gunakan dalam klausa TRANSFORM yang diperlukan. Serupa dengan ML.EVALUATE, fungsi ML.PREDICT otomatis mengambil kolom dan transformasi TRANSFORM dari model.

Ikuti langkah-langkah berikut untuk mendapatkan prediksi dari model:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel kueri berikut dan klik Jalankan:

    SELECT
      predicted_body_mass_g
    FROM
      ML.PREDICT(
        MODEL `bqml_tutorial.penguin_transform`,
        (
          SELECT
            *
          FROM
            `bigquery-public-data.ml_datasets.penguins`
          WHERE
            sex = 'MALE'
        ));

    Hasilnya akan terlihat seperti berikut:

    +-----------------------+
    | predicted_body_mass_g |
    +-----------------------+
    |    2810.2868541725757 |
    +-----------------------+
    |    3813.6574220842676 |
    +-----------------------+
    |     4098.844698262214 |
    +-----------------------+
    |     4256.587135004173 |
    +-----------------------+
    |     3008.393497302691 |
    +-----------------------+
    |     ...               |
    +-----------------------+
    

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