AI在金融中的应用:忘掉回测
这篇文章比较technical,来看故事的同学请直接忽视。想了解麦教授的”超量子“团队怎么开发金融交易策略的,可以继续。
通常量化交易策略的研究是怎么样展开的呢?一般是准备一些具有预测价值的数据,挖掘潜在的α值,然后基于这些α值训练模型来做预测,之后在训练模型的基础上进行一些多空策略做回测。如果效果不错,就可以用在实际的交易中。
越来越多的金融机器学习模型开始不依赖于回测夏普比率、最大回撤以及其它指标了。
有经验的同学可能已经知道了:回测过程虽然是量化金融里最基础的工作,但是它并不完美。我们在做回测之前,会先分析背后的机器学习模型及其特征重要性。
《Advances in Finance Machine Learning》这本书的作者Marcos Lopez de Prado是康奈尔大学工程学院的客座教授,他在他的书中提到:回测并不是研究工具,特征重要性才是。
这篇文章主要就《Advances in Finance Machine Learning》中提到的一些方法和实验展开,来介绍和理解特征重要性在研究交易策略方面的应用。
为什么不相信回测了呢?
- 策略算法工程师在做研究时,往往把假设陈述为 '基于特征X和模型Y的策略会得到夏普比率Z'。然而,研究是要形成关于金融变量之间因果关系的假设。回测只是验证已确认的假设的商业价值的工具之一。
- 由于经典的回测是在历史数据上进行的,所以我们倾向于解释过去模拟交易的随机模式和相关性(不能解释因果关系)来证明假设。之后,基于这些 '发现',会多次 '修正'模型和策略,这就导致了下一个问题。
- 回测容易出现多重假设测试——越是试图基于单一数据的回测来优化策略,就越有可能深陷错误地发现。因此,'过度拟合'的预测模型很容易在回测中表现良好,但我们绝对不能把钱放在这样的模型上。
在这篇文章中,会介绍有哪些方法可以在不做回测的情况下评估基于几个数据源的交易策略。这不仅仅是一个机器学习从业者的工具,也是一个很有用的框架,用于检验交易或投资组合管理指标之外的策略或假设。
采用特征重要性有哪些显著的优势
除了与研发相关的优势(作为数学假设的校验),还有几个对金融机构来说很方便的优势。在这些场景中,可以应用特征重要性分析来得到想要的效果。
- 在评估新的数据源、市场和替代数据研究时,正确的特征重要性对于识别哪些数据具有真正的预测价值至关重要。
- 在实时交易中,只选择最重要的特征进行交易,可以作为降低机器学习模型性能下降相关风险的方法之一。
- 跟踪特征重要性在时间上的演变,可以比传统的计量经济学模型更好地解释经济因素的动态,这也有利于风险管理和早期趋势预测。
特征重要性
统计学中著名的p值并不是验证特征重要性的完美方法。下面是在研究中可以用到的一些方法:
- 单一特征重要性法(SFI,Single Feature Importance):适用于任何模型,OOS(out-of-sample,样本外)计算,分别分析每个变量,如果一些特征只有共同出现才能体现其重要性时(如A特征只有在B特征存在的情况下才能表现其重要性),可能会有问题。
- 平均不纯度下降法(MDI,Mean Decrease Impureity):IS(in-sample,样本内)计算,专门为树型算法(决策树、随机森林)设计,这个算法速度快,具有可解释性。
- 平均准确度下降法(MDA,Mean Decrease Accuracy):OOS样本外计算,适用于任何模型,最重要的是,它直接比较了将某特征进行无序打乱前后,训练结果的评价指标准确度的下降情况。
另外,还有更高级一点的方法。
- 聚类特征重要性:当两个特征共享信息时,在MDA中打乱数据可能会导致性能降低,因此,采用聚类的方法是有意义的。
- SHAP(SHapley Additive exPlanations):(以一种统一的方法来解释任何机器学习模型的输出。)是一种解释个体预测的方法。SHAP是基于博弈论最优的Shapley值,它在现代机器学习实践中应用非常广泛。
最后,我们希望能够有一种方法来检验发现的重要特征的正确性是否 '充分'。这个可以借助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。首先,用分数阶微积分使时间序列平稳,提取以下特征数据集。
- 5个统计特征:均值、标准差、偏度、峰度、收盘价非整数差分的自相关性。
- 5个交易指标:RSI、OBV、ATR、Hilbert变换周期和相位;
- 5个随机 '特征':正态分布、均匀分布、二项式分布、泊松分布和逻辑分布,这些分布将代表不同来源的非信息特征。
接下来,用三重界限法标签(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)特征都会变化和调整,这里无法应用任何金融知识来获得最大的利益。
可以做的是对XGBoost的超参数进行调整,下面来看看特征重要性分析是否能在这方面起到作用。
「来自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的值,也比在完整数据集上训练出来的模型表现更好。
我们没有参加比赛,不知道它的实战表现如何,但这已经是一个很好的开始了。
结论
我们可以看到,为了形成我们对金融市场的假设或策略并对其进行评估,确实需要机器学习的过程和研究特征重要性。当我们要定义实际的交易和风险管理规则时,回测可以后面再做,但在思考新的变量、新的因子或新的阿尔法来帮助我们战胜市场时,回测在这个阶段并不是一个非常理想的方法和步骤,而特征重要性也许是一个更好的选择。
可以看到,机器学习模型的特征重要性可以帮助我们识别出真正的市场驱动因素,以便以后在这些因素上建立盈利的策略。
然而,市场中的相关性和依赖性总是不断变化的,因此,在获取特征重要性时,不仅要追踪过去的平均特征重要性,还要追踪它是如何随着时间的推移而变化的。
本内容仅代表原作者的分析、推测与判断,所依据信息和资料来源于公开渠道,不保证其准确性、充足性或完整性,相关信息仅供参考,不构成广告、销售要约,或交易任何证券、基金或投资产品的建议。本内容中引用的任何实体、品牌、商品等仅作为研究分析对象使用,不代表投资实例和建议。