Membatasi nilai yang diperkirakan untuk model deret waktu ARIMA_PLUS

Tutorial ini mengajarkan cara menggunakan batas untuk mempersempit hasil perkiraan yang ditampilkan oleh model deret waktu ARIMA_PLUS. Dalam tutorial ini, Anda akan membuat dua model deret waktu untuk data yang sama, satu model yang menggunakan batas dan satu model yang tidak menggunakan batas. Dengan begitu, Anda dapat membandingkan hasil yang ditampilkan oleh model dan memahami perbedaan yang dihasilkan oleh penentuan batas.

Anda menggunakan data new_york.citibike_trips untuk melatih model dalam tutorial ini. Set data ini berisi informasi tentang perjalanan Citi Bike di New York City.

Sebelum mengikuti tutorial ini, Anda harus memahami perkiraan deret waktu tunggal. Selesaikan tutorial Perkiraan deret waktu tunggal dari data Google Analytics untuk pengantar topik ini.

Izin yang Diperlukan

  • Untuk membuat set data, Anda memerlukan izin IAM bigquery.datasets.create.

  • Untuk membuat model, Anda memerlukan izin berikut:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • 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.

Tujuan

Dalam tutorial ini, Anda akan menggunakan:

  • Pernyataan CREATE MODEL: untuk membuat model deret waktu.
  • Fungsi ML.FORECAST: untuk memperkirakan total kunjungan harian.

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. 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. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

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

  7. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

Membuat set data

Buat set data BigQuery untuk menyimpan model ML Anda.

Konsol

  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.

  4. Di halaman Create dataset, lakukan hal berikut:

    • Untuk Dataset ID, masukkan bqml_tutorial.

    • Untuk Location type, pilih Multi-region, lalu pilih US.

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

bq

Untuk membuat set data baru, gunakan perintah bq mk --dataset.

  1. Buat set data bernama bqml_tutorial dengan lokasi data ditetapkan ke US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Pastikan set data telah dibuat:

    bq ls

API

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

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

BigQuery DataFrames

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)

Visualisasikan deret waktu yang ingin Anda perkirakan

Sebelum membuat model, sebaiknya lihat tampilan deret waktu input Anda.

SQL

Dalam kueri berikut, klausa FROM bigquery-public-data.new_york.citibike_trips menunjukkan bahwa Anda membuat kueri tabel citibike_trips dalam set data new_york.

Dalam pernyataan SELECT, kueri menggunakan fungsi EXTRACT untuk mengekstrak informasi tanggal dari kolom starttime. Kueri ini menggunakan klausa COUNT(*) untuk mendapatkan jumlah total harian perjalanan Citi Bike.

#standardSQL
SELECT
  EXTRACT(DATE from starttime) AS date,
  COUNT(*) AS num_trips
FROM
`bigquery-public-data`.new_york.citibike_trips
GROUP BY date

Untuk menjalankan kueri, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud , klik tombol Compose new query.

  2. Masukkan kueri GoogleSQL berikut di editor kueri.

    #standardSQL
    SELECT
     EXTRACT(DATE from starttime) AS date,
     COUNT(*) AS num_trips
    FROM
     `bigquery-public-data`.new_york.citibike_trips
    GROUP BY date
  3. Klik Run. Hasil kuerinya mirip dengan berikut ini.

    Output kueri.

  4. Gunakan konsol Google Cloud untuk memetakan data deret waktu. Di panel Query results, klik tab Visualization. Di panel Konfigurasi visualisasi, pilih Batang untuk Jenis visualisasi:

    Result_visualization.

BigQuery DataFrames

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.

Dalam contoh berikut, bigquery-public-data.new_york.citibike_trips menunjukkan bahwa Anda membuat kueri tabel citibike_trips dalam set data new_york.

import bigframes.pandas as bpd

df = bpd.read_gbq("bigquery-public-data.new_york.citibike_trips")

features = bpd.DataFrame(
    {
        "num_trips": df.starttime,
        "date": df["starttime"].dt.date,
    }
)
num_trips = features.groupby(["date"]).count()

num_trips.plot.line()

Hasilnya akan mirip dengan berikut ini: Result_visualization

Membuat model deret waktu

Buat model deret waktu menggunakan data perjalanan NYC Citi Bike.

Kueri GoogleSQL berikut membuat model yang memperkirakan total perjalanan sepeda setiap harinya. Pernyataan CREATE MODEL membuat dan melatih model bernama bqml_tutorial.nyc_citibike_arima_model.

#standardSQL
CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
  OPTIONS (
    model_type = 'ARIMA_PLUS',
    time_series_timestamp_col = 'date',
    time_series_data_col = 'num_trips',
    time_series_id_col = 'start_station_id')
AS
SELECT
  EXTRACT(DATE FROM starttime) AS date,
  COUNT(*) AS num_trips,
  start_station_id
FROM
  `bigquery-public-data`.new_york.citibike_trips
WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
GROUP BY date, start_station_id;

Klausa OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) menunjukkan bahwa Anda membuat model deret waktu berbasis ARIMA. Secara default, auto_arima=TRUE, sehingga algoritma auto.ARIMA akan otomatis menyesuaikan hyperparameter dalam model ARIMA_PLUS. Algoritma ini sesuai dengan beberapa model kandidat dan memilih model terbaik dengan kriteria informasi Akaike (AIC) terendah. Selain itu, karena defaultnya adalah data_frequency='AUTO_FREQUENCY', proses pelatihan akan otomatis menyimpulkan frekuensi data dari input deret waktu. Pernyataan CREATE MODEL menggunakan decompose_time_series=TRUE secara default, sehingga bagian histori dan perkiraan deret waktu disimpan dalam model. Menetapkan parameter time_series_id_col = 'start_station_id' menyebabkan model menyesuaikan dan memperkirakan beberapa deret waktu menggunakan satu kueri berdasarkan start_station_id. Anda dapat menggunakan informasi ini untuk lebih memahami cara perkiraan deret waktu dengan mengambil data komponen deret waktu seperti periode musiman.

Jalankan kueri CREATE MODEL untuk membuat dan melatih model Anda:

  1. Di konsol Google Cloud , klik tombol Compose new query.

  2. Masukkan kueri GoogleSQL berikut di editor kueri.

    #standardSQL
    CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
    OPTIONS (
      model_type = 'ARIMA_PLUS',
      time_series_timestamp_col = 'date',
      time_series_data_col = 'num_trips',
      time_series_id_col = 'start_station_id')
    AS
    SELECT
    EXTRACT(DATE FROM starttime) AS date,
    COUNT(*) AS num_trips,
    start_station_id
    FROM
    `bigquery-public-data`.new_york.citibike_trips
    WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
    GROUP BY date, start_station_id;
  3. Klik Run.

    Kueri membutuhkan waktu sekitar 80 detik untuk diselesaikan, setelah itu Anda dapat mengakses model (nyc_citibike_arima_model). Karena kueri menggunakan pernyataan CREATE MODEL untuk membuat model, tidak akan ada hasil kueri.

Perkirakan deret waktu dan visualisasikan hasilnya

Untuk menjelaskan cara perkiraan deret waktu, visualisasikan semua komponen deret waktu, seperti keadaan musiman dan tren, menggunakan fungsi ML.FORECAST.

Untuk melakukannya, ikuti langkah-langkah ini:

  1. Di konsol Google Cloud , klik tombol Compose new query.

  2. Masukkan kueri GoogleSQL berikut di editor kueri.

    #standardSQL
    SELECT
    forecast_timestamp AS forecast_timestamp,
    start_station_id AS start_station_id,
    history_value AS history_value,
    forecast_value AS forecast_value
    FROM
    (
      (
         SELECT
         DATE(forecast_timestamp) AS forecast_timestamp,
         NULL AS history_value,
         forecast_value AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         ML.FORECAST(
            MODEL bqml_tutorial.`nyc_citibike_arima_model`,
            STRUCT(
               365 AS horizon,
               0.9 AS confidence_level))
      )
      UNION ALL
      (
         SELECT
         DATE(date_name) AS forecast_timestamp,
         num_trips AS history_value,
         NULL AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         (
            SELECT
               EXTRACT(DATE FROM starttime) AS date_name,
               COUNT(*) AS num_trips,
               start_station_id AS start_station_id
            FROM
               `bigquery-public-data`.new_york.citibike_trips
            WHERE
               starttime > '2014-07-11'
               AND starttime < '2015-02-11'
            GROUP BY
               date_name, start_station_id
         )
      )
    )
    WHERE start_station_id = 79
    ORDER BY
    forecast_timestamp, start_station_id
  3. Klik Run. Hasil kuerinya mirip dengan berikut ini:

    Diagram BQUI.

  4. Gunakan konsol Google Cloud untuk memetakan data deret waktu. Di panel Query results, klik tab Visualization:

    Result_visualization.

Diagram menunjukkan bahwa nilai perkiraan untuk jumlah total perjalanan Citi Bike harian dengan start_station_id=79 adalah angka negatif, yang tidak berguna. Menggunakan model dengan batas akan meningkatkan kualitas data yang diperkirakan.

Membuat model deret waktu dengan batas

Buat model deret waktu dengan batas, menggunakan data perjalanan NYC Citi Bike.

Kueri GoogleSQL berikut membuat model yang memperkirakan total perjalanan sepeda setiap harinya. Pernyataan CREATE MODEL membuat dan melatih model bernama bqml_tutorial.nyc_citibike_arima_model_with_limits. Perbedaan utama antara model ini dan model yang Anda buat sebelumnya adalah penambahan opsi forecast_limit_lower_bound=0. Opsi ini menyebabkan model hanya memperkirakan nilai yang lebih besar dari 0, berdasarkan nilai dalam kolom yang ditentukan oleh argumen time_series_data_col, dalam hal ini num_trips.

#standardSQL
CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
   OPTIONS (
      model_type = 'ARIMA_PLUS',
      time_series_timestamp_col = 'date',
      time_series_data_col = 'num_trips',
      time_series_id_col = 'start_station_id',
      forecast_limit_lower_bound = 0)
   AS
   SELECT
   EXTRACT(DATE FROM starttime) AS date,
   COUNT(*) AS num_trips,
   start_station_id
   FROM
   `bigquery-public-data`.new_york.citibike_trips
   WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
   GROUP BY date, start_station_id;

Jalankan kueri CREATE MODEL untuk membuat dan melatih model Anda:

  1. Di konsol Google Cloud , klik tombol Compose new query.

  2. Masukkan kueri GoogleSQL berikut di editor kueri.

    #standardSQL
    CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
    OPTIONS (
      model_type = 'ARIMA_PLUS',
      time_series_timestamp_col = 'date',
      time_series_data_col = 'num_trips',
      time_series_id_col = 'start_station_id',
      forecast_limit_lower_bound = 0)
    AS
    SELECT
    EXTRACT(DATE FROM starttime) AS date,
    COUNT(*) AS num_trips,
    start_station_id
    FROM
    `bigquery-public-data`.new_york.citibike_trips
    WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
    GROUP BY date, start_station_id;
  3. Klik Run.

    Kueri membutuhkan waktu sekitar 100 detik untuk diselesaikan, setelah itu Anda dapat mengakses model (nyc_citibike_arima_model_with_limits). Karena kueri tersebut menggunakan pernyataan CREATE MODEL untuk membuat model, tidak akan ada hasil kueri.

Perkirakan deret waktu dengan menggunakan model dengan batas

  1. Di konsol Google Cloud , klik tombol Compose new query.

  2. Masukkan kueri GoogleSQL berikut di editor kueri.

    #standardSQL
    SELECT
    forecast_timestamp AS forecast_timestamp,
    start_station_id AS start_station_id,
    history_value AS history_value,
    forecast_value AS forecast_value
    FROM
    (
      (
         SELECT
         DATE(forecast_timestamp) AS forecast_timestamp,
         NULL AS history_value,
         forecast_value AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         ML.FORECAST(
            MODEL bqml_tutorial.`nyc_citibike_arima_model`,
            STRUCT(
               365 AS horizon,
               0.9 AS confidence_level))
      )
      UNION ALL
      (
         SELECT
         DATE(date_name) AS forecast_timestamp,
         num_trips AS history_value,
         NULL AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         (
            SELECT
               EXTRACT(DATE FROM starttime) AS date_name,
               COUNT(*) AS num_trips,
               start_station_id AS start_station_id
            FROM
               `bigquery-public-data`.new_york.citibike_trips
            WHERE
               starttime > '2014-07-11'
               AND starttime < '2015-02-11'
            GROUP BY
               date_name, start_station_id
         )
      )
    )
    WHERE start_station_id = 79
    ORDER BY forecast_timestamp, start_station_id
  3. Klik Run.

    Diagram BQUI.

  4. Gunakan konsol Google Cloud untuk memetakan data deret waktu. Di panel Query results, klik tab Visualization:

    Result_visualization.

Model ARIMA PLUS mendeteksi bahwa jumlah total harian perjalanan Citi Bike dengan start_station_id=79 menurun. Nilai perkiraan pada masa mendatang akan mengikuti tren ini dan memberikan angka perkiraan yang relatif lebih kecil seiring berjalannya waktu. Diagram menunjukkan bahwa nilai perkiraan untuk jumlah total perjalanan harian Citi Bike dengan start_station_id=79 adalah angka positif, yang lebih berguna. Model dengan batas mendeteksi bahwa jumlah total perjalanan Citi Bike harian dengan start_station_id=79 menurun, tetapi masih memberikan nilai perkiraan yang bermakna.

Seperti yang ditunjukkan dalam tutorial ini, opsi forecast_limit_lower_bound dan forecast_limit_upper_bound dapat membantu Anda mendapatkan nilai perkiraan yang lebih bermakna dalam skenario serupa dengan yang ditunjukkan di sini, seperti saat memperkirakan harga saham atau angka penjualan di masa mendatang.

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