粗糙路径理论 —— 价格序列降维利器
作者:石川,量信投资创始合伙人,清华大学学士、硕士,麻省理工学院博士;精通各种概率模型和统计方法,擅长不确定性随机系统的建模及优化。
1
引言
机器学习中的有监督学习算法时常被用来预测投资品的价格走势。以此为目的建模时,训练集数据的特征(features)选择格外重要。我们希望找到最能捕捉价格走势的特征,但如果特征维数太高又容易造成过拟合以及计算效率的问题。当直接使用投资品的价格信息作为输入时,训练出来的模型效果往往很差,这是因为价格信息的维数太高了。
以日线为例,假如我们想使用过去 n 个交易日的日频 K 线建模,预测下一个交易日的涨跌。由于每个 K 线有 Open、High、Low 和 Close 四个价格,那么这 n 个 K 线的输入维数就是 4n。当 n = 20 时,这个模型的输入维数就高达 80。如果我们采用非线性的有监督学习算法(比如非线性核的支持向量机),那么维数更会呈指数增长。使用如此多的特征建模,样本内很容易出现过拟合,模型在样本外的预测准确性会非常低。在构建这类模型时,对输入特征的有效降维至关重要。
我们熟悉的各种技术指标其实就是降维。技术指标对价格数据高度提炼、降噪,以期捕捉到一些更泛化的信息。基于技术指标的技术分析策略能赚钱说明使用技术指标降维可以在一定程度上捕捉价格运动的内在规律。
今天我们就来介绍另一种捕捉价格走势内在规律的方法 —— 粗糙路径理论(rough path theory)。它的本质是通过计算路径签名(signature of a path)来对路径的信息降维,并使用签名代替路径本身作为机器学习模型的输入特征。本文就来揭开它神秘的面纱。
2
粗糙路径理论和路径签名
粗糙路径理论发展自上世纪 90 年代(Lyons 1998)。顾名思义,它研究的对象是粗糙路径(rough path)。这里,“粗糙”指的是路径虽然连续,但是处处剧烈波动。比如布朗运动产生的路径就是“粗糙的”,它虽然连续但是处处不可微分。投资品的价格走势可谓名副其实的粗糙路径。
在粗糙路径理论中,最核心的概念就是路径签名。这个“签名”就是一个映射函数(mapping),它将原始路径信息转换成一组实数集合。集合中的每一个实数都是通过原始路径中的数据点以不同的方式计算而来,代表着原始路径的某一个几何特征。理论上,一个路径的签名是“无穷维”的。在实际使用中,我们只使用有限个维数的签名(即实数集合中的实数个数有限),这样的签名称为截断签名(truncated signature)。使用截断签名来代替原始高维路径的数据信息便是对其进行降维。
计算粗糙路径的(截断)签名需要用到张量代数(Tensor algebra),十分复杂,本文不加赘述。假设原始路径是 n × N 维的,它的签名是通过将这个路径不断的向其原始的 n 维坐标系上投影得到的。下面以 n = 2 为例说明如何求解一个路径的(截断)签名。假设一个二维粗糙路径如下图所示。
它的 2 阶截断签名 S 是由 7 个实数构成的集合:
这 7 个实数的几何意义总结如下:
其中,S^(1,2) 和 S^(2,1) 表示该路径按特定形式与坐标轴构成的区域的面积,如下图所示。
用一句话总结来说,这个 2 阶截断签名中的 7 个数每个都有明确的几何含义,并且由原始粗糙路径计算而来;这 7 个数构成的签名是对原始路径信息的高度概括。
当我们用签名代替原始路径作为输入特征时,一个必须要搞清楚的前提是:签名和路径是一一对应的吗?路径可以有千千万万,如果不同的路径有相似的签名,那么用签名代替路径的效果就要打折扣了。另外,不要忘了,我们使用的是截断签名中,它更是舍弃了高阶的信息。即便非截断签名和路径一一对应,截断签名又是否能很好的描述原始路径呢?
好消息是,数学上可以证明粗糙路径的签名是唯一的,因此签名很好的反应了原始路径的信息。那么,截断签名怎么样呢?事实上,高阶签名所包含的信息量按照阶数的阶乘衰减(factorial decay)。这意味着高阶签名包含的信息较低阶签名来说可以忽略不计,因此即便是使用低阶的截断签名,我们也可以预期它有效的保留了原始路径的信息。在上面这个例子当中,原始的路径就可以由它的截断签名 {1, 7, 5, 24.5, 19, 16, 12.5} 表示。
3
领先 —— 滞后变形
截断签名是对原始粗糙路径的有效降维。这为我们使用它进行投资品价格数据分析打下了良好的基础。不过在这之前,还需要做一步铺垫。
投资品的价格时间序列对原始“未知路径”按一种特定频率的采样。当使用最高频率采样时,得到的就是 tick 数据;当使用 1 分钟频率采样时,得到的就是 1 分钟 K 线数据;当使用日频采样时,得到的就是日频 K 线数据,以此类推。换句话说,我们的价格数据仅仅是一些列来自未知路径的离散点,它们并不是连续的。粗糙路径虽然处处高波动,但它是连续的。因此,在使用签名分析价格时,必须先将离散的价格时间序列转化为连续的路径。
在这方面,一个常见的方法是领先 —— 滞后变形(lead-lag transformation)。假设 t_0,t_1,…,t_N 为 N 个离散时间点,定义在之上的价格序列为 {t_i, X_(t_i)}, i = 0,1,…,N,该变形的定义如下:
从图形上直观的来说,该变形将原来 N 个价格序列转变为个数为 2N 的新序列。在这个新序列中,每个点由一对儿领先价格(X^Lead)和滞后价格(X^Lag)来表示。在这个新序列中的第 0,2,…,2N 这些序列标号为偶数的点上,X^Lead 和 X^Lag 的取值就是原始序列中的 X_{j/2};在这个新序列中的第 1,3,…,2N - 1 这些序列标号为奇数的点上,第 j(某奇数)个点的 X^Lead 取值等于第 j + 1 个点的 X^Lead 值,而它的 X^Lag 取值等于第 j - 1 个点的 X^Lag 值。如果我们比较这 2N 个点的 X^Lead 和 X^Lag 序列,不难发现 X^Lag 永远比 X^Lead 落后一位;这便解释了为什么它们有“领先”和“滞后”之分。这 2N 个由 {X^Lead, X^Lag} 两两配对儿构成的新序列就是对原始离散价格时间序列的连续化处理,将其转化为一个连续的路径。下图为上证指数在 2016 年 7 月内收盘价的日数据和通过领先 —— 滞后变形产生的连续路径。
为什么要采用如此变化得到路径呢?对于投资品价格这种粗糙路径来说,由于其剧烈的波动,它的二次变分不为零,这个数学上的特性反映着价格变化中非常重要的性质(见《布朗运动、伊藤引理、BS 公式(前篇)》)。因此,我们希望路径签名也能反映原始轨迹非零二次变分的特征。通过领先 —— 滞后变形得到的路径,并计算其签名,就可以很好的捕捉到原始价格序列的二次变分。
好了,现在我们已经万事俱备了:对于一个投资品价格序列,首先应用领先 —— 滞后变形将其转换为连续路径;然后计算截断签名对该路径降维;最后使用该签名作为特征输入到机器学习算法中建模。下面就来看一个简单的应用。
4
应用举例
本节介绍一个使用路径签名分析价格规律的例子。我们的目的并非构建一个策略(坦白说,使用粗糙路径理论构建出能挣钱的策略大概尚需时日),而是为了说明路径签名确实能够反应出价格的某些内在规律。
A 股中有不同的板块,虽然不同的板块在绝大多数时候相关度非常高,但是在某些特定的时期还是存在明显的分化。比如在 2013 年,创业板就走出了独立行情。因此,我们猜测在这个时间内,属于创业板的股票的价格和其他版块的股票的价格就有不同的内在规律。下面就来简单验证看看。
考虑来自上交所和创业板的 336 支股票(其中上交所 220 支,创业板 136 支),使用它们在 2013 年 1 月 1 日到 2014 年 1 月 1 日期间的日数据作为各自的原始价格序列(用各自的最大值进行标准化)。经过领先 —— 滞后变形后得到各自的连续路径,并选择阶数 3 计算路径签名(签名维数为 14)。之后,将这 336 支股票打乱顺序,随机挑选 220 支作为训练集,剩余 136 支作为测试集。
我们希望通过训练集构建一个分类模型。该分类模型使用训练集中股票的路径签名作为输入,以股票的出处(即上交所或创业板)作为标签,挖掘输入和标签之间的关系:
其中 Y_i 是第 i 支股票的标签,X_i 是第 i 支股票的原始价格序列,S(X_i) 是它的路径签名,f 则是我们希望通过机器学习拟合出来的函数。数学上的相关定理(Levin et al. 2016)指出,线性方程就可以很好的满足我们的目标,因此在本例中我们采用线性回归作为机器学习的算法。
使用训练集的 220 支股票建模。之后,使用该模型对测试集中的 136 支股票分类,并将模型分类结果和真实类别比较。该判断该模型在样本外的准确性为 84.56%。让我们从准确率和召回率两方面进一步评价。该模型在测试集上的分类结果如下表所示。
从上面的结果可知,对于猜上交所的预测来说,其准确率为 83.90%,召回率为 91.25%;对于猜创业板的预测来说,其准确率为 85.71%,召回率为 75%。可见,对于这两类股票中,该模型在样本外均有不错的表现。这说明使用路径签名有效的捕捉了不同板块中股票价格的内在运动规律,它作为机器学习算法的输入是合适的。
5
结语
本文介绍了粗糙路径理论及其在分析投资品价格走势方面的应用。对于一个成功的机器学习应用来说,找寻合适的输入特征是最重要的一步。特征的维数不能过高,且需要最大可能的保存原始数据的信息。举例来说,如果我们想建模对人的性别进行分类,我们可以采用任何和人相关的属性,比如身高或者肤色。显然,身高就比肤色更有效,因为男性较女性更高,但每个肤色中的男女比例都差不多。
在当下流行人工智能卷积神经网络中,池化(pooling)就是为了减少特征的维数。在分类领域,有一个著名的概念叫做维数灾难(curse of dimensionality):分类器的性能随着特征个数的变化不断增加,过了某一个值后,性能不升反降(下图,横坐标是维数,纵坐标是分类器的表现)。
对于分析价格序列来说,如何给数据降维自然是重中之重。粗糙路径的截断签名通过有限个具备明确几何意义的实数,有效的捕捉了原始序列的信息、降低了特征的维数,这是它对于后续机器学习建模的最大价值。
参考文献
Levin, D., T. Lyons, and H. Ni (2016). Learning from the past, predicting the statistics for the future, learning an evolving system. Available at: https://arxiv.org/abs/1309.0260
Lyons, T. (1998). Differential equations driven by rough signals. Revista Matemática Iberoamericana, Vol. 14(2), 215 – 310.