z 分数,也就是欧拉 - 莫拉 (Euler-Mora) 分数,这东西在数据分析里是个“老古董”了,老得还当作它是个真正的统计学家才发现的发明,实际上它就是统计学里那些老家伙随手拿过来就能用的工具。咱们不用那些整规整齐的术语堆砌,今天咱们就聊聊它到底是个啥,如何算,还有它到底能不能用。 先说它的名字和定义。z 分数,全称 is the number of standard deviations from the mean,翻译成大白话就是“离均值的标准化距离”,而"z"就是英语里"z-score"的缩写。
这玩意儿的核心逻辑挺好办:它把某个数据点放在整个分布的位置上。
要是数据呈现正态分布,那么数值越大,说明它越远、越高;数值越小,说明它越近、越低。 举个孙笑川的例子,千万别认定他是个笑话,他只是个数据。假设我们有一个均匀分布的数据集,范围是 1 到 100。
要是我们想算 50 这个数值的 z 分数,那答案就是 0,出于均匀分布里中位数就卡在 50 这儿。但要是改成从 1 到 200 的均匀分布,50 那个值就偏低了,z 分数大约是 -1。
反过来,要是从 1 到 500 的均匀分布,50 就是个低分,z 分数大约是 -1.6。并且,这跟数据的分布形状彻底没关系,哪怕数据是归一化的标准正态分布,50 这个取值一辈子比 60 低一个正数,出于 60 本身就当作是“更高”的。 这个难题最费事的地方在于,z 分数不要求数据一定要符合正态分布,但反过来,它忒依赖正态分布了。
要是数据严重偏态,比如右偏,所有大数值聚集在一起,那么算出来的 z 分数就会歪歪扭扭,彻底丧失意义。
这时候,用标准差就来不及了,出于标准差本身也是基于正态分布假设推导出来的。
故此,z 分数实际上是个“双刃剑”,用得好是衡量分布位置的神器,用不好就是个靠天进食的算命先生。 那么具体如何算呢?公式就是:$z = frac{x - mu}{sigma}$。输入两个参数:均值 $mu$ 和标准差 $sigma$。
这个式子看起来好办,但实际操作起来坑多。最常见的毛病是忘了这一步:$x$ 务必得先标准化,要么说是“居中”处理。
比方说,要是你有一组数据,均值是 50,方差是 100(标准差 10),而你拿到一个 60 的数据点,直接算 $frac{60 - 50}{10} = 1$,这没错。但要是你拿到的是 30,算出来是 $frac{30 - 50}{10} = -2$。
这时候难题来了,平均数是 50,均值是 50,那 30 和 60 哪个离均值远?显然 60 更远,离得是 10 个单位,30 离得是 20 个单位。按 $z$ 分数算,60 是 +1,30 是 -2。
这就怪了,正态分布里,离均值越远,数值应当越大才对。
如何 30 反而比 60 小?显然不是 $x$ 本身的大小,而是 $x$ 相对于均值的偏差在缩小了。 再换个场景,要是数据是高度右偏的,均值 50,标准差 10。
这时候 60 看起来是个“超常”值,正态分布里算出来是 +1,但在这种偏态分布里,60 实际上是个低分,均值那是 50,60 靠近 50 了,故此 $z$ 分数得是 -0.2。而 30 呢,在正态分布里是 -2,但在这种偏态里,30 是个高分,接近 50 了,故此 $z$ 分数得是 +0.8。
这时候要是不做标准化,直接用原始数据算 $x - mu$,那 60 是 +10,30 是 -20。
显然,直接拿原始差值来除以标准差,彻底搞反了大小关系。
故此,这个公式里的 $x$,务必是中心化后的值,要么说是 $x - mu$ 这种“相对位置”的差。 还有一些特殊情况的处理也得提一下。
要是数据是离散的,比如从 0 到 100 的整数 0,1,2...100,这时候直接套用连续正态分布的公式就不中了。
这时候得先做离散化处理,比如用打散 (binning) 要么对数变换,把连续的数字变成连续化的数值,然后再算。
要么,你能够用 $z = frac{x - mu}{sigma}$,但这在离散数据上效果一般,往往需求更复杂的插值法。 另外,计算精度也是个难题。
要是数据里有 3 位小数,最终算出来的 z 分数可能有更多位小数。
有时候这个精度不够,害得排序要么后续分析出现细小的偏差,但大量时候这种偏差在工程上是能够忽略的,就连能够说是“随机的噪声”,就像在排队打号,每分钟多打一个号码,顺序可能慢了半拍,但大家都差不多。 最终总结一下,z 分数是个挺老挺实用的概念,它能把不同量纲、不同单位的数据转换到一个统一的坐标系里。算它的时候,核心就是除以标准差,分子是差值,分母是标准差。但切记,它不是万能的,它假设数据大体是正态分布的,要是数据严重偏态或双峰,那个分数就彻底变味了。
这时候,别死磕 z 分数,老老实实用箱线图要么直方图看看分布形状,按需选择工具,这才是数据的真本事。