时间序列预测之Prophet

一、ARIMA进行预测的缺点

      1、ARMA 要求时序数据是稳定的,显示数据很难符合

     2、ARIMA 模型为线性模型,无法处理非线性的关系,同事要求数据间隔等长

     3、如果数据丢失,需要使用插值等方法预估缺失值,然后使用预估值进行参数拟合,这样会引入噪音

二、prophet 模型引入

     1、prophet基于相加模型的时间预测,可以精准拟合非线性周期趋势

     2、对yearly、weakly和daily的周期性使用非线性拟合,可以很好的对节日(比如十一、春节等)带来的活跃数据突变进行预测

     3、prophet的优势

            a 处理数据丢失问题

            b 趋势迁移问题

            c 异常的数据点

    4、prophet模型  y(t) = g(t) + s(t) + h(t) + e

         g(t) 代表趋势 表示时间序列的中非周期性变化

         s(t) 代表周期项 用来表示时间序列的周期变化

         h(t)代表活动效果 表示时间序列中的异常活动,例如节日,购物节等

         e 用来表示不能模型描述的异常误差  

    5、prophet工具使用

       安装  pip3 install fbprophet

        模型拟合 fit

     model = Prophet()

     model.fit(df)

    模型预测  ,model.predict(future)

三、 prophet模型

   1、Trend趋势,对时间序列中趋势部分拟合分段函数,线性拟合会将特殊点和缺失数据的影响降到最小

   2、饱和增长,增长有最大容量限制,,基于领域知识,分析师可以定义容量限制

   3、突变点,突变点增多,拟合变得更灵活,研究过程中,会面临过拟合跟欠拟合问题

4、季节性,拟合并预测季节的结果,基于傅里叶级别提出了一个灵活的模型

P代表周期,年度P=365.25 ,月P=7

 5、活动效果,既节假日和大事件 ,比如春节

四、总结

  1、prophet 针对商业预测任务

   优点,不需要特征工程就能得到趋势,季节因素和节假日因素

   缺点,无法利用更多信息,如预测商品销量是,无法利用商品信息,门店信息,促销信息

2、传入 prophet的数据分两列,ds和y

ds 代表时间戳

y表示 true value,也是需要预测的值

m=Prophet(holidays = holidays)

future = modle.make_future_dataframe(periods=365)  #生成未来日期

# future为时间轴,在原有基础上增加365天

model.fit(df)  #模型训练

forcast = model.predict(future) #模型预测

plot_components(forcast) # 成分分析

 forcase 字段包括:

1、 趋势  trend, trend_lower, trend_upper,

2、 预测值 yhat, yhat_lower, yhat_upper

3、 星期趋势 weekly, weekly_lower, weekly_upper,

4、年趋势 yearly, yearly_lower, yearly_upper

5、 加法模型趋势(星期趋势+年趋势) forecast['additive_terms'] = forecast['weekly'] + forecast['yearly']

6、乘法模型趋势  multiplicative_terms, multiplicative_terms_lower, multiplicative_terms_upper

 

趋势变化点 model.changepoints

1、趋势变化点,可以自动检测,默认为25,分布在80%的时间序列里

可以使用n_changepoints设置潜在变化点的数量,model= prophet (n_changepoints=30)

可以使用参数changepoint_range设置前多少的时间序列来寻找潜在变化点 model = Prophet(changepoint_range=0.9)  # 时间序列的前90%处寻找潜在的变化点

人工指定突变点的位置  model = Prophet(changepoints=['2014-01-01'])

 

制定预测类型 m = Prophet(growth='logistic')

growth='linear'或growth = "logistic" 默认的增长趋势为linear

 

模型的学习方式  seasonality_mode='multiplicative'

默认情况下为加性的,如果改成乘性的(multiplicative),需要设置

 

prophet参数设置:

1、Capacity,在增量函数是逻辑回归函数的时候,需要设置的容量值

2、ChangePoints:通过 n_changepoints 和 changepoint_range 来设置时间序列的变化点

3、季节性和节假日,可以根据实际的业务需求来指定相应的节假日

4、光滑参数:

  a、changepoint_prior_scale 设置趋势项的灵活度,即跟随性,默认为0.05,值越大,拟合的跟随性越好,可能会过拟合

  b、seasonality_prior_scale 用来控制季节项的灵活度

  c、holidays_prior_scale 用来控制节假日的灵活度

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值