地区均价下降,有时只是因为今天没采到高价地区。发布价格趋势前,应核对两期是不是同一组计划地区、权重是否保持一致,以及其中多少样本真正取得了合格观察。即使剩余地区的涨跌幅计算完全正确,也不能据此判断缺失地区发生了什么。
本文面向持续交付授权价格监测报告的团队,帮助你决定:发布全样本趋势、仅说明有明确范围的子集变化,还是暂缓报告。这里不建议自动改价,也不会仅凭观察缺失就认定代理服务商出了问题。
采集前,先固定报告口径
把样本面板定义为一份带版本号的“地区与报价对象”清单。下面的例子中,四个虚构地区各有一条同款、同单位商品报价;每个地区的基期与本期报价,必须保持货币、客户资格、目的地和含税含运费的价格口径一致,并在约定的可比时间窗口采集。商品匹配与费用完整性应先通过可比价格检查。
为每个计划地区设置固定权重,并记录业务理由。等权回答的是“各地区同等重要时怎样变化”;有证据的销售占比权重回答的是另一个问题。成功请求次数不能充当销售占比。报告中应保留样本版本、权重版本、价格口径、时效要求和负责人。增加地区应审核并形成新版本,不能偷偷用新地区替换失败地区。
每个计划对象都应保留一行,缺失或过期的观察也不例外。价格与证据状态分列:缺失不等于零元、不变价,也不证明缺货。已有依据的零元报价是真实数值;但本文按价格比值计算的指标要求基期价格大于零,基期免费时需要另行定义指标。
复算一次误导性的“价格下降 12%”
下表价格全部虚构,采用同一货币以及可比的单件含税含运费口径。四个地区各占 25%,只是教学示例的设置,不代表客户数据、真实市场价格、收入占比或 IPHTML 实测结果。
| 地区 | 固定权重 | 基期报价 | 本期合格观察 | 地区内变化 |
|---|---|---|---|---|
| A | 25% | 80 | 88 | +10% |
| B | 25% | 100 | 110 | +10% |
| C | 25% | 120 | 132 | +10% |
| D | 25% | 200 | 未知 | 未知 |
昨天 A–D 的简单均价为 (80 + 100 + 120 + 200) / 4 = 125,今天只观察到 A–C,均价为 (88 + 110 + 132) / 3 = 110。把不同样本直接相比,得到 110 / 125 - 1 = -12%。然而,三个真正能配对的地区都上涨了 10%。变化的是样本构成,不能据此断言计划监测的地区整体降价。
本文为报告选定的指标是:各地区相对基期涨跌幅的固定权重算术平均值。它不是“平均价格本身的涨跌幅”;当地区涨跌幅不一致时,两者是不同指标。四个地区观察齐全、都上涨 10% 时,本指标为 +10%;D 缺失时,全样本结果仍然未知。
r[i] = 本期价格[i] / 基期价格[i] - 1
C = 两期均有合格观察的地区原始权重之和
K = 这些地区的 原始权重[i] × r[i] 之和
已观察子集涨跌幅 = K / C,前提是 C > 0
全样本涨跌幅 = K,前提是所有计划的正权重地区均已观察
本例:C = 0.75;K = 0.075;已观察子集涨跌幅 = +10%
全样本涨跌幅 = 未知
子集计算只对已观察权重重新归一化,必须明确标注。不能把它命名为“全部地区”,也不能将缺失的 25% 写成零贡献。样本数量覆盖率与权重覆盖率都应展示。本例恰好都是 75%;如果各地区权重不同,两种覆盖率可能相差很大。
覆盖率很高,也不代表没有偏差
剩下的三个地区可能只是比较容易采集,而不是缺失地区的随机代表。D 可能上涨、下跌、改变了交易条件,或者暂时无法访问。仅凭现有观察,换服务商或多发请求都不能回答这个问题。即使团队内部批准了“覆盖率达到 90%”的规则,它也只是运营门槛,不能证明缺失部分与已观察部分表现相同。
仅作敏感性演示,假设 D 的涨跌幅可能在 -40% 到 +10% 之间。那么全样本指标可能从 0.075 + 0.25 × (-0.40) = -2.5%,到 0.075 + 0.25 × 0.10 = +10%。涨跌方向都可能改变。这个范围是明确假设,不是实测或统计估计,更不是置信区间;如果没有可辩护的边界,就继续把全样本结果保留为未知。
不要悄悄沿用昨天的价格,因为这相当于假设缺失地区没有变化。美国劳工统计局关于插补的说明表明,对缺失价格进行统计估计是一套带假设的明确方法,区别于实际采集;其CPI 计算文档也明确规定了汇总权重和公式。本文的简单等权地区指标没有复现 CPI,也不代表整个市场。示例采用保守的发布规则:覆盖不完整,就不发布全样本数值。若另行使用估计流程,需要独立制定假设、验证方法和估计标识。
运行六种情形,核对发布结论
下载 Python 离线练习,阅读后用 Python 3.9 或更高版本执行。脚本使用标准库的十进制计算,不发起网络请求,也不修改采集系统或价格。
python3 regional-price-coverage-bias.py
| 相互独立的虚构情形 | 权重覆盖率 | 已观察子集涨跌幅 | 全样本结果与处理 |
|---|---|---|---|
| A–D 都上涨 10% | 100% | +10% | +10%,交给报告负责人复核 |
| D 缺失 | 75% | +10% | 未知,暂缓全样本结论;不同样本的简单均价却会显示 -12% |
| A 缺失,B–D 上涨 10% | 75% | +10% | 未知,暂缓;不同样本的简单均价会显示 +23.2% |
| 另一种恢复结果:D 确认为 120,A–C 为 88/110/132 | 100% | -2.5% | -2.5%,交复核;这是独立假设的恢复情形,不是对 D 隐藏价格的证明 |
| D 确认为零元报价,A–C 上涨 10% | 100% | -17.5% | -17.5%,交复核;零元被保留,没有当作缺失丢弃 |
| D 存有 220 的报价,但证据已过期 | 75% | +10% | 未知,暂缓;存有数值不等于满足本期观察窗口 |
运行结果应有 3 个 REVIEW_FULL_PANEL 和 3 个 HOLD_FULL_PANEL。另有 5 项反例检查:拒绝重复记录、未经批准的替换地区、零元基期及错误权重,并确认全部缺失时不会产生价格信号。进入复核不等于自动批准:脚本信任输入的证据状态与可比性假设,不会到商家核实,也不能自行判断零元报价的业务含义。
让覆盖情况成为客户收到的报告的一部分
- 把分母写出来。包括样本与权重版本、两期时间窗口、计划和已观察对象数量、已观察权重以及缺失地区。把“现有报价的描述性均价”与“固定样本涨跌指标”分开说明。
- 按正确范围暂缓结论。在本文规则下,覆盖不完整就暂缓全样本结论。经复核的说明仍可写“A–C 上涨 10%;D 暂缺;已覆盖计划权重的 75%”,但不能暗示全市场变化,也不应触发自动改价。
- 给证据缺口指定负责人。区分访问许可、请求失败、证据过期、页面字段变化和交易条件变化。字段异常交给记录质量检查,地区上下文问题参考地域测试矩阵。先找到失败环节,再判断是否与代理有关。
- 在获准且有效的时间范围内补充证据。可使用批准的数据源、允许的重试或人工确认,但必须仍能满足报告时间口径。较晚的报价不能悄悄替代较早窗口;发布后取得新证据时,应给出带标识的修订,并保留原来的覆盖记录。
- 扩容前先复查有效覆盖。把完整可比样本组数、暂缓报告数和缺失权重原因,与成功请求数一起观察。重复采到容易地区,不能补上缺失地区。可结合月度使用复盘,判断更换线路或套餐是否真正针对当前瓶颈。
报告记录可采用:样本版本|权重版本|两期窗口|配对对象|已观察权重|缺失原因|子集结果|全样本结果|发布或修订负责人。敏感来源证据应放在受控记录中,不进入公开报告或分析事件。
如果缺口确实来自获准业务对某个地区网络的观察需求,可以针对缺失地区评估住宅代理方案,并与 IPHTML 确认地区、允许访问的数据源、频率和验收条件,核实适用性后再投入。IP 地址不能证明商品身份、收货目的地、货币、时效或访问权限。已有 API、授权数据源或直接获准访问能够提供充分证据时,就继续使用。本练习不对 IPHTML 的地区覆盖、成功率、节省成本或客户续费作任何实测结论。