赞
踩
# 对数据直接进行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好点,但也是比较差。
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()
显然对于该数据来说,用多变量时序模型预测精度更准,效果更加。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。