时序预测方法总结

本文总结了时序预测的各种方法,包括单变量预测的ARIMA、SARIMA等经典模型,多元预测的VAR、VMA、VARMA等,以及机器学习方法如SVM和随机森林。此外,深入探讨了深度学习中的RNN、LSTM、GRU、seq2seq、DeepAR、CNN和WaveNet等,这些方法在处理长期依赖和序列数据方面具有优势。
摘要由CSDN通过智能技术生成

时序预测

本人博客只是平时学习中做的笔记,若文中有错误请大家指出!

一、单变量时间预测

1、AR — AutoRegression 自回归

自回归基于输入变量的线性组合为输出建模
输入:先前时间步长的值;输出:下一步的值
在时间序列中,鉴于当前和先前时间步长的观测值,我们可以预测下一时间步长的值
“ p”是自回归趋势参数,可以从自相关图确定p的理想值
“ p”是自回归趋势参数,可以从自相关图确定p的理想值
note:该方法适用于没有趋势和季节成分的时间序列

# Import libraries
from statsmodels.tsa.ar_model import AutoReg #直接导入自回归模型
from random import random
# Generate a sample dataset
data = [x + random() for x in range(1, 100)]
# 拟合模型
model = AutoReg(data, lags=1) #数据喂入模型进行拟合即可
model_fit = model.fit()
# 预测
yhat = model_fit.predict(len(data), len(data))
print(yhat)
2、MA — Moving Average 移动平均

残差:观测值和预测值之间的差异;residual error = observed — predicted
移动平均法也称为残差模型,该方法将序列中的下一步建模为残差的线性函数,在这里插入图片描述
“ q”是移动平均趋势参数,可以从局部自相关图确定q的理想值
note:该方法适用于没有趋势和季节成分的时间序列

# Import libraries  和AR一样,直接导入模型,传入数据训练即可
from statsmodels.tsa.arima_model import ARMA
from random import random
# Generate a sample dataset
data = [x + random() for x in range(1, 100)]
# fit model
model = ARMA(data, order=(0, 1))
model_fit = model.fit(disp=False)
# make prediction
yhat = model_fit.predict(len(data), len(data))
print(yhat)
3、ARMA — AutoRegression Moving Average 自回归移动平均线

该方法将原始观测值和残差用于预测,对单个的AR和MA模型进行了改进;因此该方法将序列的下一步建模为观测值和先前时间步长的残差的线性函数;
note:
必须为该模型的两个组件指定参数p和q
note:该方法适用于没有趋势和季节成分的时间序列

# Import libraries
from statsmodels.tsa.arima_model import ARMA
from random import random
# Generate a sample dataset
data = [random() for x in range(1, 100)]
# fit model
model = ARMA(data, order=(2, 1))
model_fit = model.fit(disp=False)
# make prediction
yhat = model_fit.predict(len(data), len(data))
print(yhat)
4、ARIMA — AutoRegression Integrated Moving Average 自回归综合移动平均线

该方法增加一个步骤作为预处理,即对时间序列求差(d)以使其稳定;
将自回归(AR)模型和移动平均(MA)模型以及序列的差分预处理步骤组合在一起以使序列平稳的方法,称为积分(I)
note:该方法适用于具有趋势且没有季节性成分的时间序列

# Import libraries
from statsmodels.tsa.arima_model import ARIMA
from random import random
# Generate a sample dataset
data = [x + random() for x in range(1, 100)]
# fit model
model = ARIMA(data, order=(1, 1, 1))
model_fit = model.fit(disp=False)
# make prediction
yhat = model_fit.predict(len(data), len(data), typ='levels')
print(yhat)
5、SARIMA—Seasonal Autoregressive Integrated Moving Average 季节性自回归综合移动平均线

该方法是ARIMA模型的扩展,可以处理季节性数据,它分为该系列的季节和非季节组件建模;
除了ARIMA的3个参数以外,还添加了4个其他季节性参数
非季节性参数与ARIMA相同:p – 自回归阶 ,差分阶;q – 移动平均阶 ;
季节性参数: p – 季节性自回归阶数 d:季节性微分阶数 q:季节性移动平均阶数;单个季节性周期的时间步数
note:该方法适用于具有趋势和/或季节成分的时间序列

 # Import libraries
from statsmodels.tsa.statespace.sarimax import SARIMAX
from random import random 
#随机产生数据
data = [x + random() for x in range(1, 100)]
#拟合数据
model = SARIMAX(data, order=(1, 1, 1), seasonal_order=(1, 1, 1, 1))
model_fit = model.fit(disp=False)
#预测
yhat = model_fit.predict(len(data), len(data))
print(yhat)

二、多元时间序列预测

在多元时间序列中,将每个变量建模为自身的过去值与系统中其他变量的过去值的线性组合

1、VAR – Vector Auto-Regression 向量自回归

可以预测多个并行的平稳时间序列,在系统中每个变量包含一个方程,每个方程的右侧包含一个常数和系统中所有变量的滞后
要决定的参数:系统中应包含多少变量(K)和多少滞后§

# Import libraries
from statsmodels.tsa.vector_ar.var_model import VAR
from random import random
data = list()
for i in range(100):
v1 = i + random()
v2 = v1 + random()
row = [v1, v2]
data.append(row)
model = VAR(data)
model_fit = model.fit()
yhat = model_fit.forecast(model_fit.y, steps=1)
print(yhat)
2、VMA — Vector Moving Average 向量移动平均线

该方法可以预测多个并行的固定时间序列

# Import libraries
from statsmodels.tsa.statespace.varmax import VARMAX
from random import random
data = list()
for i in range(100):
v1 = i+ random()
v2 = v1 + random()
row = [v1, v2]
data.append(row)
model = VARMAX(data, order=(0, 1))  #参数p设置为0
model_fit = model.fit(disp=False)
yhat = model_fit.forecast()
print(yhat)
3、VARMA — Vector Auto Regression Moving Average 向量自回归移动平均值

该方法是VAR和ARMA模型的通用版本,可以预测多个并行的平稳时间序列
需要’p’和’q’参数,若参数’q’=0 则为VAR模型;若参数’p’=0 ,则为VMA模型

# Import libraries
from statsmodels.tsa.statespace.varmax import VARMAX
from random import random
data = list()
for i in range(100):
v1 = random()
v2 = v1 + random()
row = [v1, v2]
data.append(row)
model = VARMAX(data, order=(1, 1))
model_fit = model.fit(disp=False)
yhat = model_fit.forecast()
print(yhat)
4、prophet — Facebook 2017

该方法是在2017年由谷歌提出,可以用prophet通过修改季节参数来拟合季节性,修改趋势参数来拟合趋势信息,指定假期来拟合假期信息
本质:prophet由四个组件的自加性回归模型,分别用不同的部分来拟合时间序列不同的趋势,叠加起来则是整个时间序列模型;曲线拟合
采用了L-BGFS的方式进行优化求得各个参数的最大后验估计
从论文上的描述来看,这个 prophet 算法是基于时间序列分解和机器学习的拟合来做的
详见论文:Forecasting at scale

Jupyter是一种流行的交互式开发环境,可以进行数据分析、可视化和机器学习等任务。时序预测是指在时间序列数据上进行预测,例如股票价格、天气预报、销售量等。 在Jupyter中进行时序预测可以通过各种机器学习和统计方法实现。使用Python中的库如pandas和scikit-learn可以方便地处理时间序列数据和构建预测模型。 首先,我们需要加载时间序列数据并进行预处理。可以使用pandas库读取csv或Excel文件中的数据,并通过日期索引将其转换为时间序列对象。接下来,我们可以对数据进行探索性分析,包括绘制时间序列图、查看趋势和季节性等。 然后,我们可以选择适合数据的时序预测模型。常用的模型包括自回归移动平均模型(ARMA/ARIMA)、指数平滑法、回归模型等。通过拟合数据并进行模型评估,可以选择最优的模型。 进行时序预测时,我们可以将数据划分为训练集和测试集。训练集用于模型的参数估计和拟合,而测试集用于评估模型预测性能。通过对测试集数据进行预测,可以比较预测值和实际值,评估模型的准确性。 最后,我们可以将预测结果可视化并进行评估。可以通过绘制预测结果和实际值的对比图,来查看模型预测效果。同时,还可以使用一些常见的评估指标,如均方误差(MSE)、平均绝对误差(MAE)等来量化和比较不同模型的性能。 总结来说,在Jupyter中进行时序预测可以通过加载和处理时间序列数据、选择合适的模型、训练和评估模型以及可视化和评估预测结果等步骤完成。通过这些方法,我们可以对未来的时间序列数据进行预测和分析。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值