series_fbprophet_forecast_fl()
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer
A função series_fbprophet_forecast_fl()
é uma UDF (função definida pelo usuário) que usa uma expressão que contém uma série temporal como entrada e prevê os valores dos últimos pontos finais usando o algoritmo Prophet. A função retorna os pontos previstos e seus intervalos de confiança. Essa função é um wrapper KQL (Kusto Query Language) para a classe Prophet() e expõe apenas os parâmetros obrigatórios para previsão. Sinta-se à vontade para modificar sua cópia para suportar mais parâmetros. como feriados, pontos de mudança, ordem de Fourier e assim por diante.
Observação
Considere usar a função nativa series_decompose_forecast(). A função nativa é baseada em um modelo mais simples, mas é mais escalável e é executada mais rapidamente.
Pré-requisitos
- O plug-in Python deve ser habilitado no cluster. Isso é necessário para o Python embutido usado na função.
- O plug-in Python deve estar habilitado no banco de dados. Isso é necessário para o Python embutido usado na função.
- Instale o
fbprophet
pacote, pois ele não está incluído na imagem do Python. Para instalar o pacote, faça o seguinte:- Siga as diretrizes para Instalando pacotes para o plug-in Python.
- Para economizar tempo nas diretrizes acima, você pode baixar o
prophet
arquivo ZIP, contendo os arquivos wheel eprophet
suas dependências, em https://artifactswestusnew.blob.core.windows.net/public/prophet-1.1.5.zip. Salve esse arquivo no contêiner de blob da lista de permissões.
- Para economizar tempo nas diretrizes acima, você pode baixar o
- Crie um token SAS com acesso de leitura ao arquivo ZIP. Para criar um token SAS, consulte obter a SAS para um contêiner de blob.
- No exemplo, substitua a
external_artifacts
referência de URL no parâmetro pelo caminho do arquivo e seu token SAS.
- Siga as diretrizes para Instalando pacotes para o plug-in Python.
Sintaxe
T | invoke series_fbprophet_forecast_fl(
,
ts_series y_series ,
y_pred_series,
[ pontos ],
[ y_pred_low_series ],
[ y_pred_high_series ])
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
ts_series | string |
✔️ | O nome da coluna da tabela de entrada que contém os carimbos de data/hora da série a ser prevista. |
y_series | string |
✔️ | O nome da coluna da tabela de entrada que contém os valores da série a ser prevista. |
y_pred_series | string |
✔️ | O nome da coluna para armazenar a série prevista. |
points | int |
✔️ | O número de pontos no final da série a serem previstos (previsão). Esses pontos são excluídos do processo de aprendizagem (regressão). O padrão é 0. |
y_pred_low_series | string |
O nome da coluna para armazenar a série dos valores mais baixos do intervalo de confiança. Omita se o intervalo de confiança não for necessário. | |
y_pred_high_series | string |
O nome da coluna para armazenar a série dos valores mais altos do intervalo de confiança. Omita se o intervalo de confiança não for necessário. |
Definição de função
Você pode definir a função inserindo seu código como uma função definida por consulta ou criando-a como uma função armazenada em seu banco de dados, da seguinte maneira:
Defina a função usando a instrução let a seguir. Nenhuma permissão é necessária.
Importante
Uma instrução let não pode ser executada sozinha. Ele deve ser seguido por uma instrução de expressão tabular. Para executar um exemplo funcional de series_fbprophet_forecast_fl()
, consulte Exemplo.
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.
Exemplo
O exemplo a seguir usa o operador invoke para executar a função.
Para usar uma função definida por consulta, invoque-a após a definição da função inserida.
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
Saída