PLUS会员

DeepAlpha短周期因子系列研究之: 自定义损失函数

由qxiao创建,最终由qxiao 被浏览 233 用户

本文目的在于给出自定义损失函数示例代码, 便于读者魔改. 基于BigQuant平台, 探索了使用不同损失函数对DeepAlpha-DNN模型优化的效果. 本文的基准模型为MSE优化的DeepAlpha-DNN模型, 进一步使用MAE、Pseudo-Huber以及负IC损失函数和有序回归损失函数. 最后多加一项使用wmse损失函数优化LSTM模型.

我们使用了基本面条件对A股进行筛选. 采用两到三年数据训练, 后一年数据进行回测. 由于本文的标签是未来五日累计收益率, 故采用5日调仓的方式进行回测.

通过对比常用损失函数在2023年的回测效果得出结论: 使用MAD损失函数综合效果最佳, 2023年期间累计收益率 8.19%, 年化收益为13.36%,近期大盘走势不佳(-2.67%)的状态下收益依旧为正, 最大回撤只有6.01%, 胜率为0.55.

一. 损失函数

常用损失函数

损失函数是机器学习和深度学习中的关键概念,用于衡量模型预测结果与实际标签之间的差异或误差。它的作用是定义了模型的优化目标,通过最小化损失函数来使模型能够学习和适应数据。故选择损失函数是在量化投资中非常重要的决策之一. 损失函数的选择直接影响了模型训练和优化过程, 决定了模型对于不同类型的错误的敏感程度.

这里列举几个常用的损失函数, 如果是分类任务:

分类问题下的损失函数

BCE, 又称Binary Cross-Entropy. 主要用于多分类问题,softmax损失的分类问题为BCE的衍生. CCE, 又称Categorical Cross Entropy Loss. 主要用于二分类问题,各位如果对meta-labeling(元标签)了解的话,分类交叉熵损失在元标签中应用较多, 元标签在做第一层模型时需要高召回率的机器学习模型, 而在二分类问题下计算召回率最为方便.

如果是回归任务:

回归问题下的损失函数

MAD, 又称绝对平均差, 真实标签和预测标签之差的绝对值的平均数; MSE,又称均方误差, 描述的是真实标签和预测标签平方差的平均数, 这是我们比较常用的指标.

此篇文章是利用DeepAlpha-DNN模型对未来五日累计收益进行拟合. 以MSE损失函数训练的模型作为基准模型, 并分别采用了MAE和Pseudo-Huber损失函数对模型进行优化.

而MAE或者Pseudo-Huber损失使得模型的鲁棒性增强, 模型对异常值的容忍度大大提高.

在Pseudo-Huber损失函数中, δ是一个可调节的超参数, 本文令δ=5. 损失函数如上图绿线所示, 其损失函数值普遍小于绝对值损失的损失函数值, 但与绝对平均误差损失相比, 该损失函数不能快速迭代至最优解.

但是绝对值损失函数存在不可导点, 如上图所示, 绝对值函数在零处不可导, 所以这里引入伪梯度的概念:

其中h为一个很小的数.

IC损失函数

首先来介绍IC:

其中hat_y表示模型的预测值, y表示实际累计收益率, bar_y表示累计收益率的平均值, bar_hat_y表示预测值的平均值. 整个指标是用来衡量预测值和实际值的相关性. 该指标被称为相关系数, 相关系数越大代表预测值和累计收益的关联越强, 选股能力也越强. ==想让IC越大, 只需让负IC越小越好, 所以将负IC作为调节模型的损失函数。==

Oridinal 损失函数

该损失函数涉及样本排序, 在讲排序之前, 我们回顾一下逻辑回归:

其中theta为待估参数, c为阈值, f为模型, 逻辑回归有正负类之分,这里只展示了正类, 负类用1减去正类的概率即可.

采用负对数似然的方法可得到损失函数:

其中:

上述情况只是将标签以c为阈值划分之后的损失函数, 而有序回归可以设定多个阈值:

其中c1<c2<…<ck. 由于阈值具有顺序, 所以标签也就有了顺序.

WMSE损失函数

我们都知道mse损失函数是误差的平方的平均值, 但是这个平均值是等权平均的, 而wmse损失函数是在mse的基础上对每个样本的误差的权重进行了调整:

其中wi为第i个样本误差的权重.

本文的权重选取为自适应绝对平均差:

误差越大, 分配到的权重也就越大, 模型训练时也会着重训练误差大的样本.

二. 数据预处理

  1. 抽取Deep-Alpha98因子;
  2. 剔除st以及财务指标不健康的股票;
  3. 参考对98因子做截面均值化构建新的均值98因子(华泰金工: 九坤 Kaggle 量化大赛有哪些启示?);
  4. 初始化Deep-Alpha网络结构和优化器以及损失函数;
  5. 数据集划分: 3年数据集作为训练集, 后面一年作为测试集进行回测.

三. 实证结果

MSE损失函数实证效果

以2020年至2022年作为训练集, 2023年作为样本进行回测的结果如下

采用一般我们常用的损失函数MSE作为baseline也能取得正收益.

MAE损失函数实证效果

以2020年至2022年作为训练集, 2023年作为样本进行回测的结果如下

即使在大盘波动较大并且大盘走弱的情况下, MAE优化的Deep-Alpha网络收益依旧为正, 相比用MSE损失函数训练的模型,MAE损失函数优化的模型策略收益率更高, 且最大回撤更低.

Pseudo-Huber损失函数实证结果

以2020年至2022年作为训练集, 2023年作为样本进行回测的结果如下

能明显发现2020年和2021年使用Pseudo-Huber损失函数优化模型的效果明显不如MAE损失函数优化的效果. 2023年Pseudo-Huber损失函数优化出的模型策略存在负收益, 而MAE损失函数不存在负收益.

负IC损失函数实证结果

以2020年至2022年作为训练集, 2023年作为样本进行回测的结果如下:

由于相关系数函数不是严格凸函数, 故优化效果并不是很好.

Oridinal 损失函数实证结果

WMSE损失函数实证结果\n

三. 总结

  1. 在上述所有回归损失函数以及IC损失函数中, MAE损失优化出的模型策略效果是最好的, 最大回撤为6.01%远低于其他损失函数优化出来的策略;
  2. 虽然Pseudo-Huber损失函数优化的模型收益是最高的, 但从收益波动率来看, 其收益不如MAE损失优化的模型策略稳定.

\

四. 代码

MSE损失函数优化代码

https://bigquant.com/codeshare/656f5abc-5849-4ae1-aedf-bb2688542778

MAD损失函数优化代码

https://bigquant.com/codeshare/7d0bb7aa-2a59-4a64-9e7c-50e436a4fe40

Pseudo-Huber损失函数优化代码

https://bigquant.com/codeshare/dcb84e89-c572-49dd-96d1-ba4959784607

负IC损失函数优化代码

https://bigquant.com/codeshare/4e634c16-b38d-4312-afd9-8d8e0d67734b

Oridinal 损失函数优化代码

https://bigquant.com/codeshare/5cd37c89-945b-4259-b005-2c2e181d2b19

\

WMSE损失函数优化代码

https://bigquant.com/codeshare/bd92b02c-258a-44b0-8fb7-4ca1664eaeb0

\

标签

DeepAlpha函数
{link}