趋近智
虽然一般的统计和机器学习效用指标提供了一个基础评估,但它们往往无法捕捉时间序列数据固有的复杂动态特性。时间序列数据集的特点是时间依赖性、趋势、季节性以及可能复杂的自相关结构。评估合成时间序列数据需要专门的方法,明确评估在生成过程中是否保留了这些动态特性。如果没有这种专门的关注,合成时间序列数据在其边际分布上可能看起来统计相似,但在用于预测或模拟动态系统时会表现不佳。
本节详细介绍了评估合成时间序列数据质量的方法,着重于其复制原始数据时间动态的能力。
时间序列数据的一个定义性特征是自相关性,即序列与其自身滞后版本的相关性。一个好的合成时间序列生成器应能复制这种结构。
评估时间序列数据的动态特性时,理解其自相关性是重要的。可视化和分析自相关性的主要工具是 ACF 和 PACF 图。
一个标准的评估实践是为真实和合成数据集生成 ACF 和 PACF 图并进行视觉比较。明显的差异表明合成数据未能捕捉真实数据中存在的短期和长期时间依赖性。
实施: Python 中的 statsmodels 等库提供了函数 (plot_acf, plot_pacf) 来方便地生成这些图。
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt # 或者使用plotly进行交互式绘图
# 假设 'real_series' 和 'synthetic_series' 是pandas Series
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
sm.graphics.tsa.plot_acf(real_series, lags=40, ax=axes[0], title='真实数据 ACF')
sm.graphics.tsa.plot_acf(synthetic_series, lags=40, ax=axes[1], title='合成数据 ACF')
plt.tight_layout()
plt.show()
# 对PACF图重复上述步骤
# sm.graphics.tsa.plot_pacf(...)
视觉比较有用但有主观性。为了进行定量评估,计算真实数据 (ACFR) 和合成数据 (ACFS) 在特定滞后 K 之前的 ACF 值。然后计算这些向量之间的距离指标,例如平均绝对误差 (MAE):
MAEACF=K1k=1∑K∣ACFR(k)−ACFS(k)∣较低的 MAE 表示自相关结构的保留更好。同样的方法也适用于 PACF。
示例真实和合成时间序列的自相关函数 (ACF) 值比较图,最高滞后为 20。紧密的一致性表明时间依赖性得到了良好的保留。
对于多元时间序列(随时间测量的多个变量),评估序列之间的关系与评估单个序列的自相关性同样重要。
CCF 衡量一个时间序列 xt 与另一个时间序列 yt−k 的滞后值之间的相关性。通过比较真实多元数据集和合成数据集之间的 CCF 图(或定量比较 CCF 值),可以显示变量之间的领先-滞后关系是否得到了保持。
实施: statsmodels.tsa.stattools.ccf 可以计算互相关。可视化这些需要为每对变量绘制 CCF。
许多时间序列显示出趋势(长期增加或减少)和季节性(在固定周期内重复的模式,例如每日、每周、每年)。
分解方法,例如使用 Loess (STL) 进行季节-趋势分解,将时间序列分为三个部分:趋势、季节和残差。
实施: statsmodels.tsa.seasonal.STL 提供了 STL 分解的实现。
from statsmodels.tsa.seasonal import STL
# 假设 'real_ts' 和 'synthetic_ts' 是带有 DatetimeIndex 的 pandas Series
# 并且 'period' 是已知的季节周期 (例如,对于具有每周季节性的每日数据,period=7)
stl_real = STL(real_ts, period=period).fit()
stl_synthetic = STL(synthetic_ts, period=period).fit()
# 绘制组成部分
fig, axes = plt.subplots(3, 2, figsize=(12, 8), sharex=True)
axes[0, 0].plot(stl_real.trend, color='#1c7ed6')
axes[0, 0].set_title('真实趋势')
axes[0, 1].plot(stl_synthetic.trend, color='#fd7e14')
axes[0, 1].set_title('合成趋势')
axes[1, 0].plot(stl_real.seasonal, color='#1c7ed6')
axes[1, 0].set_title('真实季节性')
axes[1, 1].plot(stl_synthetic.seasonal, color='#fd7e14')
axes[1, 1].set_title('合成季节性')
axes[2, 0].plot(stl_real.resid, color='#1c7ed6', alpha=0.7)
axes[2, 0].set_title('真实残差')
axes[2, 1].plot(stl_synthetic.resid, color='#fd7e14', alpha=0.7)
axes[2, 1].set_title('合成残差')
plt.tight_layout()
plt.show()
有时,时间序列的特性最好在频域中理解。功率谱密度 (PSD) 描述了序列的方差(功率)如何分布在不同的频率上。这对于具有非严格绑定到标准季节周期的振荡模式的数据尤其相关。
实施: scipy.signal.welch 通常用于 PSD 估计。
对数-对数图比较了示例真实和合成时间序列的估计功率谱密度 (PSD)。相似性表明合成数据捕获了频域特性。
与通用机器学习效用评估(第 3 章)类似,我们可以评估合成数据对预测这一特定下游任务的有用性。
如果用合成数据训练的模型表现与用真实数据训练的模型相当(并且明显优于朴素预测),则表明其对预测任务具有较高的效用。
除了比较整个序列,您还可以计算每个时间序列的各种统计特征(如果您有许多时间序列的数据集,例如不同商店的销售额),并比较真实数据集和合成数据集之间这些特征的分布。
特征示例:
一旦您为真实集和合成集中的每个序列计算了这些特征,您就可以将第 2 章中的分布比较技术(例如 KS-检验、Wasserstein 距离、通过直方图或密度图进行视觉比较)应用于这些特征的分布。这提供了不同的视角,可以判断合成数据是否捕获了原始时间序列集合的多样性和特性。
图示比较从真实和合成时间序列集合中计算出的统计特征分布的过程。
评估合成时间序列数据需要检查的不仅仅是静态分布检查。通过分析自相关、互相关、趋势、季节性、频谱特性和预测效用,您可以更全面地了解生成的数据是否真正捕获了原始时间序列的基本动态性质。结合视觉检查(如 ACF/PACF 图)和定量指标可提供最可靠的评估。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造