简介
股票价格预测是一件非常唬人的事情,但如果只基于历史数据进行预测,显然完全不靠谱
股票价格是典型的时间序列数据(简称时序数据),会受到经济环境、政府政策、人为操作多种复杂因素的影响
不像气象数据那样具备明显的时间和季节性模式,例如一天之内和一年之内的气温变化等
尽管如此,以股票价格为例,介绍如何对时序数据进行预测,仍然值得一做
以下使用TensorFlow和Keras,对S&P 500
股价数据进行分析和预测
数据
S&P 500
股价数据爬取自Google Finance API,已经进行过缺失值处理
加载库,pandas主要用于数据清洗和整理
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.preprocessing import MinMaxScaler
import time
用pandas读取csv文件为DataFrame,并用describe()
查看特征的数值分布
data = pd.read_csv('data_stocks.csv')
data.describe()
还可以用info()
查看特征的概要
data.info()
数据共502列,41266行,502列分别为:
DATE
:该行数据的时间戳SP500
:可以理解为大盘指数- 其他:可以理解为500支个股的股价
查看数据的前五行
data.head()
查看时间跨度
print(time.strftime('%Y-%m-%d', time.localtime(data['DATE'].max())),
time.strftime('%Y-%m-%d', time.localtime(data['DATE'].min())))
绘制大盘趋势折线图
plt.plot(data['SP500'])
去掉DATE
一列,训练集测试集分割
data.drop('DATE', axis=1, inplace=True)
data_train = data.iloc[:int(data.shape[0] * 0.8), :]
data_test = data.iloc[int(data.shape[0] * 0.8):, :]
print(data_train.shape, data_test.shape)
数据归一化,只能使用data_train
进行fit()
scaler = MinMaxScaler(feature_range=(-1, 1))
scaler.fit(data_train)
data_train = scaler.transform(data_train)
data_test = scaler.transform(data_test)
同步预测
同步预测是指,使用当前时刻的500支个股股价,预测当前时刻的大盘指数,即一个回归问题,输入共500维特征,输出一维,即[None, 500] => [None, 1]
使用TensorFlow实现同步预测,主要用到多层感知机(M