ai_forecast fungsi

Berlaku untuk:centang ditandai ya Databricks SQL

Penting

Fungsionalitas ini berada dalam Pratinjau Umum dan sesuai dengan HIPAA .

ai_forecast() adalah fungsi bernilai tabel yang dirancang untuk mengekstrapolasi data rangkaian waktu ke masa depan. Lihat Argumen untuk argumen yang tersedia untuk mengonfigurasi fungsi ini.

Persyaratan

  • Gudang SQL Pro atau Tanpa Server

Sintaks


ai_forecast(
  observed TABLE,
  horizon DATE | TIMESTAMP | STRING,
  time_col STRING,
  value_col STRING | ARRAY<STRING>,
  group_col STRING | ARRAY<STRING> | NULL DEFAULT NULL,
  prediction_interval_width DOUBLE DEFAULT 0.95,
  frequency STRING DEFAULT 'auto',
  seed INTEGER | NULL DEFAULT NULL,
  parameters STRING DEFAULT '{}'
)

Argumen

ai_forecast() dapat memprediksi sejumlah grup (lihat group_col) dan hingga 100 metrik (lihat value_col) dalam setiap grup. Frekuensi prakiraan sama untuk semua metrik dalam grup tetapi dapat berbeda di berbagai grup (lihat frequency).

Berikut ini adalah argumen yang tersedia untuk fungsi ini:

  • observed adalah input bernilai tabel yang digunakan sebagai data pelatihan untuk prosedur prakiraan.
    • Hubungan input ini harus berisi satu kolom "waktu" dan satu atau beberapa kolom "nilai". Kolom "Grup" dan "parameter" bersifat opsional. Kolom tambahan apa pun dalam hubungan input diabaikan.
  • horizon adalah kuantitas yang dapat diubah menjadi penanda waktu yang menunjukkan waktu akhir yang eksklusif dari hasil prakiraan. Dalam grup (lihat group_col), hasil prakiraan meliputi waktu antara pengamatan terakhir dan tenggat waktu. Jika horizon kurang dari waktu pengamatan terakhir, maka tidak ada hasil yang dihasilkan.
  • time_col adalah string yang mereferensikan "kolom waktu" di observed. Kolom yang dirujuk oleh time_col harus berupa DATE atau TIMESTAMP.
  • value_col adalah string atau array string yang mereferensikan kolom nilai di observed. Kolom yang dirujuk oleh argumen ini harus dapat dikonversi ke DOUBLE.
  • group_col (opsional) adalah string atau array string yang mewakili kolom grup di observed. Jika ditentukan, kolom grup digunakan sebagai kriteria partisi, dan prakiraan dihasilkan untuk setiap grup secara independen. Jika tidak ditentukan, data input lengkap diperlakukan sebagai satu grup.
  • prediction_interval_width (opsional) adalah nilai antara 0 dan 1 yang mewakili lebar interval prediksi. Nilai di masa mendatang memiliki prediction_interval_width % probabilitas jatuh antara {v}_upper dan {v}_lower.
  • frequency (opsional) adalah string alias satuan waktu atau offset "pandas" yang menentukan granularitas waktu dari hasil prakiraan. Jika tidak ditentukan, granularitas prakiraan secara otomatis disimpulkan untuk setiap grup secara independen. Jika nilai frekuensi ditentukan, nilai tersebut diterapkan secara merata ke semua grup.
    • Frekuensi yang disimpulkan dalam grup adalah mode pengamatan terbaru. Ini adalah operasi yang mudah dipakai yang tidak dapat disesuaikan oleh pengguna.
    • Sebagai contoh, rangkaian waktu dengan 99 "senin" dan 1 "selasa" menghasilkan "minggu" menjadi frekuensi yang disimpulkan.
  • seed (opsional) adalah angka yang digunakan untuk menginisialisasi generator nomor pseudorandom apa pun yang digunakan dalam prosedur prakiraan.
  • parameters (opsional) adalah JSON yang dikodekan string atau nama pengidentifikasi kolom yang mewakili parameterisasi prosedur prakiraan. Kombinasi parameter apa pun dapat ditentukan dalam urutan apa pun, misalnya, {“weekly_order”: 10, “global_cap”: 1000}. Setiap parameter yang tidak ditentukan secara otomatis ditentukan berdasarkan atribut data pelatihan. Parameter berikut didukung:
    • global_cap dan global_floor dapat digunakan bersama-sama atau secara independen untuk menentukan domain yang mungkin dari nilai metrik. {“global_floor”: 0}, misalnya, dapat digunakan untuk membatasi metrik seperti biaya agar selalu positif. Ini berlaku secara global untuk data pelatihan dan data yang diperkirakan, dan tidak dapat digunakan untuk memberikan batasan ketat pada nilai yang diperkirakan saja.
    • daily_order dan weekly_order atur urutan empat komponen musiman harian dan mingguan.

Pengembalian

Sekumpulan baris baru yang berisi data yang diperkirakan. Skema output akan berisi kolom waktu dan grup dengan jenisnya yang tidak berubah. Misalnya, jika kolom waktu input memiliki jenis DATE, maka jenis kolom waktu output juga akan menjadi DATE. Untuk setiap kolom nilai ada tiga kolom output dengan pola {v}_forecast, , {v}_upperdan {v}_lower. Terlepas dari jenis nilai input, kolom nilai yang diperkirakan selalu jenis DOUBLE. Tabel output hanya berisi nilai di masa mendatang, mencakup rentang waktu antara akhir data yang diamati hingga cakrawala.

Lihat beberapa contoh inferensi skema yang dilakukan oleh AI_FORECAST di bawah ini:

Tabel input Argumen Tabel Keluaran
ts: TIMESTAMP
val: DOUBLE
time_col => 'ts'
value_col => 'val'
ts: TIMESTAMP
val_forecast: DOUBLE
val_upper: DOUBLE
val_lower: DOUBLE
ds: DATE
val BIGINT
time_col => 'ds'
value_col => 'val'
ds: DATE
val_forecast: DOUBLE
val_upper: DOUBLE
val_lower: DOUBLE
ts: TIMESTAMP
dim1: STRING
dollars: DECIMAL(10, 2)
time_col => 'ts'
value_col => 'dollars'
group_col => 'dim1'
ts: TIMESTAMP
dim1: STRING
dollars_forecast: DOUBLE
dollars_upper: DOUBLE
dollars_lower: DOUBLE
ts: TIMESTAMP
dim1: STRING
dim2: BIGINT
dollars: DECIMAL(10, 2)
users: BIGINT
time_col => 'ts'
value_col => ARRAY('dollars', 'users')
group_col => ARRAY('dim1', 'dim2')
ts: TIMESTAMP
dim1: STRING
dim2: BIGINT
dollars_forecast: DOUBLE
dollars_upper: DOUBLE
dollars_lower: DOUBLE
users_forecast: DOUBLE
users_upper: DOUBLE
users_lower: DOUBLE

Contoh

Contoh berikut memperkirakan hingga tanggal yang ditentukan:


WITH
aggregated AS (
  SELECT
    DATE(tpep_pickup_datetime) AS ds,
    SUM(fare_amount) AS revenue
  FROM
    samples.nyctaxi.trips
  GROUP BY
    1
)
SELECT * FROM AI_FORECAST(
  TABLE(aggregated),
  horizon => '2016-03-31',
  time_col => 'ds',
  value_col => 'revenue'
)

Berikut ini adalah contoh yang lebih kompleks:


WITH
aggregated AS (
  SELECT
    DATE(tpep_pickup_datetime) AS ds,
    dropoff_zip,
    SUM(fare_amount) AS revenue,
    COUNT(*) AS n_trips
  FROM
    samples.nyctaxi.trips
  GROUP BY
    1, 2
),
spine AS (
  SELECT all_dates.ds, all_zipcodes.dropoff_zip
  FROM (SELECT DISTINCT ds FROM aggregated) all_dates
  CROSS JOIN (SELECT DISTINCT dropoff_zip FROM aggregated) all_zipcodes
)
SELECT * FROM AI_FORECAST(
  TABLE(
    SELECT
      spine.*,
      COALESCE(aggregated.revenue, 0) AS revenue,
      COALESCE(aggregated.n_trips, 0) AS n_trips
    FROM spine LEFT JOIN aggregated USING (ds, dropoff_zip)
  ),
  horizon => '2016-03-31',
  time_col => 'ds',
  value_col => ARRAY('revenue', 'n_trips'),
  group_col => 'dropoff_zip',
  prediction_interval_width => 0.9,
  parameters => '{"global_floor": 0}'
)

Nota

ai_forecast tidak membuat 0 untuk entri yang hilang atau NULL dalam tabel. Jika nilai yang tepat dari entri yang hilang dapat disimpulkan, maka nilai-nilai tersebut harus digabungkan sebelum memanggil fungsi ai_forecast. Jika nilai benar-benar hilang atau tidak diketahui, maka Anda dapat membiarkan nilai sebagai NULL atau menghapusnya.

Untuk data yang sangat jarang, praktik terbaik adalah menyatukan nilai yang hilang atau memberikan nilai frekuensi secara eksplisit untuk menghindari output yang tidak terduga dari inferensi frekuensi "otomatis". Sebagai contoh, inferensi frekuensi "otomatis" pada dua entri dengan jeda waktu 14 hari akan menyimpulkan frekuensi "14D" meskipun frekuensi yang sebenarnya mungkin setiap minggu dengan satu nilai yang hilang. Menyamarkan entri yang hilang akan menghapus ambiguitas ini.

Berikut ini menunjukkan contoh di mana parameter prakiraan yang berbeda diterapkan ke grup yang berbeda dalam tabel input. Contoh menggunakan argumen parameters sebagai pengidentifikasi kolom. Ini memungkinkan pengguna untuk menyimpan JSON parameter yang ditentukan sebelumnya dalam tabel dan menggunakannya kembali pada data baru.

WITH past AS (
  SELECT
    CASE
      WHEN fare_amount < 30 THEN 'Under $30'
      ELSE '$30 or more'
    END AS revenue_bucket,
    CASE
      WHEN fare_amount < 30 THEN '{"daily_order": 0}'
      ELSE '{"daily_order": "auto"}'
    END AS parameters,
    DATE(tpep_pickup_datetime) AS ds,
    SUM(fare_amount) AS revenue
  FROM samples.nyctaxi.trips
  GROUP BY ALL
)
SELECT * FROM AI_FORECAST(
  TABLE(past),
  horizon => (SELECT MAX(ds) + INTERVAL 30 DAYS FROM past),
  time_col => 'ds',
  value_col => 'revenue',
  group_col => ARRAY('revenue_bucket'),
  parameters => 'parameters'
)

Batasan

Batasan berikut berlaku selama pratinjau:

  • Prosedur prakiraan default adalah model linear dan musiman sepotong seperti nabi. Ini adalah satu-satunya prosedur prakiraan yang didukung yang tersedia.
  • Pesan kesalahan dikirimkan melalui mesin UDTF Python, dan berisi informasi jejak balik Python. Akhir jejak berisi pesan kesalahan sebenarnya.