时间序列算法
模型名称 | 描述 |
平滑法 | 平滑法用于趋势分析和预测,利用修匀技术,削弱短期随机波动对序列的的影响,使序列平滑化。 |
趋势拟合法 | 趋势拟合法把时间作为自变量,相变的序列观察值作为因变量,建立回归模型。根据序列特征,可具体分为线性拟合和曲线拟合 |
组合模拟 | 时间序列变化主要受长期趋势(T)、季节变动(S)、周期变动(C)和不规则变动(e)影响。根据序列特点,可构建:【加法模型:xt=Tt+St+Ct+εt】【乘法模型:xt=Tt*St*Ct*εt】 |
AR模型 | AR(p)拖尾p阶截尾 |
MA模型 | MA(q)拖尾q阶截尾 |
ARMA模型 | ARMA(p,q)p阶截尾q阶拖尾 |
ARIMA模型 | |
ARCH模型 | |
GARCH模型及衍生模型 |
非平稳时间序列分析--ARIMA模型
#-*- coding: utf-8 -*-
#arima时序模型实现代码
import pandas as pd
#参数初始化
discfile = '../data/arima_data.xls'
forecastnum = 5
#读取数据,指定日期列为指标,Pandas自动将“日期”列识别为Datetime格式
data = pd.read_excel(discfile, index_col = u'日期')
#时序图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
data.plot()
plt.show()
#自相关图
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(data).show()
#平稳性检测
from statsmodels.tsa.stattools import adfuller as ADF
print(u'原始序列的ADF检验结果为:', ADF(data[u'销量']))
#返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore
#差分后的结果
D_data = data.diff().dropna()
D_data.columns = [u'销量差分']
D_data.plot() #时序图
plt.show()
plot_acf(D_data).show() #自相关图
from statsmodels.graphics.tsaplots import plot_pacf
plot_pacf(D_data).show() #偏自相关图
print(u'差分序列的ADF检验结果为:', ADF(D_data[u'销量差分'])) #平稳性检测
#白噪声检验
from statsmodels.stats.diagnostic import acorr_ljungbox
print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1)) #返回统计量和p值
from statsmodels.tsa.arima_model import ARIMA
data[u'销量'] = data[u'销量'].astype(float)
#定阶
pmax = int(len(D_data)/10) #一般阶数不超过length/10
qmax = int(len(D_data)/10) #一般阶数不超过length/10
bic_matrix = [] #bic矩阵
for p in range(pmax+1):
tmp = []
for q in range(qmax+1):
try: #存在部分报错,所以用try来跳过报错。
tmp.append(ARIMA(data, (p,1,q)).fit().bic)
except:
tmp.append(None)
bic_matrix.append(tmp)
bic_matrix = pd.DataFrame(bic_matrix) #从中可以找出最小值
p,q = bic_matrix.stack().idxmin() #先用stack展平,然后用idxmin找出最小值位置。
print(u'BIC最小的p值和q值为:%s、%s' %(p,q))
model = ARIMA(data, (p,1,q)).fit() #建立ARIMA(0, 1, 1)模型
model.summary2() #给出一份模型报告
model.forecast(5) #作为期5天的预测,返回预测结果、标准误差、置信区间。