随机森林——股票涨跌预测模型搭建
多因子模型搭建
1.引入之后需要用到的库
import tushare as ts # 股票基本数据相关库
import numpy as np # 科学计算相关库
import pandas as pd # 科学计算相关库
import talib # 股票衍生变量数据相关库
import matplotlib.pyplot as plt # 引入绘图相关库
from sklearn.ensemble import RandomForestClassifier # 引入分类决策树模型
from sklearn.metrics import accuracy_score # 引入准确度评分函数
import warnings
warnings.filterwarnings("ignore") # 忽略警告信息,警告非报错,不影响代码执行
2.股票数据处理与衍生变量生成
# 1.股票基本数据获取
df = ts.get_k_data('000666',start='2015-01-01',end='2019-12-31')
df = df.set_index('date') # 设置日期为索引# 2.简单衍生变量构造
df['close-open'] = (df['close'] - df['open'])/df['open']
df['high-low'] = (df['high'] - df['low'])/df['low']df['pre_close'] = df['close'].shift(1) # 该列所有往下移一行形成昨日收盘价
df['price_change'] = df['close']-df['pre_close']
df['p_change'] = (df['close']-df['pre_close'])/df['pre_close']*100# 3.移动平均线相关数据构造
df['MA5'] = df['close'].rolling(5).mean()
df['MA10'] = df['close'].rolling(10).mean()
df.dropna(inplace=True) # 删除空值# 4.通过Ta_lib库构造衍生变量
df['RSI'] = talib.RSI(df['close'], timeperiod=12) # 相对强弱指标
df['MOM'] = talib.MOM(df['close'], timeperiod=5) # 动量指标
df['EMA12'] = talib.EMA(df['close'], timeperiod=12) # 12日指数移动平均线
df['EMA26'] = talib.EMA(df['close'], timeperiod=26) # 26日指数移动平均线
df['MACD'], df['MACDsignal'], df['MACDhist'] = talib.MACD(df['close'], fastperiod=12, slowperiod=26, signalperiod=9) # MACD值
df.dropna(inplace=True) # 删除空值
# 查看此时的df后五行
df.tail()
3.特征变量和目标变量提取
X = df[['close', 'volume', 'close-open', 'MA5', 'MA10', 'high-low', 'RSI', 'MOM', 'EMA12', 'MACD', 'MACDsignal', 'MACDhist']]
y = np.where(df['price_change'].shift(-1)> 0, 1, -1)
4.训练集和测试集数据划分
接下来,我们要将原始数据集进行分割,我们要注意到一点,训练集与测试集的划分要按照时间序列划分,而不是像之前利用train_test_split()函数进行划分。原因在于股票价格的变化趋势具有时间性,如果我们随机划分,则会破坏时间性特征,因为我们是根据当天数据来预测下一天的股价涨跌情况,而不是任意一天的股票数据来预测下一天的股价涨跌情况。 因此,我们将前90%的数据作为训练集,后10%的数据作为测试集,代码如下:
X_length = X.shape[0] # shape属性获取X的行数和列数,shape[0]即表示行数
split = int(X_length * 0.9)X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]
5.模型搭建
model = RandomForestClassifier(max_depth=3, n_estimators=10, min_samples_leaf=10, random_state=1)
model.fit(X_train, y_train)
模型使用与评估
1.预测下一天的涨跌情况
y_pred = model.predict(X_test)
print(y_pred)
a = pd.DataFrame() # 创建一个空DataFrame
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
a.head()
# 查看预测概率
y_pred_proba = model.predict_proba(X_test)
y_pred_proba[0:5]
2.模型准确度评估
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print(score)
# 此外,我们还可以通过模型自带的score()函数记性打分,代码如下:
model.score(X_test, y_test)
3.分析数据特征的重要性
model.feature_importances_
# 通过如下代码可以更好的展示特征及其特征重要性:
features = X.columns
importances = model.feature_importances_
a = pd.DataFrame()
a['特征'] = features
a['特征重要性'] = importances
a = a.sort_values('特征重要性', ascending=False)
a
随机森林——股票涨跌预测模型搭建相关推荐
- AdaBoost-股票涨跌预测模型搭建
1.引入之后需要用到的库 import tushare as ts # 股票基本数据相关库 import numpy as np # 科学计算相关库 import pandas as pd # 科学计 ...
- predict函数 R_R包randomForest的随机森林回归模型以及对重要变量的选择
R包randomForest的随机森林回归模型以及对重要变量的选择关于随机森林(random forest),前文"随机森林分类以及对重要变量的选择"中已经对其基本原理作了简单概括 ...
- 利用随机森林预测股票大盘涨跌
本文仅从实战角度去观察,利用机器学习算法中,随机森林模型预测股票市场指数涨跌的准确率. 适合入门玩家 首先,我们导入所需要的模块 import numpy as np import pandas as ...
- 随机森林模型_量化策略——短周期、单期货品种的随机森林预测模型
在前一篇"期货学习量化学习策略--随机森林模型"一文中(链接:https://mp.weixin.qq.com/s/IhcVZ9D-3cmB1GaAFinboQ),我们尝试了长周期 ...
- 【信用评分预测模型(四)】Python随机森林模型
文章目录 前言 一.随机森林介绍 一.定义函数 二.模型建立 1.模型参数设置 2.模型训练集和测试集拆分 3.模型训练 4.特征值 总结 前言 在https://blog.csdn.net/m0_6 ...
- 【火炉炼AI】机器学习007-用随机森林构建共享单车需求预测模型
[火炉炼AI]机器学习007-用随机森林构建共享单车需求预测模型 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matp ...
- 【项目实战】基于随机森林算法的房屋价格预测模型
[博客地址]:https://blog.csdn.net/sunyaowu315 [博客大纲地址]:https://blog.csdn.net/sunyaowu315/article/details/ ...
- python mql4_可以转发文章不?老外用随机森林预测外汇分钟涨跌准确率高达85%。求高手用python重写。...
[https://www.mql5.com/zh/articles/1165][1] 简介 创建任何交易系统的目的都是为了能够预测金融产品的市场行为,如一个货币对.预测的目标可以是不同的.我们在此限定 ...
- 【金融】【随机森林】使用随机森林对期货数据(涨跌)进行回归
[金融][随机森林]使用随机森林对期货数据(涨跌)进行回归 RF-RF_train3year3month 读取数据 划分训练集与数据集,3年+3月,以此类推 取特定数据 Exponential smo ...
- 基于随机森林算法的贷款违约预测模型研究(Give me some credit)
本文实验代码github:https://github.com/dengsiying/give-me-some-credit/tree/master 参考链接:从决策树到随机森林 http://www ...
最新文章
- 《DNS与BIND(第5版)》——7.6 保持一切平稳运行
- JPOM - AOP+自定义注解实现操作日志记录
- React的组件中的传值,及context上下文的使用
- 百度熊掌推送php源码,织梦百度熊掌主动推送教程
- 小程序绘图工具painter-json文件绘制保存分享图-可点击任意元素触发函数
- 和华为杯_2019全国大学生物联网设计竞赛(华为杯)拉开序幕
- 【C++基础学习】C++引用参数与指针参数
- 容器编排技术 -- Kubernetes kubectl create clusterrole 命令详解
- ElasticSearch-JDBC驱动 像使用SQL一样使用ElasticSearch查询语句
- Lua4.0 实现#操作,获取table大小
- ARM平台交叉编译valgrind
- JS取得RadioButtonList的Value,Text及选中值等信息
- 零跑C-more收获更多期待,而零跑S01还在追求更多的订单 | 2019 上海车展...
- 2021华为软挑初探——代码实现
- phpcms整站代码分析
- 远程服务器批量管理员权限,Win10系统下怎样实现批量远程桌面管理?Win10系统进行批量远程管理的方法...
- js阻止子元素事件_JS点击子元素不触发父元素点击事件(js阻止冒泡)
- 高效的国产CAD设计工具,云端三维CAD设计平台:CrownCAD
- python web 开发从入门到精通 pdf_Python Web开发从入门到精通
- 使用deepin 20作为开发环境