01 什么是灰色预测
灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来的发展趋势。鉴于灰色预测对小数据量预测的优良性能,本文对多个影响因素的数据项使用灰色模型进行预测。
02 GM模型灰色预测的原理
灰色系统理论是基于关联空间、光滑离散函数等概念定义灰导数与灰微分方程,进而用离散数据列建立微分方程形式的动态模型,即灰色模型是利用离散随机数经过生成变为随机性被显著削弱而且较有规律的生成数,建立起的微分方程形式的模型,这样便于对其变化过程进行研究和描述。
GM(1,1)模型的G表示grey灰色,M表示model模型,主要实现原理如下:
GM(1,1)模型适合具有较强的指数规律的数列,只能描述单调的变化过程。
GM(1,1)模型采用“五步建模(系统定性分析、因素分析、初步量化、动态量化、优化)”法,建立一种差分微分方程模型gm(1,1)预测模型,主要步骤包括:
令 x(0)=(x⑴,x⑵,…,x(n))
作一次累加生成, k
x(k)= ∑x(m) 消除数据的随机性和波动性
m=1
有 x=(x⑴,x⑵,…,x(n))=(x⑴,x⑴+x⑵,…,x(n-1)+x(n))
x可建立白化方程:dx/dt+ax=u 即gm(1,1).
该方程的解为: x(k+1)=(x⑴-μ/a)exp(-ak)+μ/a
其中:α称为发展灰数;μ称为内生控制灰数
03 实战:预测未来5年发展情况
假设有很多历史的统计数据,如下图:
现在想预测未来5年的以上7个变量的数值。
第一步,导入训练数据,选择训练范围。
inputfile = u'
input-mining-GM11-before-edit.csv' #输入的数据文件
outputfile = u'
input-mining-GM11-after.xls' #灰色预测后保存的路径
data = pd.read_csv(inputfile) #读取数据
data.index = range(1, 37)#训练数据范围,结束数据要比实际行数大1
第二步,初始化要预测的数据和不同维度的变量
data.loc[37] = None
data.loc[38] = None#需要预测几年就要多初始化
data.loc[39] = None#需要预测几年就要多初始化
data.loc[40] = None#需要预测几年就要多初始化
data.loc[41] = None#需要预测几年就要多初始化
l = ['x1', 'x2','x3','x4','x8', 'x12','x13']
第三步,使用GM灰色预测模型进行预测
for i in l:
f = GM11(data[i][:-5].as_matrix())[0]#-1表示预测1年的数据,-2表示预测2年的数。这是修改的代码!
data[i][37] = f(len(data)-4) #26行的预测结果,多预测1个月
data[i][38] = f(len(data)-3) #26行的预测结果,多预测1个月
data[i][39] = f(len(data)-2) #26行的预测结果,多预测1个月
data[i][40] = f(len(data)-1) #26行的预测结果,多预测1个月
data[i][41] = f(len(data)) #27行的预测结果,多预测2个月
data[i] = data[i].round(2) #保留0位小数
第四步,导出结果并进行准确度的验证
data[l+['y']].to_excel(outputfile) #结果输出
准确度的验证公式为:相对误差=|测算值-真实值|/真实值*100%
如果喜欢请点“赞”,如果想交流或获取完整代码,请关注我。
网友评论