Menggunakan hari libur kustom dalam model perkiraan deret waktu ARIMA_PLUS
Tutorial ini menunjukkan cara melakukan tugas-tugas berikut:
- Membuat
model perkiraan deret waktu
ARIMA_PLUSyang hanya menggunakan hari libur bawaan. - Membuat model perkiraan deret waktu
ARIMA_PLUSyang 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 model, Anda memerlukan izin berikut:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Untuk menjalankan inferensi, Anda memerlukan izin berikut:
bigquery.models.getDatabigquery.jobs.create
Untuk mengetahui informasi lebih lanjut tentang peran dan izin IAM di BigQuery, baca Pengantar IAM.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
- BigQuery: You incur costs for the data you process in BigQuery.
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Untuk informasi lebih lanjut, lihat 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Membuat set data
Buat set data BigQuery untuk menyimpan model ML Anda.
Konsol
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.
Jangan ubah setelan default yang tersisa, lalu klik Create dataset.
bq
Untuk membuat set data baru, gunakan
perintah bq mk --dataset.
Buat set data bernama
bqml_tutorialdengan lokasi data ditetapkan keUS.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Pastikan set data telah dibuat:
bq ls
API
Panggil metode datasets.insert dengan resource set data yang ditentukan.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
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 perkiraan
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 Data 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 Open in > Data Studio. Data Studio akan terbuka di tab baru.
Di tab Data 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:
Diagramnya akan terlihat seperti berikut:
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 perkiraan
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 visualisasikan dengan
menggunakan Data 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 Data Studio. Data Studio akan terbuka di tab baru.
Di tab Data 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.
Diagramnya akan terlihat seperti berikut:
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 resources.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.