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. Pengguna baru Google Cloud 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. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API BigQuery.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan API BigQuery.

    Mengaktifkan API

Membuat set data

Buat set data BigQuery untuk menyimpan model ML Anda:

  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.

    Buat set data.

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

      Halaman "Buat set data".

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

  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 Jelajahi data, lalu klik Jelajahi dengan Looker Studio. Looker Studio akan terbuka di tab baru.

  4. Di tab Looker 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.

    Diagram tersebut terlihat mirip dengan yang berikut ini:

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

  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 Looker Studio. Looker Studio akan terbuka di tab baru.

  4. Di tab Looker 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.

    Diagram tersebut terlihat mirip dengan yang berikut ini:

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

    Buka Manage 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.