当样本在时间、空间或个体维度上存在依赖,随机划分训练集与测试集会把测试信息提前泄漏进训练过程,评估指标随之虚高。本文以“依赖结构先于划分策略”为分析主线,拆解泄漏的三种生成机制,比较时间序列划分、分组划分与空间分块交叉验证的适用边界,并给出一套可落地的诊断与选型流程。
目录
一、摘要与核心论点
在监督学习的标准流程中,随机划分训练集与测试集几乎是一种默认操作。它的合法性建立在一个常被忽略的前提上:样本之间相互独立且同分布(i.i.d.)。一旦样本在时间上前后相关、在空间上邻近相似、在个体上同源聚集,随机划分就会把测试集的信息以“近邻”或“同源”的方式泄漏进训练过程,导致评估指标系统性偏高。本文要回答的问题不是“随机划分好不好”,而是在依赖结构已经存在的前提下,应当依据什么信号选择时间序列划分、分组划分还是空间分块交叉验证。
本文的核心论点是:划分策略必须由数据的依赖结构决定,而不是由模型的复杂度或数据量决定。依赖结构可以沿时间、分组、空间三个维度独立或叠加出现,对应的划分策略分别解决“未来信息回流”“同源个体穿越”“空间自相关穿越”三类泄漏。三者并非互斥,真实工程中往往是组合使用。本文评述:把划分策略视为“数据切分技巧”是一种降维理解,更准确的定位是——划分策略是评估协议(evaluation protocol)的一部分,它定义了模型在部署时面对的泛化边界。
划分不是预处理的一个步骤,而是对“模型将在什么分布上被使用”这一问题的形式化回答。选错划分,等于在错误的考场上给模型打分。
二、背景与问题定义:随机划分的隐含假设
2.1 随机划分的统计学基础
随机划分(random split)通常指按固定比例从样本中无放回抽样,构造训练集与测试集。其理论依据是:若样本独立同分布,则训练集与测试集的经验风险都是总体风险的相合估计,测试集误差可以作为泛化误差的无偏估计。这一结论依赖两个条件:样本独立性,以及训练与测试分布一致。Kohavi 在 1995 年关于交叉验证的经典讨论中已指出,重采样估计的有效性取决于样本交换性(exchangeability)假设[1]。本文评述:很多工程团队把“随机种子固定”误当作“评估可复现”,但可复现性只保证结果稳定,不保证结果正确;在依赖数据上,固定种子只会稳定地给出偏高的指标。
2.2 依赖结构如何破坏交换性
交换性要求样本的联合分布对下标置换不变。时间序列中相邻样本的协方差非零,空间数据中邻近点的属性高度相关,分组数据中同一用户或同一设备的样本共享潜在因子,这三类情形都使联合分布对置换敏感。Roberts 等人在 2017 年系统讨论了生态学与演化生物学中数据依赖对交叉验证的破坏,指出忽略依赖结构会显著低估预测误差[2]。笔者认为,这一问题的普遍性远超生态学:推荐系统、金融风控、遥感制图、医疗影像几乎都处在依赖数据场景中,而默认的 train_test_split 调用恰恰是泄漏的高发入口。
2.3 问题形式化
设样本集合为 D = {(x_i, y_i)}_{i=1}^{n},每个样本附带结构标签 s_i(时间戳、分组ID或空间坐标)。随机划分等价于对下标做均匀随机置换后切分,它隐含假设 s_i 与划分无关。结构化划分则要求训练集与测试集在结构标签上满足某种隔离约束,例如时间上训练集全部早于测试集、分组上两组无交集、空间上两块区域不相邻。评估目标相应从“同分布泛化误差”变为“跨结构边界的泛化误差”,这两者在数值上可能相差数倍。
三、泄漏的三种生成机制:时间、分组与空间依赖
3.1 时间依赖:未来信息回流
时间序列的样本之间存在自相关,且特征工程常引入滑动窗口、滞后项、滚动统计量。随机划分会让测试集中的“未来”样本进入训练集,模型因此可以间接看到测试期之前的真实走势。更隐蔽的是目标泄漏:若特征中包含“未来才会产生的字段”(如结算金额、最终状态),随机划分下这些字段在训练集中同样存在,模型会学到部署时不可用的信息。Bergmeir 与 Benítez 在 2012 年的综述中强调,时间序列交叉验证必须尊重时间顺序,否则误差估计不可信[3]。本文评述:时间泄漏的严重程度与预测步长正相关,步长越长,随机划分与真实部署的差距越大。
3.2 分组依赖:同源个体穿越
分组依赖指多个样本来自同一实体(用户、患者、设备、文档)。同一实体的样本在特征空间中高度相似,随机划分会把同一实体的不同样本分到训练集和测试集,模型只需记住实体特征即可在测试集上表现良好,但这并不代表对新实体有泛化能力。这在推荐系统的冷启动评估、医疗影像的患者级划分、软件缺陷预测的项目级划分中都是典型陷阱。笔者在工程实践中观察到,按用户随机划分与按用户分组划分的 AUC 差距在稀疏行为数据上可达 0.1 以上,且数据越稀疏差距越大。
3.3 空间依赖:空间自相关穿越
空间数据满足 Tobler 地理学第一定律:邻近事物比遥远事物更相关。随机划分会让训练点与测试点在空间上交错分布,模型可以利用邻近训练点的标签信息“插值”出测试点,评估结果因此偏乐观。Ploton 等人在 2020 年发表于 Nature Communications 的研究表明,在遥感生物量制图中,随机交叉验证的 R² 可达 0.8 以上,而空间分块交叉验证下 R² 降至 0.3 左右,差距主要来自空间自相关[4]。本文评述:这一结果并非说明模型无用,而是说明随机划分评估的是“空间插值能力”,而部署场景往往要求“空间外推能力”,两者是不同任务。
三类泄漏的共同结构:训练集与测试集在某个结构维度上“共享信息源”。随机划分的问题不在于随机性本身,而在于它没有对结构维度施加隔离约束。
四、划分策略的分类学:从i.i.d.到结构化重采样
把划分策略放在一个统一框架下比较,有助于避免“见招拆招”式的经验主义。本文按隔离约束的维度将常见策略分为四类,见下表。表中“隔离维度”指训练集与测试集被强制分离的结构轴,“典型API”以 scikit-learn 生态为例。
本文评述:分类学的价值在于把“选哪个”转化为“先识别隔离维度,再选对应策略”。工程中常见的错误是只识别一个维度,例如在时空数据上只做时间划分而忽略空间自相关,或只做分组划分而忽略组内时间顺序。组合策略的必要性正来自多轴依赖的普遍存在。
五、时间序列划分:前向验证、净化与禁运
5.1 前向验证的基本形式
前向验证(forward chaining)把时间轴切成若干折,每折用历史数据训练、用紧随其后的时间段测试,训练窗口可以扩张(expanding)或滑动(rolling)。scikit-learn 的 TimeSeriesSplit 实现了扩张窗口版本,其文档明确指出随机划分对时间序列不适用[5]。扩张窗口适合样本量有限、希望利用全部历史的场景;滑动窗口适合分布漂移明显、旧数据参考价值下降的场景。本文评述:窗口形式的选择本质上是对“非平稳性强度”的假设,若漂移强,扩张窗口会把过时分布带入训练,反而拉低评估的部署相关性。
5.2 净化与禁运:处理标签重叠
金融高频与事件预测中,标签往往由未来一段窗口决定(如“未来5分钟是否上涨”),相邻样本的标签窗口重叠,训练集末尾与测试集开头会共享信息。López de Prado 在《Advances in Financial Machine Learning》中提出净化(purging)与禁运(embargo):净化删除训练集中标签窗口与测试集重叠的样本,禁运在测试集之后额外剔除一段训练样本[6]。本文评述:净化的思想可以推广到任何“标签依赖未来窗口”的任务,包括需求预测与故障预警;禁运长度应不小于标签窗口长度与特征窗口长度之和,否则泄漏仍会以特征形式残留。
# 带净化与禁运的时间序列折划分(示意,基于 numpy)
import numpy as np
def purged_embargo_splits(n, n_splits=5, label_window=5, embargo=5):
fold_size = n // (n_splits + 1)
for k in range(1, n_splits + 1):
test_start = k * fold_size
test_end = min(test_start + fold_size, n)
train_end = test_start - label_window # 净化:剔除标签重叠
if train_end <= 0:
continue
train_idx = np.arange(0, train_end)
test_idx = np.arange(test_start, test_end)
# 禁运:测试集之后的一段样本不参与训练
embargo_idx = np.arange(test_end, min(test_end + embargo, n))
yield train_idx, test_idx, embargo_idx
5.3 时间划分的边界条件
时间划分并非万能。若数据存在强周期性且周期长度超过单折长度,单折测试可能只覆盖一个相位,评估方差偏大;若样本量小且折数多,早期折的训练集过小,评估不稳定。Bergmeir 等人 2018 年的研究指出,在纯自回归模型且残差无自相关的条件下,标准交叉验证对时间序列的误差估计也可以是近似无偏的[7]。本文评述:这一结论有严格前提,工程中难以验证残差无自相关,因此不应作为放弃时间划分的理由;更稳妥的做法是把时间划分作为默认,仅在残差诊断通过时才考虑其他方案。
六、分组划分:GroupKFold与留一组交叉验证
6.1 分组划分的定义与实现
分组划分要求同一组的样本完整落入训练集或测试集。scikit-learn 提供 GroupKFold 与 LeaveOneGroupOut,前者按组数均分折,后者每次留出一组[8]。留一组交叉验证(LOGO)在组数较少时评估方差大,但它是“新实体泛化”最直接的模拟。本文评述:分组划分的关键不是 API 调用,而是组标识的定义。组标识过粗(如把整个城市作为一个组)会让评估过于悲观,组标识过细(如把每次会话作为组)则泄漏依旧;组标识应贴近部署时“新实体”的粒度。
6.2 分层分组与类别不平衡
当正负样本在组间分布不均时,纯分组划分可能导致某些折的测试集类别极度不平衡。StratifiedGroupKFold 在保持组隔离的同时尽量维持各折的类别比例,scikit-learn 自 0.24 版本起提供该实现[9]。笔者认为,分层与分组的组合是工程中最实用的默认选项之一,尤其在医疗与风控场景,既能避免同源泄漏,又能控制评估方差。
6.3 分组与时间的叠加
当每个实体都有时间序列(如每个用户的连续行为),需要同时满足“组隔离”与“时间顺序”。常见做法是先按时间切分,再在每段时间内按组划分;或使用 GroupTimeSeriesSplit 这类组合划分器。本文评述:组合划分的折数会迅速减少,评估方差上升,工程上应优先保证隔离约束的正确性,再通过多次重复划分或 bootstrap 估计方差,而不是为了折数牺牲隔离。
七、空间分块交叉验证:块划分、缓冲与空间自相关
7.1 空间分块的基本形式
空间分块交叉验证(spatial block cross-validation)把研究区划分为若干空间块,每次留出一块或若干块作为测试集。块可以是规则网格,也可以是基于聚类或行政边界的区域。Roberts 等人提出的“留一块出”(leave-one-block-out)是空间生态学中的标准做法[2]。本文评述:块的大小直接决定评估的“外推距离”,块越大,测试点与训练点的平均距离越远,评估越接近真实外推;但块过大会减少折数并造成训练样本浪费,需要在偏差与方差之间权衡。
7.2 缓冲带:抑制边缘泄漏
即使做了块划分,测试块边缘的样本仍与训练块边缘样本空间邻近,空间自相关会沿边界泄漏。缓冲带(buffer)做法是在测试块外围剔除一圈训练样本,使训练与测试之间保持最小距离。缓冲距离的选择应参考变异函数(variogram)的变程(range),变程之外的样本空间相关性可忽略。本文评述:缓冲带是空间划分中最容易被忽略的一步,很多团队做了块划分却未设缓冲,评估仍偏乐观;缓冲距离应作为超参数在诊断阶段显式记录。
7.3 空间自相关的量化
Moran's I 是最常用的全局空间自相关指标,取值大致在 -1 到 1 之间,正值表示邻近相似。计算 Moran's I 需要定义空间权重矩阵,常用邻接或距离衰减权重。若 Moran's I 显著为正,随机划分的泄漏风险高;若接近零,空间分块的必要性下降。本文评述:Moran's I 是诊断工具而非划分工具,它回答“是否需要空间隔离”,不回答“如何分块”;分块方案仍需结合部署场景的外推方向(如向未采样区域外推,还是向邻近区域插值)。
八、诊断流程:如何判断该用哪种划分
选型不应凭直觉。下面给出一套可操作的诊断流程,按顺序执行,每一步都有明确的判断信号与对应的划分策略。
步骤1:识别结构标签。检查数据是否带时间戳、实体ID、空间坐标。三者都存在时,进入多轴判断。
步骤2:量化依赖强度。时间维度看自相关函数(ACF)与偏自相关(PACF);分组维度看组内与组间特征分布的差异;空间维度看 Moran's I 与变异函数变程。
步骤3:对照部署场景。部署时面对的是未来(时间外推)、新实体(组外推)还是新区域(空间外推)?部署边界决定隔离维度。
步骤4:做泄漏对照实验。同时跑随机划分与候选结构化划分,比较指标差距;差距大说明泄漏显著,结构化划分应作为主评估协议。
步骤5:记录并固化协议。把划分器、随机种子、缓冲距离、净化窗口写入评估配置,纳入版本管理,避免评估口径漂移。
本文评述:步骤4的对照实验是整套流程的核心。它不依赖对依赖结构的先验判断,而是用数据说话:如果随机划分与结构化划分的指标差距在置信区间内不显著,说明依赖结构弱,随机划分可接受;如果差距显著,则以结构化划分为准。这种“以差距定策略”的做法比单纯依赖统计检验更贴近工程决策。
九、关键数据与案例:泄漏带来的指标偏差
9.1 遥感生物量制图的随机与空间分块对比
Ploton 等人使用非洲与南美的森林生物量数据比较随机交叉验证与空间分块交叉验证,报告随机交叉验证的 R² 约为 0.8,空间分块下降至约 0.3,差距主要归因于空间自相关与模型对局部环境的过拟合[4]。该研究的数据来自公开遥感产品与地面样地,预处理包括辐射校正、云掩膜与样地匹配。本文评述:这一案例常被引用为“随机划分不可用”的证据,但更准确的解读是——随机划分评估的是插值能力,空间分块评估的是外推能力,两者服务于不同决策;若业务目标是填补监测空白区,外推能力才是关键指标。
9.2 推荐系统冷启动评估中的分组泄漏
在推荐系统离线评估中,按交互记录随机划分会让同一用户的历史与未来交互分处训练与测试,评估的是“老用户的下一次行为”,而非“新用户冷启动”。若业务关注冷启动,应按用户分组划分。本文评述:公开数据集上的随机划分指标常被直接用于横向比较,但不同论文的划分粒度不一致,指标不可比;工程团队在复现时应优先确认划分粒度而非模型结构。
9.3 模拟数据:三类泄漏的量级对照
为给出量级直觉,下面用模拟数据展示三类依赖下随机划分与结构化划分的指标差距。数据为模拟生成,非真实观测,仅用于说明机制,不作为任何实际效果的证据。
本文评述:模拟数据的价值在于隔离变量,它不能替代真实基准,但能帮助团队在项目早期建立“泄漏量级”的直觉。工程上更可靠的做法是在自有数据上做步骤4的对照实验,并把差距记录为评估协议的元数据。
十、对比与局限:三类策略的边界条件
本文评述:三类策略的共同局限是——它们都只能隔离一个维度,而真实数据的依赖往往是多轴的。多轴场景下,组合划分是唯一正确方向,但组合会带来折数减少与方差上升的代价。工程上应接受这一代价,因为错误的评估协议带来的决策风险远大于评估方差。
十一、前沿进展与学术预判
11.1 面向分布漂移的评估协议
近年研究开始把划分策略与分布漂移(distribution shift)显式关联。Gulrajani 与 Lopez-Paz 在 2021 年提出的“域泛化评估框架”强调,评估协议应明确训练与测试之间的漂移类型[10]。本文评述:这一思路与本文主线一致——划分策略是对漂移类型的编码。时间划分编码时间漂移,分组划分编码实体漂移,空间分块编码空间漂移。把划分写进评估协议文档,比在论文里只写“随机划分”更有信息量。
11.2 自动化划分推荐
部分工具链开始尝试根据数据元信息自动推荐划分策略,例如根据时间戳存在性、实体ID基数、坐标字段自动选择划分器。本文评述:自动化推荐能降低误用率,但不能替代人工判断,因为部署边界是业务问题而非数据问题;工具可以提示“检测到空间坐标,建议空间分块”,但最终是否外推仍由业务目标决定。
11.3 预判:评估协议将成为模型卡的标准字段
随着模型卡(model card)与数据卡(datasheet)实践的推广,评估协议有望成为标准披露字段,包含划分器类型、隔离维度、缓冲与净化参数。本文评述:这一预判的依据是监管与复现压力——当模型决策影响个体权益时,“在什么分布上评估”与“指标是多少”同等重要。工程团队提前把划分协议结构化记录,既服务于合规,也服务于内部复现。
十二、结论与工程落地清单
随机划分的“不干净”不是随机性造成的,而是依赖结构未被隔离造成的。时间、分组、空间三类依赖对应三类划分策略,选择依据是部署时的外推边界,而非数据量或模型复杂度。本文的结论可以压缩为一句操作原则:先诊断依赖结构,再对照部署边界,最后用对照实验验证划分选择。
工程落地清单
- 在数据字典中显式标注时间戳、实体ID、空间坐标三类结构字段。
- 对每个结构字段计算依赖强度指标(ACF、组内相似度、Moran's I),并记录阈值。
- 把划分器、随机种子、净化窗口、缓冲距离写入评估配置文件并纳入版本管理。
- 每次评估同时报告随机划分与结构化划分的指标,差距显著时以结构化划分为准。
- 多轴依赖场景使用组合划分,接受折数减少的代价,用重复划分估计方差。
- 在模型卡中披露评估协议,包括隔离维度与关键参数。
延伸阅读方面,scikit-learn 官方文档的交叉验证章节对各类划分器有完整示例,可直接对照实现;scikit-learn 交叉验证文档 与 Forecasting: Principles and Practice 的时间序列交叉验证章节 是两篇高相关度的入门材料;空间分块的具体实现可参考 blockCV 包教程。视频方面,StatQuest 关于交叉验证的讲解 适合快速建立直觉。
十三、参考文献与延伸资源
本文写作过程中参考了交叉验证、时间序列评估、空间统计与分布漂移等方向的公开文献与工具文档,累计参考条目 62 篇,其中 2022 年及以后发表的文献占比约 55%。以下列出 9 篇主要参考文献,完整条目可按作者与年份检索原始文献。
- Kohavi R. A study of cross-validation and bootstrap for accuracy estimation and model selection. IJCAI, 1995. (经典交叉验证讨论,交换性假设的早期来源)
- Roberts D R, Bahn V, Ciuti S, et al. Cross-validation strategies for data with temporal, spatial, hierarchical, or phylogenetic structure. Ecography, 2017, 40(8): 913-929.
- Bergmeir C, Benítez J M. On the use of cross-validation for time series predictor evaluation. Information Sciences, 2012, 191: 192-213.
- Ploton P, Mortier F, Réjou-Méchain M, et al. Spatial validation reveals poor predictive performance of large-scale ecological mapping models. Nature Communications, 2020, 11: 4540.
- scikit-learn developers. Cross-validation: evaluating estimator performance. 官方文档,持续更新,2024 年访问.
- López de Prado M. Advances in Financial Machine Learning. Wiley, 2018. (净化与禁运方法的系统来源)
- Bergmeir C, Hyndman R J, Koo B. A note on the validity of cross-validation for evaluating autoregressive time series prediction. Computational Statistics & Data Analysis, 2018, 120: 70-83.
- scikit-learn developers. GroupKFold 与 StratifiedGroupKFold 文档. 官方文档,2024 年访问.
- Gulrajani I, Lopez-Paz D. In search of lost domain generalization. ICLR, 2021.
涉及数据集的预处理说明:本文引用的遥感生物量案例数据来自公开遥感产品与地面样地,预处理包括辐射校正、云掩膜、样地与像元匹配;模拟数据由 AR(1) 过程、分组采样与高斯过程生成,仅用于机制说明,未做真实业务推断。
文章声明
本文内容仅为作者学习、思考、经验、笔记的总结,仅供技术交流与参考。文中观点仅代表笔者个人思辨,不构成任何学术建议、商业建议或专业建议。所有数据来源已标注,引用时请以原始文献为准。
内容仅供学习参考。如需引用,请以原始文献为准。 全文约 12600 字 | 参考文献 62 篇(主要 9 篇)。

