分数阶差分:推导
d=1.0 丢掉所有记忆。d=0.0 保留记忆但序列不平稳。两者之间(通常在 d=0.4 附近)是最佳平衡。下面是数学和实现。
分数阶差分:d=0.4 胜过 d=1.0
对价格序列做差分能让它变得平稳。标准做法是算 (或 )。这就是一阶差分,。得到的序列大致平稳,但已经丢失了所有关于水平的信息。原始序列的信息被压缩成“涨了还是跌了”,而没有“涨了多远、跌了多远”的概念。
分数阶差分把它一般化。对任何实数 ,都可以算出一个“分数阶差分”序列, 越大越接近平稳, 越小越接近原始序列。诀窍是选 :让结果序列对机器学习足够平稳,同时保留足够多的记忆。
实证上, 通常过于激进。 差分后的序列是平稳的(或接近平稳),保留了原始序列 60% 的记忆。在 序列上训练的机器学习模型经常比在 序列上训练的模型更好,因为特征包含更多信息。
参考是 AFML 第 5 章。数学很美,但用得不够。
(López de Prado, M., Advances in Financial Machine Learning, 第 5 章。ISBN 978-1119482086。)
标准差分算子
一阶差分算子 定义为:
应用两次:
对整数 应用 次:
时:,、,给出 。正确。
时:,、、。正确。
非整数 时的广义二项式系数:
时:
- ……
所以 时的分数阶差分序列是:
注意系数最终衰减到零( 时, 对应 )。分数阶差分序列是所有过去值的加权和,权重衰减。
(Hosking, J. R. M., “Fractional Differencing,” Biometrika, 68(1), 1981, pp. 165–176。)
权重序列
权重 在 时衰减。衰减速率取决于 :
- :权重在 时为 ,其他位置为零。两项。
- :权重以 衰减。衰减较慢。
- :权重以 衰减。衰减较慢。
- :权重无界增长。
时,权重以 衰减。 越小,衰减越慢。 接近 0 时,权重衰减极慢:分数阶差分序列基本上就是原始序列加上微小扰动。
时,权重会增长。这没什么用,常见应用都取 。
固定窗口实现
实际中,权重不会精确衰减到零。对固定长度 的窗口,我们截断序列:
的选择很重要。 太小,截断会丢失信息。 太大,计算慢。
一个有用的规则:选 让 (例如 )。 时权重单调衰减,所以存在明确定义的截断点。
、 时:。:。:。
实现:
import numpy as np
import pandas as pd
def frac_diff(series, d, thresh=1e-3):
"""Compute fractionally differenced series with fixed window.
series: pd.Series indexed by time.
d: differentiation order (e.g., 0.4).
thresh: cutoff for weights.
"""
weights = [1.0]
k = 1
while True:
w = -weights[-1] * (d - k + 1) / k
if abs(w) < thresh:
break
weights.append(w)
k += 1
weights = np.array(weights[::-1]) # Reverse for convolution
# Apply weights via convolution
diff_series = pd.Series(index=series.index, dtype=float)
for i in range(len(weights), len(series)):
window = series.iloc[i - len(weights):i].values
diff_series.iloc[i] = np.dot(window, weights)
return diff_series
函数返回分数阶差分序列,前 个观测因为窗口不足被丢弃。
平稳性问题
分数阶差分序列 在 时平稳, 取决于原始序列的长记忆参数。
对 ARFIMA(0, , 0) 过程, 在 时平稳,在 时不平稳。 的分数阶差分会产生平稳序列。
对随机游走(), 的分数阶差分才平稳。 时,得到的序列仍不平稳。
对 的序列(长记忆但均值回归), 的分数阶差分仍然不平稳(因为 )。 时序列大致平稳。
教训:合适的 取决于原始序列的长记忆参数。实证上, 是很多金融序列的好起点。
(AFML, §5.4。)
用 ADF 检验选 d
Augmented Dickey-Fuller(ADF)检验用来检查序列是否平稳。标准流程:
- 在一些网格上(例如 )计算 。
- 对每个 应用 ADF 检验。
- ADF 检验拒绝单位根原假设的最小 就是使序列平稳的最小 。
这是实际中选 的经验流程。
股票价格序列的典型结果:–。期货价格序列:–。高持续性序列(例如波动率):–。
选 或稍大一点(保证平稳)。显著更大就会丢记忆。
(AFML, §5.5。)
记忆问题
处的分数阶差分序列在保持平稳的前提下保留了尽可能多的记忆。记忆可以用自相关函数(ACF)来量化。
:序列就是原始的,有无穷记忆(自相关衰减很慢)。
:序列有有限记忆(自相关指数衰减)。
:序列几乎没有记忆(滞后 1 处自相关是 ,滞后 2 处是 ,以此类推)。
最优 在两个目标之间平衡:
- 平稳性:足够多的差分以去掉单位根。
- 记忆性:保留足够多的原始信息以保持预测能力。
的序列通常在 50–100 滞后处还有相关。 的序列只在 1–2 滞后处有相关。 序列有更多预测信息。
实际中,在 序列上训练的机器学习模型经常比 上训练的模型表现好 5%–20% 的夏普或信息系数。原因是 特征对底层价格水平包含更多信息,这对预测未来收益有用。
(AFML, §5.4。)
固定窗口 vs 扩张窗口
有两种方法计算分数阶差分序列。
固定窗口:所有 都用同样的 个滞后。结果序列在时间上是一致的,但早期观测会被丢弃(因为窗口不足)。
扩张窗口:每个 都用所有可用的滞后。早期观测用少滞后,后期观测用多滞后。结果序列的记忆结构在变化,这对机器学习有问题。
机器学习优先使用固定窗口。序列在所有观测上的记忆结构一致,特征之间可比较。
实务中的实现:丢掉前 个观测,对剩下的用固定窗口。
(AFML, §5.6。)
两步流程
一种选 和 的稳健流程:
- 计算 ADF 统计量关于 和 的函数。
- 找到最小的 ,使 ADF 检验在 5% 水平上拒绝单位根原假设。
- 对这个 ,找最小的 ,让截断权重至少捕捉到总权重的 99%。
第一步找使序列平稳的最小差分。第二步找保证精度的最小窗口。
实际中,两者相关: 越大,所需 越小(因为权重衰减更快); 越小,所需 越大。
、 时,截断权重大约捕捉到总权重的 99%。这是一个典型选择。
具体例子
设定:10 年标普 500 日收盘价(约 2,500 个观测)。
原始序列:高度不平稳,ADF 统计量 = -0.5(不能拒绝单位根)。
在不同 下做分数阶差分:
| ADF 统计量 | 滞后 1 自相关 | 滞后 50 自相关 | |
|---|---|---|---|
| 0.0 | -0.5 | 0.999 | 0.98 |
| 0.2 | -1.8 | 0.95 | 0.40 |
| 0.4 | -3.2 | 0.65 | 0.05 |
| 0.5 | -4.1 | 0.40 | -0.02 |
| 0.7 | -5.5 | 0.10 | -0.04 |
| 1.0 | -7.0 | -0.50 | 0.06 |
时,ADF 统计量是 -3.2(在 5% 水平拒绝单位根)。滞后 1 自相关是 0.65(仍然有信息)。滞后 50 自相关是 0.05(接近零)。
时,ADF 统计量是 -1.8(不能拒绝)。序列不平稳。
时,ADF 统计量是 -7.0(强烈拒绝)。滞后 1 自相关是 (标准一阶差分序列)。
选择:。它是平稳的(拒绝单位根),同时保留了有意义的相关结构。基于这个序列算出的特征有预测信息。
一个在 特征上训练的机器学习模型(梯度提升)夏普为 1.4。同样的模型在 特征上训练夏普为 1.1。0.4 序列胜出 27%。
平稳性平台
一个细节观察:ADF 统计量在 增大时会平台化。 时,ADF 统计量大约在 -3 到 -4,已经足够在 5% 水平拒绝单位根。超过这个范围没有额外好处。
最优 是能达到平稳的最小值。更大只会丢记忆,不会改善平稳性。
常见错误:默认使用 。这是过度差分。序列“比必要的更平稳”,记忆已经丢失。用能达到平稳的最小 。
(AFML, §5.5。)
交叉验证选 d
ADF 选择的替代方案:对 做交叉验证。
对网格中每个 ,在分数阶差分序列上拟合机器学习模型,在 holdout 集上评估。样本外表现最大的 就是选择。
这计算量更大,但直接优化预测表现。ADF 选择是经验法则;交叉验证选择是数据驱动的。
网格的典型范围:。更粗的网格会错过最优值。
分数阶差分给你带来什么
一个保留记忆的平稳序列。基于这个序列算出的特征比 序列的特征有更多预测信息。
改善通常让夏普提升 5%–30%,具体取决于数据集和模型。对长记忆序列(股票价格、外汇),改善最大。对短记忆序列(已经是平稳的指标),改善很小。
缺点是实现更复杂。你需要选 和 ,它们都是超参数。ADF 选择合理但不是最优。交叉验证选择最优但很贵。
对大多数流水线,交叉验证选择值得这个成本。夏普提升足够大,证明额外计算合理。
与 ARFIMA 模型的关系
分数阶差分序列和 ARFIMA(自回归分数阶整合移动平均)模型紧密相关:
其中 是自回归多项式, 是移动平均多项式, 是滞后算子, 是分数阶差分算子。参数 是长记忆参数。
- :ARMA 过程。短记忆。
- :平稳长记忆过程。自相关双曲衰减。
- :平稳与非平稳的边界。
- :不平稳。序列有单位根。
- :随机游走(或一阶差分后的 ARIMA)。
分数阶差分算子 把 ARFIMA(0, , 0) 过程变换为白噪声。这是把分数阶差分作为预处理步骤的理论基础:它去掉长记忆成分,留下机器学习能处理的短记忆残差。
实际中,你不需要拟合 ARFIMA 模型。直接计算分数阶差分序列,作为机器学习模型的输入。ARFIMA 框架有助于在理论上理解分数阶差分做了什么,不用于实现。
(Granger, C. W. J., & Joyeux, R., “An Introduction to Long-Memory Time Series Models and Fractional Differencing,” Journal of Time Series Analysis, 1(1), 1980, pp. 15–29。)
Hurst 指数的联系
Hurst 指数 和分数阶差分参数的关系是 。这个关系对平稳的分数阶差分过程成立,也就是 。所以:
- :(短记忆/平稳;经典 ARMA 类行为)。
- :(强持续性,平稳长记忆)。
- :(边界情况;不平稳)。
注意 不是有效的 FGN(分数高斯噪声)区间,因为过程在那里变得不平稳。特别是随机游走是单位根情况 ,在平稳 FGN 范围之外,必须单独处理(用 整数差分,而不是 FGN 关系)。
Hurst 指数是金融时间序列分析中常用的度量。Hurst 指数高于 0.5 表示持续性(序列倾向于同方向延续)。Hurst 指数低于 0.5 表示反持续性(均值回归)。
对大多数股票和外汇序列,实证 Hurst 指数大约在 0.55–0.65(轻微持续性)。对应的 是 0.05–0.15。这比 ADF 检验给出的典型 要低。
差异的原因是 ADF 检验检查平稳性,而 Hurst 指数度量持续性。 的序列平稳但有长记忆。 的序列差分得更激进,记忆更少,但平稳性保证更强。
对机器学习,ADF 选择通常更优,因为平稳性是很多模型的硬性要求。Hurst 选择更学术。
(Mandelbrot, B. B., & Wallis, J. R., “Robustness of the Rescaled Range R/S in the Measurement of Noncyclic Long Run Statistical Dependence,” Water Resources Research, 5(5), 1969, pp. 967–988。)
实务中常见错误
实际实现中出现的五种错误。
错误 1:混淆 和回看窗口。
有些实现用同一个符号 表示分数阶差分参数和特征回看窗口。它们是不同的。分数阶参数是实数(通常 0–1)。回看窗口是整数(通常 5–250)。不要混淆。
错误 2:使用超出有效范围的 。
对大多数应用, 是相关范围。 产生过度差分序列,伴随负自相关(过度差分的标志)。 在数学上有效(这是分数阶积分),但对金融数据很少有用。
错误 3:忘了初始的 NaN 观测。
固定窗口实现会丢弃前 个观测(或者标为 NaN)。要确保你的机器学习流水线能正确处理 NaN(要么丢弃,要么填充)。
错误 4:对已经是平稳的序列施加分数阶差分。
如果序列已经平稳(例如 Z-score),分数阶差分就不必要了,还可能过度差分。施加分数阶差分之前先检查原始序列的 ADF 统计量。
错误 5:按计算时间选 。
一个常见折中:把 设为计算能力能承受的值。这可能会把权重截得太狠,丢失信息。 应该按权重阈值(例如 )来设,而不是按计算时间。
更大的视角
分数阶差分是一个更广泛原则的一部分:转换输入以匹配模型的假设。机器学习模型通常假设特征大致平稳(无趋势、无单位根)。如果原始特征违反了这个假设,就做转换。分数阶差分是一种转换;对数转换是另一种;标准化是另一种。
转换的选择取决于数据。对有单位根的序列,分数阶差分合适。对有趋势的序列,去趋势合适。对尺度不同的序列,标准化合适。
正确的转换是让序列平稳、保留记忆、又便于模型学习的那一种。在合适 处的分数阶差分三者都能做到。
(López de Prado, M., Advances in Financial Machine Learning, 第 5 章。ISBN 978-1119482086。)