Aracılığıyla paylaş


ai_forecast işlevi

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL

Önemli

Bu işlev Genel Önizleme ve HIPAA uyumlu.

ai_forecast(), zaman serisi verilerini geleceğe ekstrapole etmek için tasarlanmış, tablo değer döndüren bir işlevdir. Bağımsız Değişkenler'e bu işlevi yapılandırmak için kullanılabilir bağımsız değişkenleri görmek üzere bakın.

Gereksinim

  • Pro veya Sunucusuz SQL ambarı

Söz dizimi


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 '{}'
)

Argümanlar

ai_forecast() her grup içinde herhangi bir sayıda grup (bkz group_col. ) ve en fazla 100 ölçüm (bkz value_col. ) tahmin edebilir. Tahmin sıklığı bir gruptaki tüm ölçümler için aynıdır ancak farklı gruplar arasında farklı olabilir (bkz frequency. ).

Bu işlev için kullanılabilir bağımsız değişkenler şunlardır:

  • observed, tahmin prosedürü için eğitim verisi olarak kullanılan tablo değerli bir girdidir.
    • Bu giriş ilişkisi bir "time" sütunu ve bir veya daha fazla "değer" sütunu içermelidir. "Group" ve "parameters" sütunları isteğe bağlıdır. Giriş ilişkisindeki ek sütunlar göz ardı edilir.
  • horizon, tahmin sonuçlarının sağ-özel bitiş zamanını temsil eden zaman damgası atanabilir bir büyüklüktür. Bir grup içinde (bkz. group_col) tahmin sonuçları son gözlem ile ufuk arasındaki süreyi kapsıyor. Ufuk son gözlem zamanından küçükse hiçbir sonuç oluşturulmaz.
  • time_col, observediçindeki "saat sütununa" başvuran bir dizedir. time_col tarafından referans alınan sütun bir DATE ya da TIMESTAMPolmalıdır.
  • value_col, observeddeğer sütunlarına başvuran bir dize veya dize dizisidir. Bu argümanın referans aldığı sütunlar DOUBLE'a dönüştürülebilir olmalıdır.
  • group_col (isteğe bağlı), observediçindeki grup sütunlarını temsil eden bir dize veya dize dizisidir. Belirtilirse, bölümleme ölçütü olarak grup sütunları kullanılır ve her grup için bağımsız olarak tahminler oluşturulur. Belirtilmezse, tam giriş verileri tek bir grup olarak değerlendirilir.
  • prediction_interval_width (isteğe bağlı), tahmin aralığının genişliğini temsil eden 0 ile 1 arasında bir değerdir. Gelecekteki değerlerin prediction_interval_width ile {v}_upperarasında düşme olasılığı {v}_lower %.
  • frequency (isteğe bağlı), tahmin sonuçlarının zaman ayrıntı düzeyini belirten bir zaman birimi veya pandas ofset takma adı dizesidir. Belirtilmezse, her grup için tahmin ayrıntı düzeyi otomatik olarak bağımsız olarak çıkarılır. Bir sıklık değeri belirtilirse, tüm gruplara eşit olarak uygulanır.
    • Bir grup içindeki çıkarsanan sıklık, en son gözlemlerin modudur. Bu, kullanıcı tarafından ayarlanabilir olmayan bir kolaylık işlemidir.
    • Örneğin, 99 "pazartesi" ve 1 "salı" içeren bir zaman serisi, "hafta" sonucunun çıkarılan sıklık olmasına neden olur.
  • seed (isteğe bağlı), tahmin yordamında kullanılan sözde rastgele sayı üreteçlerini başlatmak için kullanılan bir sayıdır.
  • parameters (isteğe bağlı), dizeyle kodlanmış bir JSON veya tahmin yordamının parametreleştirmesini temsil eden bir sütun tanımlayıcısının adıdır. Herhangi bir parametre bileşimi herhangi bir sırada belirtilebilir, örneğin, {“weekly_order”: 10, “global_cap”: 1000}. Belirtilmeyen parametreler, eğitim verilerinin özniteliklerine göre otomatik olarak belirlenir. Aşağıdaki parametreler desteklenir:
    • global_cap ve global_floor, ölçüm değerlerinin olası etki alanını tanımlamak için birlikte veya bağımsız olarak kullanılabilir. {“global_floor”: 0}örneğin, maliyet gibi bir ölçümü her zaman pozitif olacak şekilde kısıtlamak için kullanılabilir. Bunlar eğitim verilerine ve tahmin edilen verilere genel olarak uygulanır ve yalnızca tahmin edilen değerlerde sıkı kısıtlamalar sağlamak için kullanılamaz.
    • daily_order ve weekly_order günlük ve haftalık mevsimsellik bileşenlerinin Fourier derecesini belirler.

İade

Tahmin edilen verileri içeren yeni bir satır kümesi. Çıkış şeması, türleri değişmeden zaman ve grup sütunlarını içerir. Örneğin, giriş zamanı sütununda DATEtürü varsa çıkış zamanı sütun türü de DATEolur. Her değer sütunu için, {v}_forecast, {v}_upperve {v}_lowerdesenleriyle üç çıkış sütunu vardır. Giriş değeri türlerinden bağımsız olarak, tahmin edilen değer sütunları her zaman DOUBLEtürüdür. Çıkış tablosu yalnızca gelecekteki değerleri içerir ve gözlemlenen verilerin bitişi ile ufuk çizgisi arasındaki zaman aralığını kapsar.

aşağıdaki AI_FORECAST tarafından gerçekleştirilen şema çıkarımına ilişkin bazı örneklere bakın:

Giriş tablosu Argümanlar Çıkış tablosu
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

Örnekler

Aşağıdaki örnek, belirtilen tarihe kadar tahmin eder:


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'
)

Aşağıda daha karmaşık bir örnek verilmiştir:


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}'
)

Not

ai_forecast tablodaki eksik veya NULL girdiler için 0'ları oluşturmaz. Eksik girişlerin doğru değerleri çıkarılabiliyorsa, ai_forecast işlevi çağrılmadan öncesinde birleştirilmelidir. Değerler gerçekten eksik veya bilinmiyorsa, değerleri NULL olarak bırakabilir veya kaldırabilirsiniz.

Çok seyrek veriler için, eksik değerleri birleştirmenin veya "otomatik" frekans çıkarımının beklenmeyen çıkışını önlemek için açıkça bir sıklık değeri sağlamak en iyi yöntemdir. Örneğin, 14 gün arayla iki girişte "otomatik" sıklık çıkarımı, "gerçek" sıklık 1 eksik değerle haftalık olsa bile "14B" sıklığı çıkaracaktır. Eksik girdileri birleştirme, bu belirsizliği ortadan kaldırır.

Aşağıda, giriş tablosundaki farklı gruplara farklı tahmin parametrelerinin uygulandığı bir örnek gösterilmektedir. Örnek, sütun tanımlayıcısı olarak parameters bağımsız değişkenini kullanır. Bu, kullanıcıların önceden belirlenen parametre JSON'lerini bir tabloda depolamasına ve bunları yeni verilerde yeniden kullanmasına olanak tanır.

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'
)

Sınırlamalar

Önizleme sırasında aşağıdaki sınırlamalar geçerlidir:

  • Varsayılan tahmin modeli, Prophet benzeri parçalı doğrusal ve mevsimsellik modelidir. Bu, sağlanan tek desteklenen tahmin yordamıdır.
  • Hata iletileri Python UDTF altyapısı aracılığıyla teslim edilir ve Python izleme geri bilgilerini içerir. İzleme kaydının sonunda gerçek hata mesajı yer alır.