Prophet

Snowflake ML Model Registry는 Prophet(prophet.Prophet)을 사용하여 생성된 시계열 예측 모델을 지원합니다.

참고

현재 Prophet 모델은 추론을 위해 Snowflake 웨어하우스에만 배포할 수 있습니다. Snowpark Container Services(SPCS)의 모델 제공은 현재 Prophet 모델에 지원되지 않습니다.

log_model 을 호출할 때 options 사전에서 다음 추가 옵션을 사용할 수 있습니다.

옵션

설명

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을 제공합니다.

다음 예제에서 ``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")
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: 예측 구간의 상한

  • 추세 및 계절성 구성 요소에 대한 추가 열(예: trend, weekly, yearly)