Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer
La función es una función series_fbprophet_forecast_fl()
definida por el usuario (UDF) que toma una expresión que contiene una serie temporal como entrada y predice los valores de los últimos puntos finales mediante el algoritmo Prophet. La función devuelve los puntos previstos y sus intervalos de confianza. Esta función es un contenedor de Lenguaje de consulta Kusto (KQL) a la clase Prophet() y expone solo los parámetros que son obligatorios para la predicción. No dude en modificar la copia para admitir más parámetros. por ejemplo, días festivos, puntos de cambio, orden de Fourier, etc.
Nota:
Considere la posibilidad de usar la función nativa series_decompose_forecast(). La función nativa se basa en un modelo más sencillo, pero es más escalable y se ejecuta más rápido.
Requisitos previos
- El complemento de Python debe estar habilitado en el clúster. Esto es necesario para python insertado que se usa en la función .
- El complemento de Python debe estar habilitado en la base de datos. Esto es necesario para python insertado que se usa en la función .
- Instale el
fbprophet
paquete, ya que no se incluye en la imagen de Python. Para instalar el paquete, haga lo siguiente:- Siga las instrucciones para instalar paquetes para el complemento de Python.
- Para ahorrar tiempo en las instrucciones anteriores, puede descargar el
prophet
archivo ZIP, que contiene los archivos wheel deprophet
y sus dependencias, desde https://artifactswestusnew.blob.core.windows.net/public/prophet-1.1.5.zip. Guarde este archivo en el contenedor de blobs permitido.
- Para ahorrar tiempo en las instrucciones anteriores, puede descargar el
- Cree un token de SAS con acceso de lectura al archivo ZIP. Para crear un token de SAS, consulte Obtención de la SAS para un contenedor de blobs.
- En el ejemplo, reemplace la referencia de dirección URL en el parámetro por la
external_artifacts
ruta de acceso del archivo y su token de SAS.
- Siga las instrucciones para instalar paquetes para el complemento de Python.
Sintaxis
T | invoke series_fbprophet_forecast_fl(
,
ts_series y_series,
y_pred_series,
[ puntos ],
[ y_pred_low_series ],
[ y_pred_high_series ])
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
ts_series | string |
✔️ | Nombre de la columna de tabla de entrada que contiene las marcas de tiempo de la serie que se van a predecir. |
y_series | string |
✔️ | Nombre de la columna de la tabla de entrada que contiene los valores de la serie que se van a predecir. |
y_pred_series | string |
✔️ | Nombre de la columna que se va a almacenar la serie prevista. |
points | int |
✔️ | Número de puntos al final de la serie que se van a predecir (previsión). Estos puntos se excluyen del proceso de aprendizaje (regresión). El valor predeterminado es 0. |
y_pred_low_series | string |
Nombre de la columna para almacenar la serie de los valores más bajos del intervalo de confianza. Omita si el intervalo de confianza no es necesario. | |
y_pred_high_series | string |
Nombre de la columna para almacenar la serie de los valores más altos del intervalo de confianza. Omita si el intervalo de confianza no es necesario. |
Definición de función
Puede definir la función insertando su código como una función definida por la consulta o creandola como una función almacenada en la base de datos, como se indica a continuación:
Defina la función mediante la siguiente instrucción let. No se requieren permisos.
Importante
Una instrucción let no se puede ejecutar por sí sola. Debe ir seguido de una instrucción de expresión tabular. Para ejecutar un ejemplo de trabajo de series_fbprophet_forecast_fl()
, vea Ejemplo.
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.
Ejemplo
En el ejemplo siguiente se usa el operador invoke para ejecutar la función .
Para usar una función definida por la consulta, invoquela después de la definición de función incrustada.
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
Salida