Membatasi nilai yang diperkirakan untuk model deret waktu `ARIMA_PLUS`
Tutorial ini mengajarkan cara menggunakan batas untuk mempersempit hasil perkiraan yang ditampilkan oleh model deret waktu ARIMA_PLUS
. Dalam tutorial ini, Anda akan membuat dua model deret waktu untuk data yang sama, satu model yang menggunakan batas dan satu model yang tidak menggunakan batas. Dengan begitu, Anda dapat membandingkan hasil yang ditampilkan oleh model dan memahami perbedaan yang dihasilkan oleh penentuan batas.
Anda menggunakan data
new_york.citibike_trips
untuk melatih model dalam tutorial ini. Set data ini berisi informasi tentang perjalanan Citi Bike di New York City.
Sebelum mengikuti tutorial ini, Anda harus memahami perkiraan deret waktu tunggal. Selesaikan tutorial Perkiraan deret waktu tunggal dari data Google Analytics untuk pengantar topik ini.
Izin yang Diperlukan
Untuk membuat set data, Anda memerlukan izin IAM
bigquery.datasets.create
.Untuk membuat model, Anda memerlukan izin berikut:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Untuk menjalankan inferensi, Anda memerlukan izin berikut:
bigquery.models.getData
bigquery.jobs.create
Untuk mengetahui informasi lebih lanjut tentang peran dan izin IAM di BigQuery, baca Pengantar IAM.
Tujuan
Dalam tutorial ini, Anda akan menggunakan:
- Pernyataan
CREATE MODEL
: untuk membuat model deret waktu. - Fungsi
ML.FORECAST
: untuk memperkirakan total kunjungan harian.
Biaya
Tutorial ini menggunakan komponen Google Cloudyang 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
- 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.
-
Enable the BigQuery API.
-
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.
-
Enable the BigQuery API.
Di Google Cloud konsol, 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).
Jangan ubah setelan default yang tersisa, lalu klik Create dataset.
Buat set data bernama
bqml_tutorial
dengan lokasi data yang ditetapkan keUS
dan deskripsiBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Perintah ini menggunakan pintasan
-d
, bukan flag--dataset
. Jika Anda menghapus-d
dan--dataset
, perintah defaultnya adalah membuat set data.Pastikan set data telah dibuat:
bq ls
Di konsol Google Cloud , klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di editor kueri.
#standardSQL SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips GROUP BY date
Klik Run. Hasil kuerinya mirip dengan berikut ini.
Gunakan konsol Google Cloud untuk memetakan data deret waktu. Di panel Query results, klik tab Chart. Di panel Konfigurasi diagram, pilih Batang untuk Jenis diagram:
Di konsol Google Cloud , klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di editor kueri.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id') AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Klik Run.
Kueri ini selesai dalam sekitar 80 detik, setelah itu model Anda (
nyc_citibike_arima_model
) akan muncul di panel Explorer. Karena kueri tersebut menggunakan pernyataanCREATE MODEL
untuk membuat model, tidak ada hasil kueri.Di konsol Google Cloud , klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di editor kueri.
#standardSQL SELECT forecast_timestamp AS forecast_timestamp, start_station_id AS start_station_id, history_value AS history_value, forecast_value AS forecast_value FROM ( ( SELECT DATE(forecast_timestamp) AS forecast_timestamp, NULL AS history_value, forecast_value AS forecast_value, start_station_id AS start_station_id, FROM ML.FORECAST( MODEL bqml_tutorial.`nyc_citibike_arima_model`, STRUCT( 365 AS horizon, 0.9 AS confidence_level)) ) UNION ALL ( SELECT DATE(date_name) AS forecast_timestamp, num_trips AS history_value, NULL AS forecast_value, start_station_id AS start_station_id, FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips, start_station_id AS start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name, start_station_id ) ) ) WHERE start_station_id = 79 ORDER BY forecast_timestamp, start_station_id
Klik Run. Hasil kuerinya mirip dengan berikut ini:
Gunakan konsol Google Cloud untuk memetakan data deret waktu. Di panel Query results, klik tab Chart:
Di konsol Google Cloud , klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di editor kueri.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id', forecast_limit_lower_bound = 0) AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Klik Run.
Kueri ini selesai dalam waktu sekitar 100 detik, setelah itu model Anda (
nyc_citibike_arima_model_with_limits
) akan muncul di panel Explorer. Karena kueri tersebut menggunakan pernyataanCREATE MODEL
untuk membuat model, tidak ada hasil kueri.Di konsol Google Cloud , klik tombol Compose new query.
Masukkan kueri GoogleSQL berikut di editor kueri.
#standardSQL SELECT forecast_timestamp AS forecast_timestamp, start_station_id AS start_station_id, history_value AS history_value, forecast_value AS forecast_value FROM ( ( SELECT DATE(forecast_timestamp) AS forecast_timestamp, NULL AS history_value, forecast_value AS forecast_value, start_station_id AS start_station_id, FROM ML.FORECAST( MODEL bqml_tutorial.`nyc_citibike_arima_model`, STRUCT( 365 AS horizon, 0.9 AS confidence_level)) ) UNION ALL ( SELECT DATE(date_name) AS forecast_timestamp, num_trips AS history_value, NULL AS forecast_value, start_station_id AS start_station_id, FROM ( SELECT EXTRACT(DATE FROM starttime) AS date_name, COUNT(*) AS num_trips, start_station_id AS start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date_name, start_station_id ) ) ) WHERE start_station_id = 79 ORDER BY forecast_timestamp, start_station_id
Klik Run.
Gunakan konsol Google Cloud untuk memetakan data deret waktu. Di panel Query results, klik tab Chart:
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.- 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.
- 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 lebih lanjut konsol Google Cloud , lihat Menggunakan konsol Google Cloud .
Membuat set data
Buat set data BigQuery untuk menyimpan model ML Anda.
Konsol
bq
Untuk membuat set data baru, gunakan perintah bq mk
dengan flag --location
. Untuk daftar lengkap kemungkinan parameter, lihat referensi
perintah bq mk --dataset
.
API
Panggil metode datasets.insert
dengan resource set data yang ditentukan.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
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 mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.
Visualisasikan deret waktu yang ingin Anda perkirakan
Sebelum membuat model, sebaiknya lihat tampilan deret waktu input Anda.
SQL
Dalam kueri berikut, klausa FROM bigquery-public-data.new_york.citibike_trips
menunjukkan bahwa Anda melakukan kueri pada tabel citibike_trips
dalam
set data new_york
.
Dalam pernyataan SELECT
, kueri menggunakan
fungsi EXTRACT
untuk mengekstrak informasi tanggal dari kolom starttime
. Kueri ini menggunakan
klausa COUNT(*)
untuk mendapatkan jumlah total harian perjalanan Citi Bike.
#standardSQL SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data`.new_york.citibike_trips GROUP BY date
Untuk menjalankan kueri, ikuti langkah-langkah berikut:
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 mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.
Dalam contoh berikut, bigquery-public-data.new_york.citibike_trips
menunjukkan bahwa Anda membuat kueri tabel citibike_trips
dalam
set data new_york
.
Hasilnya akan mirip dengan berikut ini:
Membuat model deret waktu
Buat model deret waktu menggunakan data perjalanan NYC Citi Bike.
Kueri GoogleSQL berikut membuat model yang memperkirakan total perjalanan
sepeda setiap harinya. Pernyataan CREATE MODEL
membuat dan melatih model bernama bqml_tutorial.nyc_citibike_arima_model
.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id') AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Klausa OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
menunjukkan bahwa Anda membuat
model deret waktu
berbasis ARIMA. Secara default,
auto_arima=TRUE
,
sehingga algoritma auto.ARIMA
akan otomatis menyesuaikan hyperparameter dalam
model ARIMA_PLUS
. Algoritma ini sesuai dengan beberapa model kandidat dan memilih
model terbaik dengan
kriteria informasi Akaike (AIC) terendah.
Selain itu, karena defaultnya adalah
data_frequency='AUTO_FREQUENCY'
, proses pelatihan akan otomatis menyimpulkan
frekuensi data dari input deret waktu. Pernyataan CREATE MODEL
menggunakan
decompose_time_series=TRUE
secara default, sehingga bagian histori dan perkiraan deret waktu disimpan dalam model. Menetapkan parameter time_series_id_col = 'start_station_id'
menyebabkan model menyesuaikan dan memperkirakan beberapa deret waktu menggunakan satu kueri berdasarkan start_station_id
. Anda dapat menggunakan informasi ini untuk lebih memahami cara perkiraan deret waktu
dengan mengambil data komponen deret waktu seperti periode musiman.
Jalankan kueri CREATE MODEL
untuk membuat dan melatih model Anda:
Perkirakan deret waktu dan visualisasikan hasilnya
Untuk menjelaskan cara perkiraan deret waktu, visualisasikan semua komponen
deret waktu, seperti keadaan musiman dan tren, menggunakan
fungsi
ML.FORECAST
.
Untuk melakukannya, ikuti langkah-langkah ini:
Diagram menunjukkan bahwa nilai perkiraan untuk jumlah total perjalanan Citi Bike harian dengan start_station_id=79
adalah angka negatif, yang tidak berguna. Menggunakan model dengan batas akan meningkatkan kualitas data perkiraan.
Membuat model deret waktu dengan batas
Buat model deret waktu dengan batas, menggunakan data perjalanan NYC Citi Bike.
Kueri GoogleSQL berikut membuat model yang memperkirakan total perjalanan
sepeda setiap harinya. Pernyataan CREATE MODEL
membuat dan melatih model bernama bqml_tutorial.nyc_citibike_arima_model_with_limits
.
Perbedaan utama antara model ini dan model yang Anda buat sebelumnya adalah penambahan opsi forecast_limit_lower_bound=0
. Opsi ini menyebabkan model hanya memperkirakan nilai yang lebih besar dari 0, berdasarkan nilai dalam kolom yang ditentukan oleh argumen time_series_data_col
, dalam hal ini num_trips
.
#standardSQL CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model OPTIONS ( model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_id', forecast_limit_lower_bound = 0) AS SELECT EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips, start_station_id FROM `bigquery-public-data`.new_york.citibike_trips WHERE starttime > '2014-07-11' AND starttime < '2015-02-11' GROUP BY date, start_station_id;
Jalankan kueri CREATE MODEL
untuk membuat dan melatih model Anda:
Perkirakan deret waktu dengan menggunakan model dengan batas
Model ARIMA PLUS mendeteksi bahwa jumlah total harian perjalanan Citi Bike dengan start_station_id=79
menurun. Nilai perkiraan mendatang akan mengikuti tren ini dan memberikan angka perkiraan yang relatif lebih kecil seiring berjalannya waktu. Diagram menunjukkan bahwa nilai perkiraan untuk jumlah total perjalanan harian Citi Bike dengan start_station_id=79
adalah angka positif, yang lebih berguna. Model dengan batas mendeteksi bahwa jumlah total perjalanan Citi Bike harian dengan start_station_id=79
menurun, tetapi masih memberikan nilai perkiraan yang bermakna.
Seperti yang ditunjukkan dalam tutorial ini, opsi forecast_limit_lower_bound
dan forecast_limit_upper_bound
dapat membantu Anda mendapatkan nilai perkiraan yang lebih bermakna dalam skenario serupa dengan yang ditunjukkan di sini, seperti saat memperkirakan harga saham atau angka penjualan di masa mendatang.
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:
Menghapus project Anda
Untuk menghapus project: