Prophet周度聚合数据建模如何设置节假日lower/upper_window参数
Facebook Prophet 周度聚合数据的节假日窗口参数设置
窗口参数单位说明
lower_window和upper_window的单位固定为天,和输入的训练数据时间粒度没有关系。Prophet内部做节假日特征匹配时,是按自然日的时间差计算窗口范围,不会因为传入周度聚合数据就自动把窗口单位切换为周。
周度场景下的参数取值方法
设置参数前必须先完成1步前置操作:把所有节假日的ds日期,对齐到你周度数据使用的周锚点日期——比如你的周度数据是用每周一作为当周的日期标识,就把所有节假日日期转换为它所在周的周一;如果是用每周日做标识,就对齐到对应周日,否则模型无法把节假日和周度记录匹配上。
对齐锚点后,窗口值按你需要覆盖的影响范围按天计算即可:
- 如果只需要节假日所在周体现节假日效应,不需要覆盖前后周:直接设
lower_window=0、upper_window=0即可,此时窗口只会匹配到节假日对齐后的那一条周度记录。 - 如果需要覆盖节假日前1周+当周+节后1周的影响:按一周7天计算,设
lower_window=-7、upper_window=7即可。 - 如果业务场景里节假日只影响节前1周+当周,不影响节后:设
lower_window=-7、upper_window=0即可,其余覆盖范围可以按7天=1周的逻辑类推。
注意不要直接沿用日度场景下
-1/1的窗口取值:周度数据的日期间隔是7天,±1天的窗口范围只会覆盖锚点日期前后1天,根本匹配不到相邻周的记录,最终会导致节假日效应计算失效。
周度场景示例代码
假设周度数据以每周一作为周起始日期,需要覆盖超级碗前后各1周的影响,代码如下:
import pandas as pd superbowls = pd.DataFrame({ 'holiday': 'superbowl', # 把原始节假日日期对齐到所在周的周一(周锚点) 'ds': pd.to_datetime(['2010-02-07', '2014-02-02', '2016-02-07']).to_period('W').dt.start_time, # 前后各1周对应±7天 'lower_window': -7, 'upper_window': 7, })
内容的提问来源于stack exchange,提问作者Sarang Manjrekar
相关产品推荐
相关产品推荐

