结论是:在百度安全检测相关数据存在延迟时,稳定的观察窗口不能由自然日或固定小时数直接决定,而应由一个可验证的“延迟上界”来定义,即连续多个采样周期内指标不再发生方向性变化的最短时间跨度。如果延迟上界无法估计,任何窗口都只是猜测。下面给出一个可操作的判断路径,以及一个会让结论失效的反例。
百度安全检测的判定结果、抓取记录和站内日志往往来自不同链路,到达时间并不一致。定义窗口的第一步不是选一个好看的时长,而是估计最慢的那条链路要多久才能把一次变化传导到观察指标上。做法是:对同一批被检测对象,记录每次状态变化首次出现的时刻,以及它在下游指标中首次可见的时刻,取这些差值的最大值作为延迟上界的候选。
只有当下游指标的最近一次变化时刻,加上延迟上界,仍然早于当前时间,这段数据才具备被当作“已稳定”的资格。换句话说,窗口的右边界不是现在,而是“现在减去延迟上界”。这一步的产出是一个具体的时间点,而不是一个模糊的“观察几天”。
把稳定理解成数字一动不动,会得出过短的窗口;把稳定理解成“看着差不多”,又会掩盖真实变化。更可用的定义是:在窗口内,指标的方向性变化(升、降、持平)不再出现交替,且每次采样的差异落在已知的延迟抖动范围内。
这个动作的结果直接影响下一步:窗口被确认稳定后,才能把窗口内的均值或末值作为基线,用来判断后续变化是否异常。基线不稳,后面所有对比都不可信。
假设(仅为说明方法,非真实数据)某批样本的状态变化在站内记录中最多滞后六小时出现在观察指标里,采样间隔为两小时。那么当最近一次方向翻转发生在十小时前,且此后连续五次采样方向一致,此时可认为窗口已稳定,窗口右边界取当前时间减六小时。若最近一次翻转只发生在三小时前,即使数值看起来平稳,也不能据此下结论,因为延迟尚未走完。
这个例子的价值在于:窗口长度不是拍脑袋定的,而是由延迟上界和翻转停止时间共同推出。换一个延迟上界,窗口长度随之改变。
如果只用一两个被检测对象估计延迟上界,得到的窗口在规模化后很容易失效。反例是:个别页面因为访问频率低、抓取路径短,延迟表现为两小时;当样本扩展到大量页面时,其中一部分走的是更慢的链路,真实延迟上界远高于两小时。此时按两小时定义的窗口会把尚未稳定的数据当成稳定,导致误判。
识别这个反例的信号是:规模化后窗口内的方向翻转次数明显多于小样本阶段。这不是算法变了,而是延迟分布变宽了。遇到这种情况,不能简单延长窗口了事,而应先按链路或对象类型分层,分别估计延迟上界,再决定是否共用同一个窗口。
下一步是:先用分层后的延迟上界重算窗口右边界,再检查窗口内是否仍有方向翻转。若翻转消失,可把该窗口作为基线;若翻转仍在,说明当前分层还不够细,或采样间隔过密引入了噪声。需要说明的是,第三方估算流量、搜索引擎报告和站内统计口径本就不同,不能用其中一个指标的稳定去推断另一个也已稳定,更不能据此还原搜索算法的具体行为。窗口只解决“这段数据能不能用”的问题,不解决“变化由什么引起”的问题。