这里简单记录下我设计的一个算法,它的构思源于我在实际工作上遇到的困难。
简单来说,它在最初设计的时候便考虑了高维小样本量的场景,相比于其余算法它可以实现更精准的因果图学习,它不仅可以提供因果特征,给予模型更准确的效果,同时也能提供更直接的因果解释性,从而方便落地推广。
本次实验采用某标的的六十余个影响因子,并针对标的收益率进行展开分析,在下图以X67作为标记,字段均来自于公开的证券研究报告,数据一共两百个数据点。
下面是这个算法的输出。
输出结果是目标变量X67的周围结构,我们可以看到相应的因果关系。因果图分析得到,算法给出了这样的一个因果结论,X53和X10分别是标的收益率的原因和影响。我们可以简单地认为,这两个因子是对标的收益率具有因果关系的因子。
如果我们认为它是正确的,并使用它们进行建模,将得到非常有趣的现象,其中模型均是默认参数。
model | feature | accuracy | precision | recall | f1_score | auc |
---|---|---|---|---|---|---|
LogisticRegression | 66 | 0.542 | 0.537 | 0.5 | 0.518 | 0.574 |
RandomForestClassifier | 66 | 0.619 | 0.614 | 0.603 | 0.609 | 0.625 |
XGBClassifier | 66 | 0.61 | 0.611 | 0.569 | 0.589 | 0.621 |
LogisticRegression | 11 | 0.644 | 0.633 | 0.655 | 0.644 | 0.684 |
RandomForestClassifier | 11 | 0.585 | 0.569 | 0.638 | 0.602 | 0.619 |
XGBClassifier | 11 | 0.576 | 0.561 | 0.638 | 0.597 | 0.601 |
LogisticRegression | 2 | 0.653 | 0.718 | 0.483 | 0.577 | 0.695 |
RandomForestClassifier | 2 | 0.661 | 0.737 | 0.483 | 0.583 | 0.7 |
XGBClassifier | 2 | 0.653 | 0.718 | 0.483 | 0.577 | 0.691 |
可以看到,只用两个因子的模型效果要好于使用所有因子、也要好于使用经过卡方特征筛选后的模型。这并非巧合,它存在着对应的理论证明。
因为存在着因果图,给了业务人员更多的可操作性。如果觉得因果变量太少,我们也可以对它进行分析,尝试再选取在X67周围的节点纳入特征集。但这不是随便地尝试都可以具有提升,需要一些相关的专业知识才行。
比如我们单纯增加X67的影响节点X11和X5,效果则可能会变得更差。
model | feature | accuracy | precision | recall | f1_score | auc |
---|---|---|---|---|---|---|
LogisticRegression | 4 | 0.653 | 0.689 | 0.534 | 0.602 | 0.702 |
RandomForestClassifier | 4 | 0.636 | 0.642 | 0.586 | 0.613 | 0.687 |
XGBClassifier | 4 | 0.627 | 0.63 | 0.586 | 0.607 | 0.669 |
好了,这个算法就简单记录到这里了。
感兴趣可以到公众号发送【加群】,一起讨论吧。