Prophet

Die Snowflake ML Model Registry unterstützt mit Prophet (prophet.Prophet) erstellte Zeitreihen-Prognosemodelle.

Bemerkung

Prophet-Modelle können derzeit nur im Snowflake-Warehouse für Inferenz eingesetzt werden. Modell aus Snowpark Container Services (SPCS), das derzeit für Prophet-Modelle nicht unterstützt wird.

Die folgenden zusätzlichen Optionen können im options-Dictionary verwendet werden, wenn Sie log_model abrufen:

Option

Beschreibung

target_methods

Liste mit den Namen der für das Modellobjekt verfügbaren Methoden. Die Standard-Zielmethode ist predict.

date_column

Der Name der Spalte, die datetime-Werte in Ihren Eingabedaten enthält. Falls angegeben, wird diese Spalte automatisch der erforderlichen Spalte ds von Prophet zugeordnet. Ansonsten müssen Ihre Daten eine Spalte mit dem Namen ds enthalten.

target_column

Der Name der Spalte, die Zielwerte in Ihren Eingabedaten enthält. Falls angegeben, wird diese Spalte automatisch der erforderlichen Spalte y von Prophet zugeordnet. Ansonsten müssen Ihre Daten eine Spalte mit dem Namen y enthalten.

Sie müssen entweder den Parameter sample_input_data oder signatures angeben, wenn Sie ein Prophet-Modell protokollieren, damit die Registry die Signaturen der Zielmethoden kennt.

Datenformatanforderungen

Bei Prophet-Modellen müssen Eingabedaten in einem bestimmten Format vorliegen:

  • Eine datetime-Spalte (standardmäßig mit dem Namen ds; Sie können aber mit der date_column-Option einen kundenspezifischen Namen zuordnen).

  • Eine Spalte für Zielwerte (standardmäßig mit dem Namen y; Sie können aber mit der target_column-Option einen kundenspezifischen Namen zuordnen).

  • Optionale zusätzliche Regressor-Spalten (wenn das Modell mit Regressoren trainiert wurde)

Für die Prognoseerstellung zukünftiger Zeiträume stellen Sie einen DataFrame mit zukünftigen Daten in der Spalte ds und NaN-Werten in der Spalte y bereit.

Beispiel

In den folgenden Beispielen gilt: reg ist eine Instanz von snowflake.ml.registry.Registry. Weitere Informationen zum Erstellen eines Registry-Objekts finden Sie unter Snowflake Model Registry.

Grundlegendes Prophet-Modell

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

Prophet-Modell mit benutzerdefinierten Spaltennamen

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

Prophet-Modell mit Regressoren

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

Ausgabe der Vorhersage

Die Methode predict gibt einen DataFrame mit den folgenden Spalten zurück:

  • ds: Die datetime für jede Vorhersage

  • yhat: Der vorhergesagte Wert

  • yhat_lower: Untere Grenze des Vorhersageintervalls

  • yhat_upper: Obere Grenze des Vorhersageintervalls

  • Zusätzliche Spalten für Trend- und Saisonalitätskomponenten (z. B. trend, weekly, yearly)