时间序列prophet模型是facebook的时间序列算法。 可以有效处理节假日信息

时间序列prophet模型是facebook的时间序列算法。 可以有效处理节假日信息,并且按照周、月、年对时间序列数据的变化趋势进行拟合。 适合节假日、季节性因素等特殊因素考量的环境。 附数据集,Python代码

Prophet这玩意儿用起来是真香,特别是老板非要你预测下个月销量的时候。它处理节假日和季节性的能力确实能救命,不像ARIMA那种调参调到怀疑人生。直接上代码实操一把,拿电商销售数据举例。

先搞个模拟数据集,假设我们有2019到2023年的日销售数据:

import pandas as pd
import numpy as np

date_rng = pd.date_range(start='2019-01-01', end='2023-12-31', freq='D')
sales = np.random.randint(100, 500, size=len(date_rng))  # 随机生成基础销量
for date in pd.date_range('2019-02-04', periods=5): sales[date_rng == date] += 300
for year in range(2019,2024): sales[date_rng == f'{year-06-18}'] += 500
df = pd.DataFrame({'ds': date_rng, 'y': sales})

数据长得像这样——日常波动+周期性爆发。用Prophet前先画个图看看趋势:

from prophet import Prophet
m = Prophet(
    growth='flat',  # 数据没有明显增长趋势
    changepoint_prior_scale=0.1,  # 控制趋势敏感度,调小防止过拟合
    yearly_seasonality=8,  # 年周期强度
    weekly_seasonality=True
)

重点来了——自定义节假日。系统自带的西方节日不接地气,得手动加中国特色节日:

chinese_holidays = pd.DataFrame({
  'holiday': 'spring_festival',
  'ds': pd.to_datetime([
    '2019-02-04', '2020-01-24', '2021-02-11',
    '2022-02-01', '2023-01-22'
  ]),
  'lower_window': -3,  # 节前3天开始影响
  'upper_window': 7,   # 节后7天仍有影响
})
m.add_country_holidays(country_name='CN')  # 先加官方节日
m.holidays = pd.concat([m.holidays, chinese_holidays])  # 合并自定义

训练模型时记得把历史数据中的异常点排除,比如2022年上海封控期间的数据:

# 添加异常时段
df['floor'] = 0
df.loc[(df['ds'] >= '2022-03-28') & (df['ds'] <= '2022-05-31'), 'floor'] = 100
m.fit(df)

预测代码倒是简单,但要注意future数据要包含所有可能的影响因素:

future = m.make_future_dataframe(periods=90)
forecast = m.predict(future)
fig = m.plot(forecast)

看预测结果时,重点看components里的holidays部分:

from prophet.plot import plot_components
plot_components(forecast)

这时候可能会发现双11的效应被低估了——因为随机生成的数据里没刻意制造这个峰值。这时需要手动调整holidays参数,比如把双11的upper_window拉长到15天。

模型有个坑:默认的seasonality_mode是加法模式。如果数据波动幅度随时间增大,得换成multiplicative:

m = Prophet(..., seasonality_mode='multiplicative')
m.add_seasonality(name='monthly', period=30.5, fourier_order=5)

最终部署时建议保存模型二进制,避免重复训练:

import json
from prophet.serialize import model_to_json

with open('prophet_model.json', 'w') as f:
    json.dump(model_to_json(m), f)

实测时发现,这货对促销日的预测比人工拍脑门准多了。但遇到黑天鹅事件(比如疫情)还是得靠手动调整。别迷信算法,业务理解才是王道。

本系统旨在构建一套面向高等院校的综合性教务管理平台,涵盖学生、教师及教务处三个核心角色的业务需求。系统设计着重于实现教学流程的规范化与数据处理的自动化,以提升日常教学管理工作的效率与准确性。 在面向学生的功能模块中,系统提供了课程选修服务,学生可依据培养方案选择相应课程,并生成个人专属的课表。成绩查询功能支持学生查阅个人各科目成绩,同时系统可自动计算并展示该课程的全班最高分、平均分、最低分以及学生在班级内的成绩排名。 教师端功能主要围绕课程与成绩管理展开。教师可发起课程设置申请,提交包括课程编码、课程名称、学分学时、课程概述在内的新课程信息,亦可对已开设课程的信息进行更新或撤销。在课程管理方面,教师具备录入所授课程期末考试成绩的权限,并可导出选修该课程的学生名单。 教务处作为管理中枢,拥有课程审批与教学统筹两大核心职能。课程设置审批模块负责处理教师提交的课程申请,管理员可根据教学计划与资源情况进行审核批复。教学安排模块则负责全局管控,包括管理所有学生的选课最终结果、生成包含学号、姓名、课程及成绩的正式成绩单,并能基于选课与成绩数据,统计各门课程的实际选课人数、最高分、最低分、平均分以及成绩合格的学生数量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值