基于Datawhale开源量化投资学习指南(11):LightGBM在量化选股中的优化与实战

1. 概述
在前几篇文章中,我们初步探讨了如何通过LightGBM模型进行量化选股,并进行了一些简单的特征工程和模型训练。在这一篇文章中,我们将进一步深入,通过优化超参数和实现交叉验证来提高模型的效果,并最终通过回测分析来验证我们所选股票的表现。
2. LightGBM超参数优化
LightGBM是一个高效的梯度提升框架,提供了许多超参数用于调整模型的表现。通过合理的超参数优化,我们可以显著提高模型的预测精度。我们重点调整以下几个重要参数:
- learning_rate:学习率,控制每次更新的幅度。学习率较低时,模型学习得更为精细,但需要更多的迭代次数;学习率较高时,模型收敛得更快,但可能会跳过最优解。
- num_leaves:树的叶子节点数。较高的叶子节点数可以让模型捕捉到更复杂的特征,但也容易过拟合。
- max_depth:树的最大深度,防止过拟合的一个重要参数。
- min_data_in_leaf:每个叶子节点的最小数据量,用于避免过拟合,尤其是在数据量较少的情况下。
- lambda_l1和lambda_l2:L1和L2正则化参数,主要用来防止模型过拟合。
3. 超参数优化的方式
有多种优化超参数的方法,常用的有网格搜索和贝叶斯优化。我们将在下面的部分中介绍如何通过交叉验证来验证这些参数组合的效果。
4. 交叉验证的实现
交叉验证是防止过拟合的一种有效手段。通过将数据集划分为多个子集,交替使用其中的一部分作为验证集,其余部分作为训练集,可以更准确地评估模型的表现。在实际操作中,我们可以通过以下代码来实现交叉验证。
5. 模型回测与选股表现
在超参数调优和交叉验证完成后,我们将对选出的股票进行回测分析。回测的目的是验证我们的选股策略在历史数据中的表现,以评估该策略的可行性。
以下是详细的代码示例,展示了如何进行超参数调优、交叉验证以及选股策略的回测。
import numpy as np
import pandas as pd
import lightgbm as lgb
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
import tushare as ts# 设置Tushare的token,获取数据
tushare_token = 'your_tushare_token'
ts.set_token(tushare_token)
pro = ts.pro_api()# 获取股票数据
def get_stock_data(stock_code, start_date, end_date):df = pro.daily(ts_code=stock_code, start_date=start_date, end_date=end_date)df['trade_date'] = pd.to_datetime(df['trade_date'])df.set_index('trade_date', inplace=True)return df# 示例股票代码
stocks = {'600519.SH': '贵州茅台','601398.SH': '工商银行','601318.SH': '中国平安'
}data = pd.DataFrame()
for code, name in stocks.items():df = get_stock_data(code, '20180101', '20221231')data[name] = df['close']# 数据预处理
data = data.pct_change().dropna()
labels = (data > 0.05).astype(int) # 未来5天涨幅大于5%标记为1# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data.values, labels.values, test_size=0.3, random_state=42)# LightGBM超参数设置
params = {'objective': 'binary','learning_rate': 0.01,'num_leaves': 31,'max_depth': -1,'lambda_l1': 0.1,'lambda_l2': 0.1,'metric': 'binary_logloss'
}# 使用LightGBM进行交叉验证
d_train = lgb.Dataset(X_train, label=y_train)
cv_results = lgb.cv(params, d_train, nfold=5, num_boost_round=2000, early_stopping_rounds=50, metrics='binary_logloss')# 超参数优化
param_grid = {'num_leaves': [31, 63, 127],'learning_rate': [0.01, 0.1, 0.05],'max_depth': [-1, 5, 10],'lambda_l1': [0.1, 0.5, 1.0],'lambda_l2': [0.1, 0.5, 1.0]
}gbm = lgb.LGBMClassifier()
grid_search = GridSearchCV(gbm, param_grid, cv=5)
grid_search.fit(X_train, y_train)# 最优参数输出
print("Best parameters found by grid search:", grid_search.best_params_)# 使用最优参数训练模型
best_params = grid_search.best_params_
clf = lgb.LGBMClassifier(**best_params)
clf.fit(X_train, y_train)# 预测结果
y_pred = clf.predict(X_test)# 模型表现评估
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: %.4f" % accuracy)
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))# 回测分析
data['strategy'] = clf.predict(data.values)
data['strategy_return'] = data['strategy'] * data.mean(axis=1)
cumulative_return = (1 + data['strategy_return']).cumprod()
cumulative_return.plot(figsize=(10, 6), title='Strategy Cumulative Return')
plt.show()
结语
随着 量化投资 的迅猛发展,市场对系统化、数据驱动的投资策略的需求日益增多。本系列文章全面介绍了量化投资的各个关键环节,从基础概念到机器学习技术的实际应用,为读者提供了系统化的学习路径。
在整个系列中,我们首先探讨了量化投资的基本框架与金融市场的运行机制,为后续的策略构建打下了扎实的基础。随后,我们重点介绍了股票数据的获取与处理,这一过程对于数据分析和策略设计至关重要。随着量化选股、择时、调仓、回测等核心策略的逐步深入,我们逐渐掌握了如何通过量化手段来进行投资决策,并通过实战演练验证策略的有效性。
在文章的最后部分,我们探讨了如何结合机器学习技术,特别是通过如LightGBM这样的模型,进一步提升量化策略的表现。这一创新思路展现了数据驱动下的量化投资潜力,使得投资决策不仅更为精确,还能在复杂市场条件下保持策略的稳定性。
希望通过本系列的学习,大家不仅能够掌握量化投资的理论知识,还能够在实际中灵活应用这些方法,构建自己的量化投资策略。量化投资领域的广阔与多样性,给我们提供了无限的可能性,数据驱动的未来必将是智慧投资的时代。愿大家在这条不断探索的路上不断创新,实现更加精准、高效的投资成果。
如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!
欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。
谢谢大家的支持!
相关文章:
基于Datawhale开源量化投资学习指南(11):LightGBM在量化选股中的优化与实战
1. 概述 在前几篇文章中,我们初步探讨了如何通过LightGBM模型进行量化选股,并进行了一些简单的特征工程和模型训练。在这一篇文章中,我们将进一步深入,通过优化超参数和实现交叉验证来提高模型的效果,并最终通过回测分…...
Python4
4. 更多控制流工具 除了刚介绍的 while 语句,Python 还用了一些别的。我们将在本章中遇到它们。 4.1. if 语句 if elif else if x<0: x 0 print(Negative changed to zero) elif x0: print( zero) else: print(More) 4.2. for 语句 Pyth…...
springboot系列--web相关知识探索六
一、前言 web相关知识探索五中研究了请求中所带的参数是如何映射到接口参数中的,也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索五中主要研究自定义对象参数数据绑定底层原理。本次…...
FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误
FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误 测试环境1、 MYODBC 3.51.18 or higher2、分析和解决2.1 解决1,降级MySQL ODBC2.2 解决2,修改FreeSWITCH代码 测试环境 http://myfs.f3322.net:8020/ 用户名:admin,密…...
阿里云物联网的通信方式
阿里云物联网通信的两种方式,一个是物模型(分为服务,事件,属性),一个是自定义topic(要另外设置数据流转) 1.使用产品内的功能定义,(其实也就是Topic中定义好的…...
自由职业者的一天:作为小游戏开发者的真实工作日记
大家好,我是小蜗牛。 在这个快节奏的数字时代,自由职业者的生活往往充满了挑战与机遇。作为一名微信小游戏开发者,我的日常工作并不像人们想象中的那样充满光鲜亮丽的画面,而是由无数的编码、调试和创意碰撞组成的。今天…...
【RL Latest Tech】分层强化学习:Option-Critic架构算法
📢本篇文章是博主强化学习RL领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在…...
分布式数据库
前言 分布式数据库系统(DDBS)包含分布式数据库管理系统(DDBMS)和分布式数据库(DDB)。在分布式数据库系统中,一个应用程序可以对数据库进行透明操作,数据库中的数据分别在不同的…...
MySQL(2)【库的操作】
阅读导航 引言一、创建数据库1. 基本语法2. 创建数据库案例📌创建名为db1的数据库📌创建一个使用utf8字符集的db2数据库📌创建一个使用utf8字符集,并带校对规则的db3数据库 二、字符集和校验规则1. 查看系统默认字符集以及校验规则…...
python pip更换(切换)国内镜像源
国内镜像源列表(个人推荐清华大学的源) 清华大学: https://pypi.tuna.tsinghua.edu.cn/simple阿里云: http://mirrors.aliyun.com/pypi/simple豆瓣: http://pypi.douban.com/simple中国科技大学: https://pypi.mirrors.ustc.e…...
阿里云镜像源无法访问?使用 DaoCloud 镜像源加速 Docker 下载(Linux 和 Windows 配置指南)
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🍃 vue-uniapp-template 🌺 仓库主页: GitCode💫 Gitee …...
使用 BERT 和逻辑回归进行文本分类及示例验证
使用 BERT 和逻辑回归进行文本分类及示例验证 一、引言 在自然语言处理领域中,文本分类是一项至关重要的任务。本文将详细介绍如何结合 BERT 模型与逻辑回归算法来实现文本分类,并通过实际示例进行验证。 二、环境准备 为了运行本文中的代码…...
【skywalking 】监控 Spring Cloud Gateway 数据
使用Spring Cloud 开发,用Skywalking 监控服务,但是Skywalking 默认是不支持 Spring Cloud Gateway 网关服务的,需要手动将 Gateway 的插件添加到 Skywalking 启动依赖 jar 中。 skywalking相关版本信息 jdk:17skywalking&#x…...
SpringWeb
SpringWeb SpringWeb 概述 SpringWeb 是 spring 框架中的一个模块,基于 Servlet API 构建的 web 框架. springWeb 是 Spring 为 web 层开发提供的一整套完备的解决方案。 在 web 层框架历经 Strust1,WebWork,Strust2 等诸多产品的历代更…...
嵌入式刷题(day21)
MySQL和sqlite的区别 MySQL和SQLite是两种常见的关系型数据库管理系统(RDBMS),但它们在特性、使用场景和架构方面有显著的区别: 1. 架构 MySQL:是一个基于服务器的数据库系统,遵循客户端-服务器架构。MySQL服务器运行在主机上,客户端通过网络连接并发送查询。它可以并…...
OpenAI 下一代旗舰模型现身?奥尔特曼亲自辟谣“猎户座“传闻
在人工智能领域最受瞩目的ChatGPT即将迎来两周岁之际,一场关于OpenAI新旗舰模型的传闻再次引发业界热议。然而,这场喧嚣很快就被OpenAI掌门人奥尔特曼亲自澄清。 事件源于科技媒体The Verge的一则报道。据多位知情人士透露,OpenAI可能会在11…...
【C++】STL初识
【C】STL初识 文章目录 【C】STL初识前言一、STL基本概念二、STL六大组件简介三、STL三大组件四、初识STL总结 前言 本篇文章将讲到STL基本概念,STL六大组件简介,STL三大组件,初识STL。 一、STL基本概念 STL(Standard Template Library,标准…...
框架篇补充(东西多 需要重新看网课)
什么是AOP 面向切面编程 降低耦合 提高代码的复用 Spring的bean的生命周期 实例化bean 赋值 初始化bean 使用bean 销毁bean SpringMVC的执行流程 Springboot自动装配原理 实际上就是为了从spring.factories文件中 获取到对应的需要 进行自动装配的类 并生成相应的Bean…...
合约门合同全生命周期管理系统:企业合同管理的数字化转型之道
合约门合同全生命周期管理系统:企业合同管理的数字化转型之道 1. 引言 在现代企业中,合同管理已经不再是简单的文件存储和审批流程,而是企业合规性、风险管理和业务流程的关键环节之一。随着企业规模的扩大和合同数量的增加,传统…...
等保测评与风险管理:识别、评估和缓解潜在的安全威胁
在信息化时代,数据已成为企业最宝贵的资产之一,而信息安全则成为守护这份资产免受侵害的重中之重。等保测评(信息安全等级保护测评)作为保障信息系统安全的重要手段,其核心在于通过科学、规范、专业的评估手段…...
视频技术三要素:码率、帧率与分辨率的实战解析
1. 视频三要素的基础认知 第一次接触视频制作时,我被各种专业术语搞得晕头转向。直到有前辈告诉我:"其实只要搞懂码率、帧率和分辨率这三个参数,就能解决80%的视频质量问题。"这句话让我茅塞顿开,今天我就把这些年积累的…...
RRFLibraries:Duet 3D打印机固件的硬实时C++驱动库
1. RRFLibraries 项目概述RRFLibraries 是 RepRapFirmware 生态系统中高度工程化的底层软件基础设施,其定位并非通用型嵌入式库,而是专为 3D 打印固件——特别是 Duet 系列控制器(Duet 2 WiFi、Duet 3 Mainboard、Duet 3 Mini)——…...
UniAD高版本环境实战:CUDA11.6+PyTorch1.12避坑全记录(附完整依赖清单)
UniAD高版本环境实战:CUDA11.6PyTorch1.12避坑全记录(附完整依赖清单) 当计算机视觉工程师尝试复现前沿论文时,环境配置往往成为第一道门槛。UniAD作为自动驾驶领域的统一大模型,其官方文档推荐的环境配置(…...
从硬编码到动态定义:Qlib表达式引擎如何重构量化因子开发范式
从硬编码到动态定义:Qlib表达式引擎如何重构量化因子开发范式 【免费下载链接】qlib Qlib 是一个面向人工智能的量化投资平台,其目标是通过在量化投资中运用AI技术来发掘潜力、赋能研究并创造价值,从探索投资策略到实现产品化部署。该平台支持…...
StabilityGuide故障排查终极指南:从OutOfMemoryError到StackOverFlowError的完整解决方案
StabilityGuide故障排查终极指南:从OutOfMemoryError到StackOverFlowError的完整解决方案 【免费下载链接】StabilityGuide 项目地址: https://gitcode.com/gh_mirrors/st/StabilityGuide StabilityGuide是阿里巴巴开源的系统稳定性知识库,专注于…...
写作压力小了!盘点2026年倾心之选的的降AIGC平台
轻松降低论文AI率在2026年已不再是天方夜谭。以下是2026年最炸裂、实测效果显著的降AIGC平台神器,覆盖AI痕迹消除、文本改写润色、降重优化、学术合规检测四大核心场景,帮你稳妥搞定毕业论文。 一、全流程王者:一站式搞定论文全链路 这类工具…...
Java 使用国密算法实现数据加密传输
本文是混合加密:前端 SM2 SM4,后端 Spring Boot Hutool 解密的完整示例。 方案的逻辑是: 前端随机生成一个 SM4 key 用 SM4 加密整个业务 JSON 用后端提供的 SM2 公钥 加密这个 SM4 key 后端先用 SM2 私钥 解出 SM4 key 再用 SM4 解出…...
终极指南:如何在浏览器中创建惊艳的WebGL流体模拟效果
终极指南:如何在浏览器中创建惊艳的WebGL流体模拟效果 【免费下载链接】WebGL-Fluid-Simulation Play with fluids in your browser (works even on mobile) 项目地址: https://gitcode.com/gh_mirrors/web/WebGL-Fluid-Simulation 想要在浏览器中体验令人惊…...
BilibiliCommentScraper:革新性全量数据采集的技术突破方案
BilibiliCommentScraper:革新性全量数据采集的技术突破方案 【免费下载链接】BilibiliCommentScraper 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliCommentScraper 在当今数据驱动决策的时代,高效采集方案与完整数据获取已成为内容分析…...
DB2数据迁移实战:除了EXPORT/LOAD,这几种备份还原方法你试过吗?
DB2数据迁移实战:超越基础工具的高效策略全景 当测试环境的DB2数据库需要整体搬迁到新服务器时,大多数DBA的第一反应是使用EXPORT/LOAD这对经典组合。但真实场景中,数据迁移远不止简单的导出导入——表结构依赖、CLOB字段处理、编码转换、存储…...
