Python数据挖掘之时序模型预测

Python数据挖掘之时序模型预测

一、单变量序列预测
# 对数据直接进行ARIMA自回归综合移动平均线预测
from statsmodels.tsa.arima.model import ARIMA
import pandas as pd
import numpy as np
data = pd.read_excel('C:/Users/86188/Desktop/Python数据挖掘与数据分析/My work/第六章/财政收入影响因素分析及预测/tmp/new_reg_data_GM11.xls')

data_y = data['y']
data_y = data_y.dropna()

model = ARIMA(data_y, order=(1,1,1))
model_fit = model.fit()

print('模型报告为:\n', model_fit.summary())
print('预测未来2年,其预测结果、标准误差、置信区间如下:\n', model_fit.forecast(2))

在这里插入图片描述

#用AR自回归预测
from statsmodels.tsa.ar_model import AutoReg 
import pandas as pd
import numpy as np
data = pd.read_excel('C:/Users/86188/Desktop/Python数据挖掘与数据分析/My work/第六章/财政收入影响因素分析及预测/tmp/new_reg_data_GM11.xls')

data_y = data['y']
data_y = data_y.dropna()

model = AutoReg(data_y, lags=1) 
model_fit = model.fit()

print('模型报告为:\n', model_fit.summary())
print('预测未来2年,其预测结果、标准误差、置信区间如下:\n', model_fit.forecast(2))

在这里插入图片描述

import pandas as pd
import numpy as np

data = pd.read_excel('C:/Users/86188/Desktop/Python数据挖掘与数据分析/My work/第六章/财政收入影响因素分析及预测/tmp/new_reg_data_GM11.xls')

data_y = data['y']
data_y = data_y.dropna()
data_ymin = np.min(data_y)
data_ymax = np.max(data_y)
mmdata_y = (data_y-data_ymin)/(data_ymax-data_ymin)

print(mmdata_y)
#原数据图序列
import matplotlib.pyplot as plt 
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
data_y.plot()
plt.show()

在这里插入图片描述

# 自相关图
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(data_y).show()

在这里插入图片描述

#将代码arima_model更改为arima.model
from statsmodels.tsa.arima.model import ARIMA
# 定阶
data_y = data_y.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来跳过报错。
      #加入'oder='
      tmp.append(ARIMA(data_y, order=(p,1,q)).fit().bic)
    except:
      tmp.append(None)
  bic_matrix.append(tmp)

bic_matrix = pd.DataFrame(bic_matrix)  # 从中可以找出最小值
print(bic_matrix)
#对数据的类型规范为float
p,q = bic_matrix.stack().astype(float).idxmin()  # 先用stack展平,然后用idxmin找出最小值位置。
print('BIC最小的p值和q值为:%s、%s' %(p,q)) 
model = ARIMA(data_y, order=(p,1,q)).fit()  # 建立ARIMA(0, 1, 1)模型
#旧版本的moel.summary2()用不了了,要换为summary()
print('模型报告为:\n', model.summary())
print('预测未来2年,其预测结果、标准误差、置信区间如下:\n', model.forecast(2))

在这里插入图片描述

结论:

​ 由于数据自身存在问题(样本数据少,数据平稳性差,差分也难使数据平稳),差分前后进行ARIMA的预测相差不大,效果都不是很好,AR的预测稍微比ARIMA好点,但也是比较差。

二、多向量时序模型SVR预测
linearsvr = LinearSVR()  # 调用LinearSVR()函数
linearsvr.fit(x_train,y_train)
x = ((data[feature] - data_mean[feature])/data_std[feature]).values  # 预测,并还原结果。
data['y_pred'] = linearsvr.predict(x) * data_std['y'] + data_mean['y']
outputfile = 'C:/Users/86188/Desktop/Python数据挖掘与数据分析/My work/第六章/财政收入影响因素分析及预测/tmp/new_reg_data_GM11_revenue.xls'  # SVR预测后保存的结果
data.to_excel(outputfile)

print('真实值与预测值分别为:\n',data[['y','y_pred']])

fig = data[['y','y_pred']].plot(subplots = True, style=['b-o','r-*'])  # 画出预测结果图
plt.show()

在这里插入图片描述

结论:

显然对于该数据来说,用多变量时序模型预测精度更准,效果更加。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值