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_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 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.

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.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Untuk informasi lebih lanjut, lihat Harga BigQuery.

Sebelum memulai

  1. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

Membuat set data

Buat set data BigQuery untuk menyimpan model ML Anda.

Konsol

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka halaman BigQuery

  2. Di panel Explorer, klik nama project Anda.

  3. Klik View actions > Create dataset.

  4. 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.

  1. Buat set data bernama bqml_tutorial dengan lokasi data ditetapkan ke US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. 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:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. 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:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. 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:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. 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;
  3. Di panel Hasil kueri, klik Open in > Data Studio. Data Studio akan terbuka di tab baru.

  4. Di tab Data Studio, klik Tambahkan diagram, lalu klik diagram deret waktu:

    Menambahkan diagram deret waktu.

    Tempatkan diagram pada laporan.

  5. Pada tab Penyiapan di panel Diagram, klik Tambahkan metrik dan pilih adjusted_views_without_custom_holiday:

    Menambahkan metrik tambahan.

    Diagramnya akan terlihat seperti berikut:

    Diagram deret waktu yang berisi hasil perkiraan menggunakan hari libur bawaan

    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

    1. 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.

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. 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:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. 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;
  3. Di panel Hasil kueri, klik Jelajahi data, lalu klik Jelajahi dengan Data Studio. Data Studio akan terbuka di tab baru.

  4. Di tab Data Studio, klik Tambahkan diagram, klik diagram deret waktu, lalu tempatkan diagram pada laporan.

  5. Pada tab Penyiapan di panel Diagram, klik Tambahkan metrik dan pilih adjusted_views_with_custom_holiday.

    Diagramnya akan terlihat seperti berikut:

    Diagram deret waktu yang berisi hasil perkiraan menggunakan hari libur khusus

    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:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. 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:

    Hasil dari fungsi ML.HOLIDAY_INFO.

Mengevaluasi efek hari libur khusus

Evaluasi efek hari libur kustom terhadap hasil yang diperkirakan menggunakan fungsi ML.EXPLAIN_FORECAST:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. 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:

    Hasil dari fungsi ML.EXPLAIN_FORECAST.

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:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. 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:

    Hasil dari fungsi ML.EXPLAIN_FORECAST.

Pembersihan

  1. Di Konsol Google Cloud , buka halaman Manage resources.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.