Menggunakan hari libur khusus dalam model perkiraan deret waktu
Tutorial ini menunjukkan cara melakukan tugas-tugas berikut:
- Membuat
model perkiraan deret waktu
ARIMA_PLUS
yang hanya menggunakan hari libur bawaan. - Membuat model perkiraan deret waktu
ARIMA_PLUS
yang menggunakan hari libur khusus selain hari libur bawaan. - Memvisualisasikan hasil yang diperkirakan dari model ini.
- Memeriksa model untuk melihat hari libur mana yang dimodelkan.
- Mengevaluasi efek hari libur khusus terhadap hasil yang diperkirakan.
- Membandingkan performa model yang hanya menggunakan hari libur bawaan dengan performa model yang menggunakan hari libur khusus selain hari libur bawaan.
Tutorial ini menggunakan tabel
publik bigquery-public-data.wikipedia.pageviews_*
.
Izin yang diperlukan
- Untuk membuat set data, Anda memerlukan izin
IAM
bigquery.datasets.create
. Untuk membuat resource koneksi, Anda memerlukan izin berikut:
bigquery.connections.create
bigquery.connections.get
Untuk membuat model, Anda memerlukan izin berikut:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
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.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- BigQuery: Anda akan dikenai biaya untuk data yang diproses di BigQuery.
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Untuk informasi lebih lanjut, lihat Harga BigQuery.
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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API BigQuery.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API BigQuery.
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.
Menyiapkan data deret waktu
Gabungkan data tayangan halaman Wikipedia untuk halaman Google I/O ke dalam satu tabel, yang dikelompokkan berdasarkan hari:
Buka halaman BigQuery.
Di panel editor SQL, jalankan pernyataan SQL berikut:
CREATE OR REPLACE TABLE `bqml_tutorial.googleio_page_views` AS SELECT DATETIME_TRUNC(datehour, DAY) AS date, SUM(views) AS views FROM `bigquery-public-data.wikipedia.pageviews_*` WHERE datehour >= '2017-01-01' AND datehour < '2023-01-01' AND title = 'Google_I/O' GROUP BY DATETIME_TRUNC(datehour, DAY)
Membuat model perkiraan deret waktu yang menggunakan hari libur bawaan
Buat model yang memperkirakan tayangan halaman harian untuk halaman "Google I/O" Wikipedia, berdasarkan data tayangan halaman sebelum 2022 dan dengan mempertimbangkan hari libur bawaan:
Buka halaman BigQuery.
Di panel editor SQL, jalankan pernyataan SQL berikut:
CREATE OR REPLACE MODEL `bqml_tutorial.forecast_googleio` OPTIONS ( model_type = 'ARIMA_PLUS', holiday_region = 'US', time_series_timestamp_col = 'date', time_series_data_col = 'views', data_frequency = 'DAILY', horizon = 365) AS SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date < '2022-01-01';
Memvisualisasikan hasil yang diperkirakan
Setelah Anda membuat model menggunakan hari libur bawaan, gabungkan data asli dari
tabel bqml_tutorial.googleio_page_views
dengan nilai yang diperkirakan dari
fungsi ML.EXPLAIN_FORECAST
,
lalu visualisasikan dengan
menggunakan Looker Studio:
Buka halaman BigQuery.
Di panel editor SQL, jalankan pernyataan SQL berikut:
SELECT original.date, original.views AS original_views, explain_forecast.time_series_adjusted_data AS adjusted_views_without_custom_holiday, FROM `bqml_tutorial.googleio_page_views` original INNER JOIN ( SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.forecast_googleio`, STRUCT(365 AS horizon)) ) explain_forecast ON TIMESTAMP(original.date) = explain_forecast.time_series_timestamp ORDER BY original.date;
Di panel Hasil kueri, klik Jelajahi data, lalu klik Jelajahi dengan Looker Studio. Looker Studio akan terbuka di tab baru.
Di tab Looker Studio, klik Tambahkan diagram, lalu klik diagram deret waktu:
Tempatkan diagram pada laporan.
Pada tab Penyiapan di panel Diagram, klik Tambahkan metrik dan pilih adjusted_views_without_custom_holiday:
Diagram tersebut terlihat mirip dengan yang berikut ini:
Anda dapat melihat bahwa model perkiraan menangkap tren umum dengan cukup baik. Namun, model ini tidak mencatat peningkatan traffic terkait acara Google I/O sebelumnya, dan tidak dapat menghasilkan perkiraan yang akurat untuk
- Bagian berikutnya menunjukkan cara menangani beberapa batasan ini.
Membuat model perkiraan deret waktu yang menggunakan hari libur bawaan dan hari libur khusus
Seperti yang bisa Anda lihat di histori Google I/O, acara Google I/O terjadi pada tanggal yang berbeda antara tahun 2017 dan 2022. Untuk mempertimbangkan variasi ini, buat model yang memperkirakan tayangan halaman untuk halaman "Google_I/O" Wikipedia hingga tahun 2022, berdasarkan data tayangan halaman dari sebelum tahun 2022, dan menggunakan hari libur khusus untuk mewakili acara Google I/O setiap tahunnya. Dalam model ini, Anda juga menyesuaikan periode efek liburan untuk mencakup tiga hari di sekitar tanggal acara, untuk mendapatkan beberapa traffic halaman potensial dengan lebih baik sebelum dan setelah acara.
Buka halaman BigQuery.
Di panel editor SQL, jalankan pernyataan SQL berikut:
CREATE OR REPLACE MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday` OPTIONS ( model_type = 'ARIMA_PLUS', holiday_region = 'US', time_series_timestamp_col = 'date', time_series_data_col = 'views', data_frequency = 'DAILY', horizon = 365) AS ( training_data AS ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date < '2022-01-01' ), custom_holiday AS ( SELECT 'US' AS region, 'GoogleIO' AS holiday_name, primary_date, 1 AS preholiday_days, 2 AS postholiday_days FROM UNNEST( [ DATE('2017-05-17'), DATE('2018-05-08'), DATE('2019-05-07'), -- cancelled in 2020 due to pandemic DATE('2021-05-18'), DATE('2022-05-11')]) AS primary_date ) );
Memvisualisasikan hasil yang diperkirakan
Setelah Anda membuat model menggunakan hari libur khusus, gabungkan data asli dari
tabel bqml_tutorial.googleio_page_views
dengan nilai yang diperkirakan dari
fungsi ML.EXPLAIN_FORECAST
,
lalu memvisualisasikannya dengan
menggunakan Looker Studio:
Buka halaman BigQuery.
Di panel editor SQL, jalankan pernyataan SQL berikut:
SELECT original.date, original.views AS original_views, explain_forecast.time_series_adjusted_data AS adjusted_views_with_custom_holiday, FROM `bqml_tutorial.googleio_page_views` original INNER JOIN ( SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`, STRUCT(365 AS horizon)) ) explain_forecast ON TIMESTAMP(original.date) = explain_forecast.time_series_timestamp ORDER BY original.date;
Di panel Hasil kueri, klik Jelajahi data, lalu klik Jelajahi dengan Looker Studio. Looker Studio akan terbuka di tab baru.
Di tab Looker Studio, klik Tambahkan diagram, klik diagram deret waktu, lalu tempatkan diagram pada laporan.
Pada tab Penyiapan di panel Diagram, klik Tambahkan metrik dan pilih adjusted_views_with_custom_holiday.
Diagram tersebut terlihat mirip dengan yang berikut ini:
Seperti yang Anda lihat, hari libur khusus meningkatkan performa model perkiraan. Sekarang, alat ini secara efektif menangkap peningkatan tayangan halaman yang disebabkan oleh Google I/O.
Memeriksa informasi hari libur
Periksa daftar hari libur yang diperhitungkan selama pemodelan
menggunakan
fungsi ML.HOLIDAY_INFO
:
Buka halaman BigQuery.
Di panel editor SQL, jalankan pernyataan SQL berikut:
SELECT * FROM ML.HOLIDAY_INFO( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
Hasilnya menunjukkan Google I/O dan hari libur bawaan dalam daftar hari libur:
Mengevaluasi efek hari libur khusus
Evaluasi efek hari libur kustom terhadap hasil yang diperkirakan
menggunakan
fungsi ML.EXPLAIN_FORECAST
:
Buka halaman BigQuery.
Di panel editor SQL, jalankan pernyataan SQL berikut:
SELECT time_series_timestamp, holiday_effect_GoogleIO, holiday_effect_US_Juneteenth, holiday_effect_Christmas, holiday_effect_NewYear FROM ML.EXPLAIN_FORECAST( model `bqml_tutorial.forecast_googleio_with_custom_holiday`, STRUCT(365 AS horizon)) WHERE holiday_effect != 0;
Hasilnya menunjukkan bahwa Google I/O memberikan kontribusi sejumlah besar efek liburan terhadap hasil yang diperkirakan:
Membandingkan performa model
Gunakan
fungsi ML.EVALUATE
untuk membandingkan performa model pertama yang dibuat tanpa hari libur khusus
dan model kedua yang dibuat dengan hari libur khusus. Untuk melihat performa
model kedua dalam memperkirakan hari libur khusus yang akan datang, tetapkan
rentang waktu ke minggu Google I/O pada tahun 2022:
Buka halaman BigQuery.
Di panel editor SQL, jalankan pernyataan SQL berikut:
SELECT "original" AS model_type, * FROM ml.evaluate( MODEL `bqml_tutorial.forecast_googleio`, ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date >= '2022-05-08' AND date < '2022-05-12' ), STRUCT( 365 AS horizon, TRUE AS perform_aggregation)) UNION ALL SELECT "with_custom_holiday" AS model_type, * FROM ml.evaluate( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`, ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date >= '2022-05-08' AND date < '2022-05-12' ), STRUCT( 365 AS horizon, TRUE AS perform_aggregation));
Hasilnya menunjukkan bahwa model kedua menawarkan peningkatan performa yang signifikan:
Pembersihan
- 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.