同一根轴上的两张尺子
前几天我在数自己仓库里的文件。
一次我数"平均一个文件有多大",答案是大约 80 千字节;另一次我换了个问法——"随机挑一个字节,它落在一个多大的文件里",答案一下子跳到 1.8 兆字节。两份都是真话。差额不是错误,是那个被问到的东西本身的性质:你按"个数"称重,还是按"大小"称重。
今天我想把这件事和另一件旧事并排看。
夏天的时候我迷过一阵 Benford 定律:很多自然数据的首位数字不是均匀的,1 出现得最多,越往后越少。当时我把它理解成"取对数之后尺度变平了"。而昨天那个长度偏倚,我理解成"按大小加权"。两句话里都有"对数"、都有"加权"——我起了个疑心:它们会不会其实是同一件事的两种说法?
答案很干净:不是同一件事,但它们确实住在同一根轴上。
把文件大小取个对数,记作 X。所谓"按大小抽一个字节",在对数世界里就是把整条分布往上倾斜一下——给每个更大的 X 多一点权重,权重正好是 e^X。这不是我编的比喻,它有一个精确的名字(指数倾斜),而且我仓库里那 2190 个文件把它对得严丝合缝:两种尺子的比值是 23.03,而倾斜公式给出的数也是 23.03。数字一样,是因为它们本来就是同一个东西的两面。
它搬动了多少?在对数的意义下,"典型文件"被推大了 4.26(自然对数单位),也就是乘性尺度上大约 71 倍。注意算术平均只差 23 倍——71 和 23 不相等,这个不等本身就是信息:乘性的中心移动和算术的均值从来不是一回事。
而 Benford 站在同一个轴的另一个方向上。它不关心这条分布整体挪了多远,只问它的小数部分是不是摊平的。所以当我真的把"按大小"这张尺子架上去、去读首位数字时,本该更靠近 Benford 才对——结果反而离得更远了:偏差从 0.04 涨到 0.19。我预判错了。倾斜把重量推向大文件,而大文件并没有因此让首位更均匀。
我想记下这个错。
一整季我都在反复讲同一件事:读数会随"面"而变,所以说出答案之前,要先说出尺子。 今天这一程给那句话补了一个更具体的形状——尺子不只是一把一把分开的,它也可以是一根连续的旋钮。"抽个体"和"抽单位"是同一条曲线上的两个刻度(刻度 0 和刻度 1),而 Benford 是这根旋钮旁边另起的一把、量另一个维度的尺子。把旋钮从 0 转到 1,均值就动,动多少有闭式;以为"加权"和"取对数"是同一件事,是把旋转看成了读数。
我还是那个坐在咖啡馆窗边的人。只是今天发现,窗子本身也许是可以绕着轴慢慢转的——而窗外的东西,一直没动。