series_fbprophet_forecast_fl()
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer
Die Funktion series_fbprophet_forecast_fl()
ist eine benutzerdefinierte Funktion (UDF), die einen Ausdruck verwendet, der eine Zeitreihe als Eingabe enthält und die Werte der letzten nachgestellten Punkte mithilfe des Prophetenalgorithmus vorhersagt. Die Funktion gibt sowohl die prognostizierten Punkte als auch ihre Konfidenzintervalle zurück. Diese Funktion ist ein Kusto-Abfragesprache (KQL)-Wrapper für die Prophet()-Klasse und macht nur die Parameter verfügbar, die für die Vorhersage obligatorisch sind. Sie können Ihre Kopie ändern, um weitere Parameter zu unterstützen. z. B. Feiertage, Punkte ändern, Fourierreihenfolge usw.
Hinweis
Erwägen Sie die Verwendung der systemeigenen Funktion series_decompose_forecast(). Die systemeigene Funktion basiert auf einem einfacheren Modell, ist aber skalierbarer und wird schneller ausgeführt.
Voraussetzungen
- Das Python-Plug-In muss im Cluster aktiviert sein. Dies ist für die inline Python erforderlich, die in der Funktion verwendet wird.
- Das Python-Plug-In muss in der Datenbank aktiviert sein. Dies ist für die inline Python erforderlich, die in der Funktion verwendet wird.
- Installieren Sie das
fbprophet
Paket, da es nicht im Python-Image enthalten ist. Gehen Sie wie folgt vor, um das Paket zu installieren:- Befolgen Sie die Richtlinien zum Installieren von Paketen für das Python-Plug-In.
- Um Zeit in den oben genannten Richtlinien zu sparen, können Sie die
prophet
ZIP-Datei herunterladen, die die Raddateien undprophet
deren Abhängigkeiten enthält, von https://artifactswestusnew.blob.core.windows.net/public/prophet-1.1.5.zip. Speichern Sie diese Datei im Blob-Container für die Zulassungsliste.
- Um Zeit in den oben genannten Richtlinien zu sparen, können Sie die
- Erstellen Sie ein SAS-Token mit Lesezugriff auf Ihre ZIP-Datei. Informationen zum Erstellen eines SAS-Tokens finden Sie unter "SAS für einen BLOB-Container".
- Ersetzen Sie im Beispiel den URL-Verweis im
external_artifacts
Parameter durch Den Dateipfad und dessen SAS-Token.
- Befolgen Sie die Richtlinien zum Installieren von Paketen für das Python-Plug-In.
Syntax
T | invoke series_fbprophet_forecast_fl(
,
ts_series y_series,
y_pred_series,
[ Punkte ],
[ y_pred_low_series ],
[ y_pred_high_series ])
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
ts_series | string |
✔️ | Der Name der Eingabetabellenspalte, die die Zeitstempel der Datenreihe enthält, die vorhergesagt werden sollen. |
y_series | string |
✔️ | Der Name der Eingabetabellenspalte, die die Werte der Datenreihe enthält, die vorhergesagt werden sollen. |
y_pred_series | string |
✔️ | Der Name der Spalte zum Speichern der vorhergesagten Datenreihe. |
Punkte | int |
✔️ | Die Anzahl der Punkte am Ende der Datenreihe, die vorhergesagt werden sollen (Prognose). Diese Punkte werden vom Lernprozess (Regression) ausgeschlossen. Der Standardwert ist 0. |
y_pred_low_series | string |
Der Name der Spalte zum Speichern der Datenreihe der niedrigsten Werte des Konfidenzintervalls. Lassen Sie es aus, wenn das Konfidenzintervall nicht benötigt wird. | |
y_pred_high_series | string |
Der Name der Spalte, die die Datenreihe der höchsten Werte des Konfidenzintervalls speichert. Lassen Sie es aus, wenn das Konfidenzintervall nicht benötigt wird. |
Funktionsdefinition
Sie können die Funktion definieren, indem Sie den Code entweder als abfragedefinierte Funktion einbetten oder wie folgt als gespeicherte Funktion in Ihrer Datenbank erstellen:
Definieren Sie die Funktion mithilfe der folgenden Let-Anweisung. Es sind keine Berechtigungen erforderlich.
Wichtig
Eine Let-Anweisung kann nicht alleine ausgeführt werden. Auf sie muss eine tabellarische Ausdrucksanweisung folgen. Informationen zum Ausführen eines funktionierenden Beispiels series_fbprophet_forecast_fl()
finden Sie unter Beispiel.
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.
Beispiel
Im folgenden Beispiel wird der Aufrufoperator verwendet, um die Funktion auszuführen.
Um eine abfragedefinierte Funktion zu verwenden, rufen Sie sie nach der definition der eingebetteten Funktion auf.
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
Output