Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer
La fonction series_fbprophet_forecast_fl()
est une fonction définie par l’utilisateur (UDF) qui prend une expression contenant une série chronologique comme entrée et prédit les valeurs des derniers points de fin à l’aide de l’algorithme Prophète. La fonction retourne les points prévus et leurs intervalles de confiance. Cette fonction est un wrapper Langage de requête Kusto (KQL) à la classe Prophet() et expose uniquement les paramètres obligatoires pour la prédiction. N’hésitez pas à modifier votre copie pour prendre en charge d’autres paramètres. comme les vacances, les points de modification, l’ordre de Fourier, etc.
Remarque
Envisagez d’utiliser la fonction native series_decompose_forecast(). La fonction native est basée sur un modèle plus simple, mais elle est plus évolutive et s’exécute plus rapidement.
Prérequis
- Le plug-in Python doit être activé sur le cluster. Cela est requis pour le Python inline utilisé dans la fonction.
- Le plug-in Python doit être activé sur la base de données. Cela est requis pour le Python inline utilisé dans la fonction.
- Installez le
fbprophet
package, car il n’est pas inclus dans l’image Python. Pour installer le package, procédez comme suit :- Suivez les instructions pour installer des packages pour le plug-in Python.
- Pour gagner du temps dans les instructions ci-dessus, vous pouvez télécharger le
prophet
fichier ZIP, contenant les fichiers de roue etprophet
ses dépendances, à partir de https://artifactswestusnew.blob.core.windows.net/public/prophet-1.1.5.zip. Enregistrez ce fichier dans votre conteneur d’objets blob liste verte.
- Pour gagner du temps dans les instructions ci-dessus, vous pouvez télécharger le
- Créez un jeton SAP avec un accès en lecture à votre fichier ZIP. Pour créer un jeton SAP, consultez obtenir la SIGNATURE d’accès partagé pour un conteneur d’objets blob.
- Dans l’exemple, remplacez la référence d’URL dans le
external_artifacts
paramètre par votre chemin d’accès de fichier et son jeton SAP.
- Suivez les instructions pour installer des packages pour le plug-in Python.
Syntaxe
T | invoke series_fbprophet_forecast_fl(
ts_series y_series y_pred_series,
,
[ points ],
[ y_pred_low_series ] [ y_pred_high_series ],
,
)
En savoir plus sur les conventions de syntaxe.
Paramètres
Nom | Type | Requise | Description |
---|---|---|---|
ts_series | string |
✔️ | Nom de la colonne de table d’entrée contenant les horodatages de la série à prédire. |
y_series | string |
✔️ | Nom de la colonne de table d’entrée contenant les valeurs de la série à prédire. |
y_pred_series | string |
✔️ | Nom de la colonne à stocker la série prédite. |
aiguillage | int |
✔️ | Nombre de points à la fin de la série à prédire (prévision). Ces points sont exclus du processus d’apprentissage (régression). La valeur par défaut est 0. |
y_pred_low_series | string |
Nom de la colonne à stocker la série des valeurs les plus basses de l’intervalle de confiance. Omettez si l’intervalle de confiance n’est pas nécessaire. | |
y_pred_high_series | string |
Nom de la colonne à stocker la série des valeurs les plus élevées de l’intervalle de confiance. Omettez si l’intervalle de confiance n’est pas nécessaire. |
Définition de fonction
Vous pouvez définir la fonction en incorporant son code en tant que fonction définie par une requête ou en la créant en tant que fonction stockée dans votre base de données, comme suit :
Définissez la fonction à l’aide de l’instruction let suivante. Aucune autorisation n'est requise.
Important
Une instruction let ne peut pas s’exécuter par elle-même. Elle doit être suivie d’une instruction d’expression tabulaire. Pour exécuter un exemple de travail, consultez l’exempleseries_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.
Exemple
L’exemple suivant utilise l’opérateur Invoke pour exécuter la fonction.
Pour utiliser une fonction définie par une requête, appelez-la après la définition de la fonction incorporée.
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
Sortie