Memperkirakan deret waktu tunggal dengan model multivariat TimesFM

Tutorial ini mengajarkan cara melakukan perkiraan multivariat di seluruh deret waktu tunggal menggunakan fungsi AI.FORECAST dengan model TimesFM 3.0 yang sudah ada di BigQuery ML. Peramalan multivariat membantu Anda meningkatkan akurasi perkiraan dengan menggabungkan variabel lain yang memengaruhi target.

Tutorial ini menunjukkan cara memperkirakan penjualan vodka dan wiski dengan menggabungkan nilai transaksi historis (kovariat masa lalu) dan apakah tanggalnya adalah akhir pekan (kovariat masa depan).

Tujuan

  • Siapkan satu set data terpadu untuk perkiraan multivariat.
  • Gunakan fungsi AI.FORECAST dengan model TimesFM 3.0 untuk membuat prediksi.

Biaya

Tutorial ini menggunakan komponen Google Cloudyang dapat ditagih, termasuk:

  • BigQuery
  • BigQuery ML

Untuk mengetahui informasi selengkapnya, lihat Harga BigQuery dan Harga BigQuery ML.

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

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

  6. Aktifkan BigQuery API, jika belum diaktifkan.

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    Mengaktifkan API

    Untuk project baru, BigQuery API diaktifkan secara otomatis.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tugas dalam tutorial ini, minta administrator Anda untuk memberi Anda peran IAM berikut:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk menyelesaikan tugas dalam tutorial ini. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk menyelesaikan tugas dalam tutorial ini:

  • Buat set data: bigquery.datasets.create
  • Buat model:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Jalankan inferensi:
    • bigquery.models.getData
    • bigquery.jobs.create

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Untuk mengetahui informasi lebih lanjut tentang peran dan izin IAM di BigQuery, baca Pengantar IAM.

Menyiapkan data input

Tidak seperti model multivariat lainnya yang mungkin memerlukan tabel terpisah untuk kovariat historis dan mendatang, fungsi AI.FORECAST dengan TimesFM 3.0 mengharapkan satu tabel atau kueri input.

Sebelum menjalankan perkiraan, pastikan data Anda memenuhi persyaratan berikut:

  • Baris historis: berisi nilai non-null untuk stempel waktu, target, dan kovariat masa lalu.
  • Baris mendatang: hanya berisi nilai non-null untuk stempel waktu dan kovariat mendatang. Kolom target dan kolom kovariat sebelumnya harus ditetapkan ke NULL untuk baris mendatang ini.

Tabel input Anda harus berisi kolom dengan data berikut:

  • Tanggal penjualan.
  • Jumlah botol vodka yang terjual pada tanggal tersebut. Ini adalah kolom target.
  • Jumlah botol wiski yang terjual pada tanggal tersebut. Ini adalah kolom target.
  • Nilai transaksi rata-rata pada tanggal tersebut. Ini adalah kovariat sebelumnya yang digunakan dalam prakiraan.
  • Apakah tanggal tersebut adalah akhir pekan. Ini adalah kovariat masa depan yang digunakan dalam peramalan.

Memperkirakan deret waktu multivariat tunggal

Kueri berikut memperkirakan jumlah botol vodka dan wiski yang terjual selama dua minggu pertama bulan Juli 2023 di toko nomor 2633. Model ini menggunakan nilai transaksi rata-rata sebagai kovariat masa lalu dan apakah tanggalnya adalah akhir pekan sebagai kovariat masa depan.

Ikuti langkah-langkah berikut untuk memperkirakan data dengan model TimesFM 3.0:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel kueri berikut, lalu klik Run:

    WITH historical_sales AS (
      SELECT
        date AS sales_date,
        store_number,
        SUM(CASE WHEN category_name LIKE '%VODKA%' THEN bottles_sold ELSE 0 END) AS vodka_bottles,
        SUM(CASE WHEN category_name LIKE '%WHISKEY%' THEN bottles_sold ELSE 0 END) AS whiskey_bottles,
        AVG(sale_dollars) AS avg_transaction_value,                          -- Past covariate
        IF(EXTRACT(DAYOFWEEK FROM date) IN (1, 7), 1.0, 0.0) AS is_weekend   -- Future covariate
      FROM `bigquery-public-data.iowa_liquor_sales.sales`
      WHERE date BETWEEN '2023-01-01' AND '2023-06-30'
        AND store_number = '2633'
      GROUP BY sales_date, store_number
    ),
    future_horizon AS (
      SELECT
        future_date AS sales_date,
        store_number,
        CAST(NULL AS INT64) AS vodka_bottles,
        CAST(NULL AS INT64) AS whiskey_bottles,
        CAST(NULL AS FLOAT64) AS avg_transaction_value,
        IF(EXTRACT(DAYOFWEEK FROM future_date) IN (1, 7), 1.0, 0.0) AS is_weekend
      FROM UNNEST(GENERATE_DATE_ARRAY('2023-07-01', '2023-07-14')) AS future_date
      CROSS JOIN (SELECT DISTINCT store_number FROM historical_sales)
    ),
    combined_sales AS (
      SELECT * FROM historical_sales
      UNION ALL
      SELECT * FROM future_horizon
    )
    SELECT
      FORMAT_DATE('%Y-%m-%d', sales_date) AS sales_date,
      vodka_bottles.value AS vodka_value,
      vodka_bottles.prediction_interval_lower_bound AS vodka_lower,
      vodka_bottles.prediction_interval_upper_bound AS vodka_upper,
      whiskey_bottles.value AS whiskey_value,
      whiskey_bottles.prediction_interval_lower_bound AS whiskey_lower,
      whiskey_bottles.prediction_interval_upper_bound AS whiskey_upper
    FROM AI.FORECAST(
      TABLE combined_sales,
      model => 'TimesFM 3.0',
      timestamp_col => 'sales_date',
      target_cols => ['vodka_bottles', 'whiskey_bottles'],
      past_covariate_cols => ['avg_transaction_value'],
      future_covariate_cols => ['is_weekend'],
      id_cols => ['store_number'],
      horizon => 14,
      confidence_level => 0.90
    );
    

Outputnya mirip dengan berikut ini, dengan nilai yang dibulatkan agar lebih jelas:

+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| sales_date | vodka_value | vodka_lower | vodka_upper | whiskey_value | whiskey_lower | whiskey_upper |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| 2023-07-01 | 408         | -334        | 1977        | 21            | -34           | 113           |
| 2023-07-02 | 806         | -281        | 2992        | 29            | -23           | 149           |
| ...        | ...         | ...         | ...         | ...           | ...           | ...           |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project Anda

  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.

Langkah berikutnya