Partager via


series_fbprophet_forecast_fl()

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.
  • Installez le fbprophet package, car il n’est pas inclus dans l’image Python. Pour installer le package, procédez comme suit :
    1. Suivez les instructions pour installer des packages pour le plug-in Python.
    2. 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.
    3. 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.

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

Graphique montrant la prévision de quelques séries chronologiques.