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 |
|---|---|
|
Liste mit den Namen der für das Modellobjekt verfügbaren Methoden. Die Standard-Zielmethode ist |
|
Der Name der Spalte, die datetime-Werte in Ihren Eingabedaten enthält. Falls angegeben, wird diese Spalte automatisch der erforderlichen Spalte |
|
Der Name der Spalte, die Zielwerte in Ihren Eingabedaten enthält. Falls angegeben, wird diese Spalte automatisch der erforderlichen Spalte |
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 derdate_column-Option einen kundenspezifischen Namen zuordnen).Eine Spalte für Zielwerte (standardmäßig mit dem Namen
y; Sie können aber mit dertarget_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")
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")
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")
Ausgabe der Vorhersage¶
Die Methode predict gibt einen DataFrame mit den folgenden Spalten zurück:
ds: Die datetime für jede Vorhersageyhat: Der vorhergesagte Wertyhat_lower: Untere Grenze des Vorhersageintervallsyhat_upper: Obere Grenze des VorhersageintervallsZusätzliche Spalten für Trend- und Saisonalitätskomponenten (z. B.
trend,weekly,yearly)