Prophet

Le Registre des modèles de Snowflake ML prend en charge les modèles de prévision des séries temporelles créés à l’aide de Prophet (prophet.Prophet).

Note

Les modèles Prophet ne peuvent actuellement être déployés que dans l’entrepôt Snowflake pour l’inférence. Le modèle utilisé dans Snowpark Container Services (SPCS) n’est actuellement pas pris en charge pour les modèles Prophet.

Les options supplémentaires suivantes peuvent être utilisées dans le dictionnaire options lors de l’appel à log_model :

Option

Description

target_methods

Une liste des noms des méthodes disponibles sur l’objet modèle. La méthode cible par défaut est predict.

date_column

Nom de la colonne contenant les valeurs date/heure dans vos données d’entrée. Si spécifiée, cette colonne sera automatiquement mappée avec la colonne ds requise par Prophet. Si non spécifiée, vos données doivent contenir une colonne nommée ds.

target_column

Nom de la colonne contenant les valeurs cibles dans vos données d’entrée. Si spécifiée, cette colonne sera automatiquement mappée avec la colonne y requise par Prophet. Si non spécifiée, vos données doivent contenir une colonne nommée y.

Vous devez spécifier le paramètre sample_input_data ou signatures lors de la journalisation d’un modèle Prophet afin que le registre connaisse les signatures des méthodes cibles.

Exigences relatives au format des données

Les modèles Prophet nécessitent des données d’entrée dans un format spécifique :

  • Une colonne date/heure (nommée ds par défaut, ou utilisez l’option date_column pour mapper un nom personnalisé)

  • Une colonne de valeur cible (nommée y par défaut, ou utilisez l’option target_column pour mapper un nom personnalisé)

  • Des colonnes de régression supplémentaires facultatives (si le modèle a été entraîné avec des régressions)

Pour la prévision de périodes futures, fournissez un DataFrame avec des dates futures dans la colonne ds et des valeurs NaN dans la colonne y.

Exemple

Dans les exemples suivants, reg est une instance de snowflake.ml.registry.Registry. Pour plus d’informations sur la création d’un objet de registre, consultez Registre des modèles de Snowflake.

Modèle Prophet de base

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

Modèle Prophet avec des noms de colonnes personnalisés

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

Modèle Prophet avec des régressions

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

Sortie de prédiction

La méthode predict renvoie un DataFrame avec les colonnes suivantes :

  • ds : Date et heure pour chaque prédiction

  • yhat : Valeur prédite

  • yhat_lower : Limite inférieure de l’intervalle de prédiction

  • yhat_upper : Limite supérieure de l’intervalle de prédiction

  • Colonnes supplémentaires pour les composantes de tendance et de saisonnalité (par exemple, trend, weekly, yearly)