时间序列问题上的可解释机器学习的benchmark方法

今天这篇文章介绍一篇机器学习可解释的文章,该篇文章主要提出了一种时间序列问题上的机器学习可解释方法的benchmark。文章链接:

https://arxiv.org/abs/2010.13924

时间序列问题上的可解释机器学习的benchmark方法
虽然目前可解释方法研究不成熟,但本篇文章我个人觉得还是比较有意思的,值得一看。由于本人在可解释机器学习上积累不多,文章读起来有些吃力,文章中对目前一些可解释方法的分析部分比较难理解(很多地方我也是带着猜测理解的),但文章的核心方法很好理解。后文将会介绍本人对这篇文章的理解,可能会与原文内容有所偏差,敬请谅解。

1 机器学习可解释重要性

目前在很多领域中机器学习深度学习已经应用的非常广泛了。但在量化投资、风控等领域,对机器学习的应用一直保持着谨慎的态度,其主要原因还是人无法理解较为复杂的机器学习模型。

我在刚开始研究量化时,对于风控的理解就不深,总以为只要回测表现的很好,就可以上实盘或模拟盘检验你的模型。我自己也试验过几个模型,有一些模型跑了一段时间表现很差,这也让我很困惑为什么回测表现还可以,模拟盘表现的这么差。随着对量化的深入研究,我越来越意识到在上模拟盘之前我们需要去理解你的模型买卖逻辑是怎么样的。这样能够减少检验次数,除此之外一旦出现实盘或者模拟盘表现不好你就会知道这种情况是正常的回撤还是模型已经失效,也能根据对市场的理解调整一个模型。

一个好的可解释机器学习的模型可以帮助你更好的理解你的模型在决策时更关注哪些特征,而你在这理解的过程中也会明白你的模型买卖逻辑,也能根据这个买卖逻辑去优化你的模型。这个买卖逻辑也能增强你对交易的理解,我现在越发觉得想做好量化交易,自己得会交易!

总而言之,对于机器学习的可解释是非常有必要的。

2 一些背景知识

Saliency Methods(可解释机器学习的方法)主要可以分为三类,一类是基于梯度的方法,另一类就是基于扰动的方法,还有一类是主要是以shap计算为主的方法。

1)基于梯度的方法(Gradient-based)

其主要的原理是对输入的特征做梯度。这里举个简单的例子,比如一个线性模型,对x1和x2求导数,显然x1更重要。(这里假设x_1和x_2都服从标准正态分布)。

y=3x1+1x2

这里不详细介绍下图的三种方法,其核心思想大概就是我举的例子,当然肯定没有这么简单(我也没看过具体文章介绍,有兴趣可以搜集相关资料学习)。

时间序列问题上的可解释机器学习的benchmark方法
2)基于扰动的方法(Perturbation-based)

Feature Ablation(FA):其主要是将所有样本的一列特征置换为相同的数值,然后比较置换前后的评价指标变化情况,比如准确率下降的很大,说明特征越重要。

Feature Occlusion (FO):与FA方法相似,也是将所有样本的一列特征置换为相同的数值,只不过这个数值需要替换多次。这多次替换的特征指是该特征域上连续的数值。然后同样是比较替换前后评价指标的变化。

Feature permutation (FP):其主要是将所有样本的一列特征进行打乱,然后再比较打乱前后的评价指标变化情况。

3)其他方法

Shapley Value Sampling (SVS):一种利用多项式时间复杂度估计Shap值的方法。所谓的shap就是一种归因方法,可以把预测的结果归因到每一个特征上。

原始的shap值计算主要用了如下公式:

时间序列问题上的可解释机器学习的benchmark方法
详细的介绍这里不做说明,有兴趣的参考:

https://zhuanlan.zhihu.com/p/85791430

3 问题定义

此篇文章主要介绍的是深度神经网络在时间序列问题上的可解释研究。

时间序列问题上的可解释机器学习的benchmark方法
简要的概括下就是给你一模型和一个含多变量的时间序列样本,你需要输出这个样本不同时刻不同特征上的重要性。

4 现存的Saliency Method在时间序列问题上表现很差

4.1 数据集说明

1)MNIST数据集

该数据集为手写数字集,这里需要将图像数据看成一个时间序列问题的数据,如果一副图像的大小为N1*N2,则N1表示特征维度,N2表示时间维度。所用于分类的模型也都是一些时间序列上面的模型,比如LSTM、transformer等。

2)随机生成的数据集

下图是随机生成时间序列数据经过转换后得到的热图,其生成原理是在每个时刻点每个特征上利用高斯分布随机生成一个数值当做其特征值。中间的红色部分是经过特殊处理的,即在生成之后对中间区域同时加上一个常数。而这个数据集用来训练一个二分类模型,用来辨别随机生成的数据是否经过特殊处理(未经特殊处理的数据,中间部分不会加一个常数)。

时间序列问题上的可解释机器学习的benchmark方法
4.2 一些结果

1)未使用本文的方法

下图中的第一列表示不同的样本。前面三个样本是在随机生成的一些噪音图片,中间标红的部分是在随机噪声生成之后特殊处理的部分(其实就是红色部分的像素值会统一加上一个常数)。后面9列是不同模型在不同Saliency Method下的结果。Grad、IG、DLS为不同的Saliency Method,这里不详细介绍。

时间序列问题上的可解释机器学习的benchmark方法
从上图中可以发现,Saliency Method仅在第二行表现的会比其他行好一些。如果Saliency Method解释的好的话,会将特殊的部位用白色表示,第一行应该横向有一条线,第三行中间应该有个白色正方形,第四行应该会显示3。这个结果也说明大多数Saliency Method更关注在时间维度上的重要性或相关性,而忽略相同时间里不同feature的重要性。

2) 使用了本文的方法

下图为使用本文的处理方法得到的解释结果,可以明显的发现本文提出的benchmark模型解释力度还是有一定提升的。从下图我们也可以发现,不同模型架构对saliency method的结果也是有一定影响的。

时间序列问题上的可解释机器学习的benchmark方法

5 本文提出的benchmark方法

1)算法伪代码

以下算法(Temporal Saliency Rescaling)为本文提出的计算相关性的核心算法。其核心步骤先计算不同时间的重要性,再挑出重要性比较高的一些时间里计算不同feature的重要性,其最终的相关性是时间重要性和特征重要性的乘积。

时间序列问题上的可解释机器学习的benchmark方法

详细伪代码解释就不多说了,还是比较好懂的。当然这个算法有一定的计算复杂度,作者后续还对算法进行了优化,其实也没怎么优化,感兴趣的可以自己看文章。

2)对比的实验结果

下面表中的结果用的都是随机生成的数据集,Middle Box表示特殊处理的数据框在中间保持不变,而Moving Box表示特殊处理的数据框是会移动的。

这个实验指标选取的也比较有意思。在计算precision和recall时是将特殊处理的位置认为是positive,未经特殊处理的部分认为是negative。所以saliency method如果表现的好的话,会在positive部分有较高的Relevance,在negative部分有较低的Relevance。

area under the precision curve (AUP):横轴是阈值,纵轴是precision;曲线下面积越大越好。

the area under the recall curve (AUR):横轴是阈值,纵轴是recall;曲线下面积越大越好。

area under precision and recall (AUPR):横纵轴是precision和reall;曲线下面积越大越好

AUC:表示将saliency method得到的重要的点遮盖住之后二分类的AUC,AUC越小越好,说明遮盖的地方越重要。

时间序列问题上的可解释机器学习的benchmark方法

总结

以上就是改篇文章的一些介绍,有兴趣的朋友可以去看原文。如果经常做一些机器学习策略的朋友,我觉得非常有必要去了解可解释机器学习。如果将训练好的机器学习通过一些可解释方法可视化出来,就能帮助我们加深对市场的理解,加深对交易的理解,构造更好的且不容易过拟合的策略。

对量化、数据挖掘、深度学习感兴趣的可以关注公众号,本人不定期分享有关这些方面的研究。
时间序列问题上的可解释机器学习的benchmark方法
个人知乎:
https://www.zhihu.com/people/e-zhe-shi-wo/activities