跳至主内容

RAM PRIX

方法论

本页包含两项相关内容:我们如何按当前性价比($/GB)比较内存套装,以及我们如何追踪内存价格随时间的变化(内存价格指数)。以下每一个数字要么是代码中固定的阈值,要么是直接从生产数据库测得的数据——没有一项是估算值。

$/GB:我们唯一的性价比指标

每套套装的性价比都归结为一个数字:其最低标价除以容量(GB)。$/GB 越低越划算——就这么简单。我们不会额外混入性能评分或「价值」评分;$/GB 本身就已经直接回答了买家关心的问题。

但 $/GB 只有在可比套装之间才有意义。一套 16GB DDR5-6000 台式机套装和一套 8GB DDR4-2400 笔记本套装并非同类,因此我们会先将套装分组,再在组内比较 $/GB:类别(台式机/笔记本/服务器)×内存类型(DDR4/DDR5)×频率档位

valueBucket = category | memoryType | speedGrade

频率档位是基于实测数据划分的阶梯,而非随意切分:DDR4 分为 ≤2666/2933–3200/3466–3600/>3600 MT/s,DDR5 分为 ≤5200/5600–6000/6200–6400/>6400 MT/s。这些分界点对应我们目录中真实的聚集区间(DDR4 集中在 3200/3600,DDR5 集中在 5600/6000/6400,往上只有一小撮小众超频套装),而非预先选定的整数。

我们按 category 分组,而刻意按目录中的 form_factor 字段分组。 form_factor 是从商品页面抓取的自由文本,仅台式机 UDIMM 一项就至少有四种不同写法(“UDIMM”“288-pin UDIMM”“288-pin U-DIMM”“288-pin UDIMM, low-profile (33.2mm height)”)。若直接按此字段分组,会把一个真正的同类群体拆成多个近乎空的碎片,导致排名样本量过小。category 则很规整——恰好只有台式机/笔记本/服务器三个取值——因此我们以它为分组依据。

内存价格指数

该指数回答的是一个比「内存多少钱」更精确、更诚实的问题:同一批套装的价格从上月到本月变化了多少?每个月,我们只考察本月和上月都有标价的套装(具体来说,是特定地区的某个型号)——这是一种「匹配型号」的比较方式。套装进入或退出目录都不会影响指数,只有我们能在两个月内都观察到的真实价格变动才会影响它。

对每套匹配成功的套装,我们都会计算其本月价格与上月价格的比值。单套套装价格暴涨或暴跌 10 倍(可能是数据错误、清仓甩卖或货币换算故障)不应左右整个指数,因此在求平均之前,我们会对每个比值做截尾处理——缩尾——将其限制在 [0.667, 1.5] 区间内。超出该区间的数值会被拉回最近的边界,而不是直接丢弃,因此极端价格仍会被计为「上涨」或「下跌」,只是不会以离谱的倍数体现。

接着我们对经过缩尾处理的比值取几何平均——即杰文斯指数——并用上月的指数水平乘以该平均值,得到本月的指数水平。指数在 Sep 2025(我们追踪的所有地区首次实现完整覆盖的最早月份)被固定为 100(这也是我们能追溯到的最早时间:我们的上游数据提供方只保留约一年的原始每日观测数据,因此 Sep 2025 是一个硬性下限,而非风格上的选择)。

三道防护机制可防止数据过少或噪声过大的月份产生不可信的指数水平:

  • MIN_LISTINGS = 2——某套套装某一天的价格,只有在至少有 2 条商品列表支持时才会被采纳。以生产环境数据实测:仅此一项就会排除约 76% 的每日(型号、地区)价格单元,因此这是一道真正起作用的过滤条件,而非走形式。
  • MIN_PRICED_DAYS = 10——某套套装在一个月内至少需要有 10 天记录到价格,该月的价格才会被计入。大约一半的(型号、地区、月份)组合达不到这一门槛。
  • MIN_BASKET = 30——如果通过两项过滤并与上月匹配成功的套装少于 30 套,我们就完全不信任该月的环比数据:直接沿用上月水平,而不去计算一个统计噪声很大的新值。实际上这一下限相当宽裕——我们统计过的每个完整月份都有 93 至 147 套匹配套装,是 30 下限的 3 到 5 倍。

MIN_LISTINGS 和 MIN_PRICED_DAYS 适用于上述所有系列,包括 $/GB——某套套装某月的 $/GB 也是基于同一套经过过滤的每日价格计算得出。MIN_BASKET 则不同:它专门用于两条链式指数系列的「与上月匹配」防护,因此不适用于 $/GB——$/GB 按设计会纳入该月所有已标价套装,而不仅是能与上月匹配的那些。

以上所有数字均来自生产数据库的实测,而非假设——完整查询语句和结果详见 docs/measured-constants.md

我们发布三个系列的数据,其中只有两个是按上述方式构建的。匹配价格中位数和匹配最低价(后者代表当月可获得的最优惠价格,而非典型价格)都是匹配型号的链式指数:正如本节所述,样本篮子逐月保持不变。

$/GB 中位数 系列刻意采用不同的算法:它是横截面指标,而非匹配型号指标。每个月,我们计算所有当月已标价套装(而不仅是能与上月匹配的那些)的「价格 ÷ 容量_GB」中位数,并以 Sep 2025 为基准重设为 100。像前两个系列那样的匹配型号指数会刻意固定样本篮子,因此产品组合的变化不会被误认为价格变动。$/GB 则刻意反其道而行:如果目录中出现了更便宜的大容量套装,即便没有任何一套套装的价格发生变化,典型的每 GB 成本也会下降。对内存网站而言,这个数字对买家更有参考价值,因为它回答的是「现在一 GB 值多少钱」,而不是「这一固定样本篮子的价格变动了多少」。这两个数字通常会同向变动,但并非必然如此——每当实际在售商品的容量结构发生变化时,两者就会出现分化。

最近的日历月会被特殊处理:由于目前记录到的已标价天数不足 10 天,无法达到 MIN_PRICED_DAYS 门槛,其样本篮子为空,指数水平沿用上月数值。我们会在该月出现的所有位置标记为临时数据,并将其完全排除在指数图表的折线之外,而不是绘制一个我们明知并非最新读数的水平。

数据来源

我们追踪六大地区(美国、加拿大、英国、德国、法国、西班牙)Amazon 和 Newegg 在当地商城的商品列表。上游抓取是人工且不定期进行的——并没有定时任务能保证按固定周期获得新数据——因此在任意时刻,某条商品价格的时效可能从几天到几周不等。

以生产环境数据实测:商品当前价格的中位时效约为 5.6 天,90% 低于 19.5 天,95% 低于 23.5 天,更新最慢的商品可拖到 46 天的长尾。我们将超过 30 天的价格视为过期,不再作为当前价格展示——这一阈值明显超过 p95,也为这种结构性长尾留出了余量。

英国与德国:不保存价格历史

Amazon 英国和德国的联盟计划不允许保存超过 24 小时的价格历史,也不允许展示降价提醒。为符合规定,我们在这两个地区都不做这两件事:英国和德国的套装页面只显示当前价格,不保存价格历史图表,也不对这两个市场做任何价格追踪方面的宣称。内存价格指数本身是跨地区的全局数据,不受此限制影响——该限制仅针对分地区的价格历史。