Функция ai_forecast
Область применения: Databricks SQL
Внимание
Эта функция доступна в общедоступной предварительной версии и соответствует требованиям HIPAA. Обратитесь к группе учетной записи Databricks, чтобы принять участие в предварительной версии.
ai_forecast()
— это table-значная функция, созданная для экстраполяции данных временных рядов в будущее. Сведения о доступных аргументах см. в разделе "Аргументы " для настройки этой функции.
Требование
Хранилище Sql Pro или Бессерверное хранилище SQL
Синтаксис
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 '{}'
)
Аргументы
ai_forecast()
может прогнозировать любое количество групп (см group_col
. ) и до 100 метрик (см value_col
. в каждой группе). Частота прогнозирования одинакова для всех метрик в группе, но может отличаться в разных группах (см. раздел frequency
).
Ниже приведены доступные аргументы для этой функции:
-
observed
— это table-значение входных данных, которые используются в качестве обучающих данных для процедуры прогнозирования.- Это отношение входных данных должно содержать один "time" column и один или несколько "value" columns. "Группа", "parameters" и columns необязательны. Любые дополнительные columns во входных отношениях игнорируются.
-
horizon
— это количество приведения меток времени, представляющее правое эксклюзивное время результатов прогнозирования. В группе (смgroup_col
. ) результаты прогноза охватывают время между последним наблюдением и горизонтом. Если горизонт меньше последнего времени наблюдения, то результаты не создаются. -
time_col
— это строка, ссылающаяся на "время column" вobserved
. column, на которые ссылаетсяtime_col
, должны бытьDATE
илиTIMESTAMP
. -
value_col
— это строка или массив строк, ссылающихся на значение columns вobserved
. columns, на которые ссылается этот аргумент, может быть приведен кDOUBLE
. -
group_col
(необязательно) — это строка или массив строк, представляющий группу columns вobserved
. Если указано, группа columns используется в качестве критерия разделения, и прогнозы создаются для каждой группы отдельно. Если не указано, полные входные данные обрабатываются как одна группа. -
prediction_interval_width
(необязательно) — это значение от 0 до 1, представляющее ширину интервала прогнозирования. Будущие values имеютprediction_interval_width
% вероятность падения между{v}_upper
и{v}_lower
. -
frequency
(необязательно) — это единица времени или строка алиаса pandas offset, указывающая временную детализацию прогноза. Если не указано, прогноз детализации автоматически выводится для каждой группы независимо. Если задано значение частоты, оно применяется одинаково ко всем группам.- Выводимые частоты в группе — это режим последних наблюдений. Это удобная операция, которая не настраивается пользователем.
- Например, временный ряд с 99 "понедельниками" и 1 "вторник" приводит к тому, что "неделя" является выводимой частотой.
-
seed
(необязательно) — это число, используемое для инициализации всех генераторов псевдорандомных чисел, используемых в процедуре прогнозирования. -
parameters
(необязательно) — это строковое кодирование JSON или имя columnidentifier, представляющее параметризацию процедуры прогнозирования. Любое сочетание parameters можно указать в любом порядке, например{“weekly_order”: 10, “global_cap”: 1000}
. Любые неопределенные parameters автоматически определяются на основе атрибутов обучающих данных. Поддерживаются следующие parameters:-
global_cap
иglobal_floor
можно использовать совместно или независимо для определения возможного домена метрики values.{“global_floor”: 0}
Например, можно использовать для ограничения метрик, таких как затраты, всегда положительными. Они применяются в глобальном масштабе как к данным обучения, так и к прогнозируемым данным, и не могут использоваться для установления строгих ограничений исключительно на прогнозируемые values. -
daily_order
иweekly_order
set четырехдневный порядок ежедневных и еженедельных компонентов сезонности.
-
Возвраты
Новый набор строк set, содержащих прогнозируемые данные. Выход schema будет содержать время и группу columns, их типы останутся без изменений. Например, если входное время column имеет тип DATE
, то выходное время column также будет DATE
. Для каждого значения column существует три выходных columns с шаблоном {v}_forecast
, {v}_upper
и {v}_lower
. Независимо от типов входных значений, прогнозируемое значение columns всегда является типом DOUBLE
. Выход table содержит только будущие values, охватывая диапазон времени от окончания наблюдаемых данных до горизонта.
См. некоторые примеры вывода schema, выполняемого AI_FORECAST ниже:
Вход table | Аргументы | Выход table |
---|---|---|
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 |
Примеры
В следующем примере прогнозируются до указанной даты:
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'
)
Ниже приведен более сложный пример:
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}'
)
Заметка
Tables последовательно не отображают нули или пустые записи. Если values отсутствующих записей можно вывести, например 0
, тогда объедините эти values перед вызовом функции ai_forecast
. Если values действительно отсутствуют или неизвестны, их можно оставить как NULL
.
Для очень разреженных данных рекомендуется объединять отсутствующие values или явно предоставлять значение частоты, чтобы избежать непредвиденных выходных данных из вывода "авто" частоты. Например, "автоматическое" вывод частоты двух записей в течение 14 дней в интервале будет выводить частоту "14D", даже если "реальная" частота может быть еженедельной с 1 отсутствующим значением. Объединение отсутствующих записей удаляет эту неоднозначность.
Ниже показан пример where различные прогнозы parameters применяются к разным группам во входных table. В этом примере аргумент parameters
используется в качестве columnidentifier. Это позволяет пользователям хранить ранее определенные параметры JSON в table и повторно использовать их в новых данных.
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'
)
Ограничения
Следующие ограничения применяются во время предварительной версии:
- Процедура прогнозирования по умолчанию — это модель прогнозирования, похожая на пророка, а также модель сезонности. Это единственная поддерживаемая процедура прогнозирования.
- Сообщения об ошибках доставляются через обработчик UDTF Python и содержат сведения о обратной трассировке Python. Конец трассировки содержит фактическое сообщение об ошибке.