Sdílet prostřednictvím


series_fbprophet_forecast_fl()

Funkce series_fbprophet_forecast_fl() je uživatelem definovaná funkce (UDF), která jako vstup přebírá výraz obsahující časovou řadu a predikuje hodnoty posledních koncových bodů pomocí algoritmu Proroka. Funkce vrátí prognózované body i intervaly spolehlivosti. Tato funkce je obálka dotazovací jazyk Kusto (KQL) třídě Prorok() a zveřejňuje pouze parametry, které jsou povinné pro predikci. Nebojte se upravit kopii tak, aby podporovala více parametrů. jako jsou svátky, změna bodů, Fourierova pořadí atd.

Poznámka:

Zvažte použití nativní funkce series_decompose_forecast(). Nativní funkce je založená na jednodušším modelu, ale je škálovatelnější a běží rychleji.

Požadavky

  • Modul plug-in Pythonu musí být v clusteru povolený. To se vyžaduje pro vložený Python použitý ve funkci.
  • Modul plug-in Pythonu musí být v databázi povolený. To se vyžaduje pro vložený Python použitý ve funkci.
  • fbprophet Nainstalujte balíček, protože není součástí image Pythonu. Pokud chcete balíček nainstalovat, postupujte takto:
    1. Postupujte podle pokynů pro instalaci balíčků pro modul plug-in Python.
    2. Vytvořte token SAS s přístupem ke čtení souboru ZIP. Pokud chcete vytvořit token SAS, podívejte se na získání SAS pro kontejner objektů blob.
    3. V příkladu nahraďte odkaz na adresu URL v parametru external_artifacts cestou k souboru a jeho tokenem SAS.

Syntaxe

T | invoke series_fbprophet_forecast_fl(ts_series y_series y_pred_series,, [ body ], [ y_pred_low_series ], [ y_pred_high_series ], )

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Type Požadováno Popis
ts_series string ✔️ Název sloupce vstupní tabulky obsahující časové razítko řady, které se mají předpovědět.
y_series string ✔️ Název sloupce vstupní tabulky obsahující hodnoty řady, které se mají předpovědět.
y_pred_series string ✔️ Název sloupce pro uložení předpovězené řady.
výhybka int ✔️ Počet bodů na konci řady, které se mají předpovědět (prognóza). Tyto body jsou vyloučené z procesu učení (regrese). Výchozí hodnota je 0.
y_pred_low_series string Název sloupce pro uložení řady nejnižších hodnot intervalu spolehlivosti. Pokud interval spolehlivosti nepotřebujete, vynecháte ho.
y_pred_high_series string Název sloupce pro uložení řady nejvyšších hodnot intervalu spolehlivosti. Pokud interval spolehlivosti nepotřebujete, vynecháte ho.

Definice funkce

Funkci můžete definovat vložením jejího kódu jako funkce definovanou dotazem nebo vytvořením jako uložené funkce v databázi následujícím způsobem:

Definujte funkci pomocí následujícího příkazu let. Nejsou vyžadována žádná oprávnění.

Důležité

Příkaz let nemůže běžet samostatně. Musí následovat příkaz tabulkového výrazu. Pokud chcete spustit funkční příklad, podívejte se na příkladseries_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.

Příklad

Následující příklad používá operátor invoke ke spuštění funkce.

Pokud chcete použít funkci definovanou dotazem, vyvoláte ji po definici vložené funkce.

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 

Výstup

Graf znázorňující prognózování několika časových řad

Tato funkce není podporovaná.