Prophet¶
O Snowflake ML Model Registry é compatível com modelos de previsão de séries temporais criados usando o Prophet (prophet.Prophet).
Nota
Os modelos do Prophet podem ser implantados atualmente apenas no warehouse Snowflake para inferência. O serviço de modelos no Snowpark Container Services (SPCS) não é compatível com modelos do Prophet neste momento.
As seguintes opções adicionais podem ser usadas no dicionário options quando você chamar log_model:
Opção |
Descrição |
|---|---|
|
Uma lista dos nomes dos métodos disponíveis no objeto modelo. O método de destino padrão é |
|
O nome da coluna que contém os valores de data e hora nos seus dados de entrada. Se especificado, esta coluna será mapeada automaticamente para a coluna |
|
O nome da coluna que contém os valores de destino nos seus dados de entrada. Se especificado, esta coluna será mapeada automaticamente para a coluna |
Você deve especificar o parâmetro sample_input_data ou signatures ao registrar um modelo do Prophet para que o registro conheça as assinaturas dos métodos de destino.
Requisitos de formato de dados¶
Os modelos do Prophet exigem dados de entrada em um formato específico:
Uma coluna de data e hora (nomeada
dspor padrão; ou use a opçãodate_columnpara mapear um nome personalizado)Uma coluna de valor de destino (nomeada
ypor padrão; ou use a opçãotarget_columnpara mapear um nome personalizado)Colunas de regressores adicionais opcionais (se o modelo foi treinado com regressores)
Para prever períodos futuros, forneça um DataFrame com datas futuras na coluna ds e valores NaN na coluna y.
Exemplo¶
Nos exemplos a seguir, reg é uma instância de snowflake.ml.registry.Registry. Para obter informações sobre como criar um objeto de registro, consulte Registro de modelo Snowflake.
Modelo básico do Prophet¶
import prophet
import pandas as pd
import numpy as np
# Create sample time series data
dates = pd.date_range(start="2020-01-01", periods=365, freq="D")
values = np.linspace(100, 200, 365) + 10 * np.sin(2 * np.pi * np.arange(365) / 365.25)
training_data = pd.DataFrame({
"ds": dates,
"y": values
})
# Train Prophet model
model = prophet.Prophet(
daily_seasonality=True,
weekly_seasonality=True,
yearly_seasonality=True,
)
model.fit(training_data)
# Create future data for forecasting
last_date = training_data["ds"].max()
future_dates = pd.date_range(start=last_date + pd.Timedelta(days=1), periods=30, freq="D")
future_data = pd.DataFrame({
"ds": future_dates,
"y": [float("nan")] * 30 # NaN indicates periods to forecast
})
# Log the model
model_ref = reg.log_model(
model=model,
model_name="my_prophet_model",
version_name="v1",
sample_input_data=training_data[:10],
)
# Make predictions
result_df = model_ref.run(future_data, function_name="predict")
Modelo do Prophet com nomes de colunas personalizados¶
import prophet
import pandas as pd
import numpy as np
# Create sample time series data with custom column names
dates = pd.date_range(start="2020-01-01", periods=365, freq="D")
values = np.linspace(100, 200, 365) + 10 * np.sin(2 * np.pi * np.arange(365) / 365.25)
training_data = pd.DataFrame({
"date": dates, # Custom date column name
"sales": values # Custom target column name
})
# Rename columns to Prophet format for training
prophet_training_data = training_data.rename(columns={"date": "ds", "sales": "y"})
# Train Prophet model
model = prophet.Prophet()
model.fit(prophet_training_data)
# Create future data with custom column names
last_date = training_data["date"].max()
future_dates = pd.date_range(start=last_date + pd.Timedelta(days=1), periods=30, freq="D")
future_data = pd.DataFrame({
"date": future_dates,
"sales": [float("nan")] * 30
})
# Log the model with column mapping options
model_ref = reg.log_model(
model=model,
model_name="my_prophet_model_custom_cols",
version_name="v1",
sample_input_data=training_data[:10],
options={
"date_column": "date",
"target_column": "sales",
},
)
# Make predictions using custom column names
result_df = model_ref.run(future_data, function_name="predict")
Modelo do Prophet com regressores¶
import prophet
import pandas as pd
import numpy as np
# Create sample time series data with additional regressors
dates = pd.date_range(start="2020-01-01", periods=365, freq="D")
values = np.linspace(100, 200, 365) + 10 * np.sin(2 * np.pi * np.arange(365) / 365.25)
training_data = pd.DataFrame({
"ds": dates,
"y": values,
"holiday": (dates.dayofweek >= 5).astype(int), # Weekend indicator
"temperature": 20 + 5 * np.sin(2 * np.pi * np.arange(365) / 365.25)
})
# Train Prophet model with regressors
model = prophet.Prophet()
model.add_regressor("holiday")
model.add_regressor("temperature")
model.fit(training_data)
# Create future data with regressor values
last_date = training_data["ds"].max()
future_dates = pd.date_range(start=last_date + pd.Timedelta(days=1), periods=30, freq="D")
future_data = pd.DataFrame({
"ds": future_dates,
"y": [float("nan")] * 30,
"holiday": (future_dates.dayofweek >= 5).astype(int),
"temperature": [22.0] * 30 # Predicted future temperatures
})
# Log the model
model_ref = reg.log_model(
model=model,
model_name="my_prophet_model_regressors",
version_name="v1",
sample_input_data=training_data[:10],
)
# Make predictions
result_df = model_ref.run(future_data, function_name="predict")
Saída da previsão¶
O método predict retorna um DataFrame com as seguintes colunas:
ds: a data e hora de cada previsãoyhat: o valor previstoyhat_lower: limite inferior do intervalo de previsãoyhat_upper: limite superior do intervalo de previsãoColunas adicionais para componentes de tendência e sazonalidade (por exemplo,
trend,weekly,yearly)