Memperkirakan beberapa deret waktu dengan model multi-variabel


Tutorial ini mengajarkan cara menggunakan model deret waktu multivariat untuk memperkirakan nilai mendatang untuk kolom tertentu, berdasarkan nilai historis beberapa fitur input.

Tutorial ini melakukan perkiraan untuk beberapa deret waktu. Nilai yang diperkirakan dihitung untuk setiap titik waktu, untuk setiap nilai dalam satu atau beberapa kolom yang ditentukan. Misalnya, jika Anda ingin memperkirakan cuaca dan menentukan kolom yang berisi data negara bagian, data yang diperkirakan akan berisi perkiraan untuk semua titik waktu untuk Negara Bagian A, lalu nilai yang diperkirakan untuk semua titik waktu untuk Negara Bagian B, dan seterusnya. Jika Anda ingin memperkirakan cuaca dan menentukan kolom yang berisi data negara bagian dan kota, data yang diperkirakan akan berisi perkiraan untuk semua titik waktu untuk Negara Bagian A dan Kota A, lalu nilai yang diperkirakan untuk semua titik waktu untuk Negara Bagian A dan Kota B, dan seterusnya.

Tutorial ini menggunakan data dari tabel publik bigquery-public-data.iowa_liquor_sales.sales dan bigquery-public-data.covid19_weathersource_com.postal_code_day_history. Tabel bigquery-public-data.iowa_liquor_sales.sales berisi data penjualan minuman keras yang dikumpulkan dari beberapa kota di negara bagian Iowa. Tabel bigquery-public-data.covid19_weathersource_com.postal_code_day_history berisi data cuaca historis, seperti suhu dan kelembapan, dari seluruh dunia.

Sebelum membaca tutorial ini, sebaiknya baca Memperkirakan deret waktu tunggal dengan model multivariat.

Tujuan

Tutorial ini memandu Anda menyelesaikan tugas-tugas berikut:

  • Membuat model deret waktu untuk memperkirakan pesanan toko minuman keras menggunakan pernyataan CREATE MODEL.
  • Mengambil nilai pesanan yang diperkirakan dari model menggunakan fungsi ML.FORECAST.
  • Mengambil komponen deret waktu, seperti tren musiman, tren, dan atribusi fitur, menggunakan fungsi ML.EXPLAIN_FORECAST. Anda dapat memeriksa komponen deret waktu ini untuk menjelaskan nilai yang diperkirakan.
  • Evaluasi akurasi model menggunakan fungsi ML.EVALUATE.
  • Deteksi anomali menggunakan model dengan fungsi ML.DETECT_ANOMALIES.

Biaya

Tutorial ini menggunakan komponen Google Cloudyang dapat ditagih, termasuk:

  • BigQuery
  • BigQuery ML

Untuk informasi selengkapnya tentang biaya BigQuery, lihat halaman harga BigQuery.

Untuk informasi selengkapnya tentang biaya BigQuery ML, lihat harga BigQuery ML.

Sebelum memulai

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure 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.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. BigQuery secara otomatis diaktifkan dalam project baru. Untuk mengaktifkan BigQuery dalam project yang sudah ada, buka

    Enable the BigQuery API.

    Enable the API

Membuat set data

Buat set data BigQuery untuk menyimpan model ML Anda.

Konsol

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka halaman BigQuery

  2. Di panel Explorer, klik nama project Anda.

  3. Klik View actions > Create dataset.

    Opsi menu 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 (multiple regions in United States).

    • Jangan ubah setelan default yang tersisa, lalu klik Create dataset.

bq

Untuk membuat set data baru, gunakan perintah bq mk dengan flag --location. Untuk daftar lengkap kemungkinan parameter, lihat referensi perintah bq mk --dataset.

  1. Buat set data bernama bqml_tutorial dengan lokasi data yang ditetapkan ke US dan deskripsi BigQuery ML tutorial dataset:

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    Perintah ini menggunakan pintasan -d, bukan flag --dataset. Jika Anda menghapus -d dan --dataset, perintah defaultnya adalah membuat set data.

  2. Pastikan set data telah dibuat:

    bq ls

API

Panggil metode datasets.insert dengan resource set data yang ditentukan.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

DataFrame BigQuery

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan BigQuery DataFrames di Panduan memulai BigQuery menggunakan BigQuery DataFrames. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi BigQuery DataFrames.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

Membuat tabel data input

Buat tabel data yang dapat Anda gunakan untuk melatih dan mengevaluasi model. Tabel ini menggabungkan kolom dari tabel bigquery-public-data.iowa_liquor_sales.sales dan bigquery-public-data.covid19_weathersource_com.postal_code_day_history untuk menganalisis pengaruh cuaca terhadap jenis dan jumlah item yang dipesan oleh toko minuman keras. Anda juga membuat kolom tambahan berikut yang dapat digunakan sebagai variabel input untuk model:

  • date: tanggal pesanan
  • store_number: nomor unik toko yang melakukan pemesanan
  • item_number: nomor unik item yang dipesan
  • bottles_sold: jumlah botol yang dipesan dari item terkait
  • temperature: suhu rata-rata di lokasi toko pada tanggal pesanan
  • humidity: kelembapan rata-rata di lokasi toko pada tanggal pesanan

Ikuti langkah-langkah berikut untuk membuat tabel data input:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

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

    CREATE OR REPLACE TABLE
      `bqml_tutorial.iowa_liquor_sales_with_weather` AS
    WITH
      sales AS (
        SELECT
          DATE,
          store_number,
          item_number,
          bottles_sold,
          SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code
        FROM
          `bigquery-public-data.iowa_liquor_sales.sales` AS sales
        WHERE
          SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL
      ),
      aggregated_sales AS (
        SELECT
          DATE,
          store_number,
          item_number,
          ANY_VALUE(zip_code) AS zip_code,
          SUM(bottles_sold) AS bottles_sold,
        FROM
          sales
        GROUP BY
          DATE,
          store_number,
          item_number
      ),
      weather AS (
        SELECT
          DATE,
          SAFE_CAST(postal_code AS INT64) AS zip_code,
          avg_temperature_air_2m_f AS temperature,
          avg_humidity_specific_2m_gpkg AS humidity,
        FROM
          `bigquery-public-data.covid19_weathersource_com.postal_code_day_history`
        WHERE
          SAFE_CAST(postal_code AS INT64) IS NOT NULL
      ),
      avg_weather AS (
        SELECT
          DATE,
          zip_code,
          AVG(temperature) AS temperature,
          AVG(humidity) AS humidity,
        FROM
          weather
        GROUP BY
          DATE,
          zip_code
      )
    SELECT
      aggregated_sales.date,
      aggregated_sales.store_number,
      aggregated_sales.item_number,
      aggregated_sales.bottles_sold,
      avg_weather.temperature AS temperature,
      avg_weather.humidity AS humidity
    FROM
      aggregated_sales
      LEFT JOIN avg_weather ON aggregated_sales.zip_code=avg_weather.zip_code
      AND aggregated_sales.DATE=avg_weather.DATE;

Buat model deret waktu

Buat model deret waktu untuk memperkirakan botol yang terjual untuk setiap kombinasi ID toko dan ID item, untuk setiap tanggal dalam tabel bqml_tutorial.iowa_liquor_sales_with_weather sebelum 1 September 2022. Gunakan suhu dan kelembapan rata-rata lokasi toko pada setiap tanggal sebagai fitur yang akan dievaluasi selama perkiraan. Ada sekitar 1 juta kombinasi unik nomor item dan nomor toko dalam tabel bqml_tutorial.iowa_liquor_sales_with_weather, yang berarti ada 1 juta deret waktu berbeda yang akan diprediksi.

Ikuti langkah-langkah berikut untuk membuat model:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

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

    CREATE
    OR REPLACE MODEL `bqml_tutorial.multi_time_series_arimax_model`
    OPTIONS(
      model_type = 'ARIMA_PLUS_XREG',
      time_series_id_col = ['store_number', 'item_number'],
      time_series_data_col = 'bottles_sold',
      time_series_timestamp_col = 'date'
    )
    AS SELECT
      *
    FROM
      `bqml_tutorial.iowa_liquor_sales_with_weather`
    WHERE
      DATE < DATE('2022-09-01');

    Kueri memerlukan waktu sekitar 38 menit untuk diselesaikan, setelah itu model multi_time_series_arimax_model akan muncul di panel Explorer. Karena kueri ini menggunakan pernyataan CREATE MODEL untuk membuat model, Anda tidak akan melihat hasil kueri.

Menggunakan model untuk memperkirakan data

Perkirakan nilai deret waktu di masa mendatang dengan menggunakan fungsi ML.FORECAST.

Dalam kueri GoogleSQL berikut, klausa STRUCT(5 AS horizon, 0.8 AS confidence_level) menunjukkan bahwa kueri memperkirakan 5 titik waktu di masa mendatang, dan menghasilkan interval prediksi dengan tingkat keyakinan 80%.

Tanda tangan data input untuk fungsi ML.FORECAST sama dengan tanda tangan data untuk data pelatihan yang Anda gunakan untuk membuat model. Kolom bottles_sold tidak disertakan dalam input, karena itulah data yang coba diperkirakan oleh model.

Ikuti langkah-langkah berikut untuk memperkirakan data dengan model:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

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

    SELECT
      *
    FROM
      ML.FORECAST (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (5 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            * EXCEPT (bottles_sold)
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE>=DATE('2022-09-01')
        )
      );

    Hasilnya akan terlihat seperti berikut:

    Data yang diperkirakan untuk jumlah botol yang terjual.

    Baris output diurutkan berdasarkan nilai store_number, lalu berdasarkan nilai item_ID, kemudian dalam urutan kronologis berdasarkan nilai kolom forecast_timestamp. Dalam perkiraan deret waktu, interval prediksi, sebagaimana diwakili oleh nilai kolom prediction_interval_lower_bound dan prediction_interval_upper_bound, sama pentingnya dengan nilai kolom forecast_value. Nilai forecast_value adalah titik tengah interval prediksi. Interval prediksi bergantung pada nilai kolom standard_error dan confidence_level.

    Untuk mengetahui informasi selengkapnya tentang kolom output, lihat ML.FORECAST.

Menjelaskan hasil perkiraan

Anda bisa mendapatkan metrik keterjelasan selain data perkiraan dengan menggunakan fungsi ML.EXPLAIN_FORECAST. Fungsi ML.EXPLAIN_FORECAST memperkirakan nilai deret waktu di masa mendatang dan juga menampilkan semua komponen terpisah dari deret waktu.

Mirip dengan fungsi ML.FORECAST, klausa STRUCT(5 AS horizon, 0.8 AS confidence_level) yang digunakan dalam fungsi ML.EXPLAIN_FORECAST menunjukkan bahwa kueri memperkirakan 30 titik waktu di masa mendatang dan menghasilkan interval prediksi dengan keyakinan 80%.

Fungsi ML.EXPLAIN_FORECAST menyediakan data historis dan data perkiraan. Untuk hanya melihat data perkiraan, tambahkan opsi time_series_type ke kueri dan tentukan forecast sebagai nilai opsi.

Ikuti langkah-langkah berikut untuk menjelaskan hasil model:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

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

    SELECT
      *
    FROM
      ML.EXPLAIN_FORECAST (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (5 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            * EXCEPT (bottles_sold)
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    Hasilnya akan terlihat seperti berikut:

    Sembilan kolom output pertama dari data yang diperkirakan dan penjelasan perkiraan. Kolom output kesepuluh hingga ketujuh belas dari data yang diperkirakan dan penjelasan perkiraan. Enam kolom output terakhir dari data yang diperkirakan dan penjelasan perkiraan.

    Baris output diurutkan secara kronologis berdasarkan nilai kolom time_series_timestamp.

    Untuk mengetahui informasi selengkapnya tentang kolom output, lihat ML.EXPLAIN_FORECAST.

Mengevaluasi akurasi perkiraan

Mengevaluasi akurasi perkiraan model dengan menjalankannya pada data yang belum digunakan untuk melatih model. Anda dapat melakukannya dengan menggunakan fungsi ML.EVALUATE. Fungsi ML.EVALUATE mengevaluasi setiap deret waktu secara terpisah.

Dalam kueri GoogleSQL berikut, pernyataan SELECT kedua memberikan data dengan fitur mendatang, yang digunakan untuk memperkirakan nilai mendatang agar dibandingkan dengan data aktual.

Ikuti langkah-langkah berikut untuk mengevaluasi akurasi model:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

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

    SELECT
      *
    FROM
      ML.EVALUATE (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        (
          SELECT
            *
          FROM
           `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    Hasilnya akan terlihat seperti berikut:

    Metrik evaluasi untuk model.

    Untuk mengetahui informasi selengkapnya tentang kolom output, lihat ML.EVALUATE.

Menggunakan model untuk mendeteksi anomali

Deteksi anomali dalam data pelatihan menggunakan fungsi ML.DETECT_ANOMALIES.

Dalam kueri berikut, klausa STRUCT(0.95 AS anomaly_prob_threshold) menyebabkan fungsi ML.DETECT_ANOMALIES mengidentifikasi titik data anomali dengan tingkat keyakinan 95%.

Ikuti langkah-langkah berikut untuk mendeteksi anomali dalam data pelatihan:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

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

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (0.95 AS anomaly_prob_threshold)
      );

    Hasilnya akan terlihat seperti berikut:

    Informasi deteksi anomali untuk data pelatihan.

    Kolom anomaly_probability dalam hasil mengidentifikasi kemungkinan bahwa nilai kolom bottles_sold tertentu bersifat anomali.

    Untuk mengetahui informasi selengkapnya tentang kolom output, lihat ML.DETECT_ANOMALIES.

Mendeteksi anomali dalam data baru

Deteksi anomali dalam data baru dengan memberikan data input ke fungsi ML.DETECT_ANOMALIES. Data baru harus memiliki tanda tangan data yang sama dengan data pelatihan.

Ikuti langkah-langkah berikut untuk mendeteksi anomali dalam data baru:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

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

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (0.95 AS anomaly_prob_threshold),
        (
          SELECT
            *
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    Hasilnya akan terlihat seperti berikut:

    Informasi deteksi anomali untuk data baru.

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus resource satu per satu.

  • Anda dapat menghapus project yang dibuat.
  • Atau, Anda dapat menyimpan project dan menghapus set data.

Menghapus set data

Jika project Anda dihapus, semua set data dan semua tabel dalam project akan dihapus. Jika ingin menggunakan kembali project tersebut, Anda dapat menghapus set data yang dibuat dalam tutorial ini:

  1. Jika perlu, buka halaman BigQuery di konsolGoogle Cloud .

    Buka halaman BigQuery

  2. Di navigasi, klik set data bqml_tutorial yang telah Anda buat.

  3. Klik Delete dataset di sisi kanan jendela. Tindakan ini akan menghapus set data, tabel, dan semua data.

  4. Pada dialog Hapus set data, konfirmasi perintah hapus dengan mengetikkan nama set data Anda (bqml_tutorial), lalu klik Hapus.

Menghapus project Anda

Untuk menghapus project:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Langkah berikutnya