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 klausaTRANSFORM
- Fungsi pra-pemrosesan
ML.FEATURE_CROSS
danML.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
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
- BigQuery secara otomatis diaktifkan dalam project baru.
Untuk mengaktifkan BigQuery dalam project yang sudah ada, buka
Aktifkan API BigQuery.
Langkah pertama: Buat set data Anda
Buat set data BigQuery untuk menyimpan model ML Anda:
Di konsol Google Cloud, buka halaman BigQuery.
Di panel Explorer, klik nama project Anda.
Klik
View actions > Create dataset.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.
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 nilaichild_race
dalam skema tabel. Untuk memaksa BigQuery ML memperlakukanmother_race
sebagai fitur non-numerik, dengan setiap nilai yang berbeda mewakili kategori yang berbeda, kueri akan mentransmisikanmother_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 darimother_age
dengan mengelompokkanmother_age
berdasarkan kuantil menggunakan fungsi analisisML.QUANTILE_BUCKETIZE()
.mother_race
: Format stringmother_race
asli.is_male_mother_race
: Dihasilkan dari persilanganis_male
danmother_race
menggunakan fungsiML.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 FROM
—bigquery-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 WHERE
—WHERE 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:
Di konsol Google Cloud, klik tombol Buat kueri baru.
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
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 pernyataanCREATE 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
:
Di panel navigasi konsol Google Cloud, di bagian Resource, luaskan project-name > bqml_tutorial, lalu klik natality_model.
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 pernyataanCREATE 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 WHERE
—WHERE 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:
Di konsol Google Cloud, klik tombol Buat kueri baru.
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))
(Opsional) Untuk menetapkan lokasi pemrosesan, pada menu drop-down settings_applicationsLainnya, klik Setelan kueri. Untuk Lokasi pemrosesan, pilih Amerika Serikat (AS). Langkah ini bersifat opsional karena lokasi pemrosesan terdeteksi secara otomatis berdasarkan lokasi set data.
Klik Run.
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 WHERE
—WHERE 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:
Di konsol Google Cloud, klik tombol Buat kueri baru.
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"))
(Opsional) Untuk menetapkan lokasi pemrosesan, pada menu drop-down settings_applicationsLainnya, klik Setelan kueri. Untuk Lokasi pemrosesan, pilih Amerika Serikat (AS). Langkah ini bersifat opsional karena lokasi pemrosesan terdeteksi secara otomatis berdasarkan lokasi set data.
Klik Run.
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:
Jika perlu, buka halaman BigQuery di konsol Google Cloud.
Di panel navigasi, klik set data bqml_tutorial yang telah Anda buat.
Di sisi kanan jendela, klik Delete dataset. Tindakan ini akan menghapus set data, tabel, dan semua data.
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:
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Untuk mempelajari machine learning lebih lanjut, lihat Kursus singkat machine learning.
- Untuk ringkasan BigQuery ML, lihat Pengantar BigQuery ML.
- Untuk mempelajari konsol Google Cloud lebih lanjut, lihat Menggunakan konsol Google Cloud.