当前位置:   article > 正文

Python数据挖掘之时序模型预测_使用svr进行时序预测python

使用svr进行时序预测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))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

#用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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在这里插入图片描述

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

在这里插入图片描述

#将代码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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在这里插入图片描述

结论:

​ 由于数据自身存在问题(样本数据少,数据平稳性差,差分也难使数据平稳),差分前后进行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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

结论:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/587560
推荐阅读
相关标签
  

闽ICP备14008679号