Memperkirakan beberapa deret waktu dengan model multi-variabel


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

Tutorial ini memperkirakan beberapa deret waktu. Nilai perkiraan 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 status, data yang diprediksi akan berisi perkiraan untuk semua titik waktu untuk Status A, lalu nilai yang diprediksi untuk semua titik waktu untuk Status B, dan seterusnya. Jika Anda ingin memperkirakan cuaca dan kolom tertentu yang berisi data negara bagian dan kota, data yang diprediksi akan berisi perkiraan untuk semua titik waktu untuk Negara Bagian A dan Kota A, lalu nilai yang diprediksi 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 Membuat perkiraan deret waktu tunggal dengan model multi-variabel.

Tujuan

Tutorial ini memandu Anda menyelesaikan tugas-tugas berikut:

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, yaitu Google Cloud, 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:

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

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 pemesanan
  • humidity: kelembapan rata-rata di lokasi toko pada tanggal pemesanan

Ikuti langkah-langkah berikut untuk membuat tabel data input:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel kueri berikut dan klik Jalankan:

    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;

Membuat 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 peramalan. Ada sekitar 1 juta kombinasi unik nomor item dan nomor toko di tabel bqml_tutorial.iowa_liquor_sales_with_weather, yang berarti ada 1 juta deret waktu yang berbeda untuk diprediksi.

Ikuti langkah-langkah berikut untuk membuat model:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel kueri berikut dan klik Jalankan:

    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 ini memerlukan waktu sekitar 38 menit untuk diselesaikan, setelah itu model multi_time_series_arimax_model akan muncul di panel Explorer. Karena kueri menggunakan pernyataan CREATE MODEL untuk membuat model, Anda tidak akan melihat hasil kueri.

Menggunakan model untuk memperkirakan data

Perkiraan nilai deret waktu mendatang 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 dari 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 diprediksi oleh model.

Ikuti langkah-langkah berikut untuk memperkirakan data dengan model:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel kueri berikut dan klik Jalankan:

    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 perkiraan untuk jumlah botol yang terjual.

    Baris output diurutkan berdasarkan nilai store_number, lalu berdasarkan nilai item_ID, lalu dalam urutan kronologis berdasarkan nilai kolom forecast_timestamp. Dalam perkiraan deret waktu, interval prediksi, seperti yang 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 menggunakan fungsi ML.EXPLAIN_FORECAST. Fungsi ML.EXPLAIN_FORECAST memperkirakan nilai deret waktu mendatang dan juga menampilkan semua komponen terpisah dari deret waktu.

Serupa 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 konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel kueri berikut dan klik Jalankan:

    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 perkiraan dan penjelasan perkiraan. Kolom output kesepuluh hingga ketujuh belas dari data perkiraan dan penjelasan perkiraan. Enam kolom output terakhir dari data perkiraan 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

Evaluasi akurasi perkiraan model dengan menjalankannya pada data yang belum dilatih oleh 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 menyediakan 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 konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel kueri berikut dan klik Jalankan:

    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

Mendeteksi 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 yang tidak wajar dengan tingkat keyakinan 95%.

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

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel kueri berikut dan klik Jalankan:

    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 konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, tempel kueri berikut dan klik Jalankan:

    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 selanjutnya