这段时间无聊,想到自己刚开始打数模比赛时,arima预测研究了很久都没研究明白,得亏比赛时间长,最后也是勉勉强强得出了结果,勉勉强强的交上了卷,正好这会儿有时间,就写了一个傻瓜式的arima预测的代码。
先介绍一下代码怎么用吧
d=data_adf(data)
lb(data)
p,q=train_pq(data,d)
a=train_(data,10,p,d,q)
data是你需要预测的数据,它应该是一列数据,不要包含其他内容
第一行代码
d=data_adf(data)
是对输入的数据进行kpss和adf检验,然后输出其中差分次数更多的方法和次数,并返回差分次数
输出的结果是这样的,最后一行数据的含义可以自行百度或询问gpt,我就不多解释了(因为懒)
def data_adf(data,c='5%',ft=False):
可以看到,这个函数有c和ft(名字是我随便起的)输入可以调整,c是调整检验显著性水平,只有1%,5%,10%三个选项,ft是是否画图,设置为True时会画出原数据和差分后数据的对比图
第二行代码
lb(data)
它会检查数据是否是白噪声,然后输出结果
def lb(data,sl='5%')
这个函数只有一个输入sl,它代表了你选择的显著性水平,同样只支持1%,5%,10%
第三行函数
p,q=train_pq(data,d)
它的作用是计算出最佳的p和q然后返回它们的值
def train_pq(data,d,plt_=False,name='BIC'):
这个函数的输入有点多,一个一个解释,第一个d,它代表了数据平稳时的差分次数,直接将第一行函数返回的d扔进去就行,第二个plt_,这是画图用的,会画出一张热力图,其中最高的值(最黑的地方)对应的AR为p,MA为q。name有三个输入可选,分别是AIC,BIC,ALL,对应了使用AIC,BIC和使用两者进行最优p,q的选择,当然,选择ALL的话,最后返回的p,q是BIC对应的p,q(不过一般AIC和BIC的结果是一样的)
最后一行代码
a=train_(data,10,p,d,q)
它是根据之前得到的p,d,q对数据进行预测并输出预测结果
def train_(data,steps,p,d,q,pl=False,writer=False):
输入有些多,我慢慢说,首先是steps,这是你要预测的数据数量,比如填入10,就是在原来的基础上再往后预测10个数据,p,d,q不用多说,arima模型的参数,直接使用第一行和第三行函数返回的值就可以,当然,你也可以自己填。pl,决定是否画图,填入True会画出两张图,一张是原数据和预测数据的对比图(这部分数据的来源是函数自动划分出的测试集的),一张是预测出的数据画成的图。最后一个writer,是否保存预测的数据,填入一个文件地址后会将数据填入这个文件,xlsx,xls,csv都是支持的,至于其他类型,保存数据使用的是pandas库的to_excel函数可以去网上自行查询这个函数都支持什么类型的文件。
哦,对了,里面还有给叫bianma的函数,作用是检测文件的编码方式,如果在使用pd.read_excel函数读取表格时出现了无法识别文件编码方式的错误时可以用这个函数检测一下文件的编码方式
下载地址:
百度网盘: https://pan.baidu.com/s/1j0_IO8oocQadz2UCik5BZQ?pwd=dpg1 提取码: dpg1 github:GitHub - hanxfeng/arima: 傻瓜式代码,简单易用(大概)
可以的话请去github给我点个赞吧,拜谢了。
github不知道抽什么风,我的xlsx文件传不上去,需要我示例代码中文件的可以去度盘下载,我会尽快把文件传到github上(虽然我不是很建议用我的,因为当时是随便从之前打过的比赛扒拉出来的,所以数据很多,运行一次的时间很长)
代码更新的话github上更新比较快,百度网盘看我什么时候想起来。