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

target_methods

Uma lista dos nomes dos métodos disponíveis no objeto modelo. O método de destino padrão é predict.

date_column

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 ds obrigatória do Prophet. Se não for especificado, seus dados devem conter uma coluna chamada ds.

target_column

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 y obrigatória do Prophet. Se não for especificado, seus dados devem conter uma coluna chamada y.

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 ds por padrão; ou use a opção date_column para mapear um nome personalizado)

  • Uma coluna de valor de destino (nomeada y por padrão; ou use a opção target_column para 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")
Copy

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")
Copy

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")
Copy

Saída da previsão

O método predict retorna um DataFrame com as seguintes colunas:

  • ds: a data e hora de cada previsão

  • yhat: o valor previsto

  • yhat_lower: limite inferior do intervalo de previsão

  • yhat_upper: limite superior do intervalo de previsão

  • Colunas adicionais para componentes de tendência e sazonalidade (por exemplo, trend, weekly, yearly)