分享

准确率、精确率、召回率,困惑HR的考核指标在IT圈找到答案

 TF男孩 2022-12-01 发布于山东

一、从绩效考核说起

绩效考核,是很多人力资源从业者(HR)的噩梦。这在IT行业尤为突出。

我见过很多IT公司的HR,因为思考如何对程序员做考核,掉光了头发。直到他们回到劳动密集型企业,又重新长出了浓密的黑发。

很多HR在对程序员们做绩效考核宣讲的时候,都会面临舌战群狮、虎、豹、大象,最后无言以对,自残而退。

其实,他们纠结的问题基本上就是:质与量,到底该如何衡量和判断。

我觉得对程序员,就要用程序员的方式去考核。只有这样,才能做到无懈可击,令其信服。

下面我就来讲讲,程序员是如何给一套程序做“绩效考核”的。

他们给程序做考核时,也是有指标的。而这个指标,他们自己也很难找出漏洞,也会让他们左右为难。但是最终却有解决方案。

二、程序员的指标

假设程序员写了一个程序,要从一堆货物里面,识别出合格品和次品。

这个程序,做个不恰当的类比,就像是HR搞了一套考核指标,要从众多员工当中,筛选出优秀员工与普通员工。

首先,我们无法一眼就看出合格品和次品。就像员工脸上没有贴着“优秀”一样。所以,我们看到的样本基本是:打眼一瞧,都一样。

但是,它们又是有细微差别的,比如轮廓、颜色、大小、透明度等。我们正是靠这些多维度的特征,依照考核规则,来评判出是否合格。

这就好比我们有一副神奇的眼镜,戴上一看,样本是否合格,它们就显现出了原形。

当然,这是最终理想的状态。实际上,这个眼镜需要不断实施,反馈,调整。

于是,程序员就用右手,写了一个人工智能的程序。随后,又训练了一套模型,相当于制度的试运行。最终,这套程序可以把合格的样本,用蓝色的小圈,框出来。

我们从上帝视角看,红色的点代表合格,灰色代表不合格。其实,程序是不知道底牌的。

那我们看到,A圈识别的很对,圈中的样本代表合格,它都识别对了。B圈差点儿意思,将一些次品也识别成合格了。C圈整个完蛋,黑白颠倒,识别的所有合格,实际上全是次品(这种考核完全是逼优秀的人离职的节奏)。

2.1 T-F-P-N

这里面引入一套概念,因为后面要用到公式进行计算。

假如我们的程序识别出了一些合格的样本。那么,基本上分为这么两种情况。

第一,它识别对了。我们用T也就是true表示它成功了。这里面其实还分为两种情况:1、把实际上合格的,判定成了合格。这个判定的合格我们叫P,也就是positive。那么这类情况就是TP;2、判定为合格之外的那些样本,实际上它也真的不合格(Negative)。那这类也算是评对了,我们把这类叫做TN

第二,它识别错了。我们用F也就是false表示它出错了。这里面其实也分为两种情况:1、把实际上不合格的,判定成了合格。那么这类情况就是FP;2、判定为合格之外的那些样本,实际上也有合格的,但是你没有识别出来,你认为它Negative,我们把这类叫做FN

HR看到上面的TPTNFPFN四种情况,骂骂咧咧地关了页面,走了。只剩下由程序员转行的HR,还在继续看。

2.2 准确率 Accuracy

程序员引入的第一个评判标准叫准确率

准确率表示我猜对的占比。

比如,我在研发部评选优秀员工。所有的100名员工中,我评出来90个优秀,实际上这90个确实优秀。那么我这套考核的准确率就是100%。

准确率的公式是:Accuracy=(TP+TN)/(TP+TN+FP+FN),表示预测正确的占总数的比重。

准确率这种指标,看起来无懈可击,非常完美。

但是,程序员并不这么认为。程序员觉得漏洞很大,很容易钻空子,而且极其不公平。

举个例子,假如有一套识别程序或者评价制度,它看谁都像是好人。而且,它又凑巧都遇到了好人。那么,局部来看,它的准确率指标,非常棒。但是,换一个角度,它居然很糟糕。

就像是我开发了一套识别癌症病人的程序,这个程序根本不思考,给谁检测都说没有。

那么,你说准确率高不高,非常高。但是,这真没什么用。患癌症的人数,100人中可能只有1例,它的作用就是要找出这1例,而不是那些健康的99例。

它虽然相对准确,但是绝对不精确。

因此,程序员又提出了第二个指标:精确率。

2.3 精确率 Precision

精确率,是用来保证不出错的。

比如审判,如果你没有足够的证据证明其有罪,那么就是无罪。不要求你处理多少案件,但凡处理一个,都要保证准确。这,就是高精确率。

精确率的公式就是:Precision=TP/(TP+FP),表示预测正确的占预测数量的比重。

比如,总共有1000个样本,我预测了其中100个样本。这100个当中,99个预测对了,1个样本预测错了,那么精确率就是99%。它和准确率的区别就是,它要对每一个样本都负责,一个都不能错。

如果说高准确率,保证了集体的利益。那么,高精确率,保证了个体的利益。

但是,程序员发现,精确率虽然公平公正,但是漏洞更大。

举个例子,我预测了3个样本,这3个样本全都正确。带入公式Precision=TP/(TP+FP)计算就是:3/(3+0)=100%。这里面,我们看到一个小技巧。预测几个不重要,关键是要让FP等于0。一旦FP=0,精确率就恒为100%

也就是说,高精确率虽然强调,要把每一件经手的事情干好,但是也有一个逻辑漏洞:干100件事和干1件事并不重要,不出错才重要。这可能会导致,少干才会少出错,而且拣着容易的活干也会少出错。

于是,为了解决上面的问题,程序员又想出一个指标:召回率。

2.4 召回率 Recall

这次我们先看召回率的公式:Recall=TP/(TP+FN)

因为有了上面的经验,这次我们先找它的漏洞,只要让FN=0,这个召回率就会一直是100%

那么,我们再回忆一下,FN代表什么?

“我们用F也就是false表示它出错了。判定为合格之外的那些样本,实际上也有合格的,但是你认为它不合格,判定了Negative,这类叫做FN。”

如何让FN等于零,那就是扩大检测范围。

因为公式是Recall=TP/(TP+FN),里面并没有涉及FPTN

因此,只要扩大检测范围,哪怕存在误判的滥竽充数者FP,就会让FN=0,不会影响100%的召回率。

所以,召回率的精髓可以用一句话概括:“宁可错杀一千,绝不放走一个”。

这样就解决了那些少干活、拣活干的情况。因为,只有保证所有活都干了,才能提高召回率。

三、综合权衡

现在我们来总结一下,程序员使用的这些指标。

准确率提倡尽量把所有事情都干好,精确率要求尽量别在某一件事上出问题,召回率鼓励尽量别让任何一件小事掉在地上。

这可能就是你老板一直要求的:要多,要快,还要好,还得省。

尽管程序员很抵触这类要求,但是他们仍然会对自己的程序提这样的要求。

下面可能是我们期望的最终状态,每一个都被100%准确地识别出来。

而且,换一批样本,结果依然不受影响。

但是,根据我多年的活生生的生活经验,又便宜,质量又好,花5块钱买了,随时可以卖5万的商品,不好找。这一点,程序员也知道。

因此,需要一个权衡。

权衡的目的就是即不麻烦,又省成本,最后结果还大体满意。权衡都要,最大的一个区别就是:权衡允许妥协。

有人说,权衡是中国几千年文化中的一个玄学问题。你把结果引向这里,属于说了一堆儿,但是又啥也没说。估计是想甩锅了。

并不是,程序员这里就不存在玄学问题(除了在我这里可以运行之外)。遇到玄学问题,你找他们讨论,必定会得出一个确定的结论,即便这个答案是“我也不知道”。他们从不会说上半个小时,而没有明确的态度。

对于权衡,程序员也是有一个公式的。

这个公式HR就不用懂了,程序员可以去了解一下。

大体意思就是,召回率高(干的多),必然会导致精确率低(出错多)。反之,干得少,出错也少。因此引入一个参数β用于调节决策结果。

如果β的取值大于1,则表示强调召回率。适合创业阶段,鼓励多干,先野蛮生长。

如果β的取值小于1,则表示强调精确率。适合守业阶段,鼓励干精,要稳打稳扎。

如果β的取值为1,则表示两者都强调。但是,你不能要求都是100%,也不能容忍都是50%

这么看,程序员还是把决定权交给了使用者,他们只负责提供多种解决方案。

其实,如果大家有什么问题,可以问问身边的程序员。没准儿,他们会有解决方案。最起码,你多了一个看问题的角度。

我是IT男,带你从IT角度看世界。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多