ai_forecast
함수
적용 대상: Databricks SQL
Important
이 기능은 공개 미리 보기로 제공됩니다. 미리 보기에 참여하려면 Databricks 계정 팀에 문의하세요.
ai_forecast()
는 시계열 데이터를 미래로 추정하도록 설계된 테이블 반환 함수입니다. 이 함수를 구성하는 데 사용할 수 있는 인수는 인수를 참조하세요.
요건
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 '{}'
)
Arguments
ai_forecast()
는 원하는 수의 그룹(group_col
참조 )과 각 그룹 내에서 최대 100개의 메트릭(value_col
참조)를 예측할 수 있습니다. 예측 빈도는 그룹의 모든 메트릭에 대해 동일하지만 여러 그룹에서 다를 수 있습니다(참조 frequency
).
이 함수에 사용할 수 있는 인수는 다음과 같습니다:
observed
는 예측 프로시저의 학습 데이터로 사용되는 테이블 반환 입력입니다.- 이 입력 관계는 하나의 "시간" 열과 하나 이상의 "값" 열을 포함해야 합니다. "그룹" 및 "매개 변수" 열은 선택 사항입니다. 입력 관계의 모든 추가 열은 무시됩니다.
horizon
는 예측 결과의 적절한 배타적 종료 시간을 나타내는 타임스탬프 캐스팅 가능 수량입니다. 그룹 내에서(참조group_col
) 예측 결과는 마지막 관찰과 수평선 사이의 시간에 걸쳐 있습니다. 지평선이 마지막 관찰 시간보다 작으면 결과가 생성되지 않습니다.time_col
는observed
에서 "시간 열"을 참조하는 문자열입니다. 참조되는time_col
열은 aDATE
또는 aTIMESTAMP
여야 합니다.value_col
은observed
에서 값 열을 참조하는 문자열 또는 문자열 배열입니다. 이 인수에서 참조하는 열은DOUBLE
으로 캐스팅할 수 있어야 합니다.group_col
(선택 사항)은observed
에 있는 그룹 열을 나타내는 문자열 또는 문자열 배열입니다. 지정한 경우 그룹 열은 분할 조건으로 사용되며 각 그룹에 대해 독립적으로 예측이 생성됩니다. 지정되지 않은 경우 전체 입력 데이터는 단일 그룹으로 처리됩니다.prediction_interval_width
(선택 사항)은 예측 간격의 너비를 나타내는 0에서 1 사이의 값입니다. 미래 값은{v}_upper
와{v}_lower
사이에 속할 확률이prediction_interval_width
%입니다.frequency
(선택 사항)은 예측 결과의 시간 세분성을 지정하는 시간 단위 또는 pandas 오프셋 별칭 문자열입니다. 지정되지 않은 경우 예측 세분성은 각 그룹에 대해 독립적으로 자동으로 유추됩니다. 빈도 값을 지정하면 모든 그룹에 동일하게 적용됩니다.- 그룹 내에서 유추된 빈도는 가장 최근의 관찰 모드입니다. 사용자가 튜닝할 수 없는 편리한 작업입니다.
- 예를 들어 99개의 "월요일"과 1개의 "화요일"이 있는 시계열은 "주"가 유추된 빈도가 됩니다.
seed
(선택 사항)은 예측 프로시저에 사용되는 의사 수 생성기를 초기화하는 데 사용되는 숫자입니다.parameters
(선택 사항)은 문자열로 인코딩된 JSON 또는 예측 프로시저의 매개 변수화를 나타내는 열 식별자의 이름입니다. 매개 변수의 조합은 순서에 따라 지정할 수 있습니다(예:{“weekly_order”: 10, “global_cap”: 1000}
.). 지정되지 않은 매개 변수는 학습 데이터의 특성에 따라 자동으로 결정됩니다. 지원되는 매개 변수는 다음과 같습니다.global_cap
와global_floor
를 함께 사용하거나 독립적으로 사용하여 메트릭 값의 가능한 영역을 정의할 수 있습니다. 예를 들어{“global_floor”: 0}
를 사용하여 비용과 같은 메트릭을 항상 양수로 제한할 수 있습니다. 학습 데이터 및 예측 데이터에 전역적으로 적용되며 예측 값에 대해서만 엄격한 제약 조건을 제공하는 데 사용할 수 없습니다.daily_order
와weekly_order
는 일별 및 주간 계절성 구성 요소의 푸리에 순서를 설정합니다.
반품
예측된 데이터를 포함하는 새 행 집합입니다. 출력 스키마에는 형식이 변경되지 않은 시간 및 그룹 열이 포함됩니다. 예를 들어 입력 시간 열의 유형이 DATE
인 경우 출력 시간 열의 유형도 DATE
가 됩니다. 각 값 열에는 {v}_forecast
, {v}_upper
, {v}_lower
패턴이 있는 세 개의 출력 열이 있습니다. 입력 값 유형에 관계없이 예상 값 열은 항상 DOUBLE
유형입니다. 출력 테이블에는 관찰된 데이터의 끝 사이의 시간 범위에서 수평선까지의 시간 범위에 걸쳐 있는 미래 값만 포함됩니다.
아래 AI_FORECAST 수행되는 스키마 유추의 몇 가지 예를 참조하세요.
입력 테이블 | 인수 | 출력 테이블 |
---|---|---|
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}'
)
테이블이 0 또는 빈 항목을 구체화하지 않는 것이 매우 일반적입니다. 누락된 항목의 값을 유추할 수 있는 경우(예: 0
), 예측 함수를 호출하기 전에 이러한 값을 합쳐야 합니다. 값이 실제로 누락되었거나 알 수 없는 경우 NULL
로 남겨둘 수 있습니다.
매우 스파스 데이터의 경우 누락된 값을 병합하거나 "자동" 빈도 유추에서 예기치 않은 출력을 방지하기 위해 빈도 값을 명시적으로 제공하는 것이 가장 좋습니다. 예를 들어 14일 간격으로 두 항목에 대한 "자동" 빈도 유추는 "실제" 빈도가 값이 1개인 매주일 수 있더라도 "14D"의 빈도를 유추합니다. 누락된 항목을 병합하면 이 모호성이 제거됩니다.
마지막으로 입력 테이블의 다른 그룹에 다른 예측 매개 변수가 적용되는 예제를 보여 드립니다.
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'
)
열 식별자를 parameters
인수로 사용한다는 점에 유의하세요. 이렇게 하면 사용자가 이전에 결정한 매개 변수 JSON을 테이블에 저장하고 새 데이터에 다시 사용할 수 있습니다.
제한 사항
공개 미리 보기에서는 다음 제한 사항이 적용됩니다.
- 기본 예측 절차는 예언자와 유사한 선형 및 계절성 모델입니다. 이는 지원되는 유일한 예측 절차입니다.
- 오류 메시지는 Python UDTF 엔진을 통해 전달되며 Python 추적 백 정보를 포함합니다. 추적의 끝에는 실제 오류 메시지가 포함됩니다.