Memperkirakan satu 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 satu deret waktu. Nilai perkiraan dihitung sekali untuk setiap titik waktu dalam data input.

Tutorial ini menggunakan data dari set data publik bigquery-public-data.epa_historical_air_quality. Set data ini berisi informasi tentang materi partikulat harian (PM2.5), suhu, dan informasi kecepatan angin yang dikumpulkan dari beberapa kota di AS.

Tujuan

Tutorial ini memandu Anda menyelesaikan tugas-tugas berikut:

Biaya

Tutorial ini menggunakan komponen Google Cloud yang 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. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

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

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

    Buka pemilih project

  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

    Aktifkan API BigQuery.

    Mengaktifkan API

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.

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 beberapa tabel dalam set data bigquery-public-data.epa_historical_air_quality untuk memberikan data cuaca harian. Anda juga membuat kolom berikut untuk digunakan sebagai variabel input untuk model:

  • date: tanggal pengamatan
  • pm25 nilai rata-rata PM2,5 untuk setiap hari
  • wind_speed: kecepatan angin rata-rata untuk setiap hari
  • temperature: suhu tertinggi untuk setiap hari

Dalam kueri GoogleSQL berikut, klausa FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary menunjukkan bahwa Anda membuat kueri tabel *_daily_summary di set data epa_historical_air_quality. Tabel ini adalah tabel yang dipartisi.

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 TABLE `bqml_tutorial.seattle_air_quality_daily`
    AS
    WITH
      pm25_daily AS (
        SELECT
          avg(arithmetic_mean) AS pm25, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary`
        WHERE
          city_name = 'Seattle'
          AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass'
        GROUP BY date_local
      ),
      wind_speed_daily AS (
        SELECT
          avg(arithmetic_mean) AS wind_speed, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.wind_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant'
        GROUP BY date_local
      ),
      temperature_daily AS (
        SELECT
          avg(first_max_value) AS temperature, date_local AS date
        FROM
          `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary`
        WHERE
          city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature'
        GROUP BY date_local
      )
    SELECT
      pm25_daily.date AS date, pm25, wind_speed, temperature
    FROM pm25_daily
    JOIN wind_speed_daily USING (date)
    JOIN temperature_daily USING (date);

Memvisualisasikan data input

Sebelum membuat model, Anda dapat memvisualisasikan data deret waktu input secara opsional untuk mendapatkan gambaran distribusi. Anda dapat melakukannya menggunakan Looker Studio.

Ikuti langkah-langkah berikut untuk memvisualisasikan data deret waktu:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

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

    SELECT
      *
    FROM
      `bqml_tutorial.seattle_air_quality_daily`;
  3. Setelah kueri selesai, klik Explore data > Explore with Looker Studio. Looker Studio akan terbuka di tab baru. Selesaikan langkah-langkah berikut di tab baru.

  4. Di Looker Studio, klik Sisipkan > Diagram deret waktu.

  5. Di panel Chart, pilih tab Setup.

  6. Di bagian Metric, tambahkan kolom pm25, temperature, dan wind_speed, lalu hapus metrik default Record Count. Diagram yang dihasilkan akan terlihat mirip dengan berikut ini:

    Diagram yang menampilkan cuaca dari waktu ke waktu.

    Melihat diagram, Anda dapat melihat bahwa deret waktu input memiliki pola musiman mingguan.

Membuat model deret waktu

Buat model deret waktu untuk memperkirakan nilai materi partikulat, seperti yang diwakili oleh kolom pm25, menggunakan nilai kolom pm25, wind_speed, dan temperature sebagai variabel input. Latih model pada data kualitas udara dari tabel bqml_tutorial.seattle_air_quality_daily, dengan memilih data yang dikumpulkan antara 1 Januari 2012 dan 31 Desember 2020.

Dalam kueri berikut, klausa OPTIONS(model_type='ARIMA_PLUS_XREG', time_series_timestamp_col='date', ...) menunjukkan bahwa Anda membuat ARIMA dengan model regresor eksternal. Opsi auto_arima dalam pernyataan CREATE MODEL secara default ditetapkan ke TRUE, sehingga algoritma auto.ARIMA akan otomatis menyesuaikan hyperparameter dalam model. Algoritma ini cocok dengan beberapa model kandidat dan memilih model terbaik, yaitu model dengan kriteria informasi Akaike (AIC) terendah. Opsi data_frequency dari pernyataan CREATE MODEL secara default ditetapkan ke AUTO_FREQUENCY, sehingga proses pelatihan akan otomatis menyimpulkan frekuensi data dari deret waktu input. Opsi decompose_time_series dari pernyataan CREATE MODEL secara default ditetapkan ke TRUE, sehingga informasi tentang data deret waktu ditampilkan saat Anda mengevaluasi model di langkah berikutnya.

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.seattle_pm25_xreg_model`
      OPTIONS (
        MODEL_TYPE = 'ARIMA_PLUS_XREG',
        time_series_timestamp_col = 'date',  # Identifies the column that contains time points
        time_series_data_col = 'pm25')       # Identifies the column to forecast
    AS
    SELECT
      date,                                  # The column that contains time points
      pm25,                                  # The column to forecast
      temperature,                           # Temperature input to use in forecasting
      wind_speed                             # Wind speed input to use in forecasting
    FROM
      `bqml_tutorial.seattle_air_quality_daily`
    WHERE
      date
      BETWEEN DATE('2012-01-01')
      AND DATE('2020-12-31');

    Kueri memerlukan waktu sekitar 20 detik untuk diselesaikan, setelah itu model seattle_pm25_xreg_model akan muncul di panel Explorer. Karena kueri tersebut menggunakan pernyataan CREATE MODEL untuk membuat model, Anda tidak akan melihat hasil kueri.

Mengevaluasi model kandidat

Evaluasi model deret waktu menggunakan fungsi ML.ARIMA_EVALUATE. Fungsi ML.ARIMA_EVALUATE menampilkan metrik evaluasi semua model kandidat yang dievaluasi selama proses penyesuaian hyperparameter otomatis.

Ikuti langkah-langkah berikut untuk mengevaluasi model:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

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

    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);

    Hasilnya akan terlihat seperti berikut:

    Metrik evaluasi untuk model deret waktu.

    Kolom output non_seasonal_p, non_seasonal_d, non_seasonal_q, dan has_drift menentukan model ARIMA dalam pipeline pelatihan. Kolom output log_likelihood, AIC, dan variance relevan dengan proses penyesuaian model ARIMA.

    Algoritma auto.ARIMA menggunakan pengujian KPSS untuk menentukan nilai terbaik untuk non_seasonal_d, yang dalam hal ini adalah 1. Jika non_seasonal_d adalah 1, algoritma auto.ARIMA akan melatih 42 model ARIMA kandidat yang berbeda secara paralel. Dalam contoh ini, ke-42 model kandidat sudah valid, sehingga output berisi 42 baris, satu untuk setiap model ARIMA kandidat; jika beberapa model tidak valid, model tersebut akan dikecualikan dari output. Model kandidat ini ditampilkan dalam urutan menaik oleh AIC. Model di baris pertama memiliki AIC terendah, dan dianggap sebagai model terbaik. Model terbaik disimpan sebagai model akhir dan digunakan saat Anda memanggil fungsi seperti ML.FORECAST pada model.

    Kolom seasonal_periods berisi informasi tentang pola musiman yang diidentifikasi dalam data deret waktu. Hal ini tidak ada hubungannya dengan pemodelan ARIMA karena memiliki nilai yang sama di semua baris output. Model ini melaporkan pola mingguan, yang sesuai dengan hasil yang Anda lihat jika memilih untuk memvisualisasikan data input.

    Kolom has_holiday_effect, has_spikes_and_dips, dan has_step_changes memberikan informasi tentang data deret waktu input, dan tidak terkait dengan pemodelan ARIMA. Kolom ini ditampilkan karena nilai opsi decompose_time_series dalam pernyataan CREATE MODEL adalah TRUE. Kolom ini juga memiliki nilai yang sama di semua baris output.

    Kolom error_message menampilkan error yang terjadi selama proses penyesuaian auto.ARIMA. Salah satu kemungkinan penyebab error adalah saat kolom non_seasonal_p, non_seasonal_d, non_seasonal_q, dan has_drift yang dipilih tidak dapat menstabilkan deret waktu. Untuk mengambil pesan error dari semua model kandidat, tetapkan opsi show_all_candidate_models ke TRUE saat Anda membuat model.

    Untuk mengetahui informasi selengkapnya tentang kolom output, lihat fungsi ML.ARIMA_EVALUATE.

Memeriksa koefisien model

Periksa koefisien model deret waktu menggunakan fungsi ML.ARIMA_COEFFICIENTS.

Ikuti langkah-langkah berikut untuk mengambil koefisien model:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

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

    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);

    Hasilnya akan terlihat seperti berikut:

    Koefisien untuk model deret waktu.

    Kolom output ar_coefficients menunjukkan koefisien model bagian autoregresif (AR) dari model ARIMA. Demikian pula, kolom output ma_coefficients menunjukkan koefisien model bagian rata-rata bergerak (MA) dari model ARIMA. Kedua kolom ini berisi nilai array, yang panjangnya sama dengan non_seasonal_p dan non_seasonal_q secara berurutan. Anda melihat dalam output fungsi ML.ARIMA_EVALUATE bahwa model terbaik memiliki nilai non_seasonal_p sebesar 0 dan nilai non_seasonal_q sebesar 5. Oleh karena itu, dalam output ML.ARIMA_COEFFICIENTS, nilai ar_coefficients adalah array kosong dan nilai ma_coefficients adalah array 5 elemen. Nilai intercept_or_drift adalah istilah konstan dalam model ARIMA.

    Kolom output processed_input, weight, dan category_weights menunjukkan bobot untuk setiap fitur dan intersepsi dalam model regresi linear. Jika fitur adalah fitur numerik, bobotnya ada di kolom weight. Jika fitur adalah fitur kategoris, nilai category_weights adalah array nilai struct, dengan setiap nilai struct berisi nama dan bobot kategori tertentu.

    Untuk mengetahui informasi selengkapnya tentang kolom output, lihat fungsi ML.ARIMA_COEFFICIENTS.

Menggunakan model untuk memperkirakan data

Perkiraan nilai deret waktu mendatang menggunakan fungsi ML.FORECAST.

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

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.seattle_pm25_xreg_model`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            date,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ));

    Hasilnya akan terlihat seperti berikut:

    Hasil perkiraan dari model deret waktu.

    Baris output diurutkan sesuai dengan 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 fungsi ML.FORECAST.

Mengevaluasi akurasi perkiraan

Evaluasi akurasi perkiraan model menggunakan fungsi ML.EVALUATE.

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.seattle_pm25_xreg_model`,
        (
          SELECT
            date,
            pm25,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ),
        STRUCT(
          TRUE AS perform_aggregation,
          30 AS horizon));

    Hasilnya akan terlihat seperti berikut:

    Metrik evaluasi untuk model.

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

Menjelaskan hasil perkiraan

Anda bisa mendapatkan metrik penjelasan 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(30 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%.

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.seattle_pm25_xreg_model`,
        STRUCT(30 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            date,
            temperature,
            wind_speed
          FROM
            `bqml_tutorial.seattle_air_quality_daily`
          WHERE
            date > DATE('2020-12-31')
        ));

    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 fungsi ML.EXPLAIN_FORECAST.

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

Langkah selanjutnya