这篇文章比较technical,来看故事的同学请直接忽视。想了解麦教授的”超量子“团队怎么开发金融交易策略的,可以继续。 通常量化交易策略的研究是怎么样展开的呢?一般是准备一些具有预测价值的数据,挖掘潜在的α值,然后基于这些α值训练模型来做预测,之后在训练模型的基础上进行一些多空策略做回测。如果效果不错,就可以用在实际的交易中。 越来越多的金融机器学习模型开始不依赖于回测夏普比率、最大回撤以及其它指标了。 有经验的同学可能已经知道了:回测过程虽然是量化金融里最基础的工作,但是它并不完美。我们在做回测之前,会先分析背后的机器学习模型及其特征重要性。 《Advances in Finance Machine Learning》这本书的作者Marcos Lopez de Prado是康奈尔大学工程学院的客座教授,他在他的书中提到:回测并不是研究工具,特征重要性才是。 这篇文章主要就《Advances in Finance Machine Learning》中提到的一些方法和实验展开,来介绍和理解特征重要性在研究交易策略方面的应用。
在这篇文章中,会介绍有哪些方法可以在不做回测的情况下评估基于几个数据源的交易策略。这不仅仅是一个机器学习从业者的工具,也是一个很有用的框架,用于检验交易或投资组合管理指标之外的策略或假设。 采用特征重要性有哪些显著的优势除了与研发相关的优势(作为数学假设的校验),还有几个对金融机构来说很方便的优势。在这些场景中,可以应用特征重要性分析来得到想要的效果。
特征重要性统计学中著名的p值并不是验证特征重要性的完美方法。下面是在研究中可以用到的一些方法:
另外,还有更高级一点的方法。
最后,我们希望能够有一种方法来检验发现的重要特征的正确性是否 '充分'。这个可以借助PCA来实现,PCA是无监督的,因此,不会对标签进行过度拟合。还可以通过计算PCA '特征重要性'(即特征值大小)与其他任何特征重要性方法之间的 '相关性'(加权Kendall's tau)来实现。 交叉验证对于大部分的特征重要性,我们都需要训练模型并评估其准确性,所以我们需要一种方法来正确测试这种准确性。典型的组合方法是K-Fold交叉验证和时间序列交叉验证。 在金融领域,由于各种原因,比如不是IID采样得到的观测值或样本数量不充足等,为了充分利用数据集对模型或算法效果进行测试和评估,需要更严格地分离训练集和测试集。一个简单的K-Fold交叉验证示意图如下所示: 「K-Fold交叉验证」 模拟数据实验首先,为了评估整个流程,我们可以用模拟数据进行二元分类实验,其中一部分特征是预测性的,一部分特征是冗余的(即只是预测性特征的组合),还有一部分特征是完全随机的。特征重要性的目标是告诉我们哪些特征是不重要的,所以我们在模拟交易中只能依靠真实的'阿尔法'。 为了更接近交易场景,可以做一个信噪比很低的数据集:3个信息特征、2个冗余特征和15个随机特征,分别表示为 'I'、'R '和 'N'。下面就来看不同的特征重要性算法的结果。 「MDI, MDA 和 SFI 基于模拟数据产生的特征重要性」 「CFI, SHAP 和 PCA 基于模拟数据产生的特征重要性」 从视觉上看,除SFI外,其他方法在识别 ' I '和 ' R '特征方面都表现良好。另外,PCA特征值和CFI重要性之间的加权Kendall's tau计算出来为0.44,表现出了较高的相关性。 市场数据实验下面来看真实的金融时间序列来做的重复实验。数据选取的是2000年到2020年的AAPL。首先,用分数阶微积分使时间序列平稳,提取以下特征数据集。
接下来,用三重界限法标签(triple barrier labeling)创建二元分类标签。特征的滚动窗口为14天,预测范围为7天。在这种情况下,特征重要性将如何表现呢?下面是基于2000年到2010年的数据得到的特征重要性,然后,用2010年到2020年的不同特征数据集测试 '样本外'数据的性能。 「MDI, MDA 和 SFI 基于2000年到2010年的AAPL 数据集的特征重要性」 「CFI, SHAP和 PCA 基于2000年到2010年的AAPL 数据集的特征重要性」 可以清楚地看到,所有的方法都至少给了一些随机特征很高的优先级。 虽然这些表现并不完美,但至少可以除去大部分的垃圾特征,降低未来的风险。另外,还可以用其他类似的数据集中检验特征重要性,如MSFT(微软)和IBM。下面分别是MDI、MDA和SHAP可视化的结果。 「MDI, MDA, 和SHAP基于2000年到2010年的MSFT(微软)数据集的特征重要性」 「MDI, MDA, 和 SHAP 基于2000年到2010年的IBM数据集的特征重要性」 根据这三个数据集排名前5的SHAP值,可以选择以下几个最重要的特征。 CUSTOM_IMPORTANT_FEATURES = ['feat_mean_frac_close','feat_OBV_volume','feat_kurt_frac_close','feat_ATR_close','feat_std_frac_close','feat_HT_DCPERIOD_close'] 然后只在样本外数据上进行Purged K-Fold交叉验证,计算几个指标。由于随机森林算法的核心中使用了Bootstrapping算法,所以不同的运行结果可能会有所不同,可以进行100个实验,将其做平均,计算出F1分数、马修斯相关系数和ROC-AUC等指标。 「样本外(AAPL 2010–2020) 基于不同指标做PurgedK-Fold 交叉验证的结果」 从上面的结果可以看到,平均来说,在样本内精心选择的特征集上训练的模型,在样本外的表现更好。 Numerai数据实验Numerai是一家使用AI技术的金融技术公司,以举办去中心化金融预测挑战赛(类似于kaggle)寻找最佳交易策略闻名。用户获得经过模糊和匿名的金融数据,创建并提交模型,之后将这些模型组合成一个元模型,在真实市场上进行交易。基于这个元模型的贡献及其在真实交易中的表现,用户可以获得相应的报酬,报酬可能是美元或加密货币。 Numerai数据的一个问题是我们对数据和标签一无所知:名称标签和分类都被加密了,并且在每个时间段内(不同的年代era)特征都会变化和调整,这里无法应用任何金融知识来获得最大的利益。
「来自Numerai数据集的一个样本:一个真实的挑战赛中用来做预测的模糊、打乱和分类的特征。」 如果年代其实也是混杂的呢?那最好做正常的分组K-Fold交叉验证,年代对应分组。另外,为了加快计算速度,这里使用了线性回归模型,只使用MDA作为训练数据的特征重要性分类器。 「点击图片查看Numerai数据集的所有MDA特征重要性」 下面来选择最重要的特征。Numerai数据集中的特征被分为6类: 'feature_charisma' 'feature_constitution' 'feature_dexterity' 'feature_intelligence' ' feature_strength' ' feature_wisdom' 根据MDA特征重要性,从每一类中选取前75%来保存一致性,并在样本外数据上进行交叉验证实验。这里的直方图代表了验证数据集上的不同年代。所有情况下的ML模型都是简单的线性回归。 「样本外Numerai数据集的相关性得分、Numerai得分(排序相关性)和MSE。」 从上面的图中又可以看到,在'更干净'的数据集上训练出来的模型,即使不知道每个特征的含义,单纯依靠 MDA的值,也比在完整数据集上训练出来的模型表现更好。
结论我们可以看到,为了形成我们对金融市场的假设或策略并对其进行评估,确实需要机器学习的过程和研究特征重要性。当我们要定义实际的交易和风险管理规则时,回测可以后面再做,但在思考新的变量、新的因子或新的阿尔法来帮助我们战胜市场时,回测在这个阶段并不是一个非常理想的方法和步骤,而特征重要性也许是一个更好的选择。
然而,市场中的相关性和依赖性总是不断变化的,因此,在获取特征重要性时,不仅要追踪过去的平均特征重要性,还要追踪它是如何随着时间的推移而变化的。 本内容仅代表原作者的分析、推测与判断,所依据信息和资料来源于公开渠道,不保证其准确性、充足性或完整性,相关信息仅供参考,不构成广告、销售要约,或交易任何证券、基金或投资产品的建议。本内容中引用的任何实体、品牌、商品等仅作为研究分析对象使用,不代表投资实例和建议。 |
|