将指数增长时间序列数据转换为有界低噪信号
- todo: 增加例子(处理结果的图片)
- todo: 审阅
金融市场中大量变量具有长期指数增长特征,例如标普 500 指数、股票总市值、广义货币供应量 M2、融资债务余额以及居民和企业部门杠杆。此类序列通常具有以下形式:
\[Y_t \approx Y_0 \exp(g t + u_t)\]其中,$g$ 表示长期复合增长率,$u_t$ 表示周期波动、风险偏离和短期噪声。
直接分析 $Y_t$ 往往没有意义,因为序列水平主要反映长期增长和价格尺度,而不是当前所处的金融状态。常见做法是计算对数差分:
\[r_t = \ln Y_t - \ln Y_{t-1}\]对数差分可以消除指数趋势,但会暴露高频噪声、异方差和极端跳跃。更重要的是,$r_t$ 在数学上没有边界,因此很难直接作为跨时期、跨资产或跨变量的统一状态指标。
构造“有界且低噪”的金融信号,不应依赖某一种孤立技术,而应将问题拆分为四个步骤:
\[\text{正值变换} \rightarrow \text{趋势分离} \rightarrow \text{噪声抑制} \rightarrow \text{稳健有界化}\]这一框架同时适用于价格类序列和宏观金融存量类序列,但不同数据类型应使用不同的趋势与噪声模型。
一、问题定义:有界与低噪分别意味着什么
1. 有界性
设最终构造的指标为 $I_t$。严格有界意味着存在有限常数 $a$ 和 $b$,使得:
\[a < I_t < b\]例如,双曲正切函数可将任意实数映射到 $(-1,1)$:
\[I_t = \tanh(x_t)\]百分位秩则可将序列映射到 $[0,1]$:
\[I_t = \frac{\operatorname{rank}(x_t)}{N}\]需要区分“严格有界”和“统计意义上的软有界”。滚动 Z-Score:
\[z_t = \frac{x_t-\mu_t}{\sigma_t}\]通常集中于有限区间,但理论上仍然属于整个实数轴,因此并非严格有界。
2. 低噪性
低噪不等于简单地让曲线更平滑。一个有效的低噪指标应尽可能保留经济上有意义的中低频变化,同时抑制以下成分:
- 市场微观结构噪声;
- 单期异常值;
- 波动率聚集造成的振幅膨胀;
- 数据修订、节假日和季节因素;
- 不具有持续性的短期跳跃。
从信号处理角度,可以将观测序列写为:
\[x_t = s_t + \varepsilon_t\]其中,$s_t$ 是目标状态信号,$\varepsilon_t$ 是短期噪声。所谓降噪,就是估计 $\hat{s}_t$,而不是机械地减小 $x_t$ 的波动幅度。
3. 有界与低噪是两个不同目标
平滑不能自动产生有界性。例如,移动平均后的收益率仍然可能出现任意大的数值。
同样,有界化也不能自动降噪。例如,对原始日收益率直接应用 $\tanh$,虽然输出落在 $(-1,1)$,但仍可能呈现高频正负翻转。
因此,较合理的顺序通常是:
\[\text{先提取低噪状态} \rightarrow \text{再进行稳健缩放} \rightarrow \text{最后映射到有限区间}\]二、统一模型:趋势、状态与观测噪声
对正值金融序列先取自然对数:
\[y_t = \ln Y_t\]随后将其分解为:
\[y_t = \tau_t + c_t + \varepsilon_t\]其中:
- $\tau_t$ 是长期增长趋势;
- $c_t$ 是具有经济意义的周期或偏离状态;
- $\varepsilon_t$ 是高频观测噪声。
最终希望得到的指标可以统一写成:
\[I_t = B\left( \frac{\hat{c}_t-m_t}{s_t} \right)\]其中:
- $\hat{c}_t$ 是经过趋势分离和降噪后的状态估计;
- $m_t$ 是滚动位置参数;
- $s_t$ 是滚动尺度参数;
- $B(\cdot)$ 是有界映射函数。
这一表达式涵盖了多数实用方法。不同技术之间的差异,主要在于如何估计 $\hat{c}_t$、$m_t$ 和 $s_t$。
三、第一步:对数化与经济尺度消除
1. 为什么优先对正值序列取对数
对于指数增长序列:
\[Y_t = Y_0 e^{g t}\]取对数后得到线性趋势:
\[\ln Y_t = \ln Y_0 + g t\]这会带来三个好处。
第一,对数将绝对变化转化为相对变化。例如,$Y_t$ 从 $100$ 增长到 $110$,与从 $1{,}000$ 增长到 $1{,}100$,具有近似相同的对数变化。
第二,对数通常可以缓解随水平增长而扩大的异方差。
第三,对数能够使长期趋势更接近线性或低阶平滑过程,便于滤波和状态空间建模。
2. 比率变量仍可能需要对数化
对于杠杆债务与 M2 的比率:
\[L_t = \frac{D_t}{M_t}\]可以直接分析 $L_t$,也可以分析对数比率:
\[\ell_t = \ln D_t - \ln M_t\]对数比率具有清晰的增长率解释:
\[\Delta \ell_t = \Delta \ln D_t - \Delta \ln M_t\]即债务增长率相对于货币供应增长率的差值。
如果研究目标是“债务扩张是否快于基础流动性”,$\ell_t$ 通常比单独处理 $D_t$ 更有经济含义。
四、第二步:趋势分离,而不是直接高阶差分
1. 对数差分适用于价格,但不一定适用于宏观存量
对于流动性较高的市场价格,日对数收益率:
\[r_t = \Delta \ln P_t\]是自然的分析对象。价格水平通常接近随机趋势,直接去除长期确定性趋势未必合理。
但对于 M2、总市值、融资债务等缓慢变化的存量变量,一阶差分可能过度强调数据修订和单期变化。此时更适合估计长期趋势 $\tau_t$,然后分析偏离项:
\[c_t = \ln Y_t - \tau_t\]$c_t$ 可解释为当前变量相对于长期复合增长路径的高估或低估程度。
2. 平滑趋势模型
一种通用做法是用平滑器 $S_\lambda$ 估计趋势:
\[\hat{\tau}_t = S_\lambda(y_t)\]然后定义周期状态:
\[\hat{c}_t = y_t-\hat{\tau}_t\]$S_\lambda$ 可以是:
- 指数移动平均;
- 局部多项式回归;
- 平滑样条;
- Hodrick–Prescott 滤波;
- 状态空间趋势模型;
- 小波低频重构。
不同方法并不存在普遍最优选择。核心是使趋势的时间尺度显著长于目标风险周期。
3. HP 滤波的适用边界
HP 滤波通过求解以下优化问题分离趋势:
\[\min_{\{\tau_t\}_{t=1}^T} \sum_{t=1}^{T}(y_t-\tau_t)^2 + \lambda \sum_{t=2}^{T-1} \left[ (\tau_{t+1}-\tau_t)-(\tau_t-\tau_{t-1}) \right]^2\]第一项要求趋势接近原序列,第二项惩罚趋势增长率的变化。
HP 周期项为:
\[c_t = y_t-\tau_t\]它通常围绕零波动,但并不严格有界。其主要问题包括端点偏差、参数敏感性和潜在的伪周期。因此,HP 滤波适合构造描述性宏观指标,但在实时交易或拐点识别中应谨慎使用。
4. 状态空间趋势模型
更系统的做法是将趋势建模为隐藏状态。例如,局部线性趋势模型可写为:
\[\begin{aligned} y_t &= \tau_t+\varepsilon_t \\ \tau_t &= \tau_{t-1}+g_{t-1}+\eta_t \\ g_t &= g_{t-1}+\zeta_t \end{aligned}\]其中,$\tau_t$ 是趋势水平,$g_t$ 是潜在增长率。卡尔曼滤波可以同时估计两者。
相较于固定窗口均线,状态空间模型能够根据观测噪声与状态噪声的相对大小,自适应地决定平滑程度。
五、第三步:针对目标频率进行降噪
1. 平滑后差分
对于需要估计“平滑增长率”的场景,可以先平滑对数水平,再计算变化:
\[\tilde{y}_t = S_\lambda(\ln Y_t)\] \[g_t = \tilde{y}_t-\tilde{y}_{t-h}\]其中,$h$ 是变化率期限。
这种方法比直接计算 $\ln Y_t-\ln Y_{t-h}$ 更平滑,但会产生一定滞后。$h$ 越大,短期噪声越弱,同时拐点响应越慢。
2. TRIX 作为平滑增长率
TRIX 可以写为三重指数平滑后的对数变化率:
\[\begin{aligned} E_t^{(1)} &= \operatorname{EMA}(Y_t,n) \\ E_t^{(2)} &= \operatorname{EMA}(E_t^{(1)},n) \\ E_t^{(3)} &= \operatorname{EMA}(E_t^{(2)},n) \end{aligned}\]最终信号为:
\[x_t = \ln E_t^{(3)}-\ln E_{t-1}^{(3)}\]TRIX 本质上是一个强低通滤波器与差分算子的组合。它适合构造低频动量指标,但不适合要求快速识别反转的应用。
3. 长短均线差作为带通近似
对数水平上的长短均线差为:
\[x_t = \operatorname{EMA}(\ln Y_t,n_s) - \operatorname{EMA}(\ln Y_t,n_l)\]其中,$n_s<n_l$。
该结构会抑制长期趋势,也会削弱最高频噪声,因此可视为一种近似带通滤波器。它衡量的是短期路径相对于长期路径的偏离,而不是单期收益率。
为减少不同波动阶段下的振幅差异,还应继续进行尺度标准化。
4. 小波多尺度降噪
小波分解可将序列写为不同尺度分量之和:
\[y_t = A_{J,t} + \sum_{j=1}^{J}D_{j,t}\]其中,$A_{J,t}$ 是低频近似项,$D_{j,t}$ 是第 $j$ 个尺度的细节项。
可以丢弃最高频细节项:
\[\tilde{y}_t = A_{J,t} + \sum_{j=j_0}^{J}D_{j,t}\]该方法适合存在明显多尺度结构的数据,但应注意小波边界处理、基函数选择和前视偏差。直接将小波方法解释为“重整化群”通常只是一种类比,不应替代严格的统计检验。
5. 卡尔曼滤波估计潜在增长率
对于价格或存量变量,可以直接将潜在增长率建模为缓慢变化的隐藏状态:
\[\begin{aligned} r_t &= \mu_t+\varepsilon_t \\ \mu_t &= \rho\mu_{t-1}+\eta_t \end{aligned}\]其中,$r_t$ 是观测到的变化率,$\mu_t$ 是低噪潜在增长率。
卡尔曼滤波输出的 $\hat{\mu}_t$ 可作为后续标准化和有界化的输入。其优势在于模型结构明确;缺点是依赖线性、高斯和参数稳定性假设。
六、第四步:稳健尺度标准化
1. 普通滚动 Z-Score
设降噪后的状态为 $x_t$,滚动 Z-Score 为:
\[z_t = \frac{x_t-\bar{x}_{t,N}} {s_{t,N}}\]其中,$\bar{x}{t,N}$ 和 $s{t,N}$ 分别是过去 $N$ 期的均值和标准差。
这一变换可以消除局部尺度差异,但均值与标准差本身容易受到极端值影响。在金融厚尾分布下,单次崩盘可能同时改变分子和分母,使指标在较长时间内失真。
2. 中位数与 MAD 标准化
更稳健的方案是使用滚动中位数和中位绝对偏差:
\[m_t = \operatorname{median} \left( x_{t-N+1},\ldots,x_t \right)\] \[\operatorname{MAD}_t = \operatorname{median} \left( \left|x_i-m_t\right| \right)\]稳健标准分数定义为:
\[z_t^{(r)} = \frac{x_t-m_t} {1.4826\,\operatorname{MAD}_t+\epsilon}\]常数 $1.4826$ 用于在正态分布下使 MAD 与标准差具有近似相同的尺度,$\epsilon$ 用于避免分母为零。
相较于普通 Z-Score,该方法对单期异常值和跳跃更稳定。
3. 波动率标准化
对于价格收益率,可以用条件波动率进行标准化:
\[z_t = \frac{r_t}{\hat{\sigma}_t}\]$\hat{\sigma}_t$ 可以通过滚动波动率、EWMA 或 GARCH 模型估计。
EWMA 方差递推为:
\[\hat{\sigma}_t^2 = \lambda\hat{\sigma}_{t-1}^2 + (1-\lambda)r_{t-1}^2\]该处理并不直接减少时间频率上的噪声,但可以降低波动率聚集造成的振幅不稳定,使不同时期的信号更可比。
七、第五步:将标准化状态映射到有限区间
1. Tanh 有界映射
最常用的平滑有界函数是:
\[I_t = \tanh\left(\frac{z_t}{\alpha}\right)\]其中,$\alpha>0$ 控制压缩速度。
当 $z_t$ 接近零时:
\[\tanh\left(\frac{z_t}{\alpha}\right) \approx \frac{z_t}{\alpha}\]| 因此,小幅变化近似保持线性。随着 $ | z_t | $ 增大,输出逐渐饱和于 $-1$ 或 $1$。 |
$\alpha$ 较小会使指标更快饱和,适合强调状态方向;$\alpha$ 较大则保留更多极端程度信息。
2. Logistic 映射
若希望输出位于 $(0,1)$,可以使用:
\[I_t = \frac{1} {1+\exp(-z_t/\alpha)}\]该指标可解释为归一化状态强度,但不能在不建立概率模型的情况下直接解释为事件发生概率。
3. 滚动经验分布与百分位秩
滚动经验分布变换为:
\[I_t = \frac{1}{N} \sum_{i=t-N+1}^{t} \mathbf{1}(x_i\leq x_t)\]其输出位于 $[0,1]$。
百分位秩具有三个明显特点:
- 不依赖正态分布假设;
- 不受异常值绝对幅度支配;
- 输出具有直接的历史相对位置解释。
但百分位秩会丢失幅度信息。例如,历史最高值与远超历史水平的极端值都接近 $1$。此外,当窗口较短或数据存在大量重复值时,指标可能出现阶梯状跳变。
4. Winsorization 与 Tanh 的区别
截尾处理可以写为:
\[x_t^{(w)} = \min\left\{\max(x_t,q_l),q_u\right\}\]其中,$q_l$ 和 $q_u$ 是滚动分位数阈值。
Winsorization 是硬截断,会在边界处产生不可微的平坦区;$\tanh$ 是连续、平滑的软压缩。对大多数连续信号建模任务,稳健标准化后接 $\tanh$ 通常更自然。
八、推荐的统一指标
综合前述步骤,一个实用的有界低噪指标可以定义为:
\[\begin{aligned} y_t &= \ln Y_t \\ x_t &= F(y_{1:t}) \\ z_t &= \frac{x_t-m_t}{1.4826\,\operatorname{MAD}_t+\epsilon} \\ I_t &= \tanh\left(\frac{z_t}{\alpha}\right) \end{aligned}\]其中,$F(\cdot)$ 是根据数据类型选择的趋势分离或滤波算子。
该框架具有明确分工:
- $\ln(\cdot)$ 处理指数尺度;
- $F(\cdot)$ 提取目标频率上的经济状态;
- MAD 标准化处理时变尺度和异常值;
- $\tanh$ 提供严格边界。
最终指标满足:
\[-1<I_t<1\]并可作如下解释:
- $I_t\approx 0$:处于近期正常状态;
- $I_t>0$:高于趋势或增长偏强;
- $I_t<0$:低于趋势或增长偏弱;
$ I_t \rightarrow 1$:进入历史上较极端的状态。
必须注意,接近边界表示“经模型归一化后的极端状态”,不一定表示价格即将反转或金融危机即将发生。
九、例一:标普 500 的低噪有界动量
1. 目标
对于标普 500 日价格 $P_t$,目标不是分析价格相对于某条确定性指数趋势的偏离,而是估计中期风险调整动量。
可以先计算 $h$ 日对数收益率:
\[r_t^{(h)} = \ln P_t-\ln P_{t-h}\]然后用 EWMA 波动率标准化:
\[z_t = \frac{r_t^{(h)}} {\hat{\sigma}_t\sqrt{h}}\]为了进一步抑制短期翻转,可以对 $z_t$ 进行平滑:
\[\tilde{z}_t = \operatorname{EMA}(z_t,n)\]最后有界化:
\[I_t = \tanh\left(\frac{\tilde{z}_t}{\alpha}\right)\]该指标衡量的是“经过波动率调整和平滑后的中期动量状态”。
2. 参数示例
对于日频数据,可以选择:
- 收益期限 $h=21$,约对应一个交易月;
- 平滑期限 $n=10$;
- EWMA 衰减参数 $\lambda=0.94$;
- 压缩参数 $\alpha=2$。
这些参数不具有普遍最优性。它们决定了指标关注的时间尺度,应通过样本外稳定性而不是样本内收益最大化来选择。
3. Python 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import numpy as np
import pandas as pd
def bounded_price_momentum(
price: pd.Series,
horizon: int = 21,
smooth_span: int = 10,
volatility_span: int = 42,
alpha: float = 2.0,
epsilon: float = 1e-8,
) -> pd.DataFrame:
"""
Construct a bounded, volatility-adjusted momentum indicator.
Parameters
----------
price:
Positive price series indexed by date.
horizon:
Return horizon in observations.
smooth_span:
EMA span applied to standardized returns.
volatility_span:
EWMA span used to estimate daily volatility.
alpha:
Tanh compression parameter.
epsilon:
Numerical floor for volatility.
Returns
-------
DataFrame containing log price, return, volatility,
standardized state, smoothed state and bounded indicator.
"""
if (price <= 0).any():
raise ValueError("Price observations must be strictly positive.")
log_price = np.log(price)
daily_return = log_price.diff()
horizon_return = log_price.diff(horizon)
daily_variance = daily_return.pow(2).ewm(
span=volatility_span,
adjust=False,
).mean()
horizon_volatility = np.sqrt(
daily_variance.clip(lower=epsilon) * horizon
)
standardized = horizon_return / horizon_volatility
smoothed = standardized.ewm(
span=smooth_span,
adjust=False,
).mean()
bounded = np.tanh(smoothed / alpha)
return pd.DataFrame(
{
"log_price": log_price,
"horizon_return": horizon_return,
"horizon_volatility": horizon_volatility,
"standardized": standardized,
"smoothed": smoothed,
"bounded_indicator": bounded,
}
)
这一方案适合价格动量,但不应直接套用到低频宏观存量,因为宏观存量中的噪声结构、趋势性质和发布频率均不同。
十、例二:杠杆债务相对于 M2 的偏离指标
1. 构造经济上有意义的基础序列
设杠杆债务余额为 $D_t$,M2 为 $M_t$。首先构造对数杠杆比率:
\[\ell_t = \ln D_t-\ln M_t\]$\ell_t$ 上升意味着债务相对于货币供应扩张,$\ell_t$ 下降意味着债务扩张弱于 M2。
2. 提取长期趋势偏离
使用平滑趋势 $\tau_t$:
\[\tau_t = S_\lambda(\ell_t)\]周期偏离为:
\[c_t = \ell_t-\tau_t\]如果 $c_t>0$,说明债务与 M2 的相对关系高于其长期路径;如果 $c_t<0$,则低于长期路径。
对于月度或季度数据,可以选择平滑样条、HP 滤波或状态空间模型。若指标用于实时决策,应优先考虑单边滤波,避免使用未来数据估计当前趋势。
3. 稳健标准化与有界化
使用滚动中位数和 MAD:
\[z_t^{(r)} = \frac{c_t-\operatorname{median}_N(c_t)} {1.4826\,\operatorname{MAD}_N(c_t)+\epsilon}\]最终指标为:
\[I_t = \tanh\left(\frac{z_t^{(r)}}{\alpha}\right)\]此时,$I_t$ 表示债务相对于 M2 的趋势偏离在历史分布中的稳健标准化位置。
4. Python 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import numpy as np
import pandas as pd
def rolling_robust_zscore(
series: pd.Series,
window: int,
epsilon: float = 1e-8,
) -> pd.Series:
rolling_median = series.rolling(window).median()
rolling_mad = series.rolling(window).apply(
lambda values: np.median(
np.abs(values - np.median(values))
),
raw=True,
)
scale = (1.4826 * rolling_mad).clip(lower=epsilon)
return (series - rolling_median) / scale
def bounded_leverage_indicator(
debt: pd.Series,
m2: pd.Series,
trend_span: int = 60,
normalization_window: int = 120,
alpha: float = 2.0,
) -> pd.DataFrame:
"""
Construct a bounded indicator for debt relative to M2.
All input series must use the same frequency and units must be
economically consistent.
"""
data = pd.concat(
{"debt": debt, "m2": m2},
axis=1,
).dropna()
if (data <= 0).any().any():
raise ValueError("Debt and M2 must be strictly positive.")
log_ratio = np.log(data["debt"]) - np.log(data["m2"])
trend = log_ratio.ewm(
span=trend_span,
adjust=False,
).mean()
deviation = log_ratio - trend
robust_z = rolling_robust_zscore(
deviation,
window=normalization_window,
)
bounded = np.tanh(robust_z / alpha)
return pd.DataFrame(
{
"log_ratio": log_ratio,
"trend": trend,
"deviation": deviation,
"robust_z": robust_z,
"bounded_indicator": bounded,
}
)
该示例使用 EMA 作为单边趋势估计,因此不会引入未来数据。若用于历史研究,可以将趋势模块替换为平滑样条或双边滤波;若用于实时监控,则必须保持因果性。
十一、不同方法在统一框架中的位置
1. 分数差分
分数差分定义为:
\[(1-L)^d y_t = \sum_{k=0}^{\infty} w_k y_{t-k}\]其权重满足:
\[w_0=1\] \[w_k = -w_{k-1} \frac{d-k+1}{k}\]当 $0<d<1$ 时,分数差分介于原始水平和一阶差分之间。它的主要目标是在提高平稳性的同时保留部分长期记忆。
但分数差分本身既不保证低噪,也不保证有界。它应被视为趋势处理算子 $F(\cdot)$ 的一种选择,后续仍需要稳健标准化和有界映射:
\[I_t = \tanh\left( \frac{ (1-L)^d y_t-m_t }{ \alpha s_t } \right)\]2. HP 滤波
HP 滤波属于趋势分离模块,产生的周期项并不严格有界。正确的组合是:
\[\text{Log HP 周期项} \rightarrow \text{稳健标准化} \rightarrow \tanh\]而不是将 HP 周期项本身视为有界指标。
3. TRIX 与 MACD
TRIX 和 MACD 类结构属于滤波或状态提取模块。它们能够降低高频噪声,但输出振幅受原序列波动状态影响,因此仍应进行滚动尺度标准化。
4. 小波方法
小波属于多尺度降噪模块。小波系数经过能量归一化后不一定自然落入 $[-1,1]$,除非明确使用满足该边界的归一化公式。更稳健的做法仍然是对重构状态进行滚动标准化和有界映射。
5. Hurst 指数与 DFA
Hurst 指数描述序列的尺度依赖和持久性,而不是水平偏离或增长速度。理论上的 Hurst 参数通常位于 $(0,1)$,但有限样本估计值可能存在偏差,某些估计程序甚至可能产生区间外结果。
因此,局部 Hurst 指数适合作为独立的市场结构特征,不宜直接替代债务偏离、估值偏离或风险调整动量指标。
6. Jacobi 过程
Jacobi 扩散满足:
\[dX_t = \kappa(\theta-X_t)dt + \sigma\sqrt{X_t(1-X_t)}dW_t\]在适当参数和边界条件下,$X_t$ 可以保持在 $[0,1]$。但将一个经验金融指标通过非线性函数映射到 $[0,1]$,并不意味着该指标服从 Jacobi 过程。
若要使用 Jacobi 模型,需要对变换后状态的漂移、扩散函数和转移密度进行显式估计与检验。对于普通指标工程,直接使用稳健标准化与 Logistic 或 Tanh 映射通常更透明。
7. Lamperti 变换
对于连续时间扩散过程:
\[dX_t = \mu(X_t)dt+\sigma(X_t)dW_t\]Lamperti 变换定义为:
\[Y_t = \int^{X_t}\frac{1}{\sigma(u)}du\]其作用是将状态依赖扩散转换为单位扩散形式。它主要解决条件方差随状态变化的问题,但不会自动滤除时间序列中的高频随机项,也不会自动产生有界输出。
在离散金融数据中,波动率标准化可以被看作一种更容易实施的近似思想。
8. 跳跃补偿与稳健指标
跳跃补偿器用于构造补偿泊松过程或风险中性定价模型,不等同于从已实现时间序列中删除异常跳跃。对于经验指标,处理跳跃更实用的方法包括:
- 稳健尺度估计;
- 分位数截尾;
- 双幂变差分离连续波动与跳跃;
- 状态空间跳跃模型;
- 对新闻冲击单独建模。
若指标的目的在于风险监控,完全删除跳跃通常并不合理,因为跳跃本身可能正是需要保留的风险信号。更合适的做法是压缩其影响,而不是将其视为无效噪声。
十二、参数选择与模型验证
1. 时间尺度必须对应经济问题
指标参数不能脱离研究期限。
对于日频价格:
- 短期状态通常对应 $5$ 至 $21$ 个交易日;
- 中期状态通常对应 $1$ 至 $6$ 个月;
- 长期状态通常对应 $6$ 至 $24$ 个月。
对于月度 M2 或债务数据,趋势窗口可能需要覆盖数年,而非数月。
2. 避免前视偏差
双边滤波、中心移动平均和全样本 HP 滤波都会利用未来观测值估计历史状态。因此,历史图表可能显得异常平滑,但无法实时复现。
若指标用于回测或实时监控,时点 $t$ 的值只能依赖:
\[\{Y_1,Y_2,\ldots,Y_t\}\]这要求使用单边滤波、递归状态空间模型或逐期重新估计。
3. 检查边界饱和率
若 $\tanh$ 输出长期接近 $-1$ 或 $1$,说明压缩参数过小或标准化不充分。
可以定义饱和率:
\[SR = \frac{1}{T} \sum_{t=1}^{T} \mathbf{1}(|I_t|>0.95)\]过高的 $SR$ 会导致指标失去区分极端程度的能力。
4. 检查信号的有效独立样本量
平滑会提高自相关,因此视觉上更稳定的曲线并不意味着包含更多信息。
对于一阶自相关系数 $\rho_1$,有效样本量可粗略近似为:
\[N_{\mathrm{eff}} \approx N \frac{1-\rho_1}{1+\rho_1}\]过度平滑可能使 $N_{\mathrm{eff}}$ 显著下降,从而夸大回归显著性。
5. 评估稳定性而不是只评估预测收益
一个稳健指标至少应检查:
- 不同窗口下方向是否一致;
- 不同历史阶段下分布是否稳定;
- 实时估计与事后估计差异是否可接受;
- 是否被少数危机样本主导;
- 是否对数据频率和修订敏感;
- 是否具有明确且稳定的经济解释。
十三、实践中的推荐配置
1. 日频市场价格
建议使用以下结构:
\[\text{多期对数收益率} \rightarrow \text{波动率标准化} \rightarrow \text{适度 EMA 平滑} \rightarrow \tanh\]形式上可写为:
\[I_t = \tanh \left[ \frac{ \operatorname{EMA} \left( \frac{\ln P_t-\ln P_{t-h}} {\hat{\sigma}_t\sqrt{h}} ,n \right) }{\alpha} \right]\]该结构适合构造有界趋势、风险偏好或动量状态。
2. 月度或季度宏观存量
建议使用:
\[\text{对数水平或对数比率} \rightarrow \text{单边趋势模型} \rightarrow \text{趋势偏离} \rightarrow \text{滚动 MAD 标准化} \rightarrow \tanh\]例如:
\[I_t = \tanh \left[ \frac{ c_t-\operatorname{median}_N(c_t) }{ \alpha \left( 1.4826\,\operatorname{MAD}_N(c_t)+\epsilon \right) } \right]\]该结构适合 M2、融资债务、总市值、信贷余额和杠杆率。
3. 跨变量综合金融条件指数
若需要组合多个指标,先对每个变量独立完成稳健标准化和有界化:
\[I_{j,t} = \tanh\left(\frac{z_{j,t}}{\alpha_j}\right)\]再进行加权:
\[FCI_t = \sum_{j=1}^{K}w_j I_{j,t}\]其中:
\[\sum_{j=1}^{K}|w_j|=1\]这样可以避免高波动变量仅因量纲较大而支配综合指数。
若希望最终综合指标仍严格位于 $(-1,1)$,可再次映射:
\[I_t^{\mathrm{final}} = \tanh\left(\frac{FCI_t}{\beta}\right)\]十四、结论
将指数增长型金融序列转换为有界、低噪信号,本质上不是寻找某个单一“高级算法”,而是完成四个相互独立的统计任务:
\[\boxed{ \text{对数化} + \text{状态提取} + \text{稳健标准化} + \text{非线性有界化} }\]其中,对数化消除绝对尺度和指数增长效应;趋势模型、滤波器或状态空间模型提取经济上有意义的低频状态;MAD 或条件波动率标准化处理异方差和厚尾;Tanh、Logistic 或百分位秩提供严格边界。
对于价格类数据,一个可靠的默认方案是:
\[\text{多期对数收益率} + \text{波动率调整} + \text{轻度平滑} + \tanh\]对于债务、M2 和市值等宏观存量,一个更合理的默认方案是:
\[\text{对数水平或对数比率} + \text{单边趋势偏离} + \text{滚动稳健 Z-Score} + \tanh\]分数差分、HP 滤波、TRIX、小波和卡尔曼滤波都可以成为这一框架中的某个模块,但它们本身通常不能同时保证有界性与低噪性。真正稳定、可解释且可复现的指标,应明确区分趋势处理、噪声过滤、尺度归一化和边界压缩,而不是将这些目标混合在一个未经检验的复杂模型中。
