多因子模型搭建

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

随机森林——股票涨跌预测模型搭建相关推荐

  1. AdaBoost-股票涨跌预测模型搭建

    1.引入之后需要用到的库 import tushare as ts # 股票基本数据相关库 import numpy as np # 科学计算相关库 import pandas as pd # 科学计 ...

  2. predict函数 R_R包randomForest的随机森林回归模型以及对重要变量的选择

    R包randomForest的随机森林回归模型以及对重要变量的选择关于随机森林(random forest),前文"随机森林分类以及对重要变量的选择"中已经对其基本原理作了简单概括 ...

  3. 利用随机森林预测股票大盘涨跌

    本文仅从实战角度去观察,利用机器学习算法中,随机森林模型预测股票市场指数涨跌的准确率. 适合入门玩家 首先,我们导入所需要的模块 import numpy as np import pandas as ...

  4. 随机森林模型_量化策略——短周期、单期货品种的随机森林预测模型

    在前一篇"期货学习量化学习策略--随机森林模型"一文中(链接:https://mp.weixin.qq.com/s/IhcVZ9D-3cmB1GaAFinboQ),我们尝试了长周期 ...

  5. 【信用评分预测模型(四)】Python随机森林模型

    文章目录 前言 一.随机森林介绍 一.定义函数 二.模型建立 1.模型参数设置 2.模型训练集和测试集拆分 3.模型训练 4.特征值 总结 前言 在https://blog.csdn.net/m0_6 ...

  6. 【火炉炼AI】机器学习007-用随机森林构建共享单车需求预测模型

    [火炉炼AI]机器学习007-用随机森林构建共享单车需求预测模型 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matp ...

  7. 【项目实战】基于随机森林算法的房屋价格预测模型

    [博客地址]:https://blog.csdn.net/sunyaowu315 [博客大纲地址]:https://blog.csdn.net/sunyaowu315/article/details/ ...

  8. python mql4_可以转发文章不?老外用随机森林预测外汇分钟涨跌准确率高达85%。求高手用python重写。...

    [https://www.mql5.com/zh/articles/1165][1] 简介 创建任何交易系统的目的都是为了能够预测金融产品的市场行为,如一个货币对.预测的目标可以是不同的.我们在此限定 ...

  9. 【金融】【随机森林】使用随机森林对期货数据(涨跌)进行回归

    [金融][随机森林]使用随机森林对期货数据(涨跌)进行回归 RF-RF_train3year3month 读取数据 划分训练集与数据集,3年+3月,以此类推 取特定数据 Exponential smo ...

  10. 基于随机森林算法的贷款违约预测模型研究(Give me some credit)

    本文实验代码github:https://github.com/dengsiying/give-me-some-credit/tree/master 参考链接:从决策树到随机森林 http://www ...

最新文章

  1. 《DNS与BIND(第5版)》——7.6 保持一切平稳运行
  2. JPOM - AOP+自定义注解实现操作日志记录
  3. React的组件中的传值,及context上下文的使用
  4. 百度熊掌推送php源码,织梦百度熊掌主动推送教程
  5. 小程序绘图工具painter-json文件绘制保存分享图-可点击任意元素触发函数
  6. 和华为杯_2019全国大学生物联网设计竞赛(华为杯)拉开序幕
  7. 【C++基础学习】C++引用参数与指针参数
  8. 容器编排技术 -- Kubernetes kubectl create clusterrole 命令详解
  9. ElasticSearch-JDBC驱动 像使用SQL一样使用ElasticSearch查询语句
  10. Lua4.0 实现#操作,获取table大小
  11. ARM平台交叉编译valgrind
  12. JS取得RadioButtonList的Value,Text及选中值等信息
  13. 零跑C-more收获更多期待,而零跑S01还在追求更多的订单 | 2019 上海车展...
  14. 2021华为软挑初探——代码实现
  15. phpcms整站代码分析
  16. 远程服务器批量管理员权限,Win10系统下怎样实现批量远程桌面管理?Win10系统进行批量远程管理的方法...
  17. js阻止子元素事件_JS点击子元素不触发父元素点击事件(js阻止冒泡)
  18. 高效的国产CAD设计工具,云端三维CAD设计平台:CrownCAD
  19. python web 开发从入门到精通 pdf_Python Web开发从入门到精通
  20. 使用deepin 20作为开发环境

热门文章

  1. python pil_Python PIL composite()用法及代码示例
  2. 2017年第22届中国国际涂料、油墨及粘合剂展览会会刊(参展商名录)
  3. Linux下分卷压缩与解压
  4. Ubuntu 分卷压缩
  5. 教你识别120多个车牌
  6. 【Multisim仿真】LM317-337双路输出可调直流稳压电源电路
  7. TE TM TEM模的区别
  8. 夏令营面试常见英文问题回答_回答有关5合1促销的3个常见问题
  9. Altium Designer之泪点和常规铺铜操作笔记
  10. wireshark:时区