收益 368% 的 Logistic Regression 策略示例 ( 附代码)

模型简介

逻辑回归(Logistic Regression)属于常用的机器学习算法之一,可以用来回归,也可以用来分类,主要是二分类。传统的二分类方法如 SVM 选择将两个不同类别的样本给完全分开,思想是找到最能区分它们的那个分类超平面。当你给它一个新的样本,它能够给你的只有一个答案,你这个样本是正类还是负类。而 Logistic Regression 的分类属于“模糊”(fuzzy)分类的范畴,他提供了额外的信息,会告诉你这个样本有百分之多少的概率属于正类,又有百分之多少的概率属于负类。

实际应用中,Logistic Regression 常被用于估计某种事物的可能性。例如,它可以用于广告预测,也就是根据某广告被用户点击的可能性,把最可能被用户点击的广告摆在用户能看到的地方。还有类似的某用户购买某商品的可能性,某病人患有某种疾病的可能性等等。

理论介绍

要了解 Logistic Regression,首先要了解什么是机器学习。比较正统的机器学习算法一般遵循以下几个步骤:

1)对于一个问题,我们用数学语言来描述它,然后建立一个模型,例如回归模型或者分类模型等来描述这个问题;

2)通过最大似然、最大后验概率或者最小化分类误差等等建立模型的代价函数,也就是一个最优化问题。找到最优化问题的解,也就是能拟合我们的数据的最好的模型参数;

3)然后我们需要求解这个代价函数,找到最优解。

具体到 Logistic Regression,其本质就是一个线性分类模型,它与线性回归的不同点在于:试图将线性回归输出的很大范围的数,例如从负无穷到正无穷,压缩到 0 和 1 之间,用以表达“可能性”。而实现这个伟大的功能其实就只需要平凡一举,也就是在输出加一个 logistic 函数(或称 sigmoid 函数):

Sigmoid 函数在有个很漂亮的“S”形,如下图所示(引自维基百科):

所以说,Logistic Regression 其实就是一个被 logistic 方程归一化后的线性回归,仅此而已。
鉴于本文只是简单介绍 Logistic Regression 的理念以及在选股策略中的应用,涉及到更细节的数学过程,例如代价函数的构造,正则项的添加等等,在此就不做赘述了,感兴趣的读者可以自行查找文献学习。

制定策略

应用 Logistic Regression 的选股策略逻辑很简单,即训练 - 预测 - 选股。主要实现工具为 sklearn 库中的 LogisticRegression 类,具体方法如下:

1)首先设定一个交易周期(如一个月);

2)在每个周期第一天,使用上一个周期第一天的因子数据作为训练数据(training data)。对于 training data 的选取,我们采用 10 个因子,包括技术指标、财务指标、基本面数据等,作为数据的特征(feature);采用周期内的收益率与基准收益率(这里我们选用沪深 300 指数作为基准)相比较的结果,作为数据的分类结果(label),即,如果收益率超过基准收益率,label=1;如果收益率低于基准收益率,label=0;

3)

4)训练模型;

5)将每个周期第一天的因子数据作为样本,输入模型进行预测;

6)根据预测结果,选取属于正类——即收益率超过基准的可能性最大的 30 支股票,平均分配资产进行投资。

下面我们云宽客投研平台实现这一策略:

收益曲线


收益归因

小结

Logistic Regression 是用机器学习处理分类问题(Classification Problem)的经典方法,将其应用在选股策略上是一个有趣的尝试。从回测结果上看,策略收益与大盘趋势在长时间内基本贴合,在最后几个波段中取得了不错的超额收益。之所以未能取得可靠且稳健的收益,主要原因可能在于以下几个方面:

1) 本文直接使用模型的默认参数进行训练、预测,模型本身在正则化等参数选择方面可能存有改进空间;

2) 对于数据特征(feature)的选取可以做更深入的挖掘。选取因子过多容易产生过拟合等问题;选取因子过少又容易导致分类准确性不足。如何选取合适的、有效的,与收益相关的因子,一直是一个难题;

3) 因子与收益率之间可能存在非线性关系。作为线性分类模型,Logistic Regression 很难发现数据之间的非线性联系,可能因此导致分类失准;

4) 用历史数据判断未来,本身就有一定的局限性。对股票未来收益率做分类不同于其他应用。分类方法往往在处理截面数据时更加有效,而在处理时间序列数据时有一定的局限性。

关于回测平台、历史数据,可以在这里下载:http://www.yunkuanke.com/#/introduce。
这个平台的数据都是经过清洗的,而且策略不会外露,有保密系统,还是比较安全的。
想学习更多量化策略,也可以来这里看看:http://www.yunkuanke.com/#/lzClass。

Code:http://www.yunkuanke.com/#/content?id=bc3ec18d91cc4efd8500756e3470f024