CTR
CTR又称广告点击率,英文名(click through rate)
计算公式为:
C
T
R
=
c
l
i
c
k
次
数
i
m
p
r
e
s
s
i
o
n
次
数
CTR=\frac{click次数}{impression次数}
CTR=impression次数click次数
CTR预估的最终目标就是epcm,每千次展示的期望收益
评价指标
logloss
当我们用一个概率值预测一个事件是真(1)还是假(0),我们是logloss这个错误度量,评判这个模型的好坏
公式:
l
o
g
l
o
s
s
=
−
1
N
∑
i
=
1
N
(
y
i
l
o
g
(
p
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
p
i
)
)
logloss=-\frac{1}{N}\sum_{i=1}^{N}(y_ilog(p_i)+(1-y_i)log(1-p_i))
logloss=−N1i=1∑N(yilog(pi)+(1−yi)log(1−pi))
这个衡量标准也可以由另外一个数学公式推导得到—KL距离
KL距离,又称相对熵,它衡量的是相同时间空间里的两个分布概率的差异情况
D
(
p
∣
q
)
=
∑
i
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
D(p|q)=\sum_ip(x)log\frac{p(x)}{q(x)}
D(p∣q)=i∑p(x)logq(x)p(x)
对学习的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量。
查准率、查全率与F1
对于二分类问题,可将样例根据真实值和预测值组合,划分成四种形式,真正例(true positive)、假正例(false positive)、真反例(true negative)和假反例(false negative)
分类结果的混淆矩阵,如下
分类 | 真实值:1 | 真实值:0 |
---|---|---|
预测值:1 | TP(True Positive) | FP(False Positive) |
预测值:0 | FN(False Negative) | TN(True Negative) |
查准率
P
P
P的定义是:
P
=
T
P
T
P
+
F
P
P=\frac{TP}{TP+FP}
P=TP+FPTP
查全率
R
R
R的定义是:
P
=
T
P
T
P
+
F
N
P=\frac{TP}{TP+FN}
P=TP+FNTP
查准率和查全率是一对矛盾的度量
F
1
F1
F1被认为是基于查准率和查全率的调和平均
1
F
1
=
1
2
(
1
P
+
1
R
)
\frac{1}{F1}=\frac{1}{2}(\frac{1}{P}+\frac{1}{R})
F11=21(P1+R1)
ROC
Receiver Operating Characteristic
ROC曲线的坐标,纵坐标为真正例率(True Positive Rate,TPR),横坐标为假正例率(False Positive Rate,FPR)
定义如下:
T
P
R
=
T
P
T
P
+
F
N
TPR=\frac{TP}{TP+FN}
TPR=TP+FNTP
F
P
R
=
F
P
T
N
+
F
P
FPR=\frac{FP}{TN+FP}
FPR=TN+FPFP
如何绘制ROC曲线?
我们按照预测结果对样例进行排序,按照顺序逐个把样本作为正例进行预测,每次计算出这两个重要的值,分别以它们的横纵坐标作图。
二分类问题
真实值 | model1 | model2 |
---|---|---|
0 | 1 | 0 |
1 | 0 | 1 |
1 | 1 | 1 |
1 | 1 | 0 |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 0 |
由上表可以得知:
model1
二分类 | 真实值:1 | 真实值:0 |
---|---|---|
预测值:1 | 3(TP) | 2(FP) |
预测值:0 | 1(FN) | 1(TN) |
model2
二分类 | 真实值:1 | 真实值:0 |
---|---|---|
预测值:1 | 2(TP) | 0(FP) |
预测值:0 | 2(FN) | 3(TN) |
横纵坐标
二分类 | 模型1 | 模型2 |
---|---|---|
FP rate | 2/3 | 0 |
TP rate | 3/4 | 1/2 |
图形可以画出
模型越靠近
y
y
y上测说明效果越好,所以model2的效果要好于model1
AUC
CTR是一个二分类问题,不同的域值有不同的结果,按照预测值进行排序
真实值 | 预测值 |
---|---|
1 | 0.09 |
1 | 0.08 |
0 | 0.07 |
1 | 0.06 |
1 | 0.055 |
1 | 0.054 |
0 | 0.053 |
0 | 0.052 |
1 | 0.051 |
按照预测值大小,依次作为域值,求解FP rate和TP rate
域值 | TP rate | FP rate |
---|---|---|
0.09 | 1/6 | 0 |
0.08 | 1/3 | 0 |
0.07 | 1/3 | 1/3 |
0.06 | 1/2 | 1/3 |
0.055 | 2/3 | 1/3 |
0.054 | 5/6 | 1/3 |
0.053 | 5/6 | 2/3 |
0.052 | 5/6 | 1 |
0.051 | 1 | 1 |
按照上图的信息可以画出ROC曲线
曲线下的面积被称为AOC
AOC的意义:衡量正样本排在负样本前面的能力,这里的能力更具体一点就是出现的概率。与域值的选取没有关系。
示例代码
# 二分类
y_pred_score = lr.predict_proba(X_test)
from sklearn.metrics import classification_report, roc_curve
fpr, tpr, thresholds = roc_curve(y_test, y_pred_score[:,1])
auc(fpr, tpr)
混淆矩阵
对于多分类的相关问题,常用的评价标准是混淆矩阵
如果分成
n
n
n个类别的话,混淆矩阵的形式是一个
n
∗
n
n*n
n∗n的一个矩阵,具体的形式如下
label | label | Predicted class | Predicted class | Predicted class |
---|---|---|---|---|
Dog | Cat | Robbit | ||
Actual class | Dog | 5 | 2 | 0 |
Actual class | Cat | 3 | 3 | 2 |
Actual class | Robbit | 0 | 1 | 11 |
上图中每一列代表预测的类别,每一行代表真实的类别的归属,第二行cat的总数量为8,表示类cat总共有8个样本,其中3个分类正确,3个被错误的分到了dog,2个被错误的分到了robbit。
如果计算cat的准确率计算公式如下:
P r e c i s i o n ( C a t ) = 3 2 + 3 + 1 Precision(Cat) = \frac{3}{2+3+1} Precision(Cat)=2+3+13
scikit-learn中有相关的计算函数可以直接调用
>>> from sklearn.metrics import confusion_matrix
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
[0, 0, 1],
[1, 0, 2]])
参考资料:
1、https://www.kaggle.com/wiki/LogarithmicLoss
2、 李航《统计学习方法》清华大学出版社
3、周志华 《机器学习》 清华大学出版社
4、https://en.wikipedia.org/wiki/Confusion_matrix
5、http://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html