首页
学习
活动
专区
工具
TVP
发布

美天然气期货价格预测

用Python对美天然气期货价格进行了预测。

(我Python不好,照猫画虎,如有不对,欢迎指正。)

采用非平稳时间序列分析。代码如下:

#-*- coding: utf-8 -*-

#arima时序模型

import pandas as pd

#参数初始化

discfile = 'D:/natgas/natgasprices3.xls'

forecastnum = 5

#读取数据,指定日期列为指标,Pandas自动将“日期”列识别为Datetime格式

data = pd.read_excel(discfile, index_col = u'Date')

#时序图

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签

plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

data.plot()

plt.show()

#自相关图

plot_acf(data).show()

#平稳性检测

print(u'原始序列的ADF检验结果为:', ADF(data[u'Prices2']))

#返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore

#差分后的结果

D_data = data.diff().dropna()

D_data.columns = [u'一阶差分']

D_data.plot() #时序图

plt.show()

plot_acf(D_data).show() #自相关图

plot_pacf(D_data).show() #偏自相关图

print(u'差分序列的ADF检验结果为:', ADF(D_data[u'一阶差分'])) #平稳性检测

#白噪声检验

print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1)) #返回统计量和p值

data[u'Prices2']=data[u'Prices2'].astype(float)

pmax = 5 #

qmax = 5 #

bic_matrix = [] #bic矩阵

for p in range(pmax+1):

tmp = []

for q in range(qmax+1):

try: #存在部分报错,所以用try来跳过报错。

tmp.append(ARIMA(data, (p,1,q)).fit().bic)

except:

tmp.append(None)

bic_matrix.append(tmp)

bic_matrix = pd.DataFrame(bic_matrix) #从中可以找出最小值

p,q = bic_matrix.stack().idxmin() #先用stack展平,然后用idxmin找出最小值位置。

print(u'BIC最小的p值和q值为:%s、%s' %(p,q))

model = ARIMA(data, (p,1,q)).fit() #建立ARIMA(0, 1, 1)模型

model.summary2() #给出一份模型报告

model.forecast(9) #作为期5个月的预测,返回预测结果、标准误差、置信区间。

——————分割线——————

以上代码会输出如下结果:

这是去月度特性的走势图。(其实和真实数据的走势图相差不大)

做完一阶差分后会成为平稳序列。

预测值如下:

上述预测值为去月度特性之后的预测值,再乘以月度特性即得出最终预测结果。

黑底白字部分为最终预测结果。也就是6月价格会在2.859左右波动。

从目前走势来看,这个6月的预测值偏低,但不是太离谱。

从另一个角度说,目前的实际值偏高。

凡属预测,皆属娱乐。

但娱乐也可以玩儿得很认真。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180610G0W16100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券