You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FB Prophet超参调优:如何在参数网格中引用add_seasonality配置参数

解决方法

你无法直接通过Monthly.fourier_order这类写法把自定义季节性参数放到基础参数网格里,原因是add_seasonality是Prophet实例的调用方法,其入参不属于模型初始化时的参数类别,需要单独封装逻辑实现参数遍历。


步骤1:调整参数网格结构

将自定义季节性的参数作为独立分组加入参数网格:

param_grid = {
    # 原有基础模型参数
    'changepoint_prior_scale': [0.005, 0.01, 0.05, 0.5, 1, 5, 10, 20, 30, 40, 50, 60, 70, 80 ,90, 100],
    'changepoint_range': [0.8, 0.9],
    'holidays_prior_scale': [0.005, 0.01, 0.05, 0.5, 1, 5, 10, 20, 30, 40, 50, 60, 70, 80 ,90, 100],
    'seasonality_mode': ['multiplicative', 'additive'],
    'growth': ['linear', 'logistic'],
    # 自定义季节性参数组
    'custom_seasonality': {
        'monthly': {
            'fourier_order': [20, 30, 50, 70],
            'prior_scale': [10, 20, 40]
        },
        'daily': {
            'fourier_order': [30, 50, 70, 90],
            'prior_scale': [10, 20, 40]
        },
        'weekly': {
            'fourier_order': [30, 50, 70],
            'prior_scale': [20, 40, 60]
        },
        'yearly': {
            'fourier_order': [15, 30, 45],
            'prior_scale': [10, 20, 30]
        }
    }
}

注:你原代码里基础参数的列表外层多套了一层中括号,会导致参数遍历异常,上面的代码已经修正了该问题。


步骤2:封装模型构建方法

写一个独立的模型生成函数,接收参数组合后动态初始化模型、添加自定义季节性:

def build_prophet_model(params, Holidays):
    # 初始化基础Prophet实例
    model = Prophet(
        growth=params['growth'],
        seasonality_mode=params['seasonality_mode'],
        changepoint_prior_scale=params['changepoint_prior_scale'],
        changepoint_range=params['changepoint_range'],
        holidays_prior_scale=params['holidays_prior_scale'],
        daily_seasonality=False,
        weekly_seasonality=False,
        yearly_seasonality=False,
        holidays=Holidays
    )
    season_params = params['custom_seasonality']
    # 批量添加自定义季节性
    model.add_seasonality(
        name='monthly',
        period=30.5,
        fourier_order=season_params['monthly']['fourier_order'],
        prior_scale=season_params['monthly']['prior_scale']
    )
    model.add_seasonality(
        name='daily',
        period=1,
        fourier_order=season_params['daily']['fourier_order'],
        prior_scale=season_params['daily']['prior_scale']
    )
    model.add_seasonality(
        name='weekly',
        period=7,
        fourier_order=season_params['weekly']['fourier_order'],
        prior_scale=season_params['weekly']['prior_scale']
    )
    model.add_seasonality(
        name='yearly',
        period=365.25,
        fourier_order=season_params['yearly']['fourier_order'],
        prior_scale=season_params['yearly']['prior_scale']
    )
    return model

步骤3:遍历参数组合调优

你可以通过itertools.product生成所有参数的笛卡尔积,逐个调用上面的方法生成模型,再执行拟合、交叉验证计算误差即可。如果是配合sklearn的网格搜索工具使用,把上述逻辑封装为自定义评估器的fit方法即可正常调用。


内容的提问来源于stack exchange,提问作者t25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:06:04