Machine Learning in Finance
机器学习在量化投资策略中的应用
机器学习为投资策略带来了全新的数据处理方式,广泛应用于发掘大容量数据的非线性模式,分析非结构化数据,分析数据的分层结构,预测市场走势等等。同时,面对机器学习算法的过度拟合等缺陷,机器学习发展了众多的算法包括early-stopping, cross-validation, ensemble modeling等等来解决过度拟合的问题。
作为一个简单的机器学习的应用实例,我们以著名的泰坦尼克为例子详细讲解机器学习模型的建立过程,并附有python代码:(http://ainumeric.com/ml_training/course/machinelearning.php)
在这个例子中,机器学习算法发掘旅客特征值(性别,年龄,仓位,等等)和生存率之间的关系,并建立特征值的层次关系。比如,性别对生存率有极大影响,女性的生存率远高于男性。其次,仓位和年龄也有影响。
以下介绍机器学习在量化策略中的主要应用领域。
1. 价格预测
传统的数学模型,包括精确描述变量之间关系的数学公式,难以描述大容量金融数据中的非线性关系,层次关系,变量间的相互依赖和影响,也难以处理非结构化数据例如语音信息,文本信息,图像信息等。
使用机器学习模型预测股市价格可能是机器学习在交易策略中最早的应用,使用的模型从Support Vector Machines, XGBoost,到近年的Long-short Term Model(LSTM)。使用的数据从传统的股市行情数据延伸到另类数据比如新闻舆情数据,宏观经济指标等等。
另一方面,价格预测始终面临巨大挑战,许多模型在样本外的性能远远不如样本内,而金融数据本身具有non-stationary的特性。提高模型性能的方法除了尝试不同的模型以外,还有通过交叉验证降低过度拟合的可能性,和改善回测方法。
2. 投资组合
传统的投资组合策略基于mean-variance 优化,其明显的缺陷是对变量敏感,样本外表现差,要求投资产品的covariance matrix是可逆的,而在实际应用中covariance matrix往往是接近不可逆的。
机器学习的一个应用是根据covariance matrix将资产聚类,即类似的资产归为一类,进而建立所有资产的分层结构,决定每一个资产的权重。这种方法不要求 covariance matrix是可逆的,实测的结果,样本外收益远高于传统的优化算法。Marcos Lopez De Prado 基于这个算法提出了HRP(Hierarchical Risk Parity)算法。
机器学习的另一个应用是在线资产分配,及时使用当前的最新数据,并且以序列化的方式选择最优的投资组合。这是机器学习在投资组合中的自然的应用,通常称为在线投资组合(online portfolio selection)。(http://ainumeric.com/RoboAdvisor/index_ml.php)
3. 离群值检测
许多模型的结果对离群值是敏感的,例如众所周知的线性回归模型,数据的微小偏差会被模型结果放大。另外,在广泛使用的因子选股中,根据股票池中股票的因子排序来进行选股。此时,离群值的出现会对排序造常影响,甚至原本应该做多的股票被错误标记为做空。一般估计,因子选股中5%的误差会造常34%的归类错误(即做多或者做空的归类)。
解决离群值对模型影响的一个算法是RANSAC(random sample consensus)。RANSAC算法随机选取样本子集,对样本子集建立模型,并将所有点划分为inlier, outlier,并计算模型的分数。此时模型的分数和支持这个模型的样本点数有关,符合模型的点是inlier,否则就是outlier。重复以上步骤,最后选择分数最高的模型作为最佳模型。
4. 特征值筛选
在金融模型的典型应用中,人们收集数据,建立传统统计模型或者机器学习模型,然后大量运行回测系统直到找到最优的参数。我们知道回测工具不是一个研究工具,使用同样的数据重复运行回测工具很容易造成模型的过度拟合,其中被人们忽视的一个问题是特征值的重要性分析。
对特征值的研究有利于人们分析每个特征值对模型性能的贡献,在特征值工程(feature engineering)中增加重要的特征值,剔除产生噪音的特征值,并且通过对特征值的分析,使得原本被看作黑盒子的机器学习模型变得透明化。
根据对特征值之间的共线性(collinearity)的处理方式,研究特征值重要性的算法可以分为两类:
4.1. MDI(mean decrease impurity), MDA(mean decrease accuracy)。其中,MDI是对样本内数据进行研究,建立一个树形结构。在每一个结点,特征值将数据分成子树,从而对每棵子树,我们可以计算每个特征值降低子树的impurity的度量。最终,将所有特征值按照impurity的度量进行排序。MDA是对样本外数据进行分析,根据样本外数据的统计性能(比如loss function),每次对一个特征值进行排列组合,并重新计算样本外数据的性能。特征值最后的重要性和排列组合后的性能相关。
4.2. SFI(single feature importance)。以上的方法将不重要的特征值从特征值集合中删除。有时候我们需要保留冗余的但是重要的特征值做深入分析。SFI算法计算每个特征值得样本外性能。
除此以外,类似Lasso Regression的方法可以用来对所有的特征值做回归,根据返回的系数(通常是稀疏的)来对特征值做选择。所有这些方法都是在系统的回测之前完成的。
5. 处理非结构化数据
非结构化数据,例如文本,视频,音频,图像等通常没有统一的格式,包含了丰富的传统数据没有的信息。一个典型的例子是股票的舆情信息。来源于新闻,媒体,分析师等的舆情信息通过汇总和分析,可以被量化成不同频率的舆情指标(sentiment index)。通过和传统的行情数据结合,舆情指标可以作为预测股票行情的一类特征值。同时,舆情信息本身可以被分类成正向和反向的信息。
6. 交易策略筛选
在对一族策略进行回测并选择其中最优策略的时候,通常的做法是对一系列策略进行历史回测,然后使用统计方法例如策略Sharpe Ratio的null hypothesis,通过观察p-value来选择策略,目的是选择Sharpe Ratio大于零的策略。这样的做法常导致错误的选择,原因是p-value控制的是FPR(False Positive Rate),而真正应该控制的是FDR(False Discovery Rate)。
以二类分类算法为例,回顾一下结果检测的度量:TP(True Positive),FP(False Positive),TN(True Negative),FN(False Negative)。其中,FPR=FP/(FP+TN),FDR=FP/(FP+TP)。
通过控制FDR来选择最优的策略的算法,参考Benjamini-Hochberg。
除了通过控制FDR来选择最优的策略,常用的方法有FWER(Familywise Error Rate),定义为得到至少一个false positive的 概率。使用FWER的算法参考以下作者:Bonferroni,Sidak, Holm, Hochberg。