开启生长之旅!这是我参与「日新计划 12 月更文挑战」的第3天,点击检查活动概况

分类问题就像披着羊皮的狼,看起来天真无害用起来天雷滚滚。比方在建模前你思考过下面的问题么?

  • 你的分类模型输出的概率只是用来做样本间的相对排序,还是概率自身?
  • 你的练习数据自身散布怎么是否存在Imbalanced Sample?

要是您都想到了拜拜。要是有一个您感爱好的问题,那就接着往下看吧。本来是想先回想一下各个分类问题中或许用到的metric,可是又觉得读的人或许觉得无聊,就分红了两章。要是有的方针断片了就来这儿回想一下: 回想篇

问题1 Rank or Probability?

分类问题能够依据对输出方式的要求分红两类

  1. 一种咱们只关怀排序。比方电商场景下,用户是否会回购某产品,咱们更关怀用户回购产品A的概率是否高于用户回购产品B的概率,然后把回购概率更高的产品放在引荐列表前面。这时分类问题其实是用来排序的。–样本间的相对排序比较比绝对概率更重要
  2. 另一种咱们关怀概率。比方现在咱们都在谈增长,咱们想知道一个用户明天在app活跃的概率,只知道用户A比用户B活跃的概率高并不行,咱们需求明确知道用户A活跃的概率,终究是90%还是50%,这样才干对高/低于特定概率的用户进行必定(促活/唤醒)操作。这时分类问题是对实在概率的估量 –样本的绝对概率需求接近实在概率,而且天极安稳

有人会问,上述两种需求终究对处理一个二分类问题有什么影响? 答案是丢失函数/点评方针

让咱们来看一个直观的比如,下图咱们尝试用LightGBM处理一个二分类问题,咱们挑选的拟合方针是最大化AUC。

X轴是猜测概率,Y轴是实在概率,蓝线是LGB的猜测成果,绿线对应实在概率=猜测概率。为什么模型的AUC高达98.93%(这儿还有ImbalancedSample的影响,让咱们先忽略这一点),可是猜测概率和实在概率却差到了姥姥家。

让咱们对猜测概率再做一层处理,黄线能够简略理解为咱们对LGB的猜测成果做了一层映射 p→f(p)\hat{p} \to f(\hat{p}),这时校准后的猜测概率和实在概率根本共同了。可是有趣的是校准后的猜测概率AUC = 98.94%和原始猜测根本没差别?!

聊聊模型指标的那些事儿2 - Binary classification实战篇

**Duang Duang Duang!敲黑板!AUC是对相对概率排序的查验!**其实只需用心(我学AUC的时分必定没用心>_<)看一下AUC的核算方式就会发现,AUC只关怀给定各个阈值,把样本依照猜测概率分红0/1,并核算正负样本猜测的准确率。

举个最夏天的比如,两个瓜一个甜一个不甜,咱们练习一个西瓜模型来猜测它们甜(1)/不甜(0)。 模型1: 甜的瓜猜测概率是0.8,不甜的瓜猜测概率是0.1, 模型2: 甜的瓜猜测概率是0.51,不甜的瓜猜测概率是0.49 两个模型的AUC是相同的,由于它们都完美对两个瓜进行了分类。

所以当使用最大化AUC作为丢失函数时,当正负样本的猜测准确率不再进步,模型就会停止学习。这时模型的猜测概率并不是对实在概率的拟合。那怎么才干得到对实在概率的猜测? 答案是logloss/cros-entropy

L=∑i=1Nyi∗log(pi)+(1−yi)∗log(1−pi)L = \sum_{i=1}^N y_i * log(p_i) + (1-y_i) *log(1-p_i)\\

咱们能够从两个视点来理解为什么logloss是对实在概率的估量

  1. 从极大似然估量的视点 logloss能够由极大似然函数取对数得到,最小化logloss对应的最大化似然函数。pip_i是对p(yi=1)p(y_i=1)的估量
argmaxp∏i=1Npiyi∗(1−pi)1−yiargmax_p \prod_{i=1}^N {p_i}^{y_i} * {(1-p_i)}^{1-y_i}
  1. 从信息论的视点 不熟悉信息论的同学看这儿 Intro to Information Theory logloss也叫cross-entropy(穿插熵),用来衡量两个散布的相似程度。 穿插熵自身能够分解为P自身的信息熵+散布P和散布q之间的间隔。这儿P是样本的实在散布信息,信息熵必定。所以最小化穿插熵就变成了最小化散布p和q之间的间隔,也便是样本散布和模型估量间的间隔,如下
crossentropy=H(p,q)=−∑c=1Cp(c)∗log(q(c))=−∑c=1Cp(c)∗log(p(c))+∑c=1Cp(c)[log(p(c)−log(q(c)))]=H(p)+KL(p∣∣q)crossentropy = H(p,q)\\ = -\sum_{c=1}^C p(c) * log(q(c))\\ = – \sum_{c=1}^C p(c) * log(p(c)) + \sum_{c=1}^C p(c)[log(p(c) – log(q(c)))] \\ = H(p) + KL(p||q)\\

乍一看会觉得穿插熵和logloss长的不像一家人。由于在练习模型时散布p是从练习样本的散布中抽象得到的。二分类问题中C=2, 让咱们把上述穿插熵再推一步

H(p,q)=p∗log(q)+(1−p)∗log(1−q)p=∑i=1NI(yi=1)/NH(p,q)=1N∑iI(yi=1)∗log(q)+I(yi=0)∗log(1−q)H(p,q) = p *log(q) + (1-p) *log(1-q) \\ p = \sum_{i=1}^N I(y_i=1)/N \\ H(p,q) = \frac{1}{N} \sum_i I(y_i=1) *log(q)+ I(y_i=0) *log(1-q) \\

所以下次处理分类问题,如果你的方针是核算对实在概率的估量的话,别选错方针哟�

爱好卡片- 猜测概率校准 其实黄线用了Isotonic Regression来校准猜测概率。是一种过后将猜测概率依据实在概率进行校准的办法。感爱好的能够看一下Reference里边的资料1,2。原理并不复杂,但在剖析特定算法,尤其是boosting,bagging类的调集算法为什么使用loggloss对概率估量仍旧会有偏的部分蛮有趣的

问题2 Imbalanced Sample ?

正负样本散布不均大概是分类问题中最常遇到的问题。正确处理Imbalane问题需求留意的并不只是点评方针,往往还要留意采样和练习集测试集的区分。但这儿咱们只讨论在处理样本散布不均的问题时,咱们应该挑选什么方针来点评模型体现。让咱们挨个来剔除不好用的方针。

举个极端的比如,100个样本里只有1个正样本

Accuracy

这种情况下即使咱们悉数猜测为负,咱们的准确率仍旧高达99%。所以Accuracy只适用于正负样本均匀散布的情况,由于它把正负样本的猜测准确率柔软在一起看了。

AUC

AUC是fpr和tpr(recall)组成的ROC的曲线下面积。还记得咱们在【回想篇】里边说过fpr,tpr是分别衡量在正负样本上的准确率的。

而fpr和tpr之间的trade-off,在正样本占比很小的情况下,这种trad-off会被样本量更大的一方主导。所以当正样本占比很小的时分,AUC往往会看起来过于优秀。

但就像硬币的正反面相同,从另一个视点看这也是AUC的长处,便是AUC自身不会很大的受到样本实践散布的影响,相同的模型相同的样本,你把正样本downsample /upsample 1倍,AUC不会有很大的改变。

下图来自An introduction to ROC analysis, 上面的AUC和PR是正负样本1:1的猜测体现,下面是1:10的体现。咱们会发现AUC根本没有改变,可是precision-recall发生了剧烈改变。

聊聊模型指标的那些事儿2 - Binary classification实战篇

AP/AUCPR

AP是recall和precision组成的PR的曲线下面积。这儿recall和precision分别从实在散布和猜测散布两个视点衡量了对正样本的猜测准确率。说到这儿现已有人反应过来了。是的这一对trade-off方针都是针对正样本的,在核算中没有用到True negative.所以当你的数据集存在Imbalance的时分,AP一般会是更好的挑选。

你还遇到过啥问题嘞?欢迎留言


Reference

  1. www.kaggle.com/residentmai…
  2. Pedro G. Fonseca and Hugo D. Lopes. Calibration of Machine Learning Classifiers for Probability of Default Modelling
  3. en.wikipedia.org/wiki/Confus…
  4. Tom Fawcett,An introduction to ROC analysis