Beberapa perkiraan deret waktu dengan satu kueri untuk perjalanan NYC Citi Bike


Di tutorial ini, Anda akan mempelajari cara membuat sekumpulan model deret waktu untuk melakukan beberapa perkiraan deret waktu dengan satu kueri. Anda juga akan mempelajari cara menerapkan berbagai strategi pelatihan cepat untuk meningkatkan kecepatan kueri secara signifikan dan cara mengevaluasi akurasi perkiraan. Anda akan menggunakan data new_york.citibike_trips. Data ini berisi informasi tentang perjalanan Citi Bike di Kota New York.

Sebelum membaca tutorial ini, sebaiknya baca Perkiraan deret waktu tunggal dari data Google Analytics.

Tujuan

Dalam tutorial ini, Anda akan menggunakan:

  • Pernyataan CREATE MODEL: untuk membuat model deret waktu atau kumpulan model deret waktu.
  • Fungsi ML.ARIMA_EVALUATE: untuk mengevaluasi model.
  • Fungsi ML.ARIMA_COEFFICIENTS: untuk memeriksa koefisien model.
  • Fungsi ML.EXPLAIN_FORECAST: untuk mendapatkan berbagai komponen deret waktu (seperti tren musiman dan tren) yang dapat digunakan untuk menjelaskan hasil perkiraan.
  • Looker Studio: untuk memvisualisasikan hasil perkiraan.
  • Opsional: Fungsi ML.FORECAST: untuk memperkirakan total kunjungan harian.

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

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Buka pemilih project

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Aktifkan API BigQuery.

    Mengaktifkan API

Langkah pertama: Buat set data Anda

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.

Langkah kedua (opsional): Visualisasikan deret waktu yang ingin Anda perkirakan

Sebelum membuat model, ada baiknya Anda melihat tampilan input deret waktu Anda. Anda dapat melakukannya dengan Looker Studio.

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

Dalam pernyataan SELECT, kueri menggunakan fungsi EXTRACT untuk mendapatkan 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 area teks Query editor.

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

    Setelah kueri berjalan, outputnya akan terlihat seperti screenshot berikut. Di screenshot, Anda dapat melihat bahwa deret waktu ini memiliki 1.184 titik data harian, yang mencakup lebih dari 4 tahun. Klik tombol Explore data, lalu Explore with Looker Studio. Looker Studio akan terbuka di tab baru. Selesaikan langkah-langkah berikut di tab baru.

    Output kueri.

  4. Pada panel Diagram, pilih Diagram deret waktu:

    Diagram_deret_waktu.

  5. Di panel Data, di bawah panel Diagram, buka bagian Metrik. Tambahkan kolom num_trips dan hapus metrik default Jumlah Catatan:

    Time_series_data_fields.

    Setelah Anda menyelesaikan langkah di atas, grafik berikut akan muncul. Grafik ini menunjukkan bahwa input deret waktu memiliki pola mingguan dan tahunan. Deret waktunya juga memiliki pergerakan ke atas.

    Result_visualization.

Langkah ketiga: Buat model deret waktu untuk melakukan perkiraan deret waktu tunggal

Selanjutnya, buat model deret waktu menggunakan data perjalanan NYC Citi Bike.

Kueri GoogleSQL berikut membuat model yang digunakan untuk memperkirakan total perjalanan sepeda setiap harinya. Klausa 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'
  ) AS
SELECT
   EXTRACT(DATE from starttime) AS date,
   COUNT(*) AS num_trips
FROM
  `bigquery-public-data.new_york.citibike_trips`
GROUP BY date

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. Terakhir, pernyataan CREATE MODEL menggunakan decompose_time_series=TRUE secara default, dan pengguna dapat memahami lebih lanjut cara perkiraan deret waktu dengan mengambil data komponen deret waktu seperti periode musiman dan efek hari libur.

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 area teks Query editor.

    #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'
      ) AS
    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.

    Kueri membutuhkan waktu sekitar 17 detik untuk selesai, setelah itu model Anda (nyc_citibike_arima_model) akan muncul di panel navigasi. Karena kueri tersebut menggunakan pernyataan CREATE MODEL untuk membuat model, Anda tidak akan melihat hasil kueri.

Langkah keempat: 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.EXPLAIN_FORECAST.

Untuk melakukannya, ikuti langkah-langkah berikut:

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

  2. Masukkan kueri GoogleSQL berikut di area teks Query editor.

    #standardSQL
    SELECT
      *
    FROM
      ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model`,
                          STRUCT(365 AS horizon, 0.9 AS confidence_level))
    
  3. Klik Run.

  4. Setelah kueri selesai, klik tombol Explore data, lalu klik Explore with Looker Studio. Tab baru akan terbuka di browser. Kemudian, di panel Chart, temukan ikon Diagram deret waktu dan klik ikon tersebut, seperti screenshot berikut.

    Diagram_deret_waktu.

  5. Di panel Data, lakukan langkah berikut:

    1. Di bagian Dimensi Rentang Tanggal, pilih time_series_timestamp (Date).
    2. Di bagian Dimensi, pilih time_series_timestamp (Date).
    3. Di bagian Metrik, hapus metrik default Record Count, dan tambahkan kueri berikut:
      • time_series_data
      • prediction_interval_lower_bound
      • prediction_interval_upper_bound
      • trend
      • seasonal_period_yearly
      • seasonal_period_weekly
      • spikes_and_dips
      • step_changes

    Diagram_deret_waktu.

  6. Di panel Gaya, scroll ke bawah ke opsi Data yang Hilang dan gunakan Jeda Baris, bukan Baris ke Nol.

    Style_section.

    Setelah Anda melakukan langkah-langkah ini, grafik berikut akan muncul di panel kiri.

    Result_visualization.

Langkah kelima: Perkirakan beberapa deret waktu secara bersamaan

Selanjutnya, Anda mungkin ingin memperkirakan jumlah total perjalanan harian yang dimulai dari stasiun Citi Bike yang berbeda. Untuk melakukannya, Anda harus memperkirakan beberapa deret waktu. Anda dapat menulis beberapa kueri CREATE MODEL, tetapi itu mungkin membosankan dan memakan waktu, terutama jika Anda memiliki banyak deret waktu.

Untuk meningkatkan proses ini, BigQuery ML memungkinkan Anda membuat serangkaian model deret waktu untuk memperkirakan beberapa deret waktu dengan satu kueri. Selain itu, semua model deret waktu dicocokkan secara bersamaan.

Dalam kueri GoogleSQL berikut, klausa CREATE MODEL membuat dan melatih kumpulan model bernama bqml_tutorial.nyc_citibike_arima_model_group.

 #standardSQL
CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_group`
OPTIONS
  (model_type = 'ARIMA_PLUS',
   time_series_timestamp_col = 'date',
   time_series_data_col = 'num_trips',
   time_series_id_col = 'start_station_name',
   auto_arima_max_order = 5
  ) AS
SELECT
   start_station_name,
   EXTRACT(DATE from starttime) AS date,
   COUNT(*) AS num_trips
FROM
  `bigquery-public-data.new_york.citibike_trips`
WHERE start_station_name LIKE '%Central Park%'
GROUP BY start_station_name, date

Klausa OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) menunjukkan bahwa Anda membuat kumpulan model ARIMA_PLUS deret waktu berbasis ARIMA. Selain time_series_timestamp_col dan time_series_data_col, Anda harus menyertakan time_series_id_col, yang digunakan untuk menganotasi berbagai input deret waktu. Opsi auto_arima_max_order mengontrol ruang penelusuran untuk penyesuaian hyperparameter dalam algoritma auto.ARIMA. Terakhir, pernyataan CREATE MODEL menggunakan decompose_time_series=TRUE secara default, dan pengguna dapat lebih memahami bagaimana deret waktu dianalisis di pipeline pelatihan dengan mengambil hasil dekomposisi.

Klausa SELECT ... FROM ... GROUP BY ... menunjukkan bahwa Anda membentuk beberapa deret waktu; masing-masing dikaitkan dengan start_station_name yang berbeda. Agar mudah, gunakan klausa WHERE ... LIKE ... untuk membatasi stasiun awal hanya untuk stasiun dengan Central Park di namanya.

Untuk menjalankan kueri CREATE MODEL untuk membuat dan melatih model Anda, ikuti langkah-langkah berikut:

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

  2. Masukkan kueri GoogleSQL berikut di area teks Query editor.

    #standardSQL
    CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_group`
    OPTIONS
      (model_type = 'ARIMA_PLUS',
       time_series_timestamp_col = 'date',
       time_series_data_col = 'num_trips',
       time_series_id_col = 'start_station_name',
       auto_arima_max_order = 5
      ) AS
    SELECT
       start_station_name,
       EXTRACT(DATE from starttime) AS date,
       COUNT(*) AS num_trips
    FROM
      `bigquery-public-data.new_york.citibike_trips`
    WHERE start_station_name LIKE '%Central Park%'
    GROUP BY start_station_name, date
    
  3. Klik Run.

    Kueri ini selesai dalam sekitar 24 detik, setelah itu model Anda (nyc_citibike_arima_model_group) akan muncul di panel navigasi. Karena kueri ini menggunakan pernyataan CREATE MODEL, Anda tidak akan melihat hasil kueri.

Langkah keenam: Periksa metrik evaluasi dari kumpulan model deret waktu

Setelah membuat model, Anda dapat menggunakan fungsi ML.ARIMA_EVALUATE untuk melihat metrik evaluasi dari semua model yang dibuat.

Dalam kueri GoogleSQL berikut, klausa FROM menggunakan fungsi ML.ARIMA_EVALUATE terhadap model Anda, bqml_tutorial.nyc_citibike_arima_model_group. Metrik evaluasi hanya bergantung pada input pelatihan, jadi model Anda adalah satu-satunya input.

Untuk menjalankan kueri ML.ARIMA_EVALUATE, ikuti langkah-langkah berikut:

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

  2. Masukkan kueri GoogleSQL berikut di area teks Query editor.

    #standardSQL
    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`)
    
  3. Klik Run.

  4. Kueri ini selesai dalam waktu kurang dari satu detik. Setelah kueri selesai, klik tab Results di bawah area teks kueri. Hasilnya akan terlihat seperti berikut:

    ML.EVALUATE output.

    Hasilnya mencakup kolom berikut:

    • start_station_name
    • non_seasonal_p
    • non_seasonal_d
    • non_seasonal_q
    • has_drift
    • log_likelihood
    • AIC
    • variance
    • seasonal_periods
    • has_holiday_effect
    • has_spikes_and_dips
    • has_step_changes
    • error_message

    start_station_name, kolom pertama, menganotasi deret waktu yang dicocokkan dengan setiap model deret waktu. Ini sama dengan yang disertakan time_series_id_col.

    Empat kolom berikut (non_seasonal_p, non_seasonal_d, non_seasonal_q, dan has_drift) menentukan model ARIMA dalam pipeline pelatihan. Tiga metrik setelahnya (log_likelihood, AIC, dan variance) relevan dengan proses pencocokan model ARIMA. Proses pencocokan menentukan model ARIMA terbaik dengan menggunakan algoritma auto.ARIMA, satu untuk setiap deret waktu.

    Kolom has_holiday_effect, has_spikes_and_dips, dan has_step_changes hanya diisi jika decompose_time_series=TRUE.

    Kolom seasonal_periods adalah pola musiman dalam input deret waktu. Setiap deret waktu mungkin memiliki pola musiman yang berbeda. Misalnya, dari gambar, Anda dapat melihat bahwa satu deret waktu memiliki pola tahunan, sementara yang lain tidak.

Langkah ketujuh: Periksa koefisien model Anda

Fungsi ML.ARIMA_COEFFICIENTS digunakan untuk mendapatkan koefisien model dari model ARIMA_PLUS Anda, bqml_tutorial.nyc_citibike_arima_model_group. Satu-satunya input ML.ARIMA_COEFFICIENTS adalah model.

Untuk menjalankan kueri ML.ARIMA_COEFFICIENTS, ikuti langkah-langkah berikut:

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

  2. Masukkan kueri GoogleSQL berikut di area teks Query editor.

    #standardSQL
    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`)
    
  3. Klik Run.

    Kueri ini selesai dalam waktu kurang dari satu detik. Hasilnya akan terlihat mirip dengan screenshot berikut:

    output ML.ARIMA_COEFFICIENTS.

    Hasilnya mencakup kolom berikut:

    • start_station_name
    • ar_coefficients
    • ma_coefficients
    • intercept_or_drift

    start_station_name, kolom pertama, menganotasi deret waktu yang dicocokkan dengan setiap model deret waktu.

    ar_coefficients menunjukkan koefisien model bagian autoregresif (AR) dari model ARIMA. Demikian pula, ma_coefficients menunjukkan koefisien model bagian rata-rata bergerak (MA). Keduanya adalah array yang panjangnya sama dengan non_seasonal_p dan non_seasonal_q secara berurutan. intercept_or_drift adalah istilah konstan dalam model ARIMA.

Langkah kedelapan: Gunakan model Anda untuk memperkirakan beberapa deret waktu secara bersamaan dengan penjelasan

Fungsi ML.EXPLAIN_FORECAST memperkirakan nilai deret waktu yang akan datang dengan interval prediksi menggunakan model Anda, bqml_tutorial.nyc_citibike_arima_model_group, dan pada saat yang sama menampilkan semua komponen terpisah deret waktu.

Klausa STRUCT(3 AS horizon, 0.9 AS confidence_level) menunjukkan bahwa kueri memperkirakan tiga titik waktu di masa mendatang dan menghasilkan interval prediksi dengan keyakinan 90%. Fungsi ML.EXPLAIN_FORECAST menggunakan model, serta beberapa argumen opsional.

Untuk menjalankan kueri ML.EXPLAIN_FORECAST, ikuti langkah-langkah berikut:

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

  2. Masukkan kueri GoogleSQL berikut di area teks Query editor.

    #standardSQL
    SELECT
     *
    FROM
     ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`,
                         STRUCT(3 AS horizon, 0.9 AS confidence_level))
    
  3. Klik Run.

    Kueri ini selesai dalam waktu kurang dari satu detik. Hasilnya akan terlihat seperti berikut:

    ML.EXPLAIN_FORECAST output1. ML.EXPLAIN_FORECAST output2.

    Hasilnya mencakup kolom berikut:

    • start_station_name
    • time_series_timestamp
    • time_series_type
    • time_series_data
    • time_series_adjusted_data
    • standard_error
    • confidence_level
    • prediction_interval_lower_bound
    • prediction_interval_lower_bound
    • trend
    • seasonal_period_yearly
    • seasonal_period_quarterly
    • seasonal_period_monthly
    • seasonal_period_weekly
    • seasonal_period_daily
    • holiday_effect
    • spikes_and_dips
    • step_changes
    • residual

    Baris output diurutkan berdasarkan start_station_name, dan untuk setiap start_station_name, baris output diurutkan sesuai dengan kronologi di time_series_timestamp. Berbagai komponen dicantumkan sebagai kolom output. Untuk mengetahui informasi selengkapnya, lihat definisi ML.EXPLAIN_FORECAST.

(Opsional) Langkah kesembilan: Gunakan model Anda untuk memperkirakan beberapa deret waktu secara bersamaan

Fungsi ML.FORECAST juga dapat digunakan untuk memperkirakan nilai deret waktu yang akan datang dengan interval prediksi menggunakan model Anda, bqml_tutorial.nyc_citibike_arima_model_group.

Seperti ML.EXPLAIN_FORECAST, klausa STRUCT(3 AS horizon, 0.9 AS confidence_level) menunjukkan bahwa untuk setiap deret waktu, kueri memperkirakan tiga titik waktu di masa mendatang, dan menghasilkan interval prediksi dengan keyakinan 90%.

Fungsi ML.FORECAST menggunakan model, serta beberapa argumen opsional.

Untuk menjalankan kueri ML.FORECAST, ikuti langkah-langkah berikut:

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

  2. Masukkan kueri GoogleSQL berikut di area teks Query editor.

    #standardSQL
    SELECT
     *
    FROM
     ML.FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`,
                 STRUCT(3 AS horizon, 0.9 AS confidence_level))
    
  3. Klik Run.

    Kueri ini selesai dalam waktu kurang dari satu detik. Hasilnya akan terlihat seperti berikut:

    Output ML.FORECAST.

    Hasilnya mencakup kolom berikut:

    • start_station_name
    • forecast_timestamp
    • forecast_value
    • standard_error
    • confidence_level
    • prediction_interval_lower_bound
    • prediction_interval_upper_bound
    • confidence_interval_lower_bound (akan segera tidak digunakan lagi)
    • confidence_interval_upper_bound (akan segera tidak digunakan lagi)

    Kolom pertama, start_station_name, menganotasi deret waktu yang dicocokkan dengan setiap model deret waktu. Setiap start_station_name memiliki jumlah baris horizon dalam hasil perkiraannya.

    Untuk setiap start_station_name, baris output diurutkan sesuai dengan kronologi di forecast_timestamp. Dalam perkiraan deret waktu, prediksi interval, yang ditangkap dari batas bawah dan atas, sama pentingnya dengan forecast_value. forecast_value adalah titik tengah dari interval prediksi. Interval prediksi bergantung pada standard_error dan confidence_level.

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

  3. Klik Hapus set data untuk 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