前面我们提到了SVM和Random Forest可以用来做特征分类,今天我们来介绍一下SVM。事实上,特征工程可以说是一个非常有技巧性的工作。或者说数据预处理有时候看起来无足轻重,事实上其实是举重若轻的!举个简单的例子,我们如果简单的用OHLCV来做价格预测,你就必须要对原始数据进行归一化,实验证明,归一化和不做归一化,差别还是非常大的,尽管股价预测我们说了不是一个很好的模型。
今天我们来讨论一下如何用SVM来甄别技术指标,如果我们能够从TA-lib的100多个技术指标里筛选出最优的组合,那么可能这套路看起来很promsing。其实我们前面讲过了,重点在于真实世界模型。但在本文里,我们暂且不表。我们纯纯的来讨论一下如何用SVM选出最优特征组合。
假设我们从TA-LIB的feature中取出了MACD、RSI等等100个指标,当然顺便说一句,有一些指标是组合指标,也就是说单一指标意义并不大,比如bolling,要么使用计算后的指标,要么不使用它。现在我们有了100个指标,也许有很多人一开始会说,找出最好的特征不是很容易吗?模型写好了之后,排列组合,将所有的可能性输入到模型去训练,回测收益最好的就是我们想要的答案。这方法也没错对吧,在你知道有100多个指标之前是没错,100个做排列组合基本是天文数字。闲话少絮,我们来看如何正确的进行特征选取。
我们选用100个指标,30天的周期来预测一天的涨跌,那么我们有了30x100的输入。我们使用一个简单SVM模型来进行训练,我们的label用涨跌值。这样我们就构建了一个SVM分类器,这看起来也没有什么不一样,难道就能找到最优的feature吗?当然不是,事实上我们要在前面加上一个极端随机树(Extremely Randomized Tree)。调过参的同学们都知道,random grid其实是最优的超参数搜索方法。极端随机树可以对feature进行评分,并选取部分最优的feature来训练SVM,由于噪声feature被去除,我们将可以得到拟合更好的分类器。由于时间仓促,我会在知识星球的下篇文章里讨论具体如何实现。
当然从我很久之前做的实验来看,即便找出了表现最好的features,它们也并不一定适用于所有的股票,事实上每一只股票选出来的feature都不一样,如果用多只股票数据进行训练,那么得到准确率基本是接近50%的。当然我前面说过了,重点在于真实世界模型。我们的模型需要去理解这个世界的玩法,而不是单纯的几个技术指标。即便你能找出某几只股票的回测结果会让你大发横财,但事实上,泛化的结果仍然不会太好,尤其当你处在一个弱势的市场的时候。
总而言之,我们下一篇文章会继续讨论如何找到最优的技术指标。这个分离特征的文章是应知识星球一位朋友的要求所写,所以接下来会有一个进一步的讨论。