Prophet¶
Snowflake ML モデルレジストリは、 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オプションを使用してカスタム名をマップすることもできます)オプションの追加の回帰値列(モデルが回帰変数でトレーニングされた場合)
将来の期間を予測するには、 ds 列に将来の日付、 y 列に NaN 値を含む DataFrame を指定します。
例¶
次の例では reg は snowflake.ml.registry.Registry のインスタンスです。レジストリオブジェクトの作成については、 Snowflakeモデルレジストリ をご参照ください。
基本的な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)