다음을 통해 공유


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_colobserved에서 "시간 열"을 참조하는 문자열입니다. 참조되는 time_col 열은 a DATE또는 a TIMESTAMP여야 합니다.
  • value_colobserved에서 값 열을 참조하는 문자열 또는 문자열 배열입니다. 이 인수에서 참조하는 열은 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_capglobal_floor를 함께 사용하거나 독립적으로 사용하여 메트릭 값의 가능한 영역을 정의할 수 있습니다. 예를 들어 {“global_floor”: 0}를 사용하여 비용과 같은 메트릭을 항상 양수로 제한할 수 있습니다. 학습 데이터 및 예측 데이터에 전역적으로 적용되며 예측 값에 대해서만 엄격한 제약 조건을 제공하는 데 사용할 수 없습니다.
    • daily_orderweekly_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 추적 백 정보를 포함합니다. 추적의 끝에는 실제 오류 메시지가 포함됩니다.