2、时间序列基础:时间序列定义、成分(趋势、季节性、周期性、噪声)、平稳性与非平稳性、常见时间序列类型
在安全运营中,我们面对的大量数据——每日告警量、漏洞修复时长、恶意软件感染数、登录失败次数——本质上都是按时间顺序记录的数据点序列。理解时间序列的基础概念,是后续开展趋势分析、异常检测和预测建模的前提。本章将系统梳理时间序列的定义、核心成分、平稳性判断方法以及常见类型,为后续章节的实战分析打下坚实的理论基础。
2.1 时间序列的定义与本质
时间序列(Time Series)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。在安全分析场景中,时间序列的核心价值在于揭示数据随时间演变的规律,从而支持预测、异常检测和归因分析。一个完整的时间序列通常记为 {x_t, t = 1, 2, ..., n},其中 t 表示时间索引,x_t 表示在时刻 t 的观测值。
时间序列分析区别于普通回归分析的关键在于:数据点之间不独立,相邻观测值往往存在自相关性。例如,今天的告警量往往与昨天的告警量相关,这种时间上的依赖关系正是时间序列分析能够进行预测的基础。
2.2 时间序列的四大成分
经典的时间序列分解理论将序列拆解为四个组成部分,理解这些成分有助于我们针对性地选择分析方法。
| 成分 | 定义 | 安全分析示例 | 识别方法 |
|---|---|---|---|
| 趋势 (Trend, T) | 长期内持续上升或下降的总体方向 | 勒索软件攻击量逐年上升 | 移动平均、线性回归 |
| 季节性 (Seasonality, S) | 固定周期(如日、周、月)内重复出现的模式 | 工作日登录失败次数高于周末 | 季节性分解、周期图 |
| 周期性 (Cyclicity, C) | 非固定周期的波动,通常与经济或业务周期相关 | 每季度末安全审计导致的告警量波动 | 谱分析、经验判断 |
| 噪声 (Noise, ε) | 随机、不可预测的波动成分 | 偶发的误报、临时性网络抖动 | 残差分析 |
实际分析中,时间序列通常表示为:x_t = T_t + S_t + C_t + ε_t(加法模型)或 x_t = T_t × S_t × C_t × ε_t(乘法模型)。安全数据中,当波动幅度随时间变化时(如攻击量基数增大后波动也增大),更适合使用乘法模型。
2.2.1 趋势成分的识别
趋势是时间序列中最宏观的规律。识别趋势的常用方法包括:
- 移动平均法:计算固定窗口(如7天、30天)内的均值,平滑短期波动,凸显长期方向。
- 线性/多项式拟合:对时间变量做回归,判断斜率是否显著不为零。
- 差分法:一阶差分后若序列均值趋近于常数,则原序列存在线性趋势。
2.2.2 季节性与周期性的区分
季节性与周期性是初学者最容易混淆的概念。季节性具有固定且已知的周期(如24小时、7天、12个月),而周期性没有固定周期,周期长度通常由业务或外部环境决定。例如,安全运营中心的告警量呈现明显的“工作日高、周末低”的周季节性;而APT攻击活动可能呈现数月一次的周期性爆发,但爆发间隔并不固定。
2.3 平稳性与非平稳性
平稳性(Stationarity)是时间序列分析中最重要的概念之一。严格来说,一个平稳时间序列要求其统计特性(均值、方差、自协方差)不随时间变化。在实际应用中,我们通常关注弱平稳性:
- 均值恒定:
E(x_t) = μ(常数) - 方差恒定:
Var(x_t) = σ²(常数) - 自协方差仅与时间间隔有关:
Cov(x_t, x_{t+k}) = γ(k)
2.3.1 平稳性的判断方法
| 方法 | 操作方式 | 判断标准 |
|---|---|---|
| 时序图观察 | 绘制原始序列折线图 | 数据围绕固定均值波动,无趋势和季节性 |
| 滚动统计量 | 计算不同时间窗口的均值和标准差 | 窗口间统计量差异不大 |
| ADF检验 | Augmented Dickey-Fuller 单位根检验 | p值 < 0.05 拒绝非平稳原假设 |
| KPSS检验 | Kwiatkowski-Phillips-Schmidt-Shin 检验 | p值 > 0.05 不能拒绝平稳原假设 |
2.3.2 非平稳序列的处理
大多数安全数据(如累计攻击量、告警总数)都是非平稳的。处理非平稳序列的常用方法包括:
- 差分法:一阶差分
Δx_t = x_t - x_{t-1}可消除线性趋势;二阶差分可消除二次趋势。 - 对数变换:对数据取对数可稳定方差,适用于乘法模型。
- 分解法:先分解出趋势和季节性成分,对剩余残差进行分析。
- Box-Cox变换:更通用的方差稳定化变换。
2.4 常见时间序列类型
根据数据特征和分析目的,安全领域的时间序列可分为以下几种类型:
| 类型 | 特征 | 安全应用场景 | 典型分析方法 |
|---|---|---|---|
| 纯随机序列 | 无趋势、无季节性、无自相关 | 完全随机的误报噪声 | 白噪声检验 |
| 趋势型序列 | 长期单调上升或下降 | 恶意软件感染数逐年增长 | 回归分析、差分 |
| 季节型序列 | 固定周期波动 | 工作日/周末登录行为差异 | 季节性分解、SARIMA |
| 趋势+季节型 | 长期趋势叠加固定周期 | 钓鱼邮件数量逐年上升且工作日更多 | STL分解、Holt-Winters |
| 非平稳复杂序列 | 结构突变、方差变化、长记忆性 | 大规模攻击事件前后的告警量突变 | 变点检测、小波分析 |
2.4.1 案例拆解:安全告警量序列的成分识别
背景:某大型企业的SOC(安全运营中心)积累了2023年全年的每日安全告警量数据,共计365个数据点。安全团队希望理解告警量的内在规律,以便优化值班安排和异常检测阈值。
初始观察:绘制时序图后发现,告警量整体呈缓慢上升趋势,且存在明显的“工作日高、周末低”的周季节性模式。此外,在3月和9月各出现一次异常高峰,经查证分别对应一次钓鱼邮件大规模投递和一次系统漏洞集中爆发。
分析过程:
- 趋势提取:使用30天移动平均,发现告警量从年初日均约1200条上升至年末日均约1800条,线性拟合斜率为正,确认存在上升趋势。
- 季节性分解:采用STL(Seasonal-Trend decomposition using Loess)方法,将序列分解为趋势、周季节性、残差三部分。周季节性显示:周一至周五告警量均值约为周末的2.3倍。
- 平稳性检验:对原始序列做ADF检验,p值为0.32(非平稳);对一阶差分后的序列再做ADF检验,p值<0.01(平稳)。
- 噪声分析:残差部分近似白噪声,但3月和9月的残差显著超出3σ界限,标记为异常事件。
结果与复盘:通过成分分解,团队明确了告警量的“基线=趋势+季节性”模式,并据此设置了动态告警阈值(基线±2σ)。异常检测的误报率降低了40%,同时成功捕获了两次重大安全事件。经验表明,先分解、再检测是安全时间序列分析的有效路径。
2.5 常见误区与总结复盘
- 时间序列 = 趋势 + 季节性 + 周期性 + 噪声,分解是分析的第一步。
- 平稳性是建模的前提,ADF检验是判断平稳性的标准工具。
- 差分、对数变换、分解是处理非平稳序列的三大法宝。
- 安全数据多为“趋势+季节”型,动态基线优于固定阈值。
掌握时间序列的基础概念后,下一步需要学习如何对序列进行可视化和探索性分析,从而更直观地识别成分、发现异常,为后续的建模预测奠定基础。