Dalam tutorial ini, Anda akan mempelajari cara membuat model deret waktu multi-variasi (ARIMA_PLUS_XREG
) untuk melakukan perkiraan deret waktu menggunakan tabel contoh berikut dari set data epa_historical_air_quality
:
- Tabel contoh
epa_historical_air_quality.pm25_nonfrm_daily_summary
. - Tabel contoh
epa_historical_air_quality.wind_daily_summary
. - Tabel contoh
epa_historical_air_quality.temperature_daily_summary
.
Set data epa_historical_air_quality
berisi informasi harian PM 2,5, suhu, dan
kecepatan angin yang dikumpulkan dari beberapa kota di AS.
Tujuan
Dalam tutorial ini, Anda akan menggunakan:
- Pernyataan
CREATE MODEL
: untuk membuat model deret waktu. - Fungsi
ML.ARIMA_EVALUATE
: untuk memeriksa informasi evaluasi terkait ARIMA dalam model. - Fungsi
ML.ARIMA_COEFFICIENTS
: untuk memeriksa koefisien model. - Fungsi
ML.FORECAST
: untuk memperkirakan PM 2,5 harian. - Fungsi
ML.EVALUATE
: untuk mengevaluasi model dengan data aktual. - Fungsi
ML.EXPLAIN_FORECAST
: untuk mengambil berbagai komponen deret waktu (seperti atribusi musiman, tren, dan fitur) yang dapat Anda gunakan untuk menjelaskan hasil perkiraan.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, 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
- 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 tabel deret waktu dengan fitur tambahan
Data PM2,5, suhu, dan kecepatan angin berada di tabel terpisah.
Untuk menyederhanakan kueri berikut, Anda dapat membuat tabel baru
bqml_tutorial.seattle_air_quality_daily
dengan menggabungkan tabel-tabel tersebut
ke kolom berikut:
- date: tanggal observasi
- PM2.5: nilai rata-rata PM2,5 untuk setiap hari
- wind_speed: kecepatan angin rata-rata untuk setiap hari
- temperature: suhu tertinggi untuk setiap hari
Tabel baru memiliki data harian dari 11-08-2009 hingga 31-01-2022.
Dalam kueri GoogleSQL berikut, klausa FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary
menunjukkan bahwa Anda membuat kueri tabel *_daily_summary
di set data epa_historical_air_quality
. Tabel ini adalah
tabel yang dipartisi.
#standardSQL CREATE TABLE `bqml_tutorial.seattle_air_quality_daily` AS WITH pm25_daily AS ( SELECT avg(arithmetic_mean) AS pm25, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass' GROUP BY date_local ), wind_speed_daily AS ( SELECT avg(arithmetic_mean) AS wind_speed, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.wind_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant' GROUP BY date_local ), temperature_daily AS ( SELECT avg(first_max_value) AS temperature, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature' GROUP BY date_local ) SELECT pm25_daily.date AS date, pm25, wind_speed, temperature FROM pm25_daily JOIN wind_speed_daily USING (date) JOIN temperature_daily USING (date)
Untuk menjalankan kueri, ikuti langkah-langkah berikut:
Di konsol Google Cloud, klik tombol Buat kueri baru.
Masukkan kueri GoogleSQL di atas di area teks Query editor.
Klik Run.
Langkah ketiga (opsional): Visualisasikan deret waktu yang ingin diperkirakan
Sebelum membuat model, sebaiknya lihat tampilan deret waktu input Anda. Anda dapat melakukannya menggunakan Looker Studio.
Dalam kueri GoogleSQL berikut, klausa FROM bqml_tutorial.seattle_air_quality_daily
menunjukkan bahwa Anda membuat kueri tabel seattle_air_quality_daily
di set data bqml_tutorial
yang baru saja Anda buat.
#standardSQL SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`
Untuk menjalankan kueri, ikuti langkah-langkah berikut:
Di konsol Google Cloud, klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di area teks Query editor.
#standardSQL SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`
Klik Run.
Setelah kueri ini dijalankan, outputnya akan mirip dengan screenshot berikut. Di screenshot, Anda bisa melihat bahwa deret waktu ini memiliki 3.960 titik data. Klik tombol Explore data, lalu Explore with Looker Studio. Looker Studio akan terbuka di tab baru. Selesaikan langkah-langkah berikut di tab baru.
Pada panel Chart, pilih Time series chart:
Pada panel SETUP, di bawah panel Diagram, buka bagian Metric. Tambahkan kolom pm25, temperature, dan wind_speed, lalu hapus metrik default Record Count. Anda juga dapat menetapkan rentang tanggal kustom, misalnya, 1 Januari 2019 hingga 31 Desember 2021, untuk mempersingkat deret waktu. Hal ini ditunjukkan dalam gambar berikut:
Setelah Anda menyelesaikan langkah-langkah ini, plot berikut akan muncul. Plot menunjukkan bahwa deret waktu yang dimasukkan memiliki pola musiman mingguan.
Langkah keempat: Buat model deret waktu
Selanjutnya, buat model deret waktu menggunakan data kualitas udara di atas.
Kueri GoogleSQL berikut akan membuat model yang digunakan untuk memperkirakan pm25
.
Klausa CREATE MODEL
membuat dan melatih model bernama bqml_tutorial.seattle_pm25_xreg_model
.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.seattle_pm25_xreg_model` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS_XREG', time_series_timestamp_col = 'date', time_series_data_col = 'pm25') AS SELECT date, pm25, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31')
Klausa OPTIONS(model_type='ARIMA_PLUS_XREG', time_series_timestamp_col='date', ...)
menunjukkan bahwa Anda membuat ARIMA dengan model regresor eksternal. Secara default,
auto_arima=TRUE
,
sehingga algoritma auto.ARIMA
otomatis menyesuaikan hyper-parameter dalam model ARIMA_PLUS_XREG
. Algoritma ini sesuai dengan beberapa model kandidat dan memilih
model terbaik dengan
kriteria informasi Akaike (AIC) terendah.
Selain itu, karena default-nya adalah
data_frequency='AUTO_FREQUENCY'
, proses pelatihan akan otomatis menyimpulkan
frekuensi data dari deret waktu input.
Jalankan kueri CREATE MODEL
untuk membuat dan melatih model Anda:
Di konsol Google Cloud, klik tombol Compose new query.
Masukkan kueri GoogleSQL di atas di area teks Query editor.
Klik Run.
Kueri membutuhkan waktu sekitar 20 detik untuk diselesaikan, setelah itu model Anda (
seattle_pm25_xreg_model
) akan muncul di panel navigasi. Karena kueri tersebut menggunakan pernyataanCREATE MODEL
untuk membuat model, Anda tidak akan melihat hasil kueri.
Langkah kelima: Periksa metrik evaluasi dari semua model yang dievaluasi
Setelah membuat model, Anda dapat menggunakan fungsi ML.ARIMA_EVALUATE
untuk melihat metrik evaluasi semua model kandidat yang dievaluasi
selama proses penyesuaian hyperparameter otomatis.
Dalam kueri GoogleSQL berikut, klausa FROM
menggunakan fungsi ML.ARIMA_EVALUATE
terhadap model Anda, bqml_tutorial.seattle_pm25_xreg_model
. Secara default,
kueri ini menampilkan metrik evaluasi dari semua model kandidat.
Untuk menjalankan kueri ML.ARIMA_EVALUATE
, gunakan langkah-langkah berikut:
Di konsol Google Cloud, klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di area teks Query editor.
#standardSQL SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`)
Klik Run.
Setelah kueri selesai, klik tab Results di bawah area teks kueri. Hasilnya akan terlihat mirip dengan screenshot berikut:
Hasilnya mencakup kolom berikut:
non_seasonal_p
non_seasonal_d
non_seasonal_q
has_drift
log_likelihood
AIC
variance
seasonal_periods
has_holiday_effect
has_spikes_and_dips
has_step_changes
error_message
Empat kolom berikut (
non_seasonal_{p,d,q}
danhas_drift
) menentukan model ARIMA dalam pipeline pelatihan. Tiga metrik setelah itu (log_likelihood
,AIC
, danvariance
) relevan dengan proses penyesuaian model ARIMA.Algoritma
auto.ARIMA
terlebih dahulu menggunakan pengujian KPSS untuk menentukan bahwa nilai terbaik untuknon_seasonal_d
adalah 1. Jikanon_seasonal_d
adalah 1, auto.ARIMA kemudian akan melatih 42 model ARIMA kandidat berbeda secara paralel. Perlu diingat bahwa jikanon_seasonal_d
bukan 1, auto.ARIMA akan melatih 21 model kandidat yang berbeda. Dalam contoh ini, ke-42 model kandidat sudah valid. Oleh karena itu, outputnya berisi 42 baris, dengan setiap baris dikaitkan dengan model ARIMA kandidat. Perlu diingat bahwa untuk beberapa deret waktu, beberapa model kandidat tidak valid karena model tersebut tidak dapat dibalik atau tidak diam. Model yang tidak valid ini dikecualikan dari output, yang akan membuat output memiliki kurang dari 42 baris. Model kandidat ini diurutkan oleh AIC dalam urutan menaik. Model di baris pertama memiliki AIC terendah, dan dianggap sebagai model terbaik. Model terbaik ini disimpan sebagai model akhir dan digunakan saat Anda memanggilML.FORECAST
,ML.EVALUATE
, danML.ARIMA_COEFFICIENTS
seperti yang ditunjukkan pada langkah-langkah berikut.Kolom
seasonal_periods
adalah tentang pola musiman dalam deret waktu input. Hal ini tidak ada hubungannya dengan pemodelan ARIMA karena memiliki nilai yang sama di semua baris output. Laporan ini melaporkan pola mingguan, yang sesuai ekspektasi seperti dijelaskan pada langkah kedua di atas.Kolom
has_holiday_effect
,has_spikes_and_dips
, danhas_step_changes
hanya diisi saatdecompose_time_series=TRUE
. Metrik ini tentang efek liburan, lonjakan dan penurunan, serta perubahan langkah di dalam deret waktu input, yang tidak terkait dengan pemodelan ARIMA. Oleh karena itu, keduanya sama di semua baris output, kecuali untuk model yang gagal tersebut.Kolom
error_message
menunjukkan bahwa kemungkinan error yang terjadi selama proses penyesuaianauto.ARIMA
. Kemungkinan alasannya adalah kolomnon_seasonal_p
,non_seasonal_d
,non_seasonal_q
, danhas_drift
yang dipilih tidak dapat menstabilkan deret waktu. Untuk mengambil kemungkinan pesan error dari semua model kandidat, tetapkanshow_all_candidate_models=true
.
Langkah keenam: Periksa koefisien model Anda
Fungsi ML.ARIMA_COEFFICIENTS
mengambil koefisien model dari model ARIMA_PLUS Anda,
bqml_tutorial.seattle_pm25_xreg_model
. ML.ARIMA_COEFFICIENTS
menggunakan model
sebagai satu-satunya input.
Jalankan kueri ML.ARIMA_COEFFICIENTS
:
Di konsol Google Cloud, klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di area teks Query editor.
#standardSQL SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`)
Klik Run.
Hasilnya akan terlihat seperti berikut ini:
Hasilnya mencakup kolom berikut:
ar_coefficients
ma_coefficients
intercept_or_drift
processed_input
weight
category_weights.category
category_weights.weight
ar_coefficients
menunjukkan koefisien model bagian autoregresif (AR) dari model ARIMA. Demikian pula,ma_coefficients
menunjukkan koefisien model bagian rata-rata bergerak (MA). Keduanya adalah array yang panjangnya sama dengannon_seasonal_p
dannon_seasonal_q
secara berurutan. Dari outputML.ARIMA_EVALUATE
, model terbaik seperti di baris atas memilikinon_seasonal_p
sebesar 0 dannon_seasonal_q
sebesar 5. Oleh karena itu,ar_coefficients
adalah array kosong danma_coefficients
adalah array length-5.intercept_or_drift
adalah istilah konstan dalam model ARIMA.processed_input
serta kolomweight
dancategory_weights
yang sesuai menunjukkan bobot untuk setiap fitur dan intersepsi dalam model regresi linear. Jika ini adalah fitur numerik, bobotnya ada di kolomweight
. Jika ini adalah fitur kategoris,category_weights
adalahARRAY
dariSTRUCT
denganSTRUCT
berisi nama dan bobot kategori.
Langkah ketujuh: Gunakan model Anda untuk memperkirakan deret waktu
Fungsi ML.FORECAST
memperkirakan nilai deret waktu di masa mendatang dengan interval prediksi menggunakan
model bqml_tutorial.seattle_pm25_xreg_model
dan nilai fitur mendatang.
Dalam kueri GoogleSQL berikut, klausa STRUCT(30 AS horizon, 0.8 AS confidence_level)
menunjukkan bahwa kueri memperkirakan 30 titik waktu di masa mendatang, dan menghasilkan interval prediksi dengan tingkat keyakinan 80%. ML.FORECAST
mengambil model, nilai fitur
mendatang, serta beberapa argumen opsional.
Untuk menjalankan kueri ML.FORECAST
, gunakan langkah-langkah berikut:
Di konsol Google Cloud, klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di area teks Query editor.
#standardSQL SELECT * FROM ML.FORECAST( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level), ( SELECT date, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ))
Klik Run.
Hasilnya akan terlihat seperti berikut ini:
Hasilnya mencakup kolom berikut:
forecast_timestamp
forecast_value
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_upper_bound
Baris output diurutkan dalam urutan kronologis
forecast_timestamp
. Dalam perkiraan deret waktu, prediksi interval, yang ditangkap dari batas bawah dan atas, sama pentingnya denganforecast_value
.forecast_value
adalah titik tengah interval prediksi. Interval prediksi bergantung padastandard_error
danconfidence_level
.
Langkah kedelapan: Evaluasi akurasi perkiraan dengan data aktual
Untuk mengevaluasi akurasi perkiraan dengan data aktual, Anda dapat menggunakan fungsi ML.EVALUATE
dengan model, bqml_tutorial.seattle_pm25_xreg_model
, dan tabel data aktual.
Untuk menjalankan kueri ML.EVALUATE
, gunakan langkah-langkah berikut:
Di konsol Google Cloud, klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di area teks Query editor.
#standardSQL SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, ( SELECT date, pm25, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ), STRUCT( TRUE AS perform_aggregation, 30 AS horizon))
Parameter kedua adalah data aktual dengan fitur mendatang, yang digunakan untuk memperkirakan nilai mendatang agar dibandingkan dengan data aktual. Parameter ketiga adalah struct parameter untuk fungsi ini.
Klik Run.
Hasilnya akan terlihat seperti berikut ini:
Langkah kesembilan: Jelaskan hasil perkiraan
Untuk memahami cara deret waktu diperkirakan, fungsi ML.EXPLAIN_FORECAST
memperkirakan nilai deret waktu masa mendatang dengan interval prediksi menggunakan model Anda, bqml_tutorial.seattle_pm25_xreg_model
. Pada saat yang sama, waktu mengembalikan semua komponen
terpisah dari deret waktu.
Seperti fungsi ML.FORECAST
, klausa STRUCT(30 AS horizon, 0.8 AS confidence_level)
menunjukkan bahwa kueri memperkirakan 30 titik waktu di masa mendatang dan menghasilkan interval prediksi dengan keyakinan 80%. Fungsi ML.EXPLAIN_FORECAST
menggunakan model, nilai fitur mendatang, dan beberapa argumen opsional sebagai input.
Untuk menjalankan kueri ML.EXPLAIN_FORECAST
, gunakan langkah-langkah berikut:
Di konsol Google Cloud, klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di area teks Query editor.
#standardSQL SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level), ( SELECT date, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ))
Klik Run.
Kueri ini selesai dalam waktu kurang dari satu detik. Hasilnya akan terlihat seperti berikut:
Hasilnya mencakup kolom berikut:
time_series_timestamp
time_series_type
time_series_data
time_series_adjusted_data
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_lower_bound
trend
seasonal_period_yearly
seasonal_period_quarterly
seasonal_period_monthly
seasonal_period_weekly
seasonal_period_daily
holiday_effect
spikes_and_dips
step_changes
residual
attribution_temperature
attribution_wind_speed
attribution___INTERCEPT__
Baris output diurutkan dalam urutan kronologis
time_series_timestamp
. Berbagai komponen dicantumkan sebagai kolom output. Untuk informasi selengkapnya, lihatML.EXPLAIN_FORECAST
.
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 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.
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
- Pelajari cara melakukan beberapa perkiraan deret waktu dengan satu kueri dari data perjalanan NYC Citi Bike
- Pelajari cara mempercepat ARIMA_PLUS untuk mengaktifkan perkiraan deret waktu 1 juta dalam jam.
- 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.