策略分享—基于StockRanker模型和排序学习的选股策略
由bq0m8rec创建,最终由bq0m8rec 被浏览 21 用户
0. 策略名词解释
(1)StockRanker模型 (LightGBM Ranker模型)
StockRanker 在bigquant平台支持排序、回归、二分类、log loss四种算法。而在排序算法中: 使用 LightGBM 提供的排序模型(LightGBM Ranker)来实现排序任务。
github链接: https://github.com/microsoft/LightGBM
- 该模型通过将排序问题转化为多个 样本对之间的比较任务进行训练
$$
每一对样本 (i, j) 中,如果 yi>yj,模型应学习让 \hat{y}_i > \hat{y}_j
$$
这种方法不关注预测值的准确性,而关注“ 谁排在谁前面 ”
参数名 | 含义与解释 |
---|---|
number_of_leaves | 每棵树的最大叶子数,控制模型复杂度,越大越容易过拟合。 |
min_docs_per_leaf | 每个叶子节点的最小样本数,防止模型过拟合。 |
number_of_trees | 总共训练的树的数量,树越多模型越复杂。 |
learning_rate | 控制每棵树对模型的贡献,影响收敛速度与稳定性。 |
max_bins | 特征最大分箱数,影响特征离散化的精度与训练效率。 |
feature_fraction | 每次训练迭代中使用的特征比例,用于防止过拟合。 |
data_row_fraction / bagging fraction | 每次训练迭代中使用的数据样本比例,用于增强模型泛化能力。 |
\
(2)排序学习(Learning to Rank)
排序学习是一类机器学习任务,目标是让模型对一组对象(如网页、股票、商品)按相关性或价值进行排序。
给定一组查询 q,及其对应的候选项集合{x1,x2,...,xn},每个项 xi 有一个对应的特征向量xi,以及(可能)一个相关性标签yi。排序学习的目标是学习一个函数 f(x),使得经过模型评分后的对象排序尽可能接近真实的相关性排序。
排序策略 | 优化单位 | LightGBM 支持 |
---|---|---|
Pointwise | 每个样本 | 否(不适合排序) |
Pairwise | 样本对 (i, j) | (LambdaRank),StockRanker模型使用的是这一种排序算法 |
Listwise | 整个列表 | (rank_xendcg) |
\
1 StockRanker模型实现
1.1 数据准备(Data Preperation)
1.1.1 时间范围(选定标的行业)
https://www.gov.cn/zhengce/zhengceku/202312/content_6923270.htm?utm_source=chatgpt.com
1.1.2 因子分析(行业定制化因子模型搭建,具体见“基于成长因子的电子行业多因子选股策略‘)
\
1.2 预测函数(Prediction Function)
在 LightGBM 中,无论是分类、回归还是排序,预测函数本质上是 一组加法模型,即:
在排序中,这个打分值并没有“具体数值意义”,但越大的值会在排序中被排得越靠前。
\
1.3 损失函数(Loss function)
排序学习的损失函数不是关于单个样本的,而是关于 样本对(pairwise) 或 整个列表(listwise) 的:
LambdaRank(Pairwise)的理论损失函数:
实际的优化内容:梯度(lambda)
实际训练时的 λ,就是这个理论损失函数对预测分数的偏导数(梯度)-----在 LightGBM 的排序学习(尤其是 LambdaRank)中,lambda 指的是目标函数对叶子输出(leaf output)的一阶偏导数的负数,也就是:
\
1.4 正则化 (Regularization)
与回归/分类一样,LightGBM 的排序模型也加入了 树模型复杂度的正则化,防止过拟合。
- 叶子输出 L2 正则化:控制每个叶子的预测值 wj 不要过大(类似岭回归)\n
1.5 目标函数(Objective function)
Total loss(目标函数)= Loss Function(损失函数) + Rugularization(正则项)
注意:这里的lambda不是loss function的一阶偏导数的lambda, 只是正则项的正则化系数
LightGBM 要优化的最终目标函数为:
\
1.6 优化过程(Boosting Optimization)
LightGBM 采用的优化方式是:
梯度提升决策树(GBDT)框架,对目标函数做 二阶泰勒展开,逐轮拟合负梯度(伪残差)
步骤如下:
(1) 初始化模型:
(2) 每一轮迭代:
l 对于每个样本,计算一阶导数(负梯度)和二阶导数:
LambdaRank 会根据样本对构造这些梯度(包含ΔNDCG)
l 拟合一棵决策树 Tm(x),将样本分配到叶子节点
l 计算每个叶子的输出值(通过极小化加权平方误差 + 正则项)
l 更新模型:
(3) 继续迭代直至停止条件满足(如迭代次数、早停)
1.7 训练过程(Training Process)
\
1.8 模型检验(Evaluation)
LightGBM 排序模型常用的评估指标不是 MSE,而是 排序质量指标,例如:
- 计算公式:
\
-
图直观展示:
NDCGk=1表示排序完美
NDCGk 越接近 1,排序效果越好
\
2 历史数据回测
\
3 交易成本和滑点
\
4 总结
优势:StockRanker模型排序算法
可优化方向:多策略组合,参数优化等