微观结构熵特征:用信息论度量价格序列的可预测性
「这段行情有多可预测」不必是玄学:把收益二值化成涨跌符号串估计香农熵率——熵=1 bit/符号意味着彻底随机(任何模型命中率上限 50%),熵越低结构越多。受控实验三种机制对照:iid 块熵 0.9996、动量(延续概率 0.75)0.884、均值回复 0.880——熵对「有没有记忆」敏感、对方向色盲,一个特征覆盖两类可交易结构。延续概率 0.5→0.92 扫描给出单调曲线:熵与最优命中率一一对应,是模型无关的可预测性上界。300 符号滚动熵能把动量段与均值回复段从 iid 背景中挖出。两个深坑:块长过大+样本不足时纯随机也能测出 0.7 的假低熵,必须 2^w≪n;所有熵估计器绝对值均有偏差,只能同参数相对比较。AFML 定位:不做择时开关,做元标注二级模型的环境特征(高阶)
一句话版本#
「这段行情有多可预测」不必是玄学。把收益序列压成涨跌符号串,估计它的香农熵率:熵 = 1 bit/符号意味着彻底随机——任何模型、任何算力,方向命中率的数学上限就是 50%;熵每低一分,就说明序列里多一分可以被模型捕捉的结构。熵是模型无关的可预测性上界度量。
为什么要度量「可预测性」本身#
量化研究的常规流程是:造特征 → 训模型 → 看样本外命中率。这个流程有一个隐藏的逻辑漏洞:当模型样本外表现差时,你分不清是模型不行还是这段数据本来就没东西可学。
这两种失败模式的处方完全相反。模型不行 → 换模型、加特征;数据没结构 → 换标的、换频率、换采样方式,在这段数据上继续堆模型是纯粹的浪费(以及过拟合温床)。
信息论提供了一个分流器。对一个平稳随机过程,香农熵率度量「已知全部历史后,下一个符号还剩多少不确定性」。关键性质:熵率给出了任何预测器错误率的下界(Fano 不等式)。熵率 1 bit/符号的二值序列,全知全能的预测器命中率也只有 50%——这不是工程限制,是数学定理。
所以在堆模型之前先测熵:如果这段数据的符号熵接近 1,省下 GPU 钱;如果显著低于 1,那么值得追问结构在哪。
从收益到符号:为什么要二值化#
直接对连续收益估熵需要估计概率密度,样本效率极低且对分箱方式敏感。AFML(《Advances in Financial Machine Learning》第 18 章)的做法是先离散化——最简版本是二值化:
import numpy as np
def to_signs(returns):
"""收益 -> 涨跌符号串(1=涨, 0=跌),零收益剔除或并入前值"""
r = np.asarray(returns)
r = r[r != 0]
return (r > 0).astype(int)python二值化扔掉了幅度信息,只保留方向序列的时序结构。这是刻意的:方向可预测性正是大多数中低频策略的盈利来源,而幅度动态(波动聚集)我们已经有 GARCH 家族去建模。让熵特征专注回答一个窄问题:涨跌方向的排列有没有模式。
熵估计器用两个,互为交叉验证:
插入式(plug-in)块熵:数长度为 的所有滑动窗口词频,代入香农公式,除以 归一到每符号比特:
def plugin_entropy(bits, w=3):
n = len(bits) - w + 1
words = {}
for i in range(n):
key = tuple(bits[i:i+w])
words[key] = words.get(key, 0) + 1
p = np.array(list(words.values())) / n
return -np.sum(p * np.log2(p)) / wpythonKontoyiannis LZ 估计器:基于 Lempel-Ziv 压缩思想——在历史中找当前位置往后的最长可匹配前缀,匹配长度越长说明序列越可压缩、熵越低。它能捕捉插入式方法看不到的长程结构,代价是收敛更慢。
实验一:同波动率,不同熵#
构造三条 4000 符号的序列,符号波动率完全相同,只有时序结构不同:
- iid 随机游走:每步独立抛硬币
- 动量机制:以 0.75 概率延续上一步方向
- 均值回复机制:以 0.75 概率翻转上一步方向

左图是三条路径——动量机制走出大开大合的趋势,均值回复挤成一条锯齿,随机游走居中。右图是熵读数:
| 机制 | 插入式块熵 (w=3) | 理论熵率 |
|---|---|---|
| iid 随机游走 | 0.9996 | 1.0 |
| 动量(延续概率 0.75) | 0.884 | 0.811 |
| 均值回复(翻转概率 0.75) | 0.880 | 0.811 |
三个读数:
- iid 序列的熵几乎精确等于 1。这是估计器的 sanity check——对无结构序列不产生假信号。
- 动量和均值回复的熵几乎一样低。两种机制都是一阶马尔可夫链、参数对称,理论熵率同为 0.811。熵探测器对「有没有记忆」敏感,对「记忆的方向」色盲。这既是局限(它不告诉你该做趋势还是做反转)也是优势——一个特征同时覆盖两类可交易结构,方向判断留给下游模型。
- 块熵读数 0.884 高于理论值 0.811。因为 w=3 的块熵只捕捉三符号窗口内的结构,是真熵率的上界;LZ 估计器(0.73 vs iid 的 0.88)能看到更长程的可压缩性,相对排序一致。
实验二:熵与命中率的一一对应#
上面只有三个点。把动量机制的延续概率从 0.5 扫到 0.92,每个参数下同时计算块熵和最优单步预测器(预测方向延续)的命中率:

一条干净的单调曲线:熵 1.0 对应命中率 0.5,熵 0.594 对应命中率 0.923。没有例外点,没有平台区。
这张图是熵特征的价值主张:不训练任何模型,你就知道这段数据上模型性能的天花板在哪。如果实测熵 0.98 而你的模型报告 58% 样本外命中率——不要高兴,先查泄漏,因为熵说这段数据撑不起这个数字。熵特征反过来做模型审计,比做信号本身更锋利。
实验三:滚动熵监测机制切换#
真实市场不会好心地保持单一机制。构造一条 5000 符号的切换序列:iid → 动量段(1500-2400)→ iid → 均值回复段(3600-4300)→ iid,用 300 符号滚动窗口跟踪块熵:

滚动熵把两个有记忆段都从背景里挖了出来:iid 背景段均值 0.995,动量段掉到 0.890,均值回复段 0.910。两类结构段的熵谷清晰可辨,且结构消失后熵迅速回到 1 附近——这个特征天然自带「结构已死」的退出信号。
注意两个诚实细节:熵谷相对背景的深度只有 0.1 bit 左右,检测需要窗口积累(300 符号),机制切换后有约窗口长度一半的滞后;窗口内混入两种机制时读数是稀释的加权平均。滚动熵是慢变量,适合做环境特征,不适合做逐 bar 触发器。
两个会让熵特征变成毒药的工程坑#
坑一:块长过大 + 样本不足 = 系统性假信号。 插入式估计量在有限样本下有向下的偏差:当 接近样本量 时,大多数词只出现一两次,词频分布被人为压平之后熵反而被低估。实验:对纯 iid 序列(真熵率 = 1)扫描块长和样本量:

n=300 时用 w=8,纯随机序列测出 0.7 的「低熵」——这个假信号的幅度比实验三里真实结构的信号(0.89)还强。用错参数,熵特征会让你在纯噪声里「发现」可预测性,这是所有下游过拟合的完美起点。经验法则:,日频数据 300 日窗口下 w 不要超过 4;同时永远跑一个 iid 基准对照,确认当前参数下随机序列的熵读数确实贴近 1。
坑二:绝对值不可信,只能做相对比较。 LZ 估计器对 iid 序列只测得 0.88 而非 1——有限样本偏差是所有熵估计器的通病,且偏差大小依赖序列长度和估计器细节。正确用法是同参数、同窗口下的横向与纵向比较:今天的熵 vs 过去一年的熵分位数、标的 A vs 标的 B。拿绝对读数对照理论阈值做判断(「熵 < 0.9 就开仓」)是把估计偏差当成了信号。
AFML 定位:环境特征,不是择时开关#
熵特征在 AFML 体系里的标准用法与 BSADF 一致:不做独立的择时开关,做元标注二级模型的环境特征。逻辑链条:
- 一级模型(趋势、反转、任何 alpha 逻辑)产生方向信号
- 二级模型决定「这个信号值不值得下注、下多大」
- 熵特征回答的正是二级模型的核心问题:当前环境里到底有没有可预测结构——低熵时段,一级模型的信号背后更可能有真实结构支撑;熵贴近 1 的时段,再漂亮的信号形态也大概率是噪声的巧合排列
具体入模的形态:滚动熵水平、熵的 20 日变化、熵在过去一年中的分位数。三个都是慢变量,与价格类特征相关性低,是特征矩阵里少见的正交信息源。
A 股注记:日频二值化在 A 股有一个制度性噪声源——涨跌停板日的方向符号被截断机制污染(想卖卖不掉的跌停日第二天大概率续跌,这是制度造成的伪动量)。建议对连续涨跌停日做符号合并或剔除,否则熵特征会把制度摩擦误读为可预测结构。另外 T+1 使得日内符号序列对隔日交易者不可执行,熵特征的采样频率应与策略的实际决策频率对齐。
结语#
熵特征回答的是量化研究里最该先问却最少被问的问题:这段数据里到底有没有东西可学。它不生成信号,它给所有信号定价。花在熵审计上的十分钟,经常能省掉花在死数据上的十天。
参考文献:
- López de Prado, M. (2018). Advances in Financial Machine Learning, Chapter 18: Entropy Features. Wiley.
- Kontoyiannis, I. et al. (1998). Nonparametric entropy estimation for stationary processes and random fields, with applications to English text. IEEE Transactions on Information Theory.
- Cover, T. & Thomas, J. (2006). Elements of Information Theory, 2nd ed. Wiley.