如何在Python的Facebook Prophet模型中添加自定义假期时段?
在Facebook Prophet中添加自定义大学暑期假期时段
步骤1:构建自定义假期DataFrame
Prophet要求假期数据必须包含holiday(假期名称)和ds(日期)列,可选lower_window和upper_window来定义假期影响的前后窗口期。针对你提到的5月底至9月中旬的暑期假期,需要生成对应年份的完整日期范围:
import pandas as pd # 根据你的数据时间范围调整年份区间 target_years = range(2018, 2024) custom_holiday_list = [] for year in target_years: # 自定义假期的起始和结束日期(根据实际数据的骤降时段微调) start = pd.to_datetime(f"{year}-05-25") end = pd.to_datetime(f"{year}-09-15") # 生成该时段内的所有日期 daily_dates = pd.date_range(start=start, end=end) # 为每个日期添加假期条目 for date in daily_dates: custom_holiday_list.append({ "holiday": "university_summer_break", "ds": date, "lower_window": 0, # 仅当天生效,若要包含放假前影响可设为负数(如-7) "upper_window": 0 # 仅当天生效,若要包含收假后影响可设为正数(如3) }) # 转换为DataFrame custom_holidays_df = pd.DataFrame(custom_holiday_list)
步骤2:合并已有英国国家假期数据
将你已有的英国国家假期DataFrame和自定义假期DataFrame合并,确保列名完全一致:
# 假设你的英国国家假期数据存储在uk_holidays_df中 combined_holidays_df = pd.concat([uk_holidays_df, custom_holidays_df], ignore_index=True)
步骤3:传入合并后的假期数据训练模型
初始化Prophet模型时,将合并后的假期DataFrame传入holidays参数,再拟合你的电子资源使用量数据:
from prophet import Prophet # 初始化模型并传入合并后的假期数据 model = Prophet(holidays=combined_holidays_df) # 拟合你的数据集(假设数据集为library_usage_df,包含ds和y列) model.fit(library_usage_df)
额外注意事项
- 日期校准:根据实际数据中使用量骤降的精确时间段调整
start和end日期,比如如果5月20日就开始下降,就把起始日改成{year}-05-20。 - 窗口期调整:如果假期前后的使用量有波动(比如放假前一周使用量逐步下降),可以调整
lower_window(如设为-7,代表假期前7天开始生效)或upper_window(收假后几天生效)。 - 重复检查:合并后可以用
combined_holidays_df.duplicated(subset=['ds', 'holiday']).sum()检查是否有重复的假期条目,避免干扰模型训练。
内容的提问来源于stack exchange,提问作者Qusai
相关产品推荐
相关产品推荐

