다음을 통해 공유


series_fbprophet_forecast_fl()

이 함수 series_fbprophet_forecast_fl()시계열이 포함된 식을 입력으로 사용하고 예언자 알고리즘을 사용하여 마지막 후행 지점의 값을 예측하는 UDF(사용자 정의 함수)입니다. 이 함수는 예측된 지점과 신뢰 구간을 모두 반환합니다. 이 함수는 Prophet() 클래스에 대한 Kusto 쿼리 언어(KQL) 래퍼이며 예측에 필요한 매개 변수만 노출합니다. 더 많은 매개 변수를 지원하도록 복사본을 자유롭게 수정하세요. 휴일, 변경 지점, 푸리에 순서 등과 같은

참고 항목

네이티브 함수 series_decompose_forecast()를 사용하는 것이 좋습니다. 네이티브 함수는 더 간단한 모델을 기반으로 하지만 확장성이 더 높고 더 빠르게 실행됩니다.

필수 조건

  • Python 이미지에 fbprophet 포함되지 않으므로 패키지를 설치합니다. 패키지를 설치하려면 다음을 수행합니다.
    1. Python 플러그 인패키지를 설치하기 위한 지침을 따릅니다.
    2. zip 파일에 대한 읽기 권한이 있는 SAS 토큰을 만듭니다. SAS 토큰을 만들려면 Blob 컨테이너에 대한 SAS 가져오기를 참조 하세요.
    3. 예제에서 매개 변수의 URL 참조를 external_artifacts 파일 경로 및 해당 SAS 토큰으로 바꿉니다.

구문

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 

출력

몇 가지 시계열을 예측하는 그래프입니다.

이 기능은 지원되지 않습니다.