“竞争对手 X 在不同地方收取不同的价格”是价格分析中最常见的发现之一,也是最不可靠的发现之一。两个不一致的观察结果只能证明价格发生了变化,不能证明其原因。
价格出现差异,可能是因为购物者所在的位置、查看的时间,或是他们呈现出的身份。这是三种不同的机制,各自带有不同的商业和法律含义,而一个不加以区分的采集方案,会把这三者全部归因于分析师原本预期发现的那一个。
本指南的目的,是以一种经得起审查的方式检测价格差异:设计对比方案,使差异能够指向具体原因。
三种在电子表格中看起来一模一样的机制
地理定价。 价格取决于购物者所在的市场、地区或城市。不同的货币、税收和竞争条件使这种情况很常见,通常也不足为奇。
动态定价。 价格取决于时间:需求、库存、竞争对手的动作、一天中的时段。同一地点的两位购物者在不同时刻会看到不同的价格。
个性化定价。 价格取决于个体购物者的属性:设备、浏览历史、账户状态、会员等级,或某个模型对其支付意愿的估计。
星期一在市场 A 采集的单次观察,与星期二在市场 B 采集的单次观察,无法区分上述任何一种机制。这两次观察在地点和时间上都不同,可能连会话状态也不同。本指南的一切内容都由此展开。
原则一:每次只改变一个变量
检测本质上是一场实验。对每一次对比,除了你要测试的那个条件之外,其余所有条件都应保持不变。
| 测试目标 | 变化的变量 | 保持不变的条件 |
|---|---|---|
| 地理定价 | 市场或城市 | 时间、设备、会话状态 |
| 动态定价 | 时间 | 市场、设备、会话状态 |
| 基于设备的定价 | 设备配置 | 市场、时间、会话状态 |
| 会话或历史效应 | 会话状态(全新与已建立) | 市场、时间、设备 |
其中最重要的常量是时间,因为线上几乎所有价格都在持续重新定价。如果你想测试地理因素,来自不同市场的观察必须同时进行,间隔在几秒之内,而不是相隔一小时。否则动态定价会污染所有地理层面的发现。
原则二:先测量你自己的噪音
在断言两个市场存在差异之前,先确定同一个市场自身的差异有多大。
运行一组对照组:来自同一城市、同一时刻、设备配置相同、会话全新的两次观察。如果对照组本身就出现了不一致,那你看到的其实是 A/B 测试、轮换促销、缓存效应或随机定价,任何小于这种噪音的跨市场差异都毫无意义。
在一天内的不同时段以及不同产品上重复这组对照。市场内部差异的分布就是你的噪音基线,其他所有对比都要以此为参照来评判。
原则三:先重复,再下结论
一次同步对比仍然只是一次观察。真正的地理定价或个性化定价是持续存在的:相同的条件会一次又一次地产生相同方向的差异。
一个可行的标准是:在多天多个时段内重复每一次对比,只有当差异大于噪音基线、方向一致、并且在多次重复中都出现时,才将其视为真实差异。只出现一次、之后再也没出现过的差异,是噪音或商家一侧的实验,而不是定价政策。
排除伪装成个性化的混淆因素
大多数看似存在的价格歧视,一旦控制了以下因素就会消失。
货币。 用购物者所看到的显示货币进行比较,再用带日期的汇率进行换算。绝不能拿从一个市场换算得出的数字,去与另一个市场直接显示的数字比较。
税费显示方式。 有些市场显示含税价格,有些不含税。一个与增值税税率相符的 20% 差距,并不是一个定价决策。
运费与手续费。 商品价格更低但加上配送费,并不等于总价更低。尽可能捕获完整购物篮的总成本。
库存与款式差异。 同一个产品名称在另一个市场可能对应不同的款式、包装规格或型号。要按标识符匹配,而不是按标题匹配。
门店或履约分配。 拥有本地库存的零售商会按门店定价。城市层面的差异可能只是两家不同的门店,这是另一种形式的地理定价。
缓存页面。 缓存页面可能显示已经失效的价格。记录响应头,并优先使用未缓存的观察结果用于对比本身。
设计采集方案
采集层必须精确提供每次对比所需的条件,并且能证明它确实做到了这一点。
每个市场的真实观察点。 从一个国家的数据中心 IP 段发出的请求,看不到另一个国家购物者所看到的内容。带国家和城市定位的住宅代理可以提供本地观察点。使用 Shifter 网关时,市场信息写在针对 p.shifter.io:443 的凭据中:
customer-USERNAME-country-fr-city-paris-sid-trial-0412-a:PASSWORD
customer-USERNAME-country-fr-city-paris-sid-trial-0412-b:PASSWORD
customer-USERNAME-country-de-city-berlin-sid-trial-0412-c:PASSWORD
前两行是对照组:同一城市、不同会话、同一时刻发出。第三行是跨市场对比。
核实每一个出口。 记录每次观察的实际出口位置,而不是仅仅信任请求本身。出口落在错误城市的对比根本不算对比,这也是地理层面发现出错最常见的原因。
默认使用全新会话。 每次试验使用新的会话标识符,让每次观察都从干净状态开始。测试历史效应时,则应刻意在一系列页面浏览过程中保持同一个会话。这一区别在固定与轮换住宅代理中有详细说明。
一致的地区信号。 语言、时区和请求头应与出口所声称的市场相匹配,否则商家会看到一个不一致的访客,可能会提供默认内容。参见匹配代理地理位置、时区与语言环境。
同步发起请求。 同一组对比中的所有观察应一起触发,并将时间戳精确记录到秒,以便分析时确认它们的间隔是否足够接近。
每次观察应记录的内容
| 字段 | 重要性 |
|---|---|
| 产品标识符 | 保证对比的是同一件商品 |
| 显示价格、货币及计税方式 | 避免最常见的三种误判 |
| 运费和手续费 | 完整购物篮对比 |
| 请求的和已核实的出口位置 | 证明观察点 |
| 设备配置 | 隔离设备因素 |
| 会话状态 | 全新还是已建立,以及持续多久 |
| 精确到秒的时间戳 | 证明同步性 |
| 响应头 | 检测缓存页面 |
| 原始页面或截图 | 作为日后任何结论的证据 |
将观察背景纳入数据集的理由,详见观察点标准,而从不均衡的观察点集合中得出结论所带来的风险,详见你的住宅代理池是一个样本,而非整个互联网。
你能得出什么结论,又不能得出什么结论
外部观察可以证明,在特定、受控的条件下(某个市场、某种设备类型、某种会话状态),价格存在持续性差异。这是一个有力且有用的发现。
但它无法揭示背后的算法,也无法证明某个价格是专门针对某个个体设定的。要检测个体层面的个性化,需要以多个不同的真实客户身份去观察该网站,而为此创建账户或虚构身份可能违反商家的服务条款。结论应严格限定在受控对比实际能支持的范围内:应说”在这个市场,移动端价格持续更高”,而不是”该商家会对价格进行个性化”。
在商业或法律层面涉及重大利害关系时,请记住不同司法辖区的规则各不相同。例如在欧盟,经营者必须告知消费者,某个价格是否是基于自动化决策进行了个性化调整。你的发现可以为这类评估提供依据,但它们是证据,不是法律结论。
从检测到持续监测
一旦确立了某种定价模式,持续追踪比反复重新发现更有价值。以相同的控制条件、从相同市场持续采集的数据流,能把一次性研究变成竞争对手改变政策时的预警信号。运营层面的内容参见搭建实时竞品价格数据流,而这类效应最为显著的旅行定价领域,参见抓取机票和酒店价格。
常见问题
一项检测研究应该包含多少个市场?
以你的商业问题实际需要的数量为准,并以相同方式采集。五个市场配合对照组和重复测试,胜过二十个市场各观察一次。
同步观察之间需要间隔多近?
要近到商家自身重新定价不太可能在其间发生。对于变动迅速的品类,这意味着几秒之内,而不是几分钟。记录时间戳,并舍弃出现偏移的对比。
我能检测出基于浏览历史的个性化吗?
在一定程度上可以,方法是将全新会话与先浏览过特定路径的会话进行对比。将结论严格限定在受控会话所能证明的范围内,并遵守该网站的服务条款。
为什么我的对照组会出现不一致?
通常是 A/B 测试、随机促销或缓存造成的。这种不一致正是你的噪音基线,也是这项研究中最重要的数字。
结论
价格差异是一种表征,而非结论。要将其归因于地理、时间或个体购物者,需要每次只改变一个条件、同步发起对比、用同城对照组测量自身噪音、先重复再下结论,并剔除货币、税费、运费和款式差异带来的影响。
核实每一个观察点,记录完整的观察背景,并将结论严格限定在控制条件所能支持的范围内。产品介绍详见价格情报监测页面,价格详见定价页面。