本文正在参与「金石方案 . 瓜分6万现金大奖」
一、从绩效查核说起
绩效查核,是许多人力资源从业者(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看到上面的TP
、TN
、FP
、FN
四种状况,骂骂咧咧地关了页面,走了。只剩下由程序员转行的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)
,里边并没有触及FP
和TN
。
因而,只需扩大检测规模,哪怕存在误判的滥竽充数者FP
,就会让FN=0
,不会影响100%
的召回率。
所以,召回率的精华能够用一句话概括:“宁可错杀一千,绝不放走一个”。
这样就处理了那些少干活、拣活干的状况。因为,只要确保一切活都干了,才干提高召回率。
三、综合权衡
现在咱们来总结一下,程序员使用的这些目标。
准确率发起尽量把一切事情都干好,准确率要求尽量别在某一件事上出问题,召回率鼓舞尽量别让任何一件小事掉在地上。
这可能便是你老板一向要求的:要多,要快,还要好,还得省。
虽然程序员很抵触这类要求,可是他们仍然会对自己的程序提这样的要求。
下面可能是咱们希望的终究状况,每一个都被100%准确地辨认出来。
并且,换一批样本,成果仍然不受影响。
可是,根据我多年的活生生的生活经历,又便宜,质量又好,花5块钱买了,随时能够卖5万的商品,不好找。这一点,程序员也知道。
因而,需要一个权衡。
权衡的意图便是即不麻烦,又省成本,最后成果还大体满足。权衡
和都要
,最大的一个差异便是:权衡允许妥协。
有人说,权衡是中国几千年文明中的一个形而上学问题。你把成果引向这儿,属于说了一堆儿,可是又啥也没说。估量是想甩锅了。
并不是,程序员这儿就不存在形而上学问题(除了在我这儿能够运行之外)。遇到形而上学问题,你找他们评论,必定会得出一个确认的定论,即使这个答案是“我也不知道”。他们从不会说上半个小时,而没有明确的情绪。
对于权衡,程序员也是有一个公式的。
这个公式HR就不必懂了,程序员能够去了解一下。
大体意思便是,召回率高(干的多),必然会导致准确率低(犯错多)。反之,干得少,犯错也少。因而引入一个参数用于调理决策成果。
假如的取值大于
1
,则表明着重召回率。合适创业阶段,鼓舞多干,先野蛮生长。
假如的取值小于
1
,则表明着重准确率。合适守业阶段,鼓舞干精,要稳打稳扎。
假如的取值为
1
,则表明两者都着重。可是,你不能要求都是100%
,也不能容忍都是50%
。
这么看,程序员仍是把决定权交给了使用者,他们只担任供给多种处理方案。
其实,假如我们有什么问题,能够问问身边的程序员。没准儿,他们会有处理方案。最起码,你多了一个看问题的视点。
我是ITF男孩,在是TF男孩,带你从IT视角看国际。