次の方法で共有


series_fbprophet_forecast_fl()

関数 series_fbprophet_forecast_fl()ユーザー定義関数 (UDF) であり、時系列を含む式を入力として受け取り、 Prophet アルゴリズムを使用して最後の末尾のポイントの値を予測。 関数は、予測ポイントとその信頼区間の両方を返します。 この関数は、Prophet () クラスへの Kusto 照会言語 (KQL) ラッパーであり、予測に必須のパラメーターのみを公開します。 追加のパラメーターをサポートするには、コピーを自由に変更してください。 休日、変更点、フーリエ次数などがあります。

Note

ネイティブ関数 series_decompose_forecast () の使用を検討してください。 ネイティブ関数は、より単純なモデルに基づいていますが、拡張性が高く、より高速に実行できます。

前提条件

  • python イメージに含まれていないので、 fbprophet パッケージをインストールします。 パッケージをインストールするには、次の操作を行います。
    1. Python プラグインのパッケージをインストールするためのガイドラインに従います。
      • 上記のガイドラインで時間を節約するために、https://artifactswestusnew.blob.core.windows.net/public/prophet-1.1.5.zip から prophet のホイール ファイルとその依存関係を含む prophet ZIP ファイルをダウンロードできます。 このファイルを許可リストに載せられている BLOB コンテナーに保存します。
    2. ZIP ファイルへの読み取りアクセス権を持つ SAS トークンを作成します。 SAS トークンを作成するには、「BLOB コンテナーの SAS を取得する」を参照してください。
    3. Exampleで、external_artifacts パラメーターの URL 参照を、ファイル パスとその SAS トークンに置き換えます。

構文

T | invoke series_fbprophet_forecast_fl(ts_series, y_series, y_pred_series, [ ポイント ] , [ y_pred_low_series ] , [ y_pred_high_series ])

構文規則について詳しく知る。

パラメーター

件名 タイプ Required 説明
ts_series string ✔️ 予測する系列のタイム スタンプを含む入力テーブル列の名前。
y_series string ✔️ 予測する系列の値を含む入力テーブル列の名前。
y_pred_series string ✔️ 予測された系列を格納する列の名前。
ポイント int ✔️ 予測する系列の末尾にあるポイントの数 (予測)。 これらの点は、学習 (回帰) プロセスから除外されます。 既定値は 0 です。
y_pred_low_series string 信頼区間の最小値の系列を格納する列の名前。 信頼区間が必要ない場合は省略します。
y_pred_high_series string 信頼区間の最大値の系列を格納する列の名前。 信頼区間が必要ない場合は省略します。

関数定義

関数を定義するには、次のようにコードをクエリ定義関数として埋め込むか、データベースに格納された関数として作成します。

次の let ステートメントを使用して関数を定義。 権限は必要ありません。

重要

let ステートメント単独では実行できません。 その後に 表形式の式ステートメントが続く必要がありますseries_fbprophet_forecast_fl()の動作例を実行するには、Exampleを参照してください。

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.

次の例では、 invoke 演算子 を使用して関数を実行します。

クエリ定義関数を使用するには、埋め込み関数定義の後に呼び出します。

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 

出力

いくつかの時系列の予測を示すグラフ。

この機能はサポートされていません。