Melakukan rekayasa fitur dengan klausa TRANSFORM


Tutorial ini memperkenalkan analis data kepada BigQuery ML. BigQuery ML memungkinkan pengguna membuat dan menjalankan model machine learning di BigQuery menggunakan kueri SQL. Tutorial ini memperkenalkan rekayasa fitur menggunakan klausa TRANSFORM. Dengan menggunakan klausa TRANSFORM, Anda dapat menentukan semua pra-pemrosesan selama pembuatan model. Pra-pemrosesan ini otomatis diterapkan selama fase prediksi dan evaluasi machine learning.

Dalam tutorial ini, Anda menggunakan tabel contoh natality untuk membuat model yang memprediksi berat lahir anak berdasarkan jenis kelamin bayi, lamanya kehamilan, dan bucket informasi demografis tentang ibu. Tabel contoh natality berisi informasi tentang setiap kelahiran di Amerika Serikat selama periode 40 tahun.

Tujuan

Dalam tutorial ini, Anda akan menggunakan:

  • BigQuery ML untuk membuat model regresi linear menggunakan pernyataan CREATE MODEL dengan klausa TRANSFORM
  • Fungsi pra-pemrosesan ML.FEATURE_CROSS dan ML.QUANTILE_BUCKETIZE
  • Fungsi ML.EVALUATE untuk mengevaluasi model ML
  • Fungsi ML.PREDICT untuk membuat prediksi menggunakan model ML

Biaya

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

  • BigQuery
  • BigQuery ML

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

Sebelum memulai

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

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Buka pemilih project

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Enable the BigQuery API.

    Enable the 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 "Buat set data".

Langkah kedua: Buat model Anda

Selanjutnya, buat model regresi linear menggunakan tabel sampel kelahiran untuk BigQuery. Kueri GoogleSQL berikut digunakan untuk membuat model yang Anda gunakan untuk memprediksi berat lahir anak.

#standardSQL
CREATE MODEL `bqml_tutorial.natality_model`
TRANSFORM(weight_pounds,
    is_male,
    gestation_weeks,
    ML.QUANTILE_BUCKETIZE(mother_age,
      5) OVER() AS bucketized_mother_age,
    CAST(mother_race AS string) AS mother_race,
    ML.FEATURE_CROSS(STRUCT(is_male,
        CAST(mother_race AS STRING) AS mother_race)) is_male_mother_race)
OPTIONS
  (model_type='linear_reg',
    input_label_cols=['weight_pounds']) AS
SELECT
  *
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL
  AND RAND() < 0.001

Selain membuat model, menjalankan perintah CREATE MODEL akan melatih model yang Anda buat.

Detail kueri

Klausa CREATE MODEL digunakan untuk membuat dan melatih model bernama bqml_tutorial.natality_model.

Klausa OPTIONS(model_type='linear_reg', input_label_cols=['weight_pounds']) menunjukkan bahwa Anda membuat model regresi linear. Regresi linear adalah jenis model regresi yang menghasilkan nilai berkelanjutan dari kombinasi linear fitur input. Kolom weight_pounds 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:

  • weight_pounds: Berat anak (FLOAT64) dalam pound.
  • is_male: Jenis kelamin anak. BENAR jika anak tersebut laki-laki, SALAH jika perempuan (BOOL).
  • gestation_weeks: Jumlah minggu kehamilan (INT64).
  • mother_age: Usia ibu saat melahirkan (INT64).
  • mother_race: Ras ibu (INT64). Nilai bilangan bulat ini sama dengan nilai child_race dalam skema tabel. Untuk memaksa BigQuery ML memperlakukan mother_race sebagai fitur non-numerik, dengan setiap nilai yang berbeda mewakili kategori yang berbeda, kueri akan mentransmisikan mother_race ke STRING. Hal ini penting karena ras lebih mungkin memiliki makna yang lebih besar sebagai kategori daripada bilangan bulat, yang memiliki pengurutan dan skala.

Melalui klausa TRANSFORM, fitur asli telah diproses sebelumnya untuk dimasukkan dalam pelatihan. Kolom yang dihasilkan adalah:

  • weight_pounds: Diteruskan sebagaimana adanya, tanpa perubahan.
  • is_male: Diteruskan untuk dimasukkan dalam pelatihan.
  • gestation_weeks: Diteruskan untuk dimasukkan dalam pelatihan.
  • bucketized_mother_age: Dihasilkan dari mother_age dengan mengelompokkan mother_age berdasarkan kuantil menggunakan fungsi analisis ML.QUANTILE_BUCKETIZE().
  • mother_race: Format string mother_race asli.
  • is_male_mother_race: Dihasilkan dari persilangan is_male dan mother_race menggunakan fungsi ML.FEATURE_CROSS.

Pernyataan SELECT kueri menyediakan kolom yang dapat Anda gunakan dalam klausa TRANSFORM. Namun, Anda tidak perlu menggunakan semua kolom dalam klausa TRANSFORM. Karena itu, Anda dapat melakukan pemilihan fitur dan pra-pemrosesan di dalam klausa TRANSFORM.

Klausa FROMbigquery-public-data.samples.natality—menunjukkan bahwa Anda membuat kueri tabel sampel kelahiran di set data sampel. Set data ini ada dalam project bigquery-public-data.

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

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 MODEL `bqml_tutorial.natality_model`
    TRANSFORM(weight_pounds,
        is_male,
        gestation_weeks,
        ML.QUANTILE_BUCKETIZE(mother_age,
          5) OVER() AS bucketized_mother_age,
        CAST(mother_race AS string) AS mother_race,
        ML.FEATURE_CROSS(STRUCT(is_male,
            CAST(mother_race AS STRING) AS mother_race)) is_male_mother_race)
    OPTIONS
      (model_type='linear_reg',
        input_label_cols=['weight_pounds']) AS
    SELECT
      *
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      weight_pounds IS NOT NULL
      AND RAND() < 0.001
    
  3. Klik Jalankan.

    Kueri membutuhkan waktu sekitar 30 detik untuk diselesaikan, setelah itu model Anda (natality_model) akan muncul di panel navigasi. Karena kueri ini menggunakan pernyataan CREATE MODEL untuk membuat tabel, Anda tidak akan melihat hasil kueri.

Langkah ketiga (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.

Kerugian adalah akibat dari prediksi yang buruk—angka yang menunjukkan seberapa buruk prediksi model pada satu contoh. Jika prediksi model sempurna, kerugiannya nol. Jika tidak, kerugiannya akan lebih besar. Tujuan pelatihan model adalah untuk menemukan set bobot dan bias yang memiliki kerugian rendah, secara rata-rata, di semua contoh.

Untuk melihat statistik pelatihan model yang dihasilkan saat Anda menjalankan kueri CREATE MODEL:

  1. Di panel navigasi konsol Google Cloud, di bagian Resource, luaskan project-name > bqml_tutorial, lalu klik natality_model.

  2. Klik tab Pelatihan, dan untuk Lihat sebagai, pilih opsi Tabel. Hasilnya akan terlihat seperti berikut ini:

    +-----------+--------------------+----------------------+--------------------+
    | Iteration | Training data loss | Evaluation data loss | Duration (seconds) |
    +-----------+--------------------+----------------------+--------------------+
    | 0         | 1.6640             | 1.7352               | 6.27               |
    +-----------+--------------------+----------------------+--------------------+
    

    Kolom Kerugian Data Pelatihan menunjukkan metrik kerugian yang dihitung setelah model dilatih menggunakan set data pelatihan. Karena Anda melakukan regresi linear, kolom ini adalah rataan kuadrat galat (RKG).

    Kolom Kerugian Data Evaluasi adalah metrik kerugian yang sama yang dihitung pada set data holdout (data yang ditahan dari pelatihan untuk memvalidasi model). Strategi pengoptimalan default yang digunakan untuk pelatihan adalah "normal_equation", sehingga hanya satu iterasi yang diperlukan untuk konvergensi ke model akhir.

    Untuk informasi selengkapnya tentang opsi optimize_strategy, lihat pernyataan CREATE MODEL.

    Untuk informasi lebih lanjut tentang fungsi ML.TRAINING_INFO dan opsi pelatihan "optimize_strategy", lihat referensi sintaksis BigQuery ML.

Langkah keempat: Evaluasi model Anda

Setelah membuat model, Anda mengevaluasi performa pengklasifikasi menggunakan fungsi ML.EVALUATE. Fungsi ML.EVALUATE mengevaluasi nilai yang diprediksi terhadap data sebenarnya.

Kueri yang digunakan untuk mengevaluasi model adalah sebagai berikut:

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.natality_model`,
    (
    SELECT
      *
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      weight_pounds IS NOT NULL))

Detail kueri

Pernyataan SELECT atas mengambil kolom dari model Anda.

Klausa FROM menggunakan fungsi ML.EVALUATE terhadap model Anda: bqml_tutorial.natality_model.

Pernyataan SELECT dan klausa FROM bertingkat dari kueri ini sama dengan pernyataan dan klausa dalam kueri CREATE MODEL. Karena klausa TRANSFORM digunakan dalam pelatihan, Anda tidak perlu menentukan kolom dan transformasi yang spesifik. Semuanya otomatis dipulihkan.

Klausa WHEREWHERE weight_pounds IS NOT NULL—mengecualikan baris dengan bobot NULL.

#standardSQL
SELECT
  *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.natality_model`)

Menjalankan kueri ML.EVALUATE

Untuk menjalankan kueri ML.EVALUATE yang mengevaluasi model, selesaikan langkah-langkah berikut:

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

  2. Masukkan kueri GoogleSQL berikut di area teks Editor kueri.

    #standardSQL
    SELECT
      *
    FROM
      ML.EVALUATE(MODEL `bqml_tutorial.natality_model`,
        (
        SELECT
          *
        FROM
          `bigquery-public-data.samples.natality`
        WHERE
          weight_pounds IS NOT NULL))
    
  3. (Opsional) Untuk menetapkan lokasi pemrosesan, pada menu drop-down Lainnya, klik Setelan kueri. Untuk Lokasi pemrosesan, pilih Amerika Serikat (AS). Langkah ini bersifat opsional karena lokasi pemrosesan terdeteksi secara otomatis berdasarkan lokasi set data.

    Setelan kueri.

  4. Klik Run.

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

    +---------------------+--------------------+------------------------+---------------------+---------------------+----------------------+
    | mean_absolute_error | mean_squared_error | mean_squared_log_error | mean_absolute_error | r2_score            | explained_variance   |
    +---------------------+--------------------+------------------------+---------------------+---------------------+----------------------+
    | 0.9566580179970666  | 1.6756289722442677 | 0.034241471462096516   | 0.7385590721661188  | 0.04650972930257946 | 0.046516832131241026 |
    +---------------------+--------------------+------------------------+---------------------+---------------------+----------------------+
    

    Karena Anda melakukan regresi linear, hasilnya mencakup kolom berikut:

    • mean_absolute_error
    • mean_squared_error
    • mean_squared_log_error
    • median_absolute_error
    • r2_score
    • explained_variance

Metrik penting dalam hasil evaluasi adalah skor R2. 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.

Langkah kelima: Gunakan model Anda untuk memprediksi hasil

Setelah mengevaluasi model, langkah berikutnya adalah menggunakannya untuk memprediksi hasil. Anda dapat menggunakan model ini untuk memprediksi berat lahir semua bayi yang lahir di Wyoming.

Kueri yang digunakan untuk memprediksi hasilnya adalah sebagai berikut:

#standardSQL
SELECT
  predicted_weight_pounds
FROM
  ML.PREDICT(MODEL `bqml_tutorial.natality_model`,
    (
    SELECT
      *
    FROM
      `bigquery-public-data.samples.natality`
    WHERE
      state = "WY"))

Detail kueri

Pernyataan SELECT paling atas mengambil kolom predicted_weight_pounds. Kolom ini dihasilkan oleh fungsi ML.PREDICT. Saat Anda menggunakan fungsi ML.PREDICT, nama kolom output untuk model adalah predicted_label_column_name. Untuk model regresi linear, predicted_label adalah perkiraan nilai label. Untuk model regresi logistik, predicted_label adalah salah satu dari dua label input, bergantung pada label mana yang memiliki prediksi probabilitas lebih tinggi.

Fungsi ML.PREDICT digunakan untuk memprediksi hasil menggunakan model Anda: bqml_tutorial.natality_model.

Pernyataan SELECT dan klausa FROM bertingkat dari kueri ini sama dengan pernyataan dan klausa dalam kueri CREATE MODEL. Ingatlah bahwa Anda tidak harus meneruskan semua kolom seperti dalam pelatihan, dan hanya kolom yang digunakan dalam klausa TRANSFORM yang diperlukan. Serupa dengan ML.EVALUATE, transformasi di dalam TRANSFORM otomatis dipulihkan.

Klausa WHEREWHERE state = "WY"—menunjukkan bahwa Anda membatasi prediksi hanya untuk negara bagian Wyoming.

Menjalankan kueri ML.PREDICT

Untuk menjalankan kueri yang menggunakan model untuk memprediksi hasil:

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

  2. Masukkan kueri GoogleSQL berikut di area teks Editor kueri.

    #standardSQL
    SELECT
      predicted_weight_pounds
    FROM
      ML.PREDICT(MODEL `bqml_tutorial.natality_model`,
        (
        SELECT
          *
        FROM
          `bigquery-public-data.samples.natality`
        WHERE
          state = "WY"))
    
  3. (Opsional) Untuk menetapkan lokasi pemrosesan, pada menu drop-down Lainnya, klik Setelan kueri. Untuk Lokasi pemrosesan, pilih Amerika Serikat (AS). Langkah ini bersifat opsional karena lokasi pemrosesan terdeteksi secara otomatis berdasarkan lokasi set data.

    Setelan kueri.

  4. Klik Run.

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

    +----------------------------+
    | predicted_weight_pounds    |
    +----------------------------+
    |  7.735962399307027         |
    +----------------------------+
    |  7.728855793480761         |
    +----------------------------+
    |  7.383850250400428         |
    +----------------------------+
    | 7.4132677633242565         |
    +----------------------------+
    |  7.734971309702814         |
    +----------------------------+
    

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