【典型算法】逻辑回归算法与CTR
小编说:小编推荐的第三个典型算法逻辑回归,不仅因为它原理简单、容易实现,更是有着广泛地应用,比方说这要涉及到CTR的系统上面,都可以看到它的身影。
逻辑回归可以用在CTR(Click Through Rate)预估上,即通常所说的点击率预估。点击率预估的意义在于,搜索引擎等广告平台想要赚更多的钱,就要通过某一种机制让赚钱最多的广告排在前面(或有更多的概率被展示)。
一、排序规则
为了获得更多的收益,一般搜索引擎、广告联盟的排序规则是:
rankScore=CTR∗bidPrice
其中
bidPrice
是指广告主给出的竞拍价格,CTR
就是我们预估的该广告的点击率,总体结果越高越容易被展示。
当然,这个最终的分数计算还有其他的规则,这里只是列出具CTR预估在这里的重要作用。
二、逻辑回归
我们依然使用之前在逻辑回归中用到的
sigmoid
函数作为模型:
P(y=1|x)=11+exp−wx
含义为,我们给出一个查询Q和一个广告,预测其被点击(y=1)的概率。
我们的特征数据包括:广告质量得分、广告创意得分、Query与广告的相关性、相对价格、相对成交量等等,具体这些特征的值如何获得又是另外的课题,这里暂不涉及。
有了特征数据,现在我们有一批数据如下图所示:
0 20 0.294181968932 0.508158622733 0.182334278695 0.6294206182290 68 0.1867187241 0.606174671096 0.0748709302071 0.8063875509430 18 0.62087371082 0.497772456954 0.0321750684638 0.6292246166181 90 0.521405561387 0.476048142961 0.134707792901 0.4000622940970 75 0.0126899618353 0.507688693623 0.377923880332 0.9986970368480 8 0.308646073229 0.930652495254 0.755735916926 0.05194416999960 64 0.444668888126 0.768001428418 0.501163712702 0.4183273450870 79 0.842532595853 0.817052919537 0.0709486928253 0.5527120197231 32 0.410650495262 0.164977576847 0.491438436479 0.886456782492
其中第一列是正样本(被点击)的个数,第二列是负样本(展示但未点击个数)。
三、逻辑回归
逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数,使得逻辑回归模型成为了机器学习领域一颗耀眼的明星,更是计算广告学的核心。
1 逻辑回归模型
回归是一种极易理解的模型,就相当于y=f(x),表明自变量x与因变量y的关系。最常见问题有如医生治病时的望、闻、问、切,之后判定病人是否生病或生了什么病,其中的望闻问切就是获取自变量x,即特征数据,判断是否生病就相当于获取因变量y,即预测分类。
最简单的回归是线性回归,在此借用Andrew NG的讲义,有如图1.a所示,X为数据点——肿瘤的大小,Y为观测值——是否是恶性肿瘤。通过构建线性回归模型,如h θ(x)所示,构建线性回归模型后,即可以根据肿瘤大小,预测是否为恶性肿瘤h θ (x)≥.05为恶性,h θ (x)<0.5为良性。
然而线性回归的鲁棒性很差,例如在图1.b的数据集上建立回归,因最右边噪点的存在,使回归模型在训练集上表现都很差。这主要是由于线性回归在整个实数域内敏感度一致,而分类范围,需要在[0,1]。逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,其回归方程与回归曲线如图2所示。逻辑曲线在z=0时,十分敏感,在z>>0或z<<0处,都不敏感,将预测值限定为(0,1)。
图2 逻辑方程与逻辑曲线
逻辑回归其实仅为在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数,逻辑回归成为了机器学习领域一颗耀眼的明星,更是计算广告学的核心。对于多元逻辑回归,可用如下公式似合分类,其中公式(4)的变换,将在逻辑回归模型参数估计时,化简公式带来很多益处,y={0,1}为分类结果。
对于训练数据集,特征数据x={x 1 , x 2 , … , x m }和对应的分类数据y={y 1 , y 2 , … , y m }。构建逻辑回归模型f(θ),最典型的构建方法便是应用极大似然估计。首先,对于单个样本,其后验概率为:
那么,极大似然函数为:
log似然是:
2 梯度下降
由第1节可知,求逻辑回归模型f(θ),等价于:
采用梯度下降法:
从而迭代θ至收敛即可:
3 模型评估
对于LR分类模型的评估,常用AUC来评估,关于AUC的更多定义与介绍,可见参考文献2,在此只介绍一种极简单的计算与理解方法。
对于训练集的分类,训练方法1和训练方法2分类正确率都为80%,但明显可以感觉到训练方法1要比训练方法2好。因为训练方法1中,5和6两数据分类错误,但这两个数据位于分类面附近,而训练方法2中,将10和1两个数据分类错误,但这两个数据均离分类面较远。
AUC正是衡量分类正确度的方法,将训练集中的label看两类{0,1}的分类问题,分类目标是将预测结果尽量将两者分开。将每个0和1看成一个pair关系,团中的训练集共有5*5=25个pair关系,只有将所有pair关系一至时,分类结果才是最好的,而auc为1。在训练方法1中,与10相关的pair关系完全正确,同样9、8、7的pair关系也完全正确,但对于6,其pair关系(6,5)关系错误,而与4、3、2、1的关系正确,故其auc为(25-1)/25=0.96;对于分类方法2,其6、7、8、9的pair关系,均有一个错误,即(6,1)、(7,1)、(8,1)、(9,1),对于数据点10,其正任何数据点的pair关系,都错误,即(10,1)、(10,2)、(10,3)、(10,4)、(10,5),故方法2的auc为(25-4-5)/25=0.64,因而正如直观所见,分类方法1要优于分类方法2。
我们会发现这里的数据与之前的不同,每一行不再是一个单独的记录,而是一组记录的统计,这种形式在实践中更容易计算,并且更节省存储空间。
四、R逻辑回归
我们首先把数据读取到内存中,存储于ctr_data变量中:
ctr_data = read.csv('CTR_DATA.txt',header=F,sep=" ")
看一下里面的数据:
> head(ctr_data) V1 V2 V3 V4 V5 V61 0 20 0.29418197 0.5081586 0.18233428 0.629420622 0 68 0.18671872 0.6061747 0.07487093 0.806387553 0 18 0.62087371 0.4977725 0.03217507 0.629224624 1 90 0.52140556 0.4760481 0.13470779 0.400062295 0 75 0.01268996 0.5076887 0.37792388 0.998697046 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)d <- predict(ctr_logr, newdata = record, type = "response")1 0.004845833
可以清楚地看到,该特征向量(即一个广告)被点击的概率是0.00484,也就是说大约展示250次可能会被点击一次。
【思考题】
1 逻辑回归怎么理解?公式怎么推导?
2 逻辑回归与其他回归方法有什么差异?
3 逻辑回归的挑战是什么?在使用逻辑回归的时候要注意什么?
【公众号推荐】数据科学自媒体,关注数据科学相关主题,分享数据科学相关内容。
这是一个大数据的时代,珍惜时代所带来的机遇。这是一个大分享的潮流,拥抱潮流所带来的变化。
从数据中学习,发觉数据之洞见,应用数据之价值。从分享中成长,感受分享之魅力,体会分享之意义。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!