一、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 用来控制节假日的灵活度