ROC曲线
含义
ROC曲线用来衡量阈值对模型的影响,在模型输入不变的情况下改变判断标准而获得不同的结果。是一条描述随着判断阈值变化而得到不同真阳率和假阳率结果的曲线。
例子
为了直观理解,我们做出以下三个假设:
假设1
感冒有三种特征,即咳嗽,发烧,流鼻涕
假设2
如果想确定一个人是否得了感冒,可以通过三种特征来打分,每个特征可以打0-1分。打分越高,得感冒的概率越高。
那么现在有100个病人来看病,我们根据这些人的感冒特征给他们打分
得到如下数据(编号,分数):
(1,2) (2,2.4) (2,0.4)...(100,3)
那么现在存在一个问题,已经给病人打完分了,也知道分数越高得感冒的概率越高,但区分是否得了感冒的阈值分数到底是多少呢?
解决这种二分类的阈值分析问题,就是ROC曲线的专长了。
阈值分析
首先从高到低依次排列“Score”值,并选择阈值threshold,当病人分数大于这个threshold时,我们认为他确诊为感冒。
假设100人中实际上感冒60人,正常40人。我们按照阈值从大到小依次进行分析,选择threshold。选择threshold使得i个样本被预测为正样本,
- 当阈值取得最大时,即人群中score<threshold的比例为100%,认为所有人都没得感冒,此时i=0。(不管真实情况咋样,预测的感冒人数都是0)
由于预测的结果是所有人都没病,所以不管是真阳率(感冒人数中诊断预测为阳的比例)还是假阳率(正常人数中诊断预测为阳的比例)都是0。即TPR=FPR=0
- 当阈值取最小值时,即人群中score≥threshold的比例为100%,认为所有人都确诊感冒,此时i=100。(不管真实情况咋样,预测的正常人数都是0)
由于预测的结果是所有人都得病,所以不管是真阳率(感冒人数中诊断预测为阳的比例)还是假阳率(正常人数中诊断预测为阳的比例)都是1。即TPR=FPR=1
而理想情况下,我们希望得到这样的结果
感冒的人都被确诊,而正常的人都不被误诊,即真阳率为1 假阳率为0,合适的阈值在【0,1】处。
画图
一点点改变阈值,就可以得到一组又一组的真阳率与假阳率,将他们在坐标轴上标出来就是我们所需要的ROC曲线,形状大概如下图所示。(非本题例子)
其中,x轴表示假阳率,y轴表示真阳率,起点为【0,0】(阈值最高),终点为【1,1】(阈值最低),可以看到假阳率和真阳率为正相关。也就是说我们基本不可能找到一个阈值,但是越接近左上角这个点,说明模型的预测能力越好。
AUC
含义
AUC为ROC曲线和横轴所围成的面积。通过ROC可以给一个二分类模型确定阈值,而利用AUC则可以说明一个二分类模型的优劣。
也可以理解为根据已有模型对所有的样本进行打分,而后按照高低次序排列。随机挑选一正一负两个样本(感冒的人和正常的人),正样本得分高于负样本的概率。
- 如果AUC=1,说明模型完美预测,这种情况基本不会存在
- 如果0.5<AUC<1,说明模型具有预测能力
- 如果AUC=0.5,则与随机猜测一致,完全没有价值
- 如果AUC<0.5,还不如随机猜测
注释:文中正样本,即为二分类问题中得分高的类别,用P表示。