Tutorial ini mengajarkan cara menggunakan model deret waktu multi-variasi untuk memperkirakan nilai mendatang untuk kolom tertentu, berdasarkan nilai historis dari beberapa fitur input.
Tutorial ini memperkirakan beberapa deret waktu. Nilai perkiraan dihitung untuk setiap titik waktu, untuk setiap nilai dalam satu atau beberapa kolom yang ditentukan. Misalnya, jika Anda ingin memperkirakan cuaca dan menentukan kolom yang berisi data status, data yang diprediksi akan berisi perkiraan untuk semua titik waktu untuk Status A, lalu nilai yang diprediksi untuk semua titik waktu untuk Status B, dan seterusnya. Jika Anda ingin memperkirakan cuaca dan kolom tertentu yang berisi data negara bagian dan kota, data yang diprediksi akan berisi perkiraan untuk semua titik waktu untuk Negara Bagian A dan Kota A, lalu nilai yang diprediksi untuk semua titik waktu untuk Negara Bagian A dan Kota B, dan seterusnya.
Tutorial ini menggunakan data dari tabel publik
bigquery-public-data.iowa_liquor_sales.sales
dan
bigquery-public-data.covid19_weathersource_com.postal_code_day_history
. Tabel bigquery-public-data.iowa_liquor_sales.sales
berisi
data penjualan minuman keras yang dikumpulkan dari beberapa kota di negara bagian Iowa. Tabel
bigquery-public-data.covid19_weathersource_com.postal_code_day_history
berisi data cuaca historis, seperti suhu dan kelembapan, dari
seluruh dunia.
Sebelum membaca tutorial ini, sebaiknya baca Membuat perkiraan deret waktu tunggal dengan model multi-variabel.
Tujuan
Tutorial ini memandu Anda menyelesaikan tugas-tugas berikut:
- Membuat model deret waktu untuk memperkirakan pesanan toko minuman keras menggunakan
pernyataan
CREATE MODEL
. - Mengambil nilai pesanan yang diramalkan dari model menggunakan
fungsi
ML.FORECAST
. - Mengambil komponen deret waktu, seperti tren musiman, tren, dan
atribusi fitur, dengan menggunakan
fungsi
ML.EXPLAIN_FORECAST
. Anda dapat memeriksa komponen deret waktu ini untuk menjelaskan nilai yang diprediksi. - Evaluasi akurasi model menggunakan
fungsi
ML.EVALUATE
. - Deteksi anomali menggunakan model dengan
fungsi
ML.DETECT_ANOMALIES
.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, yaitu Google Cloud, 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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery secara otomatis diaktifkan dalam project baru.
Untuk mengaktifkan BigQuery dalam project yang sudah ada, buka
Enable the BigQuery API.
Membuat set data
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.
Membuat tabel data input
Buat tabel data yang dapat Anda gunakan untuk melatih dan mengevaluasi model. Tabel
ini menggabungkan kolom dari
tabel bigquery-public-data.iowa_liquor_sales.sales
dan
bigquery-public-data.covid19_weathersource_com.postal_code_day_history
untuk menganalisis pengaruh cuaca terhadap jenis dan jumlah item yang dipesan oleh toko
minuman keras. Anda juga membuat kolom tambahan berikut yang dapat digunakan sebagai
variabel input untuk model:
date
: tanggal pesananstore_number
: nomor unik toko yang melakukan pemesananitem_number
: nomor unik item yang dipesanbottles_sold
: jumlah botol yang dipesan dari item terkaittemperature
: suhu rata-rata di lokasi toko pada tanggal pemesananhumidity
: kelembapan rata-rata di lokasi toko pada tanggal pemesanan
Ikuti langkah-langkah berikut untuk membuat tabel data input:
Di konsol Google Cloud , buka halaman BigQuery.
Di editor kueri, tempel kueri berikut dan klik Jalankan:
CREATE OR REPLACE TABLE `bqml_tutorial.iowa_liquor_sales_with_weather` AS WITH sales AS ( SELECT DATE, store_number, item_number, bottles_sold, SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code FROM `bigquery-public-data.iowa_liquor_sales.sales` AS sales WHERE SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL ), aggregated_sales AS ( SELECT DATE, store_number, item_number, ANY_VALUE(zip_code) AS zip_code, SUM(bottles_sold) AS bottles_sold, FROM sales GROUP BY DATE, store_number, item_number ), weather AS ( SELECT DATE, SAFE_CAST(postal_code AS INT64) AS zip_code, avg_temperature_air_2m_f AS temperature, avg_humidity_specific_2m_gpkg AS humidity, FROM `bigquery-public-data.covid19_weathersource_com.postal_code_day_history` WHERE SAFE_CAST(postal_code AS INT64) IS NOT NULL ), avg_weather AS ( SELECT DATE, zip_code, AVG(temperature) AS temperature, AVG(humidity) AS humidity, FROM weather GROUP BY DATE, zip_code ) SELECT aggregated_sales.date, aggregated_sales.store_number, aggregated_sales.item_number, aggregated_sales.bottles_sold, avg_weather.temperature AS temperature, avg_weather.humidity AS humidity FROM aggregated_sales LEFT JOIN avg_weather ON aggregated_sales.zip_code=avg_weather.zip_code AND aggregated_sales.DATE=avg_weather.DATE;
Membuat model deret waktu
Buat model deret waktu untuk memperkirakan botol yang terjual untuk setiap kombinasi
ID toko dan ID item, untuk setiap tanggal dalam
tabel bqml_tutorial.iowa_liquor_sales_with_weather
sebelum
1 September 2022. Gunakan suhu dan kelembapan rata-rata lokasi toko
pada setiap tanggal sebagai fitur yang akan dievaluasi selama peramalan. Ada sekitar 1
juta kombinasi unik nomor item dan nomor toko di
tabel bqml_tutorial.iowa_liquor_sales_with_weather
, yang berarti ada
1 juta deret waktu yang berbeda untuk diprediksi.
Ikuti langkah-langkah berikut untuk membuat model:
Di konsol Google Cloud , buka halaman BigQuery.
Di editor kueri, tempel kueri berikut dan klik Jalankan:
CREATE OR REPLACE MODEL `bqml_tutorial.multi_time_series_arimax_model` OPTIONS( model_type = 'ARIMA_PLUS_XREG', time_series_id_col = ['store_number', 'item_number'], time_series_data_col = 'bottles_sold', time_series_timestamp_col = 'date' ) AS SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE < DATE('2022-09-01');
Kueri ini memerlukan waktu sekitar 38 menit untuk diselesaikan, setelah itu model
multi_time_series_arimax_model
akan muncul di panel Explorer. Karena kueri menggunakan pernyataanCREATE MODEL
untuk membuat model, Anda tidak akan melihat hasil kueri.
Menggunakan model untuk memperkirakan data
Perkiraan nilai deret waktu mendatang menggunakan fungsi ML.FORECAST
.
Dalam kueri GoogleSQL berikut, klausa STRUCT(5 AS horizon, 0.8 AS confidence_level)
menunjukkan bahwa kueri memperkirakan 5 titik waktu di masa mendatang, dan menghasilkan interval prediksi dengan tingkat keyakinan 80%.
Tanda tangan data dari data input untuk fungsi ML.FORECAST
sama dengan tanda tangan data untuk data pelatihan yang Anda gunakan untuk membuat
model. Kolom bottles_sold
tidak disertakan dalam input, karena itulah
data yang coba diprediksi oleh model.
Ikuti langkah-langkah berikut untuk memperkirakan data dengan model:
Di konsol Google Cloud , buka halaman BigQuery.
Di editor kueri, tempel kueri berikut dan klik Jalankan:
SELECT * FROM ML.FORECAST ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE>=DATE('2022-09-01') ) );
Hasilnya akan terlihat seperti berikut:
Baris output diurutkan berdasarkan nilai
store_number
, lalu berdasarkan nilaiitem_ID
, lalu dalam urutan kronologis berdasarkan nilai kolomforecast_timestamp
. Dalam perkiraan deret waktu, interval prediksi, seperti yang diwakili oleh nilai kolomprediction_interval_lower_bound
danprediction_interval_upper_bound
, sama pentingnya dengan nilai kolomforecast_value
. Nilaiforecast_value
adalah titik tengah interval prediksi. Interval prediksi bergantung pada nilai kolomstandard_error
danconfidence_level
.Untuk mengetahui informasi selengkapnya tentang kolom output, lihat
ML.FORECAST
.
Menjelaskan hasil perkiraan
Anda bisa mendapatkan metrik keterjelasan selain data perkiraan menggunakan
fungsi ML.EXPLAIN_FORECAST
. Fungsi ML.EXPLAIN_FORECAST
memperkirakan
nilai deret waktu mendatang dan juga menampilkan semua komponen terpisah dari
deret waktu.
Serupa dengan fungsi ML.FORECAST
, klausa STRUCT(5 AS horizon, 0.8 AS confidence_level)
yang digunakan dalam fungsi ML.EXPLAIN_FORECAST
menunjukkan bahwa kueri memperkirakan 30 titik waktu di masa mendatang dan menghasilkan interval prediksi dengan keyakinan 80%.
Fungsi ML.EXPLAIN_FORECAST
menyediakan data historis dan data perkiraan. Untuk hanya melihat data perkiraan, tambahkan opsi time_series_type
ke kueri dan tentukan forecast
sebagai nilai opsi.
Ikuti langkah-langkah berikut untuk menjelaskan hasil model:
Di konsol Google Cloud , buka halaman BigQuery.
Di editor kueri, tempel kueri berikut dan klik Jalankan:
SELECT * FROM ML.EXPLAIN_FORECAST ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
Hasilnya akan terlihat seperti berikut:
Baris output diurutkan secara kronologis berdasarkan nilai kolom
time_series_timestamp
.Untuk mengetahui informasi selengkapnya tentang kolom output, lihat
ML.EXPLAIN_FORECAST
.
Mengevaluasi akurasi perkiraan
Evaluasi akurasi perkiraan model dengan menjalankannya pada data yang belum dilatih oleh model. Anda dapat melakukannya dengan menggunakan fungsi
ML.EVALUATE
. Fungsi ML.EVALUATE
mengevaluasi setiap deret waktu secara terpisah.
Dalam kueri GoogleSQL berikut, pernyataan SELECT
kedua menyediakan data dengan fitur mendatang, yang digunakan untuk memperkirakan nilai mendatang agar dibandingkan dengan data aktual.
Ikuti langkah-langkah berikut untuk mengevaluasi akurasi model:
Di konsol Google Cloud , buka halaman BigQuery.
Di editor kueri, tempel kueri berikut dan klik Jalankan:
SELECT * FROM ML.EVALUATE ( model `bqml_tutorial.multi_time_series_arimax_model`, ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
Hasilnya akan terlihat seperti berikut:
Untuk mengetahui informasi selengkapnya tentang kolom output, lihat
ML.EVALUATE
.
Menggunakan model untuk mendeteksi anomali
Mendeteksi anomali dalam data pelatihan menggunakan fungsi ML.DETECT_ANOMALIES
.
Dalam kueri berikut, klausa STRUCT(0.95 AS anomaly_prob_threshold)
menyebabkan fungsi ML.DETECT_ANOMALIES
mengidentifikasi titik data yang tidak wajar
dengan tingkat keyakinan 95%.
Ikuti langkah-langkah berikut untuk mendeteksi anomali dalam data pelatihan:
Di konsol Google Cloud , buka halaman BigQuery.
Di editor kueri, tempel kueri berikut dan klik Jalankan:
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold) );
Hasilnya akan terlihat seperti berikut:
Kolom
anomaly_probability
dalam hasil mengidentifikasi kemungkinan bahwa nilai kolombottles_sold
tertentu bersifat anomali.Untuk mengetahui informasi selengkapnya tentang kolom output, lihat
ML.DETECT_ANOMALIES
.
Mendeteksi anomali dalam data baru
Deteksi anomali dalam data baru dengan memberikan data input ke
fungsi ML.DETECT_ANOMALIES
. Data baru harus memiliki tanda tangan data
yang sama dengan data pelatihan.
Ikuti langkah-langkah berikut untuk mendeteksi anomali dalam data baru:
Di konsol Google Cloud , buka halaman BigQuery.
Di editor kueri, tempel kueri berikut dan klik Jalankan:
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold), ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
Hasilnya akan terlihat seperti berikut:
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 konsolGoogle Cloud .
Di navigasi, klik set data bqml_tutorial yang telah Anda buat.
Klik Delete dataset di sisi kanan jendela. Tindakan ini akan menghapus set data, tabel, dan semua data.
Pada dialog Hapus set data, konfirmasi perintah hapus dengan mengetikkan nama set data Anda (
bqml_tutorial
), lalu klik Hapus.
Menghapus project Anda
Untuk menghapus project:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah selanjutnya
- Pelajari cara membuat perkiraan deret waktu tunggal dengan model univariat
- Pelajari cara memperkirakan beberapa deret waktu dengan model univariat
- Pelajari cara menskalakan model univariat saat memperkirakan beberapa deret waktu di banyak baris.
- Pelajari cara membuat perkiraan hierarkis beberapa deret waktu dengan model univariat
- Untuk ringkasan BigQuery ML, lihat Pengantar AI dan ML di BigQuery.