Prophet¶
Snowflake ML Model Registry 支持使用 Prophet (prophet.Prophet) 创建的时间序列预测模型。
备注
目前,Prophet 模型仅可部署在 Snowflake 仓库中进行推理。Snowpark Container Services (SPCS) 中的模型服务目前不支持 Prophet 模型。
调用 options 时,可以在 log_model 字典中使用下列附加选项:
选项 |
描述 |
|---|---|
|
可在模型对象上使用的方法的名称列表。默认目标方法是 |
|
输入数据中包含日期时间值的列名。若指定,此列将自动映射至 Prophet 所需的 |
|
输入数据中包含目标值的列名。若指定,此列将自动映射至 Prophet 所需的 |
在登记 Prophet 模型时,您必须指定 sample_input_data 或 signatures 参数,以确保注册表了解目标方法的签名。
数据格式要求¶
Prophet 模型需要特定格式的输入数据:
日期时间列(默认情况下名为
ds,或使用date_column选项映射自定义名称)目标值列(默认情况下名为
y,或使用target_column选项映射自定义名称)可选的附加回归变量列(如果模型训练时使用了回归变量)
若要预测未来时段,请提供一个 DataFrame,在 ds 列中包含未来日期,并在 y 列中包含 NaN 值。
示例¶
在以下示例中,reg 是 snowflake.ml.registry.Registry 的一个实例。有关创建注册表对象的信息,请参阅 Snowflake Model Registry。
基本 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")
具有自定义列名称的 Prophet 模型¶
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 模型¶
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")
预测输出¶
predict 方法会返回具有以下列的 DataFrame:
ds:选择使用 时默认使用的角色和仓库。每个预测的日期时间yhat:选择使用 时默认使用的角色和仓库。预测值yhat_lower:选择使用 时默认使用的角色和仓库。预测区间下限yhat_upper:选择使用 时默认使用的角色和仓库。预测区间上限趋势和季节性成分的附加列(例如,
trend、weekly、yearly)