
很多做时间序列分析的人第一课就会碰到“严平稳”和“宽平稳”这两个概念教材上写得很简单一眼扫过去好像懂了真到用数据说话的时候又开始含糊白噪声到底算严平稳还是宽平稳随机游走为什么大家都说它不平稳为什么我的ACF图长得乱七八糟我还非要说它是平稳的这篇文章我想把这些事情彻底讲清楚。我会从两者的数学定义出发拆开每个条件背后的意图再落到实际数据上告诉你到底怎么用代码和图形去判断一段序列是不是平稳、是哪种平稳。适合刚接触随机过程或者时间序列的初学者也适合那些已经会用ADF检验但一直没想明白原理的实践者。看完你应该能建立起一套自己的判断框架而不是单纯背结论。1. 内容整体设计与思路拆解1.1 为什么这两个概念总被放在一起说严平稳和宽平稳英文分别是strictly stationary和weakly stationary也有人叫完全平稳和二阶平稳。它们都在描述同一件事随机过程的统计性质不随着时间轴平移而改变。换句话说你站在t1时刻观测一段序列和站在t100时刻观测同一段序列如果这个过程本质规律没变那么它的“统计外貌”应该是相似的。但问题在于“统计外貌”这个词太含糊了。是分布一样还是均值方差一样还是协方差结构一样严平稳和宽平稳就是对这个“外貌”给出了两种不同严格程度的定义一个要求全部概率特征都不变一个只要求一阶矩和二阶矩不变。正因为它们回答的是同一个问题却用了不同的尺子才会被放在一起比较。这个区别在实操中非常关键。很多时间序列模型比如ARMA、ARIMA理论上只要求序列是宽平稳的。但如果你做的是极值分析、分位数回归、或者需要对序列做非线性变换那么宽平稳就不够用了因为非线性变换会改变高阶矩结构只有严平稳才能保证变换后仍然具有平稳性。1.2 严平稳的核心定义一切分布都不变严平稳的定义用数学语言说很简洁对于一个随机过程${X_t}$如果对任意正整数$n$、任意时刻$t_1, t_2, \ldots, t_n$和任意时间偏移$k$随机向量$(X_{t_1}, X_{t_2}, \ldots, X_{t_n})$与$(X_{t_1k}, X_{t_2k}, \ldots, X_{t_nk})$具有相同的联合分布那这个过程就是严平稳的。拆开来讲它其实包含了两层意思。第一层单点的边际分布不随时间变化也就是$F_{X_t}(x) F_{X_s}(x)$对任意$t$和$s$都成立。第二层任意多个时间点之间的联合依赖结构也不随时间变化也就是不管你在哪个时间段去观察这些点之间的“关系模式”是一样的。要理解这个定义可以想象你在拍一段录像。如果画面里的场景是严平稳的那不管你是从第1秒开始看还是从第1000秒开始看每一帧的画质、人物分布、物体之间的相对位置关系所有你能从画面中提取到的统计信息都是一模一样的。你甚至无法通过看某一帧来判断这是录像的开头还是中间。这里有一个容易忽略的点严平稳并不要求不同时刻的$X_t$相互独立它只要求它们的联合分布不变。所以一个严平稳序列完全可以在时间上存在强烈的自相关比如$X_t Z$对所有$t$都成立其中$Z$是任意随机变量这个序列显然是严平稳的但它一点都不随机前后完全相关。1.3 宽平稳的核心定义只要一阶二阶矩稳定宽平稳的定义没有严平稳那么苛刻。它只要求三个条件第一均值函数是常数。也就是说$E[X_t] \mu$对所有$t$都成立均值不随时间变化。第二二阶矩有限且恒定。也就是$E[X_t^2] \infty$而且方差$\text{Var}(X_t) \sigma^2$不随时间改变。第三自协方差函数只依赖时间差。定义$\gamma(h) \text{Cov}(X_t, X_{th})$这个$\gamma(h)$只和$h$有关和起点$t$无关。宽平稳的本质是我不关心你完整的分布长什么样只要你的均值和波动幅度不漂移任意两个时刻之间的线性相关性只取决于时间间隔那我就认为你是平稳的。这也是为什么宽平稳在信号处理和计量经济学里应用得最多——因为它只要求二阶信息而实际数据分析中二阶信息往往是最好估计的。宽平稳还有一个英文名叫covariance stationary协方差平稳。这个名字更直观因为它强调的是协方差结构对时间平移的不变性而不是整个分布的不变性。1.4 两者的关系谁包含谁什么条件下可以互推严平稳和宽平稳的关系可以用一句话概括严平稳不一定宽平稳宽平稳也不一定严平稳但在一定条件下它们可以互通。先看严平稳推宽平稳的情况。如果序列是严平稳的并且二阶矩存在也就是$E[X_t^2] \infty$那么这个序列一定是宽平稳的。道理很简单严平稳保证了所有有限维分布不变自然也就保证了均值和协方差不变。注意“二阶矩存在”这个条件是我特意加的。因为数学上存在一些严平稳过程它们的分布是尖峰厚尾到连均值都是无穷的比如独立同分布的柯西序列。柯西分布的均值不存在方差更是无穷大所以它虽然是严平稳的却完全不满足宽平稳的二阶矩条件。再看宽平稳推严平稳。一般情况下是推不出来的因为宽平稳只锁住了均值、方差和自协方差但高阶矩完全可以是时间的函数。比如一个序列的均值和方差稳定但偏度和峰度随时间上下波动这在宽平稳的定义下完全合法但它绝不是严平稳的。典型的例子是GARCH过程的条件分布时变特征或者用混合分布构造的序列都可以做到宽平稳但非严平稳。只有当序列是高斯过程时宽平稳才能推出严平稳。因为高斯分布完全由均值和协方差决定一阶二阶矩确定了整个分布就确定了。2. 核心细节解析与实操要点2.1 严平稳的完整数学表达与直觉严平稳的严格定义我上面已经写了但实际应用中很少有人会去验证“任意$n$个时间点的联合分布都不变”这几乎是不可能做到的事情。因为我们只有一条时间序列的观测数据根本不可能从单次实现中去推断出联合分布族是否随时间平移不变。所以在实操层面严平稳更多被当作一个理论框架而不是一个可以直接检验的性质。做理论推导的时候大家喜欢假设严平稳因为它给了你最大的自由度——你在推导中得到的任何关于分布性质的结论都是成立的不需要担心高阶矩的问题。我可以举一个简单的例子来说明严平稳的“强大”假设$X_t$是严平稳序列那么对它做任意一个函数变换$g(X_t)$新的序列$Y_t g(X_t)$也一定是严平稳的因为$X_t$的分布不变$g(X_t)$的分布自然也不变。但如果你只知道$X_t$是宽平稳的那$g(X_t)$的平稳性就无法保证了因为非线性函数会改变均值、方差结构你需要重新验证。这个性质在信号处理和金融收益分析中经常用到。2.2 宽平稳的三个条件逐条拆解宽平稳的三个条件里最容易出问题的其实是第二个二阶矩有限。很多初学者只盯着均值恒定和自协方差只依赖时间差却忽略了二阶矩有限这个前置条件。举个例子假设一个过程的分布是学生t分布自由度是$2 \epsilon$其中$\epsilon$是一个非常小的正数。它的均值存在但方差是无穷大。从直观上看这个过程可能看起来“挺平稳的”因为它没有趋势、没有周期性但严格来说它不满足宽平稳的条件。在实际数据分析中这种厚尾分布是非常常见的尤其是金融收益序列。这就导致了一个现象很多金融序列的样本ACF看起来衰减得很快但理论上却很难说它们满足宽平稳的二阶矩条件。所以处理实际问题时我们要分清“理论上需要什么”和“实际操作中能检验什么”。宽平稳的三个条件是理论上的准入标准而实际检验往往只是看均值和自相关函数的表现对厚尾的检验反而容易被忽略。2.3 宽平稳但非严平稳的构造思路前面说了宽平稳不能推严平稳但光听结论印象不深。我构造一个最简单的例子帮大家把直觉建立起来。设$Z$是一个随机变量取值有两种可能以0.5的概率取$1$以0.5的概率取$-1$。构造序列$X_t (-1)^t Z$。这时我们来验证宽平稳的条件。首先$E[X_t] (-1)^t E[Z] (-1)^t \times 0 0$均值恒定。其次方差$\text{Var}(X_t) \text{Var}(Z) 1$也不随时间变化。再看自协方差$\text{Cov}(X_t, X_{th}) E[X_t X_{th}] (-1)^{2th} E[Z^2] (-1)^h$它只依赖于$h$不依赖于$t$。所以这个序列是宽平稳的。但它不是严平稳的。因为$X_1 -Z$$X_2 Z$这两个值的分布不一样一个是$-1$和$1$的翻转所以$(X_1)$和$(X_2)$的一维边际分布不同自然就不满足严平稳的定义。这个小例子非常值得多看一眼。它说明了一个反直觉的事实即使一个序列的均值和方差全都不随时间变化自相关结构也完全稳定它的“分布形状”仍然可能在奇数时刻和偶数时刻之间交替变化。你只有把时间轴拉出来看具体分布才能发现这一点。2.4 严平稳过程在什么场景下是必须的实操中什么时候必须上严平稳我自己的经验是以下两类场景绕不开。第一类场景是极端风险分析。比如你研究洪水水位、金融市场的暴跌风险、网络流量的峰值这些分析关注的是分布的尾部。宽平稳只保证均值和方差稳定但尾部行为完全可能随时间变化。一个序列可能均值方差都很稳定但尾部每年都在变厚宽平稳会认为它平稳可你的极值模型却完全失效了。这时候你需要的是严平稳的保证让整个分布特别是尾部都稳定不变。第二类场景是对数据做非线性变换。比如把价格序列取对数、取差分或者用Box-Cox变换如果你要证明变换后的序列仍然平稳那就得依赖严平稳。因为函数变换会重塑分布只有严平稳能保证分布不变性在变换后仍然成立。宽平稳没有这个性质。我在实际项目中遇到过一个典型例子分析某地的风速数据原始序列均值方差都稳定ACF衰减也很快看起来是平稳的。但做极值拟合的时候发现同一模型在不同年份的参数差异很大。后来才意识到问题出在高阶矩上——风速数据的峰度每年都在波动宽平稳掩盖了这个事实。所以如果你的业务场景对预测分布敏感建议多留个心眼。3. 实操过程与核心环节实现3.1 用模拟数据分辨三种序列理解定义之后最好自己动手生成几段模拟数据亲眼看看严平稳、宽平稳、非平稳长什么样。我习惯用Python做这件事因为它在数据分析生态上最方便。先看第一种情况独立同分布的正态白噪声。设$X_t \sim N(0, 1)$且相互独立。这个序列是严平稳的因为任意有限维分布都是独立标准正态的乘积形式完全不受时间平移影响。同时它也是宽平稳的均值为0方差为1自协方差函数$\gamma(h)$在$h0$时为1其余为0。第二种情况前面说的$X_t (-1)^t Z$宽平稳但非严平稳。这个序列的样本路径会呈现一种“高频抖动”的形态但均值方差看起来都很稳定。如果你不看分布绝对会认为它是平稳的。第三种情况带线性趋势的序列$X_t \beta t \varepsilon_t$其中$\varepsilon_t$是白噪声。这个序列的期望$E[X_t] \beta t$是随着时间变化的所以既不是宽平稳也不是严平稳。它的ACF衰减可能很慢因为趋势项会引入强烈的正自相关。下面写一个简单的Python脚本把三段序列分别生成出来并输出它们的统计量方便对比。import numpy as np import matplotlib.pyplot as plt np.random.seed(42) n 500 # 白噪声严平稳且宽平稳 white_noise np.random.normal(0, 1, n) # 宽平稳但非严平稳交替符号乘一个伯努利变量 Z np.random.choice([-1, 1], sizen) alternating [(-1)**t * Z[t] for t in range(n)] alternating np.array(alternating, dtypefloat) # 非平稳线性趋势加白噪声 t np.arange(n) trend 0.02 * t np.random.normal(0, 1, n) fig, axes plt.subplots(3, 1, figsize(10, 8)) axes[0].plot(white_noise) axes[0].set_title(White Noise (Strictly Weakly Stationary)) axes[1].plot(alternating) axes[1].set_title(Weakly Stationary but NOT Strictly) axes[2].plot(trend) axes[2].set_title(Non-stationary (Trend)) plt.tight_layout() plt.show()这段代码跑完之后你会发现一个很有意思的现象三张图从肉眼上根本分辨不出哪个是严平稳、哪个只是宽平稳。白噪声和交替符号序列看起来都是“随机波动”趋势序列则明显有一条向上的斜线。所以看图形是第一步但不充分。3.2 用ACF图给平稳性做初诊自相关函数ACF图是判断平稳性的第一视觉工具。它的逻辑是如果序列宽平稳那么样本自相关系数应该很快衰减到零附近不会出现拖尾不决的情况。我建议用statsmodels库来画ACF图标准做法是加上置信带方便判断哪些自相关显著非零。from statsmodels.graphics.tsaplots import plot_acf fig, axes plt.subplots(3, 1, figsize(10, 8)) plot_acf(white_noise, axaxes[0], lags40) axes[0].set_title(ACF of White Noise) plot_acf(alternating, axaxes[1], lags40) axes[1].set_title(ACF of Alternating Process) plot_acf(trend, axaxes[2], lags40) axes[2].set_title(ACF of Trend Process) plt.tight_layout() plt.show()白噪声的ACF图是所有自相关都在置信带以内标准白噪声。交替符号序列的ACF则会呈现一个有趣的规律$h0$时为1$h$为奇数时为$-1$$h$为偶数时为$1$全部显著非零但完全周期性。这说明这个序列有强烈的线性结构但它的自相关函数确实只依赖于时间差所以宽平稳条件是成立的。趋势序列的ACF则呈现典型的“缓慢衰减”形态自相关系数在滞后几十阶后仍然显著这是非平稳序列的典型特征。有一个细节值得提醒ACF图只能帮你排除一部分非平稳问题它不能帮你区分严平稳和宽平稳。因为ACF只反映二阶性质严平稳和宽平稳在ACF图上是看不出差异的。想区分它们你需要看滚动分布的稳定性。3.3 滚动均值、滚动方差与滚动分布检验我判断一段序列是否“够平稳”尤其是业务分析中最常用的手段是画滚动统计量。把时间窗口设为固定长度比如50个点依次计算每个窗口内的均值、方差、偏度、峰度看这些统计量是否随时间稳定。def rolling_stat(x, window50, funcnp.mean): stats [] for i in range(len(x) - window 1): stats.append(func(x[i:iwindow])) return np.array(stats) window 50 fig, axes plt.subplots(2, 2, figsize(12, 8)) axes[0, 0].plot(rolling_stat(white_noise, window, np.mean)) axes[0, 0].set_title(Rolling Mean - White Noise) axes[0, 1].plot(rolling_stat(white_noise, window, np.var)) axes[0, 1].set_title(Rolling Variance - White Noise) axes[1, 0].plot(rolling_stat(alternating, window, np.mean)) axes[1, 0].set_title(Rolling Mean - Alternating) axes[1, 1].plot(rolling_stat(alternating, window, np.var)) axes[1, 1].set_title(Rolling Variance - Alternating) plt.tight_layout() plt.show()这样看下来白噪声和交替符号序列的滚动均值、滚动方差都围绕一条水平线波动没有明显的趋势或突变。但如果你把偏度和峰度也画出来就可能发现问题了。交替符号序列的分布呈现双峰状而白噪声是单峰状两者的峰度统计量存在系统差异。实际分析中我建议把均值、方差、偏度、峰度四个统计量全部做一遍滚动检验这样能发现宽平稳掩盖掉的高阶矩漂移问题。虽然这个操作没法像数学定理那样给出严格结论但它能给你一个非常直观的安全感至少在我观察的时间范围内数据的分布形态没有发生本质变化。3.4 单位根检验ADF与KPSS的配合使用严格来说ADF检验检验的是“是否存在单位根”原假设是序列非平稳备择假设是平稳。KPSS检验则反过来原假设是序列平稳备择假设是非平稳。两个检验配合使用比只用其中一个要稳妥得多。用statsmodels跑这两个检验很简单from statsmodels.tsa.stattools import adfuller, kpss def test_stationarity(x, name): adf_stat, adf_p adfuller(x, autolagAIC)[:2] kpss_stat, kpss_p kpss(x, regressionc, nlagsauto)[:2] print(f{name}:) print(f ADF stat{adf_stat:.4f}, p-value{adf_p:.4f}) print(f KPSS stat{kpss_stat:.4f}, p-value{kpss_p:.4f}) test_stationarity(white_noise, White Noise) test_stationarity(alternating, Alternating) test_stationarity(trend, Trend)理想情况下白噪声的ADF检验p值远小于0.05拒绝单位根原假设说明序列平稳KPSS检验p值大于0.05不能拒绝平稳原假设两个检验结论一致。交替符号序列也是类似的结果因为它是宽平稳的。趋势序列的ADF检验p值会很高不能拒绝单位根说明序列非平稳KPSS检验的p值会很小拒绝平稳原假设。这里有三个容易踩的坑。第一个坑是只用ADF检验就下结论碰到趋势平稳序列会犯错误。趋势平稳序列是去掉确定性趋势后平稳的序列比如$X_t \beta t \varepsilon_t$它的ADF检验有时会误判成非平稳但实际上它去掉趋势后就是白噪声。这时候KPSS检验会给出更可靠的信息。第二个坑是p值边界情况比如ADF的p值是0.07KPSS的p值是0.04一个说平稳一个说不平稳这种互相矛盾的结论说明数据比较复杂可能需要分段看或者在模型里增加结构突变项。第三个坑是滞后阶数的选择ADF的autolag参数用的是信息准则自动选择滞后阶默认是AIC但如果样本量太小或者数据有明显季节性建议手动调整maxlag否则检验功效会下降。3.5 原始数据预处理去趋势、差分与季节调整在实际项目中绝大多数原始序列都不是平稳的。要分析一个非平稳序列通常的做法是先把它转成平稳序列再套用平稳时间序列模型。这一小节我把常用的三种“平稳化”手段做个梳理。第一种是去趋势。如果序列呈线性趋势可以直接用最小二乘法拟合一个时间趋势项然后把残差当作平稳序列用。如果是非线性趋势可以用样条或者多项式拟合。去趋势适合确定性趋势占主导的序列比如气温上升、销量增长这类长期趋势明显的数据。第二种是差分。一阶差分$\Delta X_t X_t - X_{t-1}$可以消除线性趋势二阶差分通常用来处理带曲率的趋势。在ARIMA模型中差分阶数$d$就是干这个的。注意差分会损失信息而且过度差分会造成负自相关所以差分阶数不是越高越好。实际操作中我会先画ACF图看衰减情况再结合ADF检验决定差分阶数。第三种是季节调整。如果序列有周期性比如月度销量有年度周期、每日访问量有一周周期需要先做季节分解把周期成分剔除掉再检验剩余部分是否平稳。Python里可以用statsmodels的STL或者seasonal_decompose来做。这三种手段不是互斥的。一个序列往往需要先取对数稳定方差、再做季节调整、最后差分才能变成平稳序列。我在处理业务数据时常见流程是先看原始序列图→取对数如果方差随时间增大→季节分解→差分→ADF检验。每一步做完都画ACF图看一眼确保自己在正确的方向上。4. 常见问题与排查技巧实录4.1 白噪声到底是严平稳还是宽平稳这个问题问得最多。答案是独立同分布的白噪声既是严平稳又是宽平稳但“白噪声”这个词在不同领域的定义有细微差别。在时间序列分析里白噪声通常指零均值、恒定方差、不相关的序列不要求独立更不要求同分布。比如一个序列$X_t$满足$E[X_t]0$$\text{Var}(X_t)\sigma^2$$\text{Cov}(X_t, X_s)0$对$t \neq s$成立这就是白噪声。这种定义下白噪声是宽平稳的但不一定是严平稳的因为它没有保证分布不变。在信号处理领域白噪声经常被定义为“所有频率上有相同功率谱密度”的随机信号也是一个二阶意义上的概念。所以如果有人说白噪声是严平稳的你必须追问一句你指的是独立同分布的白噪声还是只是不相关的白噪声这两者的区别恰恰就是严平稳和宽平稳的区别。4.2 随机游走为什么是不平稳的随机游走$X_t X_{t-1} \varepsilon_t$其中$\varepsilon_t$是白噪声是理解非平稳最好的例子。很多人误以为它平稳是因为它的差分是白噪声看起来“很随机”。实际上随机游走不仅不是严平稳也不是宽平稳。看方差就能发现假设$X_0 0$那么$X_t \sum_{i1}^t \varepsilon_i$方差$\text{Var}(X_t) t\sigma^2$是随着时间增长的。这说明方差不是常数直接违反宽平稳的第二个条件。随机游走还有一个特点它的ACF图衰减极慢接近线性下降。这是因为当前值对未来的影响从不衰减每一个冲击都会永久留在序列里。这也是为什么ADF检验可以非常好地识别出随机游走——它的p值通常非常高无法拒绝单位根原假设。4.3 我的ACF衰减很慢序列就一定不平稳吗不一定。ACF衰减慢有三种常见原因对应的处理方法完全不同千万不能一概而论。第一种是序列确实有单位根比如随机游走。这种情况需要做差分才能变成平稳序列。第二种是序列有确定性趋势比如线性趋势。趋势项会让ACF看起来衰减很慢但它的本质是均值不是常数而非“单位根”。处理方法是对原始序列做回归去掉趋势项而不是差分。如果你对趋势平稳序列做差分会引入不必要的自相关结构反而让模型变差。第三种是序列存在长记忆性也就是分数维差分。比如一些水文数据、波动率序列它们的自相关函数虽然衰减但衰减速度是幂律的非常缓慢却仍然满足平稳性条件。这种序列用ARMA建模很难需要用ARFIMA这类长记忆模型。怎么区分这三种情况呢我的经验是先画时间序列图看趋势是否肉眼可见然后用ADF检验和KPSS检验交叉验证最后看差分后的ACF。如果一阶差分后ACF立刻掉进置信带大概率是单位根或趋势平稳如果一阶差分后ACF仍然缓慢衰减那可能是长记忆。4.4 宽平稳检验通过了但模型预测不稳定的排查思路这个问题在实际业务中很常见ADF和KPSS都通过ACF也快速衰减但模型上线后预测结果忽高忽低不稳定。很多人会怀疑模型选错了但我排查下来问题往往出在“宽平稳通过了但数据并不严平稳”这个隐蔽点上。典型的情况是数据的高阶矩结构在变化。比如一个业务指标均值和方差都很稳定但它的“爆发性”在不同时间段明显不同——有时候长时间稳定运行有时候频繁出现极端峰值。这个序列仍然可能是宽平稳的如果协方差结构稳定但你如果拿它做预测区间或者风险控制高估或低估尾部风险都是大概率事件。我的排查方法是四个字滚动分布。把数据按时间段切分每个时间段算分位数、偏度、峰度画成时间序列看是否稳定。如果偏度或峰度有明显趋势或断点就要小心了。这种场景下一个更稳健的做法是用GARCH类模型对波动率建模或者干脆在特征工程中加入波动率相关的变量让模型自己适应分布的变化。如果你做的是统计推断或者假设检验需要更严格地处理这个问题可以考虑区制转移模型或者结构突变检验比如Chow检验、Bai-Perron检验。这些方法能自动识别出均值或者方差发生结构性变化的时点帮你定位不稳定的根源。4.5 判断严平稳时最常见的三个错误第一个错误是把“图像看起来平稳”当成证据。我在前面已经演示过交替符号序列的样本路径和白噪声长得几乎一样但它不是严平稳。图形只能给你初步印象不能作为严格的统计依据。第二个错误是忽略高阶矩。很多人检验平稳性只看均值和方差不看峰度和偏度。在分析金融收益、网络流量这类厚尾数据时这是致命的。你可能做出了一个看起来很美的平稳性结论但你的模型在极端情况下会彻底失效。第三个错误是不检查变换后的序列。做数据分析几乎总是要预处理数据比如取对数、差分、归一化。每一步变换都可能改变平稳性。我经常看到有人对原始数据做了一堆变换最后建模时却拿原始数据的平稳性结论来背书这是不对的。无论你做了什么变换都必须对最终进入模型的序列重新做平稳性检验。5. 严平稳与宽平稳的选择策略总结5.1 什么时候只关心宽平稳就够了如果你的目标是预测均值、做回归分析、用ARMA类模型拟合数据宽平稳基本够用。因为这些方法的核心是捕捉序列的线性相关结构也就是自协方差函数而这正好是宽平稳锁住的信息。另一个适合宽平稳的场景是信号处理。滤波器设计、频谱分析、功率谱密度估计这些技术都建立在二阶统计量基础上不需要高阶矩信息。事实上Wiener-Khinchin定理告诉我们宽平稳过程的自协方差函数和功率谱密度构成傅里叶变换对这是整个信号处理的理论基石。你看宽平稳这个名字在信号处理领域几乎就是默认可用的假设。5.2 什么时候必须认真对待严平稳如果你的分析涉及分布本身或者你要对序列做非线性变换就需要严平稳来兜底。具体来说有三类场景第一类风险度量比如VaR和CVaR的计算它们依赖收益分布的分位数宽平稳无法保证分位数稳定第二类极值统计分析比如用广义极值分布建模年度最大损失这个理论框架要求极端事件的分布随时间稳定第三类马尔可夫链蒙特卡洛或者贝叶斯推断中的某些变换需要保证参数后验分布不随时间漂移。在这些场景中即便数据通过了所有宽平稳检验我仍然建议你多做一步把数据按时段拆开分别拟合分布用似然比检验或者KS检验看看不同时段的分布是否一致。如果分布不一致再平稳的二阶统计量也无法支撑你的分析。5.3 我个人在实际操作中的体会踩过很多坑之后我现在的习惯是任何时间序列数据到手先画图再看滚动统计量再做单位根检验三步走完心里才有谱。如果业务场景只做预测我会把主要精力放在宽平稳的确认上因为ARIMA类模型的预测效果足以应对大多数情况。如果业务场景涉及风险控制或者极端事件我会主动加上严平稳的检查哪怕只是滚动偏度和峰度这种粗糙的手段也能帮我挡住很多潜在的问题。还有一点想强调的是平稳性不是“是否”的问题而是“程度”的问题。真实数据总是非平稳的我们要做的是判断它偏离平稳有多远以及这种偏离是否会显著影响你的分析结论。当你把平稳性当成一个频谱而不是一个开关你看数据的方式会发生质的改变。5.4 后续可以继续探索的方向这篇文章只讲了平稳性的概念、检验和基础应用。如果你还想继续深入我建议沿着三条线走第一条线是长记忆过程。长记忆过程的ACF衰减是幂率的它介于平稳和非平稳之间非常有意思。你可以研究一下ARFIMA模型和分数阶差分它们能处理长记忆现象。第二条线是结构突变。平稳性检验的一个扩展方向是寻找突变点Bai-Perron检验、CUSUM检验都是很实用的工具。很多宏观数据、金融数据表面上看不平稳但实际上是几段平稳序列拼接起来的每段之间有一个跳跃点。识别这些突变点本身就有业务价值。第三条线是非线性时间序列。门限自回归模型、马尔可夫区制转移模型、平滑转移模型这些模型允许序列在不同状态之间切换每个状态下都可能是平稳的但整体上呈现出复杂的非平稳外观。这类模型很强大但参数估计比较繁琐适合有一定建模基础的人去尝试。数据是复杂的平稳性是它身上一层薄薄的外衣。把这件外衣掀开底下还有更多值得探索的结构。希望这篇文章能帮你把平稳性这件“外衣”看清以后面对时间序列数据时少一点困惑多一点笃定。