手把手:用Python搭建机器学习模型预测黄金价格

作者:CQITer小编 时间:2018-03-04 16:55

字号

手把手:用Python搭建机器学习模型预测黄金价格

编译:小明同学君、吴双、Yawei xia

新年总是跟黄金密不可分。新年第一天,让我们尝试用python搭建一个机器学习线性回归模型,预测金价!

自古以来,黄金一直作为货币而存在,就是在今天,黄金也具有非常高的储藏价值,那么有没有可能预测出黄金价格的变化趋势呢?

答案是肯定的,让我们使用机器学习中的回归算法来预测世界上贵重金属之一,黄金的价格吧。

我们将建立一个机器学习线性回归模型,它将从黄金ETF (GLD)的历史价格中获取信息,并返回黄金ETF价格在第二天的预测值。

GLD 是最大的以黄金进行直接投资的ETF交易基金。

在python的开发环境下用机器学习预测黄金价格的步骤:

导入Python库并读取黄金ETF 的数据

定义解释变量

将数据切分为模型训练数据集和测试数据集

建立线性回归模型

预测黄金ETF的价格

导入Python库并读取黄金 ETF 的数据

首先:导入实现此策略所需的所有必要的库(LinearRegression,pandas,numpy,matplotlib,seaborn和fix_yahoo_finance)

# LinearRegression is a machine learning library for linear regression   

from sklearn.linear_model import LinearRegression   

# pandas and numpy are used for data manipulation   

import pandas as pd   

import numpy as np   

# matplotlib and seaborn are used for plotting graphs   

import matplotlib.pyplot as plt   

import seaborn   

# fix_yahoo_finance is used to fetch data import f 

然后我们读取过去10年间每天黄金ETF的价格数据,并将数据储存在Df中。我们移除那些不相关的变量并使用dropna函数删除NaN值。然后我们绘制出黄金ETF的收盘价格。

# Read data   

Df = yf.download('GLD','2008-01-01','2017-12-31') 

# Only keep close columns   

DfDf=Df[['Close']]   

# Drop rows with missing values   

DfDf= Df.dropna()   

# Plot the closing price of GLD   

Df.Close.plot(figsize=(10,5))   

plt.ylabel("Gold ETF Prices")  

plt.show() 

输出

手把手:用Python搭建机器学习模型预测黄金价格

定义解释变量

解释变量是被用来决定第二天黄金ETF价格数值的变量。简单地说,就是我们用来预测黄金ETF价格的特征值。本例中的解释变量是过去3天和9天的价格移动平均值。我们使用dropna()函数删除NaN值,并将特征变量存于X中。

然而,你还可以在X中放入更多你认为对于预测黄金ETF价格有用的变量。这些变量可以是技术指标,也可以是另一种ETF的价格(如黄金矿工ETF (简称GDX)或石油ETF(简称USO))或美国经济数据。

Df['S_3'] = Df['Close'].shift(1).rolling(window=3).mean()   

Df['S_9']= Df['Close'].shift(1).rolling(window=9).mean()   

DfDf= Df.dropna()   

X = Df[['S_3','S_9']]   

X.head() 

输出

手把手:用Python搭建机器学习模型预测黄金价格

定义因变量

同样,因变量是取决于解释变量的“被解释变量”。简单地说,在这里就是我们试图预测的黄金ETF价格。我们将黄金ETF的价格赋值为y。

y = Df['Close'] 

y.head() 

输出

2008-02-08    91.000000  

2008-02-11    91.330002  

2008-02-12    89.330002  

2008-02-13    89.440002  

2008-02-14    89.709999  

Name: Close, dtype: float64 

将数据切分为模型训练数据集和测试数据集

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接