2013-1-25
逻辑回归可以用在CTR(Click Through Rate)预估上,即通常所说的点击率预估。点击率预估的意义在于,搜索引擎等广告平台想要赚更多的钱,就要通过某一种机制让赚钱最多的广告排在前面(或有更多的概率被展示)。
一、排序规则
为了获得更多的收益,一般搜索引擎、广告联盟的排序规则是:
其中 bidPrice 是指广告主给出的竞拍价格, CTR 就是我们预估的该广告的点击率,总体结果越高越容易被展示。
当然,这个最终的分数计算还有其他的规则,这里只是列出具CTR预估在这里的重要作用。
二、逻辑回归
我们依然使用之前在逻辑回归中用到的 sigmoid 函数作为模型:
含义为,我们给出一个查询Q和一个广告,预测其被点击(y=1)的概率。
我们的特征数据包括:广告质量得分、广告创意得分、Query与广告的相关性、相对价格、相对成交量等等,具体这些特征的值如何获得又是另外的课题,这里暂不涉及。
有了特征数据,现在我们有一批数据如下图所示:
0 20 0.294181968932 0.508158622733 0.182334278695 0.629420618229
0 68 0.1867187241 0.606174671096 0.0748709302071 0.806387550943
0 18 0.62087371082 0.497772456954 0.0321750684638 0.629224616618
1 90 0.521405561387 0.476048142961 0.134707792901 0.400062294097
0 75 0.0126899618353 0.507688693623 0.377923880332 0.998697036848
0 8 0.308646073229 0.930652495254 0.755735916926 0.0519441699996
0 64 0.444668888126 0.768001428418 0.501163712702 0.418327345087
0 79 0.842532595853 0.817052919537 0.0709486928253 0.552712019723
1 32 0.410650495262 0.164977576847 0.491438436479 0.886456782492
其中第一列是正样本(被点击)的个数,第二列是负样本(展示但未点击个数)。
三、逻辑回归
关于逻辑回归的原理可以参考我之前的文章,我们会发现这里的数据与之前的不同,每一行不再是一个单独的记录,而是一组记录的统计,这种形式在实践中更容易计算,并且更节省存储空间。
四、R逻辑回归
我们首先把数据读取到内存中,存储于ctr_data变量中:
ctr_data = read.csv('CTR_DATA.txt',header=F,sep=" ")
看一下里面的数据:
> head(ctr_data)
V1 V2 V3 V4 V5 V6
1 0 20 0.29418197 0.5081586 0.18233428 0.62942062
2 0 68 0.18671872 0.6061747 0.07487093 0.80638755
3 0 18 0.62087371 0.4977725 0.03217507 0.62922462
4 1 90 0.52140556 0.4760481 0.13470779 0.40006229
5 0 75 0.01268996 0.5076887 0.37792388 0.99869704
6 0 8 0.30864607 0.9306525 0.75573592 0.05194417
把该变量添加到环境变量中,这样后面使用其中的字段就可以直接写了:
attach(ctr_data)
最重要的一步,根据数据生成逻辑回归模型:
ctr_logr = glm(cbind(V1,V2)~V3+V4+V5+V6,family=binomial(link="logit"))
其中 y ~ x1+x2 的意思是根据 x1 、 x2 来预测y出现的概率。
我们新创建一个数据集,对其出现的概率(即V1所代表的含义)进行预测:
record = data.frame(V3=0.294181968932,V4=0.508158622733,V5=0.182334278695,V6=0.629420618229)
pscl包中的predprob函数
1 0.004845833
可以清楚地看到,该特征向量(即一个广告)被点击的概率是0.00484,也就是说大约展示250次可能会被点击一次。