Menggunakan BigQuery ML untuk memprediksi berat penguin


Dalam tutorial ini, Anda akan menggunakan model regresi linier di BigQuery ML untuk memprediksi berat penguin berdasarkan informasi demografis penguin. Regresi linear adalah jenis model regresi yang menghasilkan nilai berkelanjutan dari kombinasi linear fitur input.

Tutorial ini menggunakan set data bigquery-public-data.ml_datasets.penguins.

Tujuan

Dalam tutorial ini, Anda akan melakukan tugas-tugas berikut:

  • Buat model regresi linear.
  • Mengevaluasi model.
  • Buat prediksi menggunakan model.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat dikenai biaya, 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. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

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

  3. Aktifkan API BigQuery.

    Mengaktifkan API

Izin yang diperlukan

Untuk membuat model menggunakan BigQuery ML, Anda memerlukan izin IAM berikut:

  • bigquery.jobs.create
  • bigquery.models.create
  • bigquery.models.getData
  • bigquery.models.updateData
  • bigquery.models.updateMetadata

Untuk menjalankan inferensi, Anda memerlukan izin berikut:

  • bigquery.models.getData pada model
  • bigquery.jobs.create

Membuat set data

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

Membuat model

Buat model regresi linear menggunakan set data contoh Analytics untuk BigQuery.

SQL

Anda dapat membuat model regresi linear menggunakan pernyataan CREATE MODEL dan menentukan LINEAR_REG untuk jenis model. Membuat model mencakup melatih model.

Berikut adalah hal-hal penting yang perlu diketahui tentang pernyataan CREATE MODEL:

  • Opsi input_label_cols menentukan kolom mana dalam pernyataan SELECT yang akan digunakan sebagai kolom label. Di sini, kolom label adalah body_mass_g. Untuk model regresi linear, kolom label harus bernilai riil, yaitu, nilai kolom harus berupa bilangan riil.
  • Pernyataan SELECT kueri ini menggunakan kolom berikut dalam tabel bigquery-public-data.ml_datasets.penguins untuk memprediksi berat penguin:

    • species: spesies penguin.
    • island: pulau tempat penguin tinggal.
    • culmen_length_mm: panjang paruh penguin dalam milimeter.
    • culmen_depth_mm: kedalaman paruh yang terkatup pada penguin dalam milimeter.
    • flipper_length_mm: panjang sirip penguin dalam milimeter.
    • sex: jenis kelamin penguin.
  • Klausa WHERE dalam pernyataan SELECT kueri ini, WHERE body_mass_g IS NOT NULL, mengecualikan baris dengan kolom body_mass_g adalah NULL.

Jalankan kueri yang membuat model regresi linear Anda:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut:

    CREATE OR REPLACE MODEL `bqml_tutorial.penguins_model`
    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;
  3. Pembuatan model penguins_model memerlukan waktu sekitar 30 detik. Untuk melihat model, buka panel Explorer, luaskan set data bqml_tutorial, lalu luaskan folder Models.

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 informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from bigframes.ml.linear_model import LinearRegression
import bigframes.pandas as bpd

# Load data from BigQuery
bq_df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Drop rows with nulls to get training data
training_data = bq_df.dropna(subset=["body_mass_g"])

# Specify your feature (or input) columns and the label (or output) column:
feature_columns = training_data.drop(columns=["body_mass_g"])
label_columns = training_data[["body_mass_g"]]

# Create the linear model
model = LinearRegression()
model.fit(feature_columns, label_columns)
model.to_gbq(
    your_model_id,  # For example: "bqml_tutorial.penguins_model"
    replace=True,
)

Pembuatan model memerlukan waktu sekitar 30 detik. Untuk melihat model, buka panel Explorer, luaskan set data bqml_tutorial, lalu luaskan folder Models.

Mendapatkan 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 merupakan akibat dari prediksi yang buruk. Ini adalah 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.

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

  1. Di panel Explorer, luaskan set data bqml_tutorial, lalu folder Models. Klik penguins_model untuk membuka panel informasi model.

  2. Klik tab Pelatihan, lalu klik Tabel. Hasilnya akan terlihat seperti berikut:

    Output ML.TRAINING_INFO

    Kolom Training Data Loss menunjukkan metrik kerugian yang dihitung setelah model dilatih menggunakan set data pelatihan. Karena Anda melakukan regresi linear, kolom ini menunjukkan nilai rataan kuadrat galat (RKG). Strategi pengoptimalan normal_equation otomatis digunakan untuk pelatihan ini, sehingga hanya satu iterasi yang diperlukan untuk digabungkan ke model akhir. Untuk informasi selengkapnya tentang cara menetapkan strategi pengoptimalan model, lihat optimize_strategy.

Mengevaluasi model

Setelah membuat model, evaluasi performa model menggunakan fungsi ML.EVALUATE atau fungsi score BigQuery DataFrames untuk mengevaluasi nilai prediksi yang dihasilkan oleh model terhadap data sebenarnya.

SQL

Untuk input, fungsi ML.EVALUATE menggunakan model terlatih dan set data yang cocok dengan skema data yang Anda gunakan untuk melatih model. Di lingkungan produksi, Anda harus mengevaluasi model pada data yang berbeda dengan data yang digunakan untuk melatih model. Jika Anda menjalankan ML.EVALUATE tanpa memberikan data input, fungsi ini akan mengambil metrik evaluasi yang dihitung selama pelatihan. Metrik ini dihitung menggunakan set data evaluasi yang dicadangkan secara otomatis:

    SELECT
      *
    FROM
      ML.EVALUATE(MODEL bqml_tutorial.penguins_model);
    

Jalankan kueri ML.EVALUATE:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut:

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

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 informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

import bigframes.pandas as bpd

# Select the model you will be evaluating. `read_gbq_model` loads model data from
# BigQuery, but you could also use the `model` object from the previous steps.
model = bpd.read_gbq_model(
    your_model_id,  # For example: "bqml_tutorial.penguins_model"
)

# Score the model with input data defined in an earlier step to compare
# model predictions on feature_columns to true labels in label_columns.
score = model.score(feature_columns, label_columns)
# Expected output results:
# index  mean_absolute_error  mean_squared_error  mean_squared_log_error  median_absolute_error  r2_score  explained_variance
#   0        227.012237         81838.159892            0.00507                173.080816        0.872377    0.872377
#   1 rows x 6 columns

Hasilnya akan terlihat seperti berikut:

Output ML.EVALUATE

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.

Anda juga dapat melihat panel informasi model di konsol Google Cloud untuk melihat metrik evaluasi:

Output ML.EVALUATE

Menggunakan model untuk memprediksi hasil

Setelah mengevaluasi model, langkah berikutnya adalah menggunakannya untuk memprediksi hasil. Anda dapat menjalankan fungsi ML.PREDICT atau fungsi DataFrame BigQuery predict pada model untuk memprediksi massa tubuh dalam gram dari semua penguin yang berada di Pulau Biscoe.

SQL

Untuk input, fungsi ML.PREDICT menggunakan model terlatih dan set data yang cocok dengan skema data yang Anda gunakan untuk melatih model, tidak termasuk kolom label.

Jalankan kueri ML.PREDICT:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut:

    SELECT
    *
    FROM
    ML.PREDICT(MODEL `bqml_tutorial.penguins_model`,
      (
      SELECT
        *
      FROM
        `bigquery-public-data.ml_datasets.penguins`
      WHERE island = 'Biscoe'));

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 informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

# Select the model you'll use for predictions. `read_gbq_model` loads
# model data from BigQuery, but you could also use the `model` object
# object from previous steps.
model = bpd.read_gbq_model(
    your_model_id,
    # For example: "bqml_tutorial.penguins_model",
)

# Load data from BigQuery
bq_df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")

# Use 'contains' function to filter by island containing the string
# "Biscoe".
biscoe_data = bq_df.loc[bq_df["island"].str.contains("Biscoe")]

result = model.predict(biscoe_data)

# Expected output results:
#     predicted_body_mass_g  	      species	                island	 culmen_length_mm  culmen_depth_mm   body_mass_g 	flipper_length_mm	sex
# 23	  4681.782896	   Gentoo penguin (Pygoscelis papua)	Biscoe	      <NA>	            <NA>	        <NA>	          <NA>	        <NA>
# 332	  4740.7907	       Gentoo penguin (Pygoscelis papua)	Biscoe	      46.2	            14.4	        214.0	          4650.0	    <NA>
# 160	  4731.310452	   Gentoo penguin (Pygoscelis papua)	Biscoe	      44.5	            14.3	        216.0	          4100.0	    <NA>

Hasilnya akan terlihat seperti berikut:

Output ML.PREDICT

Menjelaskan hasil prediksi

Untuk memahami alasan model menghasilkan hasil prediksi ini, Anda dapat menggunakan fungsi ML.EXPLAIN_PREDICT.

ML.EXPLAIN_PREDICT adalah versi yang diperluas dari fungsi ML.PREDICT. ML.EXPLAIN_PREDICT tidak hanya menghasilkan output hasil prediksi, tetapi juga menghasilkan kolom tambahan untuk menjelaskan hasil prediksi. Dalam praktiknya, Anda dapat menjalankan ML.EXPLAIN_PREDICT, bukan ML.PREDICT. Untuk mengetahui informasi selengkapnya, lihat Ringkasan Explainable AI BigQuery ML.

Jalankan kueri ML.EXPLAIN_PREDICT:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut:

    SELECT
    *
    FROM
    ML.EXPLAIN_PREDICT(MODEL `bqml_tutorial.penguins_model`,
      (
      SELECT
        *
      FROM
        `bigquery-public-data.ml_datasets.penguins`
      WHERE island = 'Biscoe'),
      STRUCT(3 as top_k_features));
  3. Hasilnya akan terlihat seperti berikut:

    Output ML.EXPLAIN_PREDICT

Untuk model regresi linear, nilai Shapley digunakan untuk menghasilkan nilai atribusi fitur untuk setiap fitur dalam model. ML.EXPLAIN_PREDICT menghasilkan tiga atribusi fitur teratas per baris tabel penguins karena top_k_features ditetapkan ke 3 dalam kueri. Atribusi ini diurutkan menurut nilai absolut atribusi dalam urutan menurun. Pada semua contoh, fitur sex berkontribusi paling besar terhadap prediksi keseluruhan.

Menjelaskan model secara global

Untuk mengetahui fitur mana yang umumnya paling penting untuk menentukan berat penguin, Anda dapat menggunakan fungsi ML.GLOBAL_EXPLAIN. Untuk menggunakan ML.GLOBAL_EXPLAIN, Anda harus melatih ulang model dengan opsi ENABLE_GLOBAL_EXPLAIN yang disetel ke TRUE.

Latih ulang dan dapatkan penjelasan global untuk model:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut untuk melatih ulang model:

    #standardSQL
    CREATE OR REPLACE MODEL `bqml_tutorial.penguins_model`
      OPTIONS (
        model_type = 'linear_reg',
        input_label_cols = ['body_mass_g'],
        enable_global_explain = TRUE)
    AS
    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.penguins`
    WHERE
      body_mass_g IS NOT NULL;
  3. Di editor kueri, jalankan kueri berikut untuk mendapatkan penjelasan global:

    SELECT
      *
    FROM
      ML.GLOBAL_EXPLAIN(MODEL `bqml_tutorial.penguins_model`)
  4. Hasilnya akan terlihat seperti berikut:

    Output ML.GLOBAL_EXPLAIN

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