series_fbprophet_forecast_fl()
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer
이 함수 series_fbprophet_forecast_fl()
는 시계열이 포함된 식을 입력으로 사용하고 예언자 알고리즘을 사용하여 마지막 후행 지점의 값을 예측하는 UDF(사용자 정의 함수)입니다. 이 함수는 예측된 지점과 신뢰 구간을 모두 반환합니다. 이 함수는 Prophet() 클래스에 대한 Kusto 쿼리 언어(KQL) 래퍼이며 예측에 필요한 매개 변수만 노출합니다. 더 많은 매개 변수를 지원하도록 복사본을 자유롭게 수정하세요. 휴일, 변경 지점, 푸리에 순서 등과 같은
참고 항목
네이티브 함수 series_decompose_forecast()를 사용하는 것이 좋습니다. 네이티브 함수는 더 간단한 모델을 기반으로 하지만 확장성이 더 높고 더 빠르게 실행됩니다.
필수 조건
- 클러스터에서 Python 플러그 인을 사용하도록 설정해야 합니다. 이 작업은 함수에 사용되는 인라인 Python에 필요합니다.
- 데이터베이스에서 Python 플러그 인을 사용하도록 설정해야 합니다. 이 작업은 함수에 사용되는 인라인 Python에 필요합니다.
- Python 이미지에
fbprophet
포함되지 않으므로 패키지를 설치합니다. 패키지를 설치하려면 다음을 수행합니다.- Python 플러그 인용 패키지를 설치하기 위한 지침을 따릅니다.
- 위의 지침에서 시간을 절약하려면 .에서 https://artifactswestusnew.blob.core.windows.net/public/prophet-1.1.5.zip휠 파일 및 해당 종속성을 포함하는 ZIP 파일을
prophet
다운로드prophet
할 수 있습니다. 허용 목록에 있는 Blob 컨테이너에 이 파일을 저장합니다.
- 위의 지침에서 시간을 절약하려면 .에서 https://artifactswestusnew.blob.core.windows.net/public/prophet-1.1.5.zip휠 파일 및 해당 종속성을 포함하는 ZIP 파일을
- ZIP 파일에 대한 읽기 권한이 있는 SAS 토큰을 만듭니다. SAS 토큰을 만들려면 Blob 컨테이너에 대한 SAS 가져오기를 참조 하세요.
- 예제에서 매개 변수의 URL 참조를
external_artifacts
파일 경로 및 해당 SAS 토큰으로 바꿉니다.
- Python 플러그 인용 패키지를 설치하기 위한 지침을 따릅니다.
구문
T | invoke series_fbprophet_forecast_fl(
,
ts_series y_series,
y_pred_series,
[ points ],
[ y_pred_low_series ],
[ y_pred_high_series ])
구문 규칙에 대해 자세히 알아봅니다.
매개 변수
이름 | Type | 필수 | 설명 |
---|---|---|---|
ts_series | string |
✔️ | 예측할 계열의 타임스탬프를 포함하는 입력 테이블 열의 이름입니다. |
y_series | string |
✔️ | 예측할 계열의 값을 포함하는 입력 테이블 열의 이름입니다. |
y_pred_series | string |
✔️ | 예측된 계열을 저장할 열의 이름입니다. |
포인트 | int |
✔️ | 계열의 끝에 있는 예측(예측)의 포인트 수입니다. 이러한 점은 학습(회귀) 프로세스에서 제외됩니다. 기본값은 0입니다. |
y_pred_low_series | string |
신뢰 구간의 가장 낮은 값 계열을 저장할 열의 이름입니다. 신뢰 구간이 필요하지 않은 경우 생략합니다. | |
y_pred_high_series | string |
신뢰 구간의 가장 높은 값 계열을 저장할 열의 이름입니다. 신뢰 구간이 필요하지 않은 경우 생략합니다. |
함수 정의
다음과 같이 해당 코드를 쿼리 정의 함수로 포함하거나 데이터베이스에 저장된 함수로 만들어 함수를 정의할 수 있습니다.
다음 let 문을 사용하여 함수를 정의합니다. 사용 권한이 필요 없습니다.
Important
let 문은 자체적으로 실행할 수 없습니다. 그 뒤에 테이블 형식 식 문이 있어야 합니다. 작업 예제 series_fbprophet_forecast_fl()
를 실행하려면 예제를 참조 하세요.
let series_fbprophet_forecast_fl=(tbl:(*), ts_series:string, y_series:string, y_pred_series:string, points:int=0, y_pred_low_series:string='', y_pred_high_series:string='')
{
let kwargs = bag_pack('ts_series', ts_series, 'y_series', y_series, 'y_pred_series', y_pred_series, 'points', points, 'y_pred_low_series', y_pred_low_series, 'y_pred_high_series', y_pred_high_series);
let code = ```if 1:
from sandbox_utils import Zipackage
Zipackage.install("prophet.zip")
ts_series = kargs["ts_series"]
y_series = kargs["y_series"]
y_pred_series = kargs["y_pred_series"]
points = kargs["points"]
y_pred_low_series = kargs["y_pred_low_series"]
y_pred_high_series = kargs["y_pred_high_series"]
result = df
sr = pd.Series(df[y_pred_series])
if y_pred_low_series != '':
srl = pd.Series(df[y_pred_low_series])
if y_pred_high_series != '':
srh = pd.Series(df[y_pred_high_series])
from prophet import Prophet
df1 = pd.DataFrame(columns=["ds", "y"])
for i in range(df.shape[0]):
df1["ds"] = pd.to_datetime(df[ts_series][i])
df1["ds"] = df1["ds"].dt.tz_convert(None)
df1["y"] = df[y_series][i]
df2 = df1[:-points]
m = Prophet()
m.fit(df2)
future = df1[["ds"]]
forecast = m.predict(future)
sr[i] = list(forecast["yhat"])
if y_pred_low_series != '':
srl[i] = list(forecast["yhat_lower"])
if y_pred_high_series != '':
srh[i] = list(forecast["yhat_upper"])
result[y_pred_series] = sr
if y_pred_low_series != '':
result[y_pred_low_series] = srl
if y_pred_high_series != '':
result[y_pred_high_series] = srh
```;
tbl
| evaluate python(typeof(*), code, kwargs
, external_artifacts=bag_pack('prophet.zip', 'https://artifactswestusnew.blob.core.windows.net/public/prophet-1.1.5.zip?*** YOUR SAS TOKEN ***'))
};
// Write your query to use the function here.
예시
다음 예제에서는 호출 연산자를 사용하여 함수를 실행합니다.
쿼리 정의 함수를 사용하려면 포함된 함수 정의 후에 호출합니다.
let series_fbprophet_forecast_fl=(tbl:(*), ts_series:string, y_series:string, y_pred_series:string, points:int=0, y_pred_low_series:string='', y_pred_high_series:string='')
{
let kwargs = bag_pack('ts_series', ts_series, 'y_series', y_series, 'y_pred_series', y_pred_series, 'points', points, 'y_pred_low_series', y_pred_low_series, 'y_pred_high_series', y_pred_high_series);
let code = ```if 1:
from sandbox_utils import Zipackage
Zipackage.install("prophet.zip")
ts_series = kargs["ts_series"]
y_series = kargs["y_series"]
y_pred_series = kargs["y_pred_series"]
points = kargs["points"]
y_pred_low_series = kargs["y_pred_low_series"]
y_pred_high_series = kargs["y_pred_high_series"]
result = df
sr = pd.Series(df[y_pred_series])
if y_pred_low_series != '':
srl = pd.Series(df[y_pred_low_series])
if y_pred_high_series != '':
srh = pd.Series(df[y_pred_high_series])
from prophet import Prophet
df1 = pd.DataFrame(columns=["ds", "y"])
for i in range(df.shape[0]):
df1["ds"] = pd.to_datetime(df[ts_series][i])
df1["ds"] = df1["ds"].dt.tz_convert(None)
df1["y"] = df[y_series][i]
df2 = df1[:-points]
m = Prophet()
m.fit(df2)
future = df1[["ds"]]
forecast = m.predict(future)
sr[i] = list(forecast["yhat"])
if y_pred_low_series != '':
srl[i] = list(forecast["yhat_lower"])
if y_pred_high_series != '':
srh[i] = list(forecast["yhat_upper"])
result[y_pred_series] = sr
if y_pred_low_series != '':
result[y_pred_low_series] = srl
if y_pred_high_series != '':
result[y_pred_high_series] = srh
```;
tbl
| evaluate python(typeof(*), code, kwargs
, external_artifacts=bag_pack('prophet.zip', 'https://artifactswestusnew.blob.core.windows.net/public/prophet-1.1.5.zip?*** YOUR SAS TOKEN ***'))
};
//
// Forecasting 3 time series using fbprophet, compare to forecasting using the native function series_decompose_forecast()
//
let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid
| extend pred_num_native = series_decompose_forecast(num, toint(horizon/dt))
| extend pred_num=dynamic(null), pred_num_lower=dynamic(null), pred_num_upper=dynamic(null)
| invoke series_fbprophet_forecast_fl('TimeStamp', 'num', 'pred_num', toint(horizon/dt), 'pred_num_lower', 'pred_num_upper')
| render timechart
출력