机器学习评价方法之NRIG

原创 2015年11月17日 15:53:06

by wangben 2015.11

在工业界,逻辑回归是很常用的模型,一般大家在用逻辑回归做机器学习排序或者广告预估时常用AUC来判断排序的效果,逻辑回归是概率模型,除了排序的指标之外,有时会出现AUC比较好,但是概率拟合较差(很有可能是收敛的不好),在广告GSP(Generalized second-price auction)竞价模式中尤为重要,所以我们还希望验证模型对真实概率的拟合程度,这时就需要其他指标来衡量。

最常见的方式是MSE(Mean Square Error):

这个方式需要先收集一部分充分统计量的item,给出其统计CTR并且与模型给出的pCTR(predict ctr)进行比较,判断拟合程度:


另一种选择是使用NRIG(Normalized RelativeInformation Gain),NRIG是RIG的归一化版本。

给定一个测试集M,整个数据集的统计CTR可以定义为:

其中ym是真实label,取值为0或者1

那么数据整体熵的定义就是:


对于模型预测结果,我们可以给出其交叉熵cross entropy(Loss Function):


其中pm指的是模型对第m个样本所预测的概率。

从而模型能够得到的相对信息增益定义如下:

从公式可以看出,如果增益越大,说明收敛的越好,模型质量应该越高

如果我们对每一个样本的预测概率相对于整体CTR做归一化,就可以得到相应的NRIG,归一化的预测概率如下:


python测试代码如下:

#!/usr/bin/python
#by wangben@58.com 20151020 NRIG SCORE,big is better,infomation gain is bigger
import sys
import math

#
def entropy(p):
	return -( p * math.log(p,2) + (1 - p) * math.log(1 - p,2) )
def crossEntropy( label, p ):
	return -( label * math.log(p,2) + (1 - label) * math.log(1 - p,2) )

if __name__ == "__main__":
	listScore = []
	sum = 0.0
	test_size = 0.0
	ce_sum = 0.0
	avg_pre = 0.0
	#input format:
	#label\tpredictScore
	for line in open(sys.argv[1]):
		line = line.rstrip()
		listLine = line.split()

		if len(listLine) != 2:
			continue
		label = float(listLine[0])
		value = float(listLine[1])
		test_size += 1.0
		if label > 0:
			sum += label
		ce_sum += crossEntropy( label , value)
		#print "debug :",ce_sum
		avg_pre += value
		listScore.append([label,value])

	print "empirical CTR(avg CTR): ",sum,test_size,sum/test_size
	avg_p = sum/test_size
	Hp = entropy(avg_p)
	print "entropy: ",Hp

	ce = ce_sum/test_size
	print "cross entropy: ",ce_sum,test_size,ce
	print "RIG: ",(Hp-ce)/Hp

	#NRIG
	n_ce = 0.0
	avg_pre /= test_size
	print "average prediction: ",avg_pre
	diff_rate = avg_p/avg_pre
	for item in listScore:
		n_ce += crossEntropy( item[0] , item[1]*diff_rate )
	n_ce /= test_size
	print "normalized ce: ",n_ce
	print "NRIG: ",(Hp-n_ce)/Hp

reference:

Click-through Prediction for Advertising in Twitter Timeline. kdd2015


Spark上如何做分布式AUC计算

by 王犇 20160115 AUC是分类模型常用的评价手段,目前的Spark mllib里面evaluation包中所提供的auc方法是拿到了roc曲线中的各个点之后再进行auc的计算,但是实际应用...

计算广告小窥[中]这孙子怎么什么都知道

计算广告小窥[中]这孙子怎么什么都知道原作:面包包包包包包 修改:寒小阳 && 龙心尘 时间:2016年2月 出处:http://blog.csdn.net/breada/article/det...
  • Breada
  • Breada
  • 2016年02月19日 11:58
  • 17723

计算广告小窥[下]要啥自行车!

一是总结自己已掌握的知识,二是降低同学们的学习成本。本人能力有限,更缺乏实践经验,文章内容多为书籍和论文的读后感,若有不当或者错误之处,还望各位同学指出,我定悉心求教。在此,向编写《计算广告》的刘鹏和...

KNN方法简介讲义-R机器学习实践

  • 2015年03月28日 17:48
  • 17KB
  • 下载

一文告诉你机器学习中进行模型评价、模型选择和算法选择的终极方法(PART I)

本文为数盟原创译文,转载请注明出处为“数盟社区”。 by Sebastian Raschka  引言  机器学习已经成为我们生活中的一部分,对购买者、消费者或是希望进行研究和实践者都...

信息生物学:机器学习方法

  • 2009年07月30日 20:17
  • 4.65MB
  • 下载

机器学习模型的评价指标和方法

http://blog.csdn.net/pipisorry/article/details/52574156衡量分类器的好坏对于分类器,或者说分类算法,评价指标主要有precision,recall...

机器学习-统计学习方法

  • 2017年12月06日 21:59
  • 16.98MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:机器学习评价方法之NRIG
举报原因:
原因补充:

(最多只允许输入30个字)