沪深300指数的特征工程和聚类分析-以WorldQuant Formulaic 101 Alphas为例

The algorithms we used are very standard for Kagglers. […] We spent most of our efforts in feature engineering. […] We were also very careful to discard features likely to expose us to the risk of over-fitting our model.

— Xavier Conort, “Q&A with Xavier Conort”

“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering.”

—Andrew Ng, Machine Learning and AI via Brain simulations

研究概述

在机器学习应用中,选择数据的特征维度对于分析结果的优劣至关重要。本文利用米筐科技(RiceQuant)策略研究平台提供的数据,基于《WorldQuant Formulaic 101 Alphas》研究报告中给出的基础变量和变量变换规则,构建了五个新的特征维度对沪深300 指数的收益率进行建模分析。我们提出第 t-1 个交易日的特征和第 t 个交易日的收益率的相关系数,可以作为新特征维度的筛选依据。对K-平均聚类分析的结果进行收益率的均值和历史波动率的估计,证明得到的聚类明显对应不同的收益率分布。依据聚类的结果,我们提出了一个基准择时投资策略,并对其累积收益率曲线进行了分析。研究的详细的代码实现请参看 RiceQuant社区

背景介绍

1.1 特征工程 (feature engineering)

在日常的数据分析中,我们会把数据整理成(观测值,特征维度)的两维数据列表的形式。例如,对于一个人数为50的班级,我们可以从 1 到 50 对学生进行编号,并选定姓名,性别,身高,体重,成绩 5 个维度作为分析的特征维度。此时我们的得到的就是一个 50 乘 5 的数据列表(dataframe)。

在一些问题的分析上,对原特征维度进行变换所产生的新特征维度,会增强模型的解释力(explanatory power)。例如,如果我们感兴趣的问题是以上班级学生的健康状况,我们可以通过身高和体重计算学生的的BMI(body mass index)值:

BMI = \frac{w}{h^2}

其中 w 为体重(千克),h 为身高(米)。通常认为 BMI 在18.5~25之间为合理体重。在这里,BMI 值就是对身高和体重两个维度的组合变换。这种对原特征维度进行变换,来寻找新特征维度的做法,在机器学习中称为特征工程(feature engineering)。知名的国际数据挖掘比赛 Kaggle 的首席数据科学家 Xavier Conort 在采访中谈及他的数据分析经验是提到:“Kaggle上参加数据挖掘的人使用的都是一些标准化的模型,…,我们大部分的时间都花在问题的特征工程上。我们对于舍去特征尤为谨慎,以避免我们的模型出现过拟合的问题。”而斯坦福大学教授,Coursera 上著名的机器学习课程主讲老师 Andrew Ng 的表述则更为言简意赅:“基本上,所谓应用机器学习应用,就是进行特征工程。”

当我们在模型中加入新的特征维度以后,如何判断新模型的解释力?在一些问题中,我们可以对模型的解释力建立量化的判断标准。例如,在网页检索和文本分类问题中,我们可以通过TD-IDF(term frequency-inverse document frequency)值来判断特定关键词对于区分网页或文章主题的能力;在简单线性回归中,依据残差服从正态分布的先验假设,我们通常使用赤池信息准则(Akaike information criterion, AIC)或贝叶斯信息准则(Bayesian information criterion, BIC)来判断自变量对于回归模型的重要性;而如果所需解决的是分类问题,我们可以通过分类结果的准确率(或误差率)的改善程度来判断新加入的特征维度的重要性。另一类通用的方法是,依据数据和问题的特征,我们可以选择合适的数据降维技术,例如主成分分析法(principal component analysis, PCA),线性判别分析( linear discriminant analysis, LDA)或稀疏表示(sparse representation)来进行数据特征维度筛选。

在这里,基于我们希望能够区分下一个交易日不同的收益率情况的目标,我们提出一个筛选新特征维度的依据:如果第 t-1 个交易日的特征和第 t 个交易日的收益率的相关系数的绝对值越大,则该特征在对于区分不同收益率的重要性越高。在下来的聚类分析中,我们将会验证这个依据的合理性。

 

2.2 WorldQuant LLC 101 Formulaic Alphas

在量化交易中,一类常见的主动投资策略称为阿尔法策略(alpha trading strategies)。这类策略的目标是获得市场基准组合 (benchmark portfolio) 收益以外的超额收益。在回归分析中,如果我们根据特定的阿尔法策略选定一个投资组合的收益率为R_{s},当对市场基准组合收益率R_{b} 进行回归得到以下的回归方程:

R_{s} = \beta _{s}\cdot R_{b} + \theta _{s}

其中系数 \beta _{b} 衡量的是 R_{s} 和市场基准组合的收益率R_{s} 相关的部分,而 \theta _{s} 则衡量 R_{s} 中与市场基准组合无关的部分。此时,我们选定的投资组合的阿尔法值(\alpha _{s})可定义为 \theta _{s} 的期望:

\alpha _{s} = E[\theta _{S} ]

在一篇研究报告中,以数据挖掘能力而闻名业界的对冲基金 WorldQuant LLC 给出了他们的101个阿尔法的数学表达式。这些阿尔法是基于一系列的基本变量、衍生变量和变换方法构建的。以下是一些本文中将会使用的变量和变换方法:

基本变量:开盘价(open),收盘价(close),日内最高价(high),日内最低价(low),交易量(volume

衍生变量:adv(d)average daily dollar volume for the past d days.

变换方法:

abs(x):absolute of x.

sum(x, d): time-serial sum over the past d days.

correlation(x, y, d): time-serial correlation of x and y for the past d days.

scale(x, a): rescaled x such that sum(abs(x)) = a (the default is a = 1).

Delta(x, a):today’s value of x minus the values of x d days ago.

signedpower(x, a): x^a

x ? y : z :if x is true, executes y; otherwise executes z.

WorldQuant LLC 给出的的这101个阿尔法的表达式在实盘交易中曾被证明行之有效。因此,我们假设通过这些表达式构建新的特征维度,将有较大的可能反映一定的市场特征。在下面的特征工程和聚类分析中,我们采用报告中给出的五个阿尔法表达式(alpha#6, alpha#23, alpha#28, alpha#54 和 alpha#101)来构建新的特征维度,对2005年1月1日至2015年12月31日这11年间共2671个交易日的沪深300指数进行建模。

应该注意的是,我们采用这些阿尔法表达式生成沪深300指数的特征维度,它们不再具有阿尔法原来的涵义。我们的分析对象始终是沪深300指数,因此不存在根据阿尔法的取值挑选股票投资组合,或决定资产头寸的问题。

 

2.3 K-平均聚类分析(K-means cluster analysis

聚类分析是机器学习中一类无监督学习(unsupervised learning)方法,能够对没有标注的数据进行建模和分析。其核心思想是在特征维度张成的向量空间中,计算观测值之间的距离。距离较近的观测值认为属于同一个聚类(cluster),距离较远的观测值则认为属于不同的聚类。K-平均聚类分析(K-means cluster analysis)是一种常用的聚类分析方法,对于给定的距离度量(例如欧几里得距离,或曼哈顿距离)和聚类个数(K值),K-平均聚类分析通过迭代把观测值划分为不同的聚类。

我们同样可以使用对上述班级学生的例子理解聚类分析。从生活经验来说,和女生相比,男生的身高和体重一般较大。如果以身高和体重作为特征维度,计算观测值之间的距离,把50个学生划分为两个聚类,那么如果其中一个聚类对应较大的升高和体重,其中包含的学生为男生的比例较高;反之为女生的比例较高。

在模型训练中,K-平均聚类分析的迭代算法属于最大期望算法(Expectation Maximization, EM)中的一种。它以聚类内部距离的平方和最小为目标函数(objective function),通过迭代计算目标函数和聚类中心(centroid)来寻找目标函数的极小值。K-平均聚类分析的主要缺点在于,对于非凸的聚类,它无法保证迭代计算收敛到全局最小值,此时计算结果依赖于聚类中心的初始选择。下图为维基百科提供的两个聚类分析示意图:


1维基百科提供的聚类分析示意图:(a) 20个聚类的聚类分析结果;(b) 35个聚类的聚类分析结果

 

建模流程,结果和分析

根据以上概述部分中提及的变量和变换规则,接下来我们对采用的5个阿尔法表达式所构建的特征维度进行简单讨论,并计算这些特征维度与收益率之间的相关系数。依据构建的特征维度,我们进一步对收益率进行K-平均聚类分析。这里使用的收盘-收盘收益率 R_{c} (close-to-close return rate))为对数收益率:

R_{c} = ln\frac{S_{t} }{S_{t-1}}

S_{t} 为第t个交易日的收盘价,S_{t-1} 则为第t-1个交易日的收盘价。

 

2.1 alpha#6

alpha#6 的数学表达式如下:

-1\cdot correlation(open, volume, 10))

在《101 Formulaic Alphas》研究报告中,他们认为 alphas 可以分为三类:趋势跟随型(trend-following),均值回归型(mean-reverting)和混合型(trend-following and mean-reverting mixed)。按照这个分类标准,alpha#6 是一个混合型的阿尔法。例如,如果过去十天量价齐升(相关系数为正),此时alpha为负,属于均值回归型 alpha;如果过去十天量价齐跌(相关系数仍为正),此时 alpha 为负,属于趋势跟随型。

 

2.2 alpha#23

alpha#23 的数学表达式如下:

(((sum(high, 20)/20 < high) ? (-1\cdot delta(high, 2)):0)

alpha#23的意义可表述如下:如果今天的日内最高价高于过去20天的平均日内最高价,则alpha#23为2日前最高价和今日最高价的差值;否则alpha#23为0。

alpha#23为混合型alpha。今天的日内最高价高于过去20天的平均日内最高价是一种上涨趋势,而alpha#23是趋势跟随型还是均值回归型,则取决于2日前最高价和今日最高价的差值。如果差值为正,则为趋势跟随型,否则为均值回归型。

 

2.3 alpha#28

alpha#28的数学表达式如下:

scale((correlation(adv20, low, 5) + ((high + low)/2) - close))

alpha#28是一个趋势跟随型的alpha。由于相关系数的取值范围为[-1, 1],因此alpha#28的取值主要取决于((high + low)/2) - close))部分,当日内最高价和最低价的均值高于收盘价时,alpha#28为正;否则为负。

 

2.4 alpha#54

alpha#54的数学表达式如下:

((-1\cdot ((low - close)\cdot (open^5)))/((low-high)\cdot (close^5)))

alpha#54是一个趋势跟随型的alpha。open^5 和 close^5 恒为正值,而(low-close)(low-high) 恒为负值,因此alpha#54恒为负值。alpha#54的取值大小则主要决定于open^5 和 close^5 ,当开盘价远高于于收盘价时(下跌趋势),alpha#54为一个很大的负数;否则alpha#54为一个较小的负数。

 

2.5 alpha#101

alpha#101的数学表达式如下:

((close-open)/((high-low)+0.001))

alpha#101是一个趋势跟随型的alpha。(high-low) 恒为正值,当收盘价高于开盘价时(上涨趋势),alpha#101为正;否则alpha#101为负。

 

2.6 相关系数计算

至此,我们共有6个基本特征维度(open, close, high, low, volume, turnover),一个衍生特征维度(adv(20))和5个基于阿尔法的特征维度(alpha#6, alpha#23, alpha#28, alpha#54 alpha#101)。在聚类分析的例子里面,当我们希望两个聚类对应不同的性别时,我们根据生活经验,知道身高和体重两个特征维度和性别有明显的相关性,因此对特征维度进行了人工筛选。但是在预测下一个交易日的收益率的问题上,哪一个特征维度与之存在相关性并不明显。因此,这里我们通过计算第 t-1 交易日的这些特征和第 t 个交易日的收益率的相关系数来实现特征筛选:

correlation[ features(t-1), R_{c}(t) ]

得到表1:

以相关系数的绝对值大于 0.03 作为标准,可以看出,开盘价,收盘价,最高价,最低价 alpha#23 和 alpha#101 和下一个交易日的 R_{c} 呈现出较强的相关性。

2.7 K-平均聚类分析

我们对 2647 个交易日(为了保证时间戳对齐,前23个交易日的收益率舍去)进行K-平均聚类分析,我们选择聚类个数为 2(K=2),距离度量为欧几里得距离,经测试 500 次迭代可保证结果收敛。在这里,我们通过聚类对应的R_{c} 分布来判断聚类分析的效果。具体的标准是:同一个聚类对应的R_{c} 分布标准差越小越好,而不同聚类对应的 R_{c} 分布之间的均值差值越大越好。这意味着两个聚类对应明显不同的 R_{c} 分布。另外需要注意的是,这里 R_{c} 的均值对应日收益率的均值,而 R_{c} 的标准差则可作为收益率的历史波动率估计。

首先使用所有的特征维度对下一个交易日的 R_{c}进行聚类分析,得到表2:

接着根据以上相关系数计算结果,选择和收益率相关系数较大的特征维度(开盘价,收盘价,最高价,最低价,alpha#23 和 alpha#101)进行聚类分析,得到表3:

对比表2和表3,依据相关系数进行特征维度筛选后,聚类1和聚类2对应的 R_{c} 之间的均值差值增加,而聚类内的 R_{c} 标准差减少,说明通过相关系数进行特征维度的筛选能有效提高了不同聚类的区分度。

按照表 3 所示,在不考虑交易费用的前提下,聚类1的平均日收益率比这 11 年间的沪深300日交易率均值较高,而且波动率较低。据此,我们可以提出一个基准择时交易策略(benchmark timing strategy)。基准择时交易策略是阿尔法策略以外,另一类常用的主动投资策略。它是指逐个时期选择合适的主动贝塔(即概述中收益率回归方程的 \beta _{b} 系数)获得超额收益的投资策略。

在《101 Formulaic Alphas》报告中,阿尔法策略分为“delay-0”和“delay-d”:“delay-0”是在alpha信号生成的交易日内进行交易;而“delay-d”是在alpha信号生成后的 d 个交易日后进行交易。依据这种策略分类方法,和上面的聚类结果,我们可以构建一个“delay-0”的基准择时策略:当我们使用今日的交易日数据(计算中所需的收盘价用足够接近收市时的价格近似)分别计算和聚类 1 和聚类 2 的距离,如果和聚类 1 的距离较近,就在当日收盘时买入;如果和聚类 2 距离较近,则卖出,或不进行交易。

为了进一步观察两个聚类的特征,假设不存在交易费用的前提下,我们按照样本内预测(in-sample forecast)的方式执行上述择时策略并计算其累积收益率曲线(图2)。累积收益率的计算公式如下:

R_{t+n} = ln \frac{S_{t+n}}{S_{1}} = ln \frac{S_{2}}{S_{1}} + ln \frac{S_{3}}{S_{2}} + ... + ln \frac{S_{t+n}}{S_{t+n-1}}

S_{1}, S_{2}, ... , S_{t+n} 为按照指定的策略进行交易的交易日收盘价。按照下图所示的收益率曲线,聚类 1 包含的交易日大致上对应大幅上涨和小幅震荡的行情;而聚类 2 包含的交易日则大致上对应大幅涨跌的行情,这也和上述两个聚类对应的日收益率均值和历史波动率估计相吻合。


2累积收益率曲线计算:(a)沪深300指数;(b) 在聚类1包含的交易日进行交易;(c) 在聚类2包含的交易日进行交易

 

总结和讨论

在对复杂多变的证券市场进行特征工程时,特征维度的构建有赖于对数据和问题的深刻理解,以及经验,直觉和持之以恒的尝试。在这里我们依据 WorldQuant LLC 提供的基本变量和变化规则,选取其中五个阿尔法表达式,对特征维度的构建和分析进行了简单的尝试。通过相关系数的计算对特征维度进行筛选,和K-均值聚类分析结果的讨论,证明了通过对原特征维度进行变换,并依据第 t-1 个交易日的特征和第 t 个交易日的收益率的相关系数进行特征筛选,能够获得更有解释力的模型。

在K-均值聚类分析中,我们需要自行决定的参数只有距离度量和 K 的个数(迭代次数可通过收敛性判断)。因此,在数据量有限的约束下,相比支持向量机或神经网络等需要进行大量参数估计的复杂模型,K-均值聚类分析能够有效降低过拟合的风险。其次,K-均值聚类分析是一种无监督学习算法,因此特别适用于金融量化分析中没有,或无法对数据进行标注的建模问题。在这里我们简单地选定了欧几里得距离作为距离度量,而K值设置为 2 而对聚类分析的结果进行了初步的探讨,而对这两个参数进行详细的测试和分析,有可能进一步优化聚类分析的结果。

发表评论

邮箱地址不会被公开。 必填项已用*标注