DoubleEnsemble:基于样本重加权和特征选择的金融数据分析方法

现代机器学习模型(如深度神经网络和梯度提升决策树)由于其提取复杂非线性模式的优越能力,在金融市场预测中越来越受欢迎。然而,由于金融数据集的信噪比非常低,并且是非平稳的,复杂的模型往往很容易过拟合。此外,随着各种机器学习和数据挖掘工具在量化交易中的应用越来越广泛,许多交易公司已经提取了越来越多的特征(也称为因子factors)。因此,如何自动选择有效特征成为一个迫在眉睫的问题。为了解决这些问题,作者提出了DoubleEnsemble,这是一个基于样本重新加权和基于shuffling特征选择的集成框架。具体来说,我们基于训练动态识别关键样本,并通过shuffling每个特征的消融影响来引出关键特征。该模型适用于广泛的基础模型,能够提取复杂的模式,同时缓解金融市场预测的过拟合问题。我们使用DNN和GBDT作为baseline,进行了广泛的实验,包括加密货币和股票交易的价格预测。实验结果表明,与几种基线方法相比,DoubleEnsemble实现了优越的性能。

来自:DoubleEnsemble: A New Ensemble Method Basedon Sample Reweighting and Feature Selection forFinancial Data Analysis

目录

  • 背景概述
  • 相关工作
    • 集成模型
    • 样本重加权
    • 特征选择
    • 金融数据去噪
  • 方法
    • 样本重加权
    • 基于混洗的特征选择
  • 实验-股票交易
    • 实验设置
    • 评价指标
    • 实验结果

背景概述

众所周知,金融市场难以预测。首先,困难来自众所周知的有效市场理论,该理论认为股价反映的所有信息,不可能完全超过整个市场。其次,由于有大量噪声交易和影响市场运行的隐藏因素(比如政策变化和突发新闻)的存在,金融数据具有高度的噪声。

多因子模型是一种流行的资产定价和市场预测模型。该模型基于多个特征(或因子)对资产进行定价或预测市场走势,如公司规模(firm size)、收益率(earnings’ yield)、杠杆率(leverage)和账面市值比(book-to-market ratio)。线性模型一直是多因子模型的标准算法,但在发现复杂模式方面有很大的局限性。最近,非线性机器学习模型(如GBDT或DNN)变得流行。然而,这些复杂的非线性模型容易过拟合,并且对噪声样本敏感

为了给模型提供更多信息,量化交易者或研究人员通常会创建数百甚至数千个特征(也称为因子)。因此,选择不仅具有信息性而且与其他特征不相关的特征是至关重要的。对于线性模型(如线性回归),我们可以选择相关性低的特征来缓解多重共线性问题。但是,对于高噪声的财务数据,如何有效地选择特征尚不清楚

为了解决上述问题,作者提出了一种新的金融数据预测集成框架DoubleEnsemble。该框架在集合中逐个构建子模型,其中每个子模型都使用重加权的样本和精心选择的特征进行训练。广泛的模型可作为子模型,如线性回归模型、GBDT和DNN。

在实验中,作者将DoubleEnsemble应用于两个金融市场,即加密货币交易所OKEx和证券交易所中国A股市场(China’s A-share market)。这两个市场具有不同的交易规则和市场参与者,因此在这两个交易市场的历史数据中存在不同类型的噪声和模式。此外,作者使用DoubleEnsemble来构建预测模型,以不同的频率(从几秒到几周)进行交易。实验表明,DoubleEnsemble在这两个市场上都取得了优异的性能。

相关工作

集成模型

集成是增强模型鲁棒性的有效方法。集成模型的关键是构建良好的和多样化的子模型。构建子模型的方法可以分为两类。在第一类中,可以单独构建不同的模型,例如bagging。另一类是基于先前构建的子模型的性能构建子模型,如boosting。通过这类方法建立的模型具有更好的预测精度,但容易过拟合训练数据中的噪声。

样本重加权

对模型训练的样本进行加权在一些计算机视觉应用中被证明是有效的。在为训练样本分配权重时,boosting和denoising的目标之间存在冲突。boosting会增加困难样本的权重,模型首先拟合简单样本,然后拟合困难样本。在金融市场预测中,这也可以被解释为在利用以前的模式时获得另一种新模式。另一方面,为了构建对异常值和噪声样本具有鲁棒性的集合,应该减少这些噪声样本的权重。然而,我们很难区分困难样本和异常样本。因此,在进行boosting学习的同时,减少噪声样本的权重是一项挑战。

特征选择

通常,金融市场预测的特征是手动选择的。然而,当特征数量增加时,需要实现特征选择的自动化。(Advances in financial machine learning)介绍了金融机器学习的几个特征重要性度量。然而现有方法没有研究如何结合样本重加权来选择特征以获得更好的性能。

金融数据去噪

降噪是从低信噪比的金融数据中提取信息的关键。作者重点讨论了模型的训练。除了重加权样本去噪外,过去的研究一般是设计特定的损失函数去噪。降噪可以从信号处理的角度进行(例如,在提取特征之前对原始序列数据进行滤波)。

方法

作者提出了DoubleEnsemble,这是一个具有两个关键组件的模型:基于学习轨迹的样本重加权和基于混洗的特征选择。

训练数据包含特征矩阵 X X X和标签 y y y,其中, X = [ x 1 , . . . , x N ] T ∈ R N × F X=[x_{1},...,x_{N}]^{T}\in R^{N\times F} X=[x1,...,xN]TRN×F x i x_{i} xi X X X的第 i i i个样本,另外, y = [ y 1 , . . . , y N ] y=[y_{1},...,y_{N}] y=[y1,...,yN]。依次构建 K K K个子模型 M 1 , . . . , M K M_{1},...,M_{K} M1,...,MK。在构建第 k k k个子模型后,当前的集成模型 M ‾ k ( ⋅ ) = 1 k ∑ i = 1 k M i ( ⋅ ) \overline{M}^{k}(\cdot)=\frac{1}{k}\sum_{i=1}^{k}M^{i}(\cdot) Mk()=k1i=1kMi()为前 k k k个模型的简单平均。

每个子模型不仅基于训练数据 ( X , y ) (X,y) (X,y),也基于一组选定的特征 f ⊆ F f\subseteq F fF和样本权重 w = ( w 1 , . . . , w N ) w=(w_{1},...,w_{N}) w=(w1,...,wN)进行训练。对于第一个子模型,使用所有特征和相等的权重。对于随后的子模型,分别使用基于学习轨迹的样本重加权(SR,sample reweighting)和基于混洗的特征选择(FS)来确定权重和选择特征。

在介绍SR和FS的细节之前,首先介绍这两个过程的输入。对于SR,我们检索前一个子模型训练期间的loss曲线和当前集成模型的loss值。假设前一个子模型训练 T T T次迭代。我们使用 C ∈ R N × T C\in R^{N\times T} CRN×T来表示loss曲线,其中元素 c i , t c_{i,t} ci,t表示在前一个子模型的训练中第 t t t次迭代后第 i i i个样本上的误差。对于神经网络,迭代指的是一个训练epoch,而对于GBDT,我们在迭代中构造一个新的树。然后,我们使用 L ∈ R N × 1 L\in R^{N\times 1} LRN×1表示损失值,元素 l i l_{i} li是当前集成模型在第 i i i个样本上的误差(比如 M ‾ k ( x i ) \overline{M}^{k}(x_{i}) Mk(xi) y i y_{i} yi的误差)。对于FS,我们直接提供训练数据和当前集成作为输入。

DoubleEnsemble的算法为:
fig1

样本重加权

在这个过程中,首先计算每个样本的 h h h值,然后根据 h h h值将所有样本划分为 B B B个bins,再将相同的权重分配给同一个bin中的样本。

h h h值的计算基于前一个子模型的 C C C和当前集成模型的 L L L。对于鲁棒性,首先对 C C C L L L进行标准化( R N × d → [ 0 , 1 ] N × d R^{N\times d}\rightarrow [0,1]^{N\times d} RN×d[0,1]N×d)。比如,如果 X i j X_{ij} Xij大于 X X X j j j列元素的90%,则 n o r m ( X ) i j = 0.9 norm(X)_{ij}=0.9 norm(X)ij=0.9,为了表示在训练过程中样本的丢失是否得到改善,作者比较了它在训练开始和结束时的损失。作者使用 C s t a r t , C e n d ∈ R N × 1 C_{start},C_{end}\in R^{N\times 1} Cstart,CendRN×1分别表示训练开始和结束时所有样本的损失。具体地说,它们分别是前10%列和后10%列的平均值。比如,如果对每个子模型训练 T = 100 T=100 T=100个迭代次数, C s t a r t C_{start} Cstart中的每个元素为前10次迭代中样本的平均归一化损失。然后,我们计算所有样本的 h h h值:

SR算法如下: h = α 1 ( − L ) + α 2 n o r m ( C e n d C s t a r t ) (1) h=\alpha_{1}(-L)+\alpha_{2} norm(\frac{C_{end}}{C_{start}})\tag{1} h=α1(L)+α2norm(CstartCend)(1)其中, h ∈ R N × 1 h\in R^{N\times 1} hRN×1。为了避免权值极值,进一步根据 h h h值将样本划分为 B B B个bins,并为同一个bin中的样本分配相同的权重。假设第 i i i个样本被分成第2个bin。该样本的权重分配如下: w i = 1 γ k < h > b i + 0.1 (2) w_{i}=\frac{1}{\gamma^{k}<h>_{b_{i}}+0.1}\tag{2} wi=γk<h>bi+0.11(2)其中, < h > b <h>_{b} <h>b为第 b b b个bins的平均 h h h值,使用衰减因子 γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1]以鼓励在集成的最后一个子模型中权重分配更均匀。

SR的算法为:
fig2

基于混洗的特征选择

作者在DoubleEnsemble中用基于混洗的FS训练下一个子模型,与SR相似,首先计算每个特征的 g g g值,然后根据 g g g值将所有特征划分为 D D D个bins,然后,从不同的bin中随机选择不同采样比例的特征。

特征的 g g g值度量了该特征对当前集成的贡献(即特征重要性)。为了计算特征的 g g g值,作者对该特征的值进行混洗,并比混洗前后的损失(算法3中的第5-7行)。当特征的消除(通过混洗实现)显著增加样本上的损失时,特征的 g g g值较大,这表明该特征对当前集成很重要。为了提高 g g g值的鲁棒性,作者根据 g g g值将所有特征划分为 D D D个bins,并随机从具有不同采样比率的不同bin中选择特征(算法3中的第8-12行)。采样比率是预设的,并且对于具有较大 g g g值的bin,该比率较大。最后,将所有随机选择的特征拼接并返回。

FS的算法如下:
fig3

这样设计的原因如下:为了估计一个特征对模型的贡献,我们想要比较该特征不存在时的性能。一种自然但代价高昂的方法是消除特征,重新训练,然后重新评估模型。我们不是训练一个新的模型,而是对数据集进行扰动以消除特征的贡献,并比较使用扰动数据集和使用原始数据集的模型的性能。由于不需要重新训练模型,该方案在计算上更有效。

实验-股票交易

作者使用 K = 6 K = 6 K=6个子模型。在SR过程中,使用 α 1 = α 2 = 1 α_1 = α_2 = 1 α1=α2=1 B = 10 B = 10 B=10个bins。在FS过程中,使用 D = 5 D = 5 D=5个bins,样本比例为 ( 0.8 ; 0.7 ; 0.6 ; 0.5 ; 0.4 ) (0.8;0.7;0.6;0.5;0.4) (0.8;0.7;0.6;0.5;0.4)

在这个实验中,作者训练股票市场的预测器,并根据预测结果进行股票交易。实验以中国A股市场为基础,该市场有3000多只股票在交易。每个样本对应一个股票的一个交易日

实验设置

作者在两种不同的环境下进行实验。在第一个设置中(用DAILY表示),我们在每个交易日收盘时做多predictor建议的前20只股票,然后在下一个交易日收盘时卖出这些股票。该预测基于182个特征,这些特征值是在该交易日收盘前3分钟计算出来的(这些特征可能包括当天的价格变动、交易量、以及其他市场指标等)。在第二个设置中(用WEEKLY表示),在每个交易日收盘后,根据历史市场信息计算254个特征并进行预测。在接下来的一个交易日,我们以开盘价做多预测建议的前10只股票,并持有5个交易日。此后,我们在第五个交易日开盘后卖出这些股票。在这种情况下,我们大部分时间持有50只股票。两种情况下的特征是为不同频率的预测而设计的,由不同的交易公司创建。因此,它们具有完全不同的基本性质。由于实验的特征较多,作者在MLP模型中使用了三个神经元较多的隐藏层(分别为256、128和64个神经元),在GBM模型中使用了250棵树。


做多是指“先买入,后卖出”,做空是指“先卖出,再买入”。在金融市场中,做多指看好股票、外汇或期货等未来的上涨前景而进行买入持有等待上涨获利。例如,如果你认为某股票的市场价格会涨到150元,你可以用100元买入该股票,等到市场价格涨到150元时再卖出,就可以赚50元了。


作者按照如下所述的滚动方案对模型运行回测:每周重新训练模型,并在每次训练模型时使用最近500个交易日(即大约最近两年)的特征(所以结果图中的曲线会呈现整体上升的情况,就像loss总是不断被降低)。两种设置的交易期限为2017年1月至2019年11月。对于交易细节,不包括在3个月内上市的股票,然后以同等权重做多排名前N的股票。

评价指标

Ann.Ret:我们用对冲后的年化收益来衡量由模型构建的投资组合所获得的收益超过市场的多少。我们把每天的资金分成两部分,分别用来买股票和对冲市场。为了对冲市场,我们做空相应的股指期货。


"做空相应的股指期货"是金融交易中的一个策略,指的是出于预期股指将下跌的判断(预期股指通常指的是市场参与者对股票市场未来运动趋势的预期),通过卖出股指期货合约来获取利润的行为。在这个策略中,交易者不持有股指期货合约的实际持仓,而是先卖出合约,希望在未来以更低的价格买入同等数量的合约来平仓,从而赚取卖高买低的差价。

这种做空策略通常用于对冲风险或投机。例如,如果投资者持有一篮子股票,且这篮子股票与某股指表现高度相关,他们可能会通过做空这个股指的期货来对冲持仓股票的下跌风险。如果股市下跌,股票持仓的价值可能会减少,但做空股指期货的部分将会获得收益,从而减少总体损失。


Sharpe:夏普比率是股票投资最常用的指标之一,它反映了风险调整后的盈利能力。

MDD:最大损失是投资组合从峰值到低谷的最大相对损失。MDD是一个特定时期内下行风险的指示器。MDD与投资者的最大承受能力有关,需要保持尽可能低的价格。

IC/IR:信息系数IC和信息比IR表示预测的质量。这里的IC是mean IC。

实验结果

图中绘制了模型在不同设置下的对冲权益曲线。表中列出了回测结果的性能度量。
tab1

fig4

  • 不同模型在不同设置下的对冲权益曲线。背景中的蓝色条表示总体预测的IC。

图中展示了四组实验。四组实验分别在不同的设定(DAILY和WEEKLY)和不同的基模型(MLP和GBM)下进行。图中曲线为不同模型对冲后的权益曲线,背景中的蓝条表示SR+FS模型在每个交易日的IC。交易日的IC是该交易日模型输出的连续信号与实际未来收益之间的Spearman秩相关系数。权益曲线(equity)反映了top检索样本的预测精度,IC反映了所有样本的预测精度。

可以看到SR+FS(红线)的性能优于SR+ALL(橙色线)。这表明FS的有效性。但是,FS过程的自动特征选择不如手动选择特征,这是一个相当强的基准。因此,作者将发现一种可与人工选择相媲美或更好的端到端自动特征选择方法作为未来的研究方向。

此外,观察到具有SR过程的模型比没有SR过程的模型(即SimpleEnsemble)获得了更好的性能。这可以通过比较SR+Manual模型(绿色实线)和SimpleEnsemble+Manual模型(绿色虚线)或者比较SR+ALL模型(橙色实线)和SimpleEnsemble+ALL(橙色虚线)来观察。这说明SR可以通过对关键样本的关注来提高性能。


基础模型(如MLP)的输入为股票在特定日期下的因子值,如技术指标、基本面指标等。输出则依赖于实验的具体目标,可能是股票未来一段时间的收益率、价格变动或是涨跌趋势的分类


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「递归算法」:Pow(x,n)

一、题目 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000示例 2&#xff1a; 输入&#xff1a;x 2.10000, n 3 输出&#xff1a;9…

使用Arcgis对欧洲雷达高分辨率降水数据重投影

当前需要使用欧洲高分辨雷达降水数据&#xff0c;但是这个数据的投影问题非常头疼。实际的投影应该长这样&#xff08;https://gist.github.com/kmuehlbauer/645e42a53b30752230c08c20a9c964f9?permalink_comment_id2954366https://gist.github.com/kmuehlbauer/645e42a53b307…

深入了解 Ansible:全面掌握自动化 IT 环境的利器

本文以详尽的篇幅介绍了 Ansible 的方方面面&#xff0c;旨在帮助读者从入门到精通。无论您是初学者还是有一定经验的 Ansible 用户&#xff0c;都可以在本文中找到对应的内容&#xff0c;加深对 Ansible 的理解和应用。愿本文能成为您在 Ansible 自动化旅程中的良师益友&#…

故障诊断 | 一文解决,LSTM长短期记忆神经网络故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现LSTM长短期记忆神经网络故障诊断 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅

[基础IO]文件描述符{重定向/perror/磁盘结构/inode/软硬链接}

文章目录 1. 再识重定向2.浅谈perror()3.初始文件系统4.软硬链接 1. 再识重定向 图解./sf > file.txt 2>&1 1中内容拷贝给2 使得2指向file 再学一个 把file的内容传给cat cat拿到后再给file2 2.浅谈perror() open()接口调用失败返回-1,并且错误码errno被适当的设置,…

虚拟机Windows Server 2016 安装 MySQL8

目录 一、下载MySQL8 1.下载地址&#xff1a; 2.创建my.ini文件 二、安装步骤 第一步&#xff1a;命令窗口 第二步&#xff1a;切换目录 第三步&#xff1a;安装服务 第四步&#xff1a;生成临时密码 第五步&#xff1a;启动服务 第六步&#xff1a; 修改密码 三…

【服务器搭建】快速完成幻兽帕鲁服务器的搭建及部署【零基础上手】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 教程详戳&#xff1a;不需要懂技术&#xff0c;1分钟幻兽帕鲁服…

stable diffusion学习笔记——高清修复

ai画图中通常存在以下痛点&#xff1a; 受限于本地设备的性能&#xff08;主要是显卡显存&#xff09;&#xff0c;无法跑出分辨率较高的图片。生图的时候分辨率一调大就爆显存。即便显存足够。目前主流的模型大多基于SD1.0和SD1.5&#xff0c;这些模型在训练的时候通常使用小…

【Git】01 Git介绍与安装

文章目录 一、版本控制系统二、Git三、Windows安装Git3.1 下载Git3.2 安装3.3 检查 四、Linux安装Git4.1 YUM安装4.2 源码安装 五、配置Git5.1 配置用户名和邮箱5.2 配置级别5.3 查看配置 六、总结 一、版本控制系统 版本控制系统&#xff0c;Version Control System&#xff…

大数据分析|大数据分析的三类核心技术

文献来源&#xff1a;Saggi M K, Jain S. A survey towards an integration of big data analytics to big insights for value-creation[J]. Information Processing & Management, 2018, 54(5): 758-790. 下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1…

2024.2.3 寒假训练记录(17)

补一下牛客&#xff0c;菜得发昏了&#xff0c;F搞了两个小时都没搞出来&#xff0c;不如去开H了 还没补完 剩下的打了atc再来 文章目录 牛客 寒假集训1A DFS搜索牛客 寒假集训1B 关鸡牛客 寒假集训1C 按闹分配牛客 寒假集训1D 数组成鸡牛客 寒假集训1E 本题又主要考察了贪心牛…

java设计模式:策略模式

在平常的开发工作中&#xff0c;经常会用到不同的设计模式&#xff0c;合理的使用设计模式&#xff0c;可以提高开发效率&#xff0c;提高代码质量&#xff0c;提高代码的可拓展性和维护性。今天来聊聊策略模式。 策略模式是一种行为型设计模式&#xff0c;运行时可以根据需求动…

(2024|ICLR reviewing,IGN,EBGAN,重建、幂等和流形紧致目标)幂等生成网络

Idempotent Generative Network 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 方法 2.1 优化目标 2.2 训练 2.3 架构和优化 4. 实验 5. 相关工作 6. 局限性 0. 摘要…

PyTorch基础-Tensors属性、Tensor的运算

PyTorch的基本概念 Tensor的基本概念 张量高于标量、向量、矩阵 标量说零维的张量&#xff0c;向量是一维的张量&#xff0c;矩阵是二维的张量 Tensor与机器学习的关系 Tensor的创建 函数功能Tensor(*size)基础构造函数Tensor(data)类似np.arrayones(*size)全1Tensorzeros(…

029 命令行传递参数

1.循环输出args字符串数组 public class D001 {public static void main(String[] args) {for (String arg : args) {System.out.println(arg);}} } 2.找打这个类的路径&#xff0c;打开cmd cmd C:\Users\Admin\IdeaProjects\JavaSE学习之路\scanner\src\com\yxm\demo 3. 编译…

C++ 之LeetCode刷题记录(二十七)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 136. 只出现一次的数字 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现…

【Web前端笔记06】CSS常用属性

目录 一、字体属性 1、color 字体颜色 2、font-size 字体大小&#xff08;默认16px) 3、font-weight 文本粗细 4、font-style 字体样式 5、font-family 指定一个元素的字体 二、背景属性 1、background-color 背景颜色 2、background-image: url("img/do.png"); 背景…

某站平台的签名算法分享

先charles抓包&#xff0c;api.xxxxxx.com域名的包 分析包 看到路径参数如下 appkey1d8b6e7d45233436&build5531000&channeldw056&mobi_appandroid&mode0&oid326052200&plat2&platformandroid&ps20&statistics%7B%22appId%22%3A1%2C%22p…

异步编程Completablefuture使用详解----进阶篇

JDK版本&#xff1a;jdk17 IDEA版本&#xff1a;IntelliJ IDEA 2022.1.3 文章目录 前言一、异步任务的交互1.1 applyToEither1.2 acceptEither1.3 runAfterEither 二、get() 和 join() 区别三、ParallelStream VS CompletableFuture3.1 使用串行流执行并统计总耗时3.2 使用并行…

前端JavaScript篇之map和Object的区别、map和weakMap的区别

目录 map和Object的区别map和weakMap的区别 map和Object的区别 Object是JavaScript的内置对象&#xff0c;用于存储键值对。Object的键必须是字符串或符号&#xff0c;值可以是任意类型。Map是ES6引入的新数据结构&#xff0c;用于存储键值对。Map的键可以是任意类型&#xff…