Prophet

Snowflake ML モデルレジストリは、 Prophet(prophet.Prophet) を使用して作成された時系列予測モデルをサポートします。

注釈

Prophetモデルは現在、推論のためにSnowflakeウェアハウスでのみ展開できます。Snowpark Container Services(SPCS)でのモデルサービスは、現時点でProphetモデルではサポートされていません。

以下の追加オプションは、 options ディクショナリで log_model を呼び出すときに使用できます。

オプション

説明

target_methods

モデルオブジェクトで利用可能なメソッドの名前のリスト。デフォルトのターゲットメソッドは predict です。

date_column

入力データの日付時刻値を含む列の名前。指定すると、この列はProphetの必要な ds 列に自動的にマッピングされます。指定しない場合は、データに ds という名前の列が含まれている必要があります。

target_column

入力データ内のターゲット値を含む列の名前。指定すると、この列はProphetの必要な y 列に自動的にマッピングされます。指定しない場合は、データに y という名前の列が含まれている必要があります。

Prophetモデルをログに記録するときに、レジストリがターゲットメソッドの署名を認識できるように、 sample_input_data または signatures パラメーターのいずれかを指定する必要があります。

データ形式要件

Prophetモデルは特定の形式の入力データを必要とします。

  • 日付時刻列(デフォルトでは ds という名前ですが、 date_column オプションを使用してカスタム名をマップすることもできます)

  • ターゲット値列(デフォルトでは y という名前ですが、 target_column オプションを使用してカスタム名をマップすることもできます)

  • オプションの追加の回帰値列(モデルが回帰変数でトレーニングされた場合)

将来の期間を予測するには、 ds 列に将来の日付、 y 列に NaN 値を含む DataFrame を指定します。

次の例では regsnowflake.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")
Copy

カスタム列名の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")
Copy

回帰変数を使用した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")
Copy

予測出力

predict メソッドは、次の列を持つ DataFrame を返します。

  • ds:各予測の日付時間

  • yhat:予測値

  • yhat_lower:予測区間の下限

  • yhat_upper:予測区間の上限

  • トレンドおよび季節性コンポーネントの追加列(例: trendweeklyyearly