Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste caderno, constróis um programa para prever dados de séries temporais com ciclos sazonais. Utilize o conjunto de dados de Vendas de Propriedades NYC com datas entre 2003 e 2015, publicado pelo Departamento de Finance de Nova Iorque no Portal de Dados Abertos NYC.
Pré-requisitos
Faça uma subscrição Microsoft Fabric. Ou, inscreva-se para um teste gratuito Microsoft Fabric.
Iniciar sessão em Microsoft Fabric.
Altera para o Fabric usando o alternador de experiência no canto inferior esquerdo da sua página inicial.
- Familiaridade com cadernos Microsoft Fabric.
- Uma casa de lago para armazenar dados para este exemplo. Para obter mais informações, consulte Adicionar uma casa de lago ao seu bloco de anotações.
Acompanhe num caderno
Você pode acompanhar num notebook de uma das duas maneiras:
- Abra e execute o bloco de notas incorporado.
- Carrega o teu caderno do GitHub.
Abra o bloco de notas incorporado
O caderno de notas de exemplo Série Temporal acompanha este tutorial.
Para abrir o bloco de anotações de exemplo para este tutorial, siga as instruções em Preparar seu sistema para tutoriais de ciência de dados.
Certifique-se de anexar um lakehouse ao do bloco de anotações antes de começar a executar o código.
Importar o caderno do GitHub
AIsample - Previsão de Séries Temporais.ipynb é o caderno que acompanha este tutorial.
Para abrir o bloco de anotações que acompanha este tutorial, siga as instruções em Preparar o seu sistema para tutoriais de ciência de dados para importar o bloco de anotações para o seu espaço de trabalho.
Se preferir copiar e colar o código desta página, pode criar um novo bloco de notas.
Certifique-se de anexar um lakehouse ao notebook antes de começar a rodar o código.
Etapa 1: Instalar bibliotecas personalizadas
Quando desenvolve um modelo machine learning ou lida com análise de dados ad hoc, pode ser necessário instalar rapidamente uma biblioteca personalizada (por exemplo, prophet neste caderno) para a sessão Apache Spark. Para fazer esta tarefa, tem duas opções.
- Use as capacidades de instalação em linha (por exemplo,
%pip,%conda, e assim por diante) para começar rapidamente com novas bibliotecas. Este método instala as bibliotecas personalizadas apenas no portátil atual, não no espaço de trabalho.
# Use pip to install libraries
%pip install <library name>
# Use conda to install libraries
%conda install <library name>
- Em alternativa, crie um ambiente Fabric, instale bibliotecas a partir de fontes públicas ou carregue bibliotecas personalizadas para ele. O administrador do seu espaço de trabalho pode associar o ambiente como padrão para o espaço de trabalho. Todas as bibliotecas do ambiente ficam disponíveis para uso em quaisquer cadernos e definições de tarefas Spark no espaço de trabalho. Para mais informações sobre ambientes, consulte criar, configurar e usar um ambiente em Microsoft Fabric.
Para este notebook, use %pip install para instalar a biblioteca prophet. O kernel PySpark reinicia após %pip install. Esta ação significa que tens de instalar a biblioteca antes de executares quaisquer outras células.
# Use pip to install Prophet
%pip install prophet
Passo 2: Carregue os dados
Conjunto de dados
Este bloco de anotações usa o conjunto de dados NYC Property Sales. Abrange dados de 2003 a 2015, publicados pelo Departamento de Finance de Nova Iorque no NYC Open Data Portal.
O conjunto de dados inclui um registro de todas as vendas de edifícios no mercado imobiliário da cidade de Nova York, dentro de um período de 13 anos. Consulte o Glossário de Termos para Ficheiros de Vendas de Propriedades para uma definição das colunas no conjunto de dados.
| Bairro | bairro | categoria_classe_de_edifício | classe de imposto | bloco | lote | facilidade de direção leste | classe_de_construção_atual | Endereço | número_apartamento | zip_code | unidades residenciais | unidades comerciais | total de unidades | área_m2 | metros quadrados brutos | ano_construído | classe_de_imposto_à_data_da_venda | classe_de_edifício_no_momento_da_venda | preço_de_venda | data_venda |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Manhattan | CIDADE DO ALFABETO | 07 ARRENDAMENTOS - APARTAMENTOS SEM ELEVADOR | 0.0 | 384.0 | 17.0 | C4 | 225 EAST 2ND STREET | 10009.0 | 10,0 | 0.0 | 10,0 | 2145.0 | 6670.0 | 1900.0 | 2.0 | C4 | 275000.0 | 2007-06-19 | ||
| Manhattan | CIDADE DO ALFABETO | 07 ARRENDAMENTOS - APARTAMENTOS SEM ELEVADOR | 2.0 | 405.0 | 12.0 | C7 | Rua Leste 12, 508 | 10009.0 | 28.0 | 2.0 | 30.0 | 3872.0 | 15428.0 | 1930.0 | 2.0 | C7 | 7794005.0 | 2007-05-21 |
O objetivo é construir um modelo que preveja as vendas totais mensais, com base em dados históricos. Para isso, usa o Prophet, uma biblioteca de previsão de open source desenvolvida pelo Facebook. O Prophet baseia-se num modelo aditivo, onde as tendências não lineares se ajustam à sazonalidade diária, semanal e anual e aos efeitos de férias. O Prophet funciona melhor em conjuntos de dados de séries temporais que têm fortes efeitos sazonais e em várias estações de dados históricos. Além disso, o Prophet lida de forma robusta com dados ausentes e dados atípicos.
O Prophet usa um modelo de série temporal decomponível, que consiste em três componentes:
- tendência: Prophet assume uma taxa de crescimento constante por partes, com seleção automática de pontos de mudança
- sazonalidade: por padrão, o Prophet usa a Série Fourier para se ajustar à sazonalidade semanal e anual
- feriados: Profeta requer todas as ocorrências passadas e futuras de feriados. Se um feriado não se repetir no futuro, o Profeta não o incluirá na previsão.
Este caderno agrega os dados mensalmente, ignorando os feriados.
Leia o artigo oficial para obter mais informações sobre as técnicas de modelagem do Profeta.
Faça o download do conjunto de dados e carregue em uma casa do lago
A fonte de dados consiste em 15 .csv arquivos. Esses arquivos contêm registros de vendas de imóveis de cinco distritos de Nova York, entre 2003 e 2015. Por conveniência, o nyc_property_sales.tar arquivo contém todos esses .csv arquivos, compactando-os em um arquivo. Um blob storage disponível publicamente aloja este ficheiro .tar.
Gorjeta
Ao usar os parâmetros apresentados nesta célula de código, pode facilmente aplicar este caderno a diferentes conjuntos de dados.
URL = "https://synapseaisolutionsa.z13.web.core.windows.net/data/NYC_Property_Sales_Dataset/"
TAR_FILE_NAME = "nyc_property_sales.tar"
DATA_FOLDER = "Files/NYC_Property_Sales_Dataset"
TAR_FILE_PATH = f"/lakehouse/default/{DATA_FOLDER}/tar/"
CSV_FILE_PATH = f"/lakehouse/default/{DATA_FOLDER}/csv/"
EXPERIMENT_NAME = "aisample-timeseries" # MLflow experiment name
Esse código baixa uma versão disponível publicamente do conjunto de dados e, em seguida, armazena esse conjunto de dados em um Fabric Lakehouse.
Importante
Certifique-se de adicionar um lakehouse ao notebook antes de executá-lo. Se não o fizer, ocorre um erro.
import os
if not os.path.exists("/lakehouse/default"):
# Add a lakehouse if the notebook has no default lakehouse
# A new notebook will not link to any lakehouse by default
raise FileNotFoundError(
"Default lakehouse not found, please add a lakehouse for the notebook."
)
else:
# Verify whether or not the required files are already in the lakehouse, and if not, download and unzip
if not os.path.exists(f"{TAR_FILE_PATH}{TAR_FILE_NAME}"):
os.makedirs(TAR_FILE_PATH, exist_ok=True)
os.system(f"wget {URL}{TAR_FILE_NAME} -O {TAR_FILE_PATH}{TAR_FILE_NAME}")
os.makedirs(CSV_FILE_PATH, exist_ok=True)
os.system(f"tar -zxvf {TAR_FILE_PATH}{TAR_FILE_NAME} -C {CSV_FILE_PATH}")
Inicie a gravação do tempo de execução deste notebook.
# Record the notebook running time
import time
ts = time.time()
Configurar o acompanhamento do experimento MLflow
Para expandir as capacidades de registo de MLflow, o autologging captura automaticamente os valores dos parâmetros de entrada e das métricas de saída de um modelo de machine learning durante o seu treino. Esta informação é depois registada no espaço de trabalho, onde as APIs do MLflow ou o experimento correspondente no espaço de trabalho podem acessá-lo e visualizá-lo. Para mais informações sobre autologging, consulte Autologging in Microsoft Fabric.
# Set up the MLflow experiment
import mlflow
mlflow.set_experiment(EXPERIMENT_NAME)
mlflow.autolog(disable=True) # Disable MLflow autologging
Nota
Para desativar Microsoft Fabric autolog numa sessão de notebook, chame mlflow.autolog() e defina disable=True.
Leia os dados brutos temporais do lakehouse
df = (
spark.read.format("csv")
.option("header", "true")
.load("Files/NYC_Property_Sales_Dataset/csv")
)
Etapa 3: Iniciar a análise exploratória dos dados
Para rever o conjunto de dados, examine manualmente um subconjunto de dados para obter uma melhor compreensão. Use a display função para imprimir o DataFrame. Você também pode mostrar as visualizações de gráfico, para visualizar facilmente subconjuntos do conjunto de dados.
display(df)
Uma revisão manual do conjunto de dados leva a algumas observações iniciais:
Casos de vendas a $0,00. De acordo com o Glossário de Termos, este valor implica uma transferência de propriedade sem qualquer contraprestação em dinheiro. Ou seja, nenhum fluxo de caixa na transação. Remova as vendas com valores de $0,00
sales_pricedo conjunto de dados.O conjunto de dados abrange diferentes classes de construção. No entanto, este caderno irá centrar-se em edifícios residenciais que, segundo o Glossário de Termos, são marcados como tipo "A". Filtre o conjunto de dados para incluir apenas edifícios residenciais. Para fazer isto, inclua uma das colunas
building_class_at_time_of_saleoubuilding_class_at_present. Inclui apenas osbuilding_class_at_time_of_saledados.O conjunto de dados inclui instâncias em que
total_unitsvalores são iguais a 0 ougross_square_feetvalores iguais a 0. Remova todas as instâncias ondetotal_unitsougross_square_unitsvalores são 0.Algumas colunas – por exemplo,
apartment_number,tax_class,build_class_at_present, e outras – têm valores em falta ou NULL. Suponha que os dados ausentes envolvem erros administrativos ou dados inexistentes. A análise não depende desses valores ausentes, então você pode ignorá-los.A
sale_pricecoluna é armazenada como uma cadeia de caracteres, com um caractere "$" predefinido. Para prosseguir com a análise, represente esta coluna como um número. Converter asale_pricecoluna para inteiro.
Conversão e filtragem de tipos
Para resolver alguns dos problemas identificados, importe as bibliotecas necessárias.
# Import libraries
import pyspark.sql.functions as F
from pyspark.sql.types import *
Transmitir os dados de vendas de cadeia de caracteres para inteiro
Use expressões regulares para separar a parte numérica da cadeia de caracteres do cifrão (por exemplo, na cadeia de caracteres $300,000, dividir $ e 300,000) e, em seguida, converter a parte numérica para um inteiro.
Em seguida, filtre os dados para incluir apenas instâncias que atendam a todas essas condições:
- O
sales_priceé maior que 0. - O
total_unitsé maior que 0. - O
gross_square_feeté maior que 0. - O
building_class_at_time_of_saleé do tipo A.
df = df.withColumn(
"sale_price", F.regexp_replace("sale_price", "[$,]", "").cast(IntegerType())
)
df = df.select("*").where(
'sale_price > 0 and total_units > 0 and gross_square_feet > 0 and building_class_at_time_of_sale like "A%"'
)
Agregação mensal
O recurso de dados rastreia as vendas de imóveis diariamente, mas essa abordagem é muito granular para este bloco de anotações. Em vez disso, agregue os dados mensalmente.
Primeiro, altere os valores de data para mostrar apenas dados de mês e ano. Os valores das datas continuam a incluir os dados do ano. Ainda se pode distinguir, por exemplo, entre dezembro de 2005 e dezembro de 2006.
Além disso, mantenha apenas as colunas relevantes para a análise. Estas colunas incluem sales_price, total_units, gross_square_feet, e sales_date. Você também deve renomear sales_date para month.
monthly_sale_df = df.select(
"sale_price",
"total_units",
"gross_square_feet",
F.date_format("sale_date", "yyyy-MM").alias("month"),
)
display(monthly_sale_df)
Agrega os sale_price, total_units, e gross_square_feet os valores por mês. Em seguida, agrupe os dados por monthe some todos os valores dentro de cada grupo.
summary_df = (
monthly_sale_df.groupBy("month")
.agg(
F.sum("sale_price").alias("total_sales"),
F.sum("total_units").alias("units"),
F.sum("gross_square_feet").alias("square_feet"),
)
.orderBy("month")
)
display(summary_df)
Conversão de Pyspark para Pandas
Os DataFrames do Pyspark lidam bem com grandes conjuntos de dados. No entanto, devido à agregação de dados, o tamanho do DataFrame é menor. Esta mudança sugere que agora pode usar pandas DataFrames.
Este código converte o conjunto de dados de um pyspark DataFrame para um pandas DataFrame.
import pandas as pd
df_pandas = summary_df.toPandas()
display(df_pandas)
Visualização
Você pode examinar a tendência do comércio imobiliário da cidade de Nova York para entender melhor os dados. Este exame conduz a insights sobre potenciais padrões e tendências de sazonalidade. Para mais informações sobre visualização de dados Microsoft Fabric, consulte o recurso Visualização de cadernos.
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
f, (ax1, ax2) = plt.subplots(2, 1, figsize=(35, 10))
plt.sca(ax1)
plt.xticks(np.arange(0, 15 * 12, step=12))
plt.ticklabel_format(style="plain", axis="y")
sns.lineplot(x="month", y="total_sales", data=df_pandas)
plt.ylabel("Total Sales")
plt.xlabel("Time")
plt.title("Total Property Sales by Month")
plt.sca(ax2)
plt.xticks(np.arange(0, 15 * 12, step=12))
plt.ticklabel_format(style="plain", axis="y")
sns.lineplot(x="month", y="square_feet", data=df_pandas)
plt.ylabel("Total Square Feet")
plt.xlabel("Time")
plt.title("Total Property Square Feet Sold by Month")
plt.show()
Resumo das observações da análise exploratória dos dados
- Os dados mostram um padrão claro e recorrente numa cadência anual, o que significa que os dados têm uma sazonalidade anual.
- Os meses de verão parecem ter volumes de vendas mais elevados em comparação com os meses de inverno.
- Quando compara anos com vendas elevadas e anos com vendas baixas, vê-se que a diferença de receita entre meses de vendas elevadas e meses de vendas baixas em anos de vendas elevadas excede — em termos absolutos — a diferença de receita entre meses de vendas elevadas e meses de vendas baixas em anos de vendas baixas.
Por exemplo, em 2004, a diferença de receita entre o mês de vendas mais alto e o mês de vendas mais baixo é de:
$900,000,000 - $500,000,000 = $400,000,000
Para 2011, esse cálculo da diferença de receitas diz respeito:
$400,000,000 - $300,000,000 = $100,000,000
Esta observação torna-se importante mais tarde, quando é preciso decidir entre efeitos de sazonalidade multiplicativos e aditivos .
Etapa 4: Treinamento e acompanhamento do modelo
Montagem do modelo
Prophet recebe sempre um DataFrame de duas colunas como entrada. Uma coluna de entrada é uma coluna de tempo chamada ds, e a outra coluna de entrada é uma coluna de valor chamada y. A coluna de hora deve ter um formato de dados de data, hora ou data/hora (por exemplo, YYYY_MM). O conjunto de dados aqui atende a essa condição. A coluna de valores deve ser um formato de dados numéricos.
Para ajuste do modelo, renomear a coluna de tempo para ds e a coluna de valor para y. Depois, passa os dados ao Profeta. Para mais informações, consulte a documentação da API Python Prophet.
df_pandas["ds"] = pd.to_datetime(df_pandas["month"])
df_pandas["y"] = df_pandas["total_sales"]
Prophet segue a convenção do scikit-learn. Primeiro, crie uma nova instância do Prophet, defina determinados parâmetros (por exemplo) e, em seguida,seasonality_mode ajuste essa instância ao conjunto de dados.
Embora um fator aditivo constante seja o efeito padrão de sazonalidade para o Prophet, use a sazonalidade 'multiplicativa' para o parâmetro do efeito de sazonalidade. A análise da secção anterior mostrou que, devido a alterações na amplitude da sazonalidade, uma simples sazonalidade aditiva não se ajusta bem aos dados.
Defina o parâmetro weekly_seasonalitycomo desligado, porque os dados são agregados por mês. Como resultado, os dados semanais não estão disponíveis.
Utilize métodos de Markov Chain Monte Carlo (MCMC) para capturar as estimativas de incerteza sazonal. Por padrão, o Prophet pode oferecer estimativas de incerteza sobre a tendência e o ruído de observação, mas não sobre a sazonalidade. Os MCMC requerem mais tempo de processamento, mas permitem que o algoritmo forneça estimativas de incerteza sobre a sazonalidade e o ruído de tendência e observação. Para mais informações, consulte a documentação do Prophet sobre os Intervalos de Incerteza.
Ajuste a sensibilidade de deteção automática do ponto de alteração através do parâmetro changepoint_prior_scale . O algoritmo Prophet tenta automaticamente encontrar instâncias nos dados onde as trajetórias mudam abruptamente. Pode tornar-se difícil encontrar o valor correto. Para resolver este problema, experimente diferentes valores e depois selecione o modelo com melhor desempenho. Para obter mais informações, consulte a documentação dos Pontos de Mudança de Tendências do Prophet.
from prophet import Prophet
def fit_model(dataframe, seasonality_mode, weekly_seasonality, chpt_prior, mcmc_samples):
m = Prophet(
seasonality_mode=seasonality_mode,
weekly_seasonality=weekly_seasonality,
changepoint_prior_scale=chpt_prior,
mcmc_samples=mcmc_samples,
)
m.fit(dataframe)
return m
Validação cruzada
O Prophet tem uma ferramenta de validação cruzada integrada. Esta ferramenta pode estimar o erro de previsão e encontrar o modelo com melhor desempenho.
A técnica de validação cruzada pode validar a eficiência do modelo. Esta técnica treina o modelo num subconjunto do conjunto de dados e executa testes num subconjunto do conjunto de dados nunca antes visto. Esta técnica pode verificar até que ponto um modelo estatístico se generaliza para um conjunto de dados independente.
Para validação cruzada, reserve uma amostra específica do conjunto de dados que não faça parte do conjunto de treino. Em seguida, teste o modelo treinado nessa amostra, antes da implantação. No entanto, esta abordagem não funciona para dados de séries temporais. Se o modelo vir dados dos meses de janeiro de 2005 e março de 2005 e, então, tentar prever para o mês de fevereiro de 2005, o modelo pode essencialmente trapacear porque vê para onde a tendência dos dados leva. Em aplicações reais, o objetivo é prever para o futuro, como as regiões invisíveis.
Para lidar com este problema e tornar o teste fiável, divida o conjunto de dados com base nas datas. Use o conjunto de dados até uma determinada data (por exemplo, os primeiros 11 anos de dados) para treinamento e, em seguida, use os dados não vistos restantes para previsão.
Nesse cenário, comece com 11 anos de dados de treinamento e, em seguida, faça previsões mensais usando um horizonte de um ano. Especificamente, os dados de treinamento contêm tudo de 2003 a 2013. Em seguida, a primeira execução lida com previsões de janeiro de 2014 a janeiro de 2015. A próxima execução lida com previsões para fevereiro de 2014 a fevereiro de 2015, e assim por diante.
Repita esse processo para cada um dos três modelos treinados, para ver qual modelo tem o melhor desempenho. Em seguida, compare essas previsões com valores do mundo real, para estabelecer a qualidade da previsão do melhor modelo.
from prophet.diagnostics import cross_validation
from prophet.diagnostics import performance_metrics
def evaluation(m):
df_cv = cross_validation(m, initial="4017 days", period="30 days", horizon="365 days")
df_p = performance_metrics(df_cv, monthly=True)
future = m.make_future_dataframe(periods=12, freq="M")
forecast = m.predict(future)
return df_p, future, forecast
Modelo de log com MLflow
Registe os modelos para acompanhar os seus parâmetros e guarda os modelos para uso posterior. Todas as informações relevantes do modelo são registradas no espaço de trabalho, sob o nome do experimento. O modelo, os parâmetros e as métricas, juntamente com os itens de autologging do MLflow, são guardados numa única execução do MLflow.
# Setup MLflow
from mlflow.models.signature import infer_signature
Realizar experiências
Um experimento de machine learning serve como a principal unidade de organização e controlo para todas as execuções de machine learning relacionadas. Uma execução corresponde a uma única execução do código do modelo. O rastreamento de experiências de Machine Learning refere-se à gestão de todos os diferentes experimentos e dos seus componentes. Esta gestão inclui parâmetros, métricas, modelos e outros artefactos. Ajuda a organizar os componentes necessários de um experimento específico de machine learning. O rastreamento de experiências de Machine learning também permite a fácil duplicação de resultados anteriores com experiências guardadas. Para mais informações, consulte experiências de machine learning em Microsoft Fabric. Depois de determinar as etapas que pretende incluir (por exemplo, ajustar e avaliar o modelo do Profeta neste caderno), você pode executar o experimento.
model_name = f"{EXPERIMENT_NAME}-prophet"
models = []
df_metrics = []
forecasts = []
seasonality_mode = "multiplicative"
weekly_seasonality = False
changepoint_priors = [0.01, 0.05, 0.1]
mcmc_samples = 100
for chpt_prior in changepoint_priors:
with mlflow.start_run(run_name=f"prophet_changepoint_{chpt_prior}"):
# init model and fit
m = fit_model(df_pandas, seasonality_mode, weekly_seasonality, chpt_prior, mcmc_samples)
models.append(m)
# Validation
df_p, future, forecast = evaluation(m)
df_metrics.append(df_p)
forecasts.append(forecast)
# Log model and parameters with MLflow
mlflow.prophet.log_model(
m,
model_name,
registered_model_name=model_name,
signature=infer_signature(future, forecast),
)
mlflow.log_params(
{
"seasonality_mode": seasonality_mode,
"mcmc_samples": mcmc_samples,
"weekly_seasonality": weekly_seasonality,
"changepoint_prior": chpt_prior,
}
)
metrics = df_p.mean().to_dict()
metrics.pop("horizon")
mlflow.log_metrics(metrics)
Visualize um modelo com o Prophet
O Prophet tem funções de visualização incorporadas que mostram os resultados do ajuste do modelo.
Os pontos pretos representam os pontos de dados que treinam o modelo. A linha azul é a previsão, e a área azul clara mostra os intervalos de incerteza. Construíste três modelos com valores diferentes changepoint_prior_scale . As previsões destes três modelos aparecem nos resultados deste bloco de código.
for idx, pack in enumerate(zip(models, forecasts)):
m, forecast = pack
fig = m.plot(forecast)
fig.suptitle(f"changepoint = {changepoint_priors[idx]}")
O menor changepoint_prior_scale valor no primeiro gráfico causa subajuste das mudanças de tendência. O maior changepoint_prior_scale no terceiro gráfico pode causar sobreajustamento. Portanto, o segundo gráfico é a melhor escolha. Este resultado significa que o segundo modelo é o mais adequado.
Visualize tendências e sazonalidade com o Prophet
O Prophet também pode visualizar facilmente as tendências e sazonalidades subjacentes. As visualizações do segundo modelo são mostradas nos resultados deste bloco de código.
BEST_MODEL_INDEX = 1 # Set the best model index according to the previous results
fig2 = models[BEST_MODEL_INDEX].plot_components(forecast)
Nestes gráficos, o sombreamento azul claro reflete a incerteza. O gráfico superior mostra uma forte tendência oscilante de longo período. Ao longo de alguns anos, os volumes de vendas sobem e diminuem. O gráfico inferior mostra que as vendas tendem a atingir o pico em fevereiro e setembro, atingindo seus valores máximos para o ano nesses meses. Pouco depois desses meses, em março e outubro, caem para os valores mínimos do ano.
Avalie o desempenho dos modelos usando várias métricas, por exemplo:
- erro quadrático médio (MSE)
- erro quadrático médio da raiz (RMSE)
- erro absoluto médio (MAE)
- erro percentual absoluto médio (MAPE)
- erro percentual absoluto mediano (MDAPE)
- erro percentual absoluto médio simétrico (SMAPE)
Avalie a cobertura utilizando as estimativas yhat_lower e yhat_upper. Observe os horizontes variáveis onde você prevê um ano no futuro, 12 vezes.
display(df_metrics[BEST_MODEL_INDEX])
Ao utilizar a métrica MAPE para este modelo de previsão, previsões que se estendem um mês no futuro normalmente envolvem erros de cerca de 8%. No entanto, para previsões de um ano no futuro, o erro aumenta para cerca de 10%.
Etapa 5: Avaliar o modelo e guardar os resultados da previsão
Pontuar o modelo e guardar os resultados da previsão.
Faça previsões com o Predict Transformer
Carrega o modelo e usa-o para fazer previsões. Para operacionalizar machine learning modelos, utilize PREDICT, uma função de Microsoft Fabric escalável que suporta pontuação em lote em qualquer motor de computação. Para mais informações sobre PREDICT e como o usar dentro de Microsoft Fabric, consulte este recurso.
from synapse.ml.predict import MLFlowTransformer
spark.conf.set("spark.synapse.ml.predict.enabled", "true")
model = MLFlowTransformer(
inputCols=future.columns.values,
outputCol="prediction",
modelName=f"{EXPERIMENT_NAME}-prophet",
modelVersion=BEST_MODEL_INDEX,
)
test_spark = spark.createDataFrame(data=future, schema=future.columns.to_list())
batch_predictions = model.transform(test_spark)
display(batch_predictions)
# Code for saving predictions into lakehouse
batch_predictions.write.format("delta").mode("overwrite").save(
f"{DATA_FOLDER}/predictions/batch_predictions"
)
# Determine the entire runtime
print(f"Full run cost {int(time.time() - ts)} seconds.")