请选择 进入手机版 | 继续访问电脑版
设为首页 收藏本站
开启辅助访问

新浪微博登陆

只需一步, 快速开始

QQ登录

只需一步,快速开始

切换风格 立即注册 找回密码

Java教程网

Java教程网 门户 产品经理 查看内容

常见计算广告点击率预估算法总结

2018-4-21 23:06| 发布者: wenzhilanyu| 查看: 260| 评论: 0|来自: uml.org.cn

摘要: 前言谈到CTR,都多多少少有些了解,尤其在互联网广告这块,简而言之,就是给某个网络服务使用者推送一个广告,该广告被点击的概率,这个问题难度简单到街边算命随口告诉你今天适不适合娶亲、适不适合搬迁一样,也可 ...

前言

谈到CTR,都多多少少有些了解,尤其在互联网广告这块,简而言之,就是给某个网络服务使用者推送一个广告,该广告被点击的概率,这个问题难度简单到街边算命随口告诉你今天适不适合娶亲、适不适合搬迁一样,也可以复杂到拿到各种诸如龟壳、铜钱等等家伙事,在沐浴更衣、净手煴香后,最后一通预测,发现完全扯淡,被人暴打一顿,更有甚者,在以前关系国家危亡、异或争国本这种情况时,也通常会算上一卦,国家的兴衰、。其实CTR和这个一样,以前经常和小伙伴吐槽,其实做机器学习、无论是推荐还是计算广告,都和以前的算命先生没什么差别,做的好的官至国师,不好的吃不了饱饭也是有的。要想把你CTR模型做的好好的,必须要先了解那些前辈们都是怎么玩的。

CTR架构

一个典型的CTR流程如下图所示:

如上图,主要包括两大部分:离线部分、在线部分,其中离线部分目标主要是训练出可用模型,而在线部分则考虑模型上线后,性能可能随时间而出现下降,弱出现这种情况,可选择使用Online-Learning来在线更新模型::

· 离线部分:

数据收集:主要收集和业务相关的数据,通常会有专门的同事在app位置进行埋点,拿到业务数据;

预处理:对埋点拿到的业务数据进行去脏去重;

构造数据集:经过预处理的业务数据,构造数据集,在切分训练、测试、验证集时应该合理根据业务逻辑来进行切分;

特征工程:对原始数据进行基本的特征处理,包括去除相关性大的特征,离散变量one-hot,连续特征离散化等等;

模型选择:选择合理的机器学习模型来完成相应工作,原则是先从简入深,先找到baseline,然后逐步优化;

超参选择:利用gridsearch、randomsearch或者hyperopt来进行超参选择,选择在离线数据集中性能最好的超参组合;

在线A/B Test:选择优化过后的模型和原先模型(如baseline)进行A/B Test,若性能有提升则替换原先模型;

在线部分

Cache & Logic:设定简单过滤规则,过滤异常数据;

模型更新:当Cache & Logic 收集到合适大小数据时,对模型进行pretrain+finetuning,若在测试集上比原始模型性能高,则更新model server的模型参数;

Model Server:接受数据请求,返回预测结果;

Logistic Regression

最简单的模型也应该是工业界应用最广的方法,Logistic

Regression算法简单易于调参,属于线性模型,原理如下图:

将CTR模型建模为一个分类问题,利用LR预测用户点击的概率; 通常我们只需要离线收集好数据样本构造数据集,选择好合适的特征空间,离线训练好模型,测试在离线数据集上的性能之后,即可上线,也可以适应数据分布随时间突变严重的情况,采用online-learning的策略来对模型进行相对频繁的更新,模型的简单能够保证这部分的需求能够得到保障。

PLOY2

LR优点是简单高效,缺点也很明显,它太简单,视特征空间内特征之间彼此独立,没有任何交叉或者组合关系,这与实际不符合,比如在预测是否会点击某件t恤是否会点击,如果在夏天可能大部分地区的用户都会点击,但是综合季节比如在秋天,北方城市可能完全不需要,所以这是从数据特征维度不同特征之间才能体现出来的。因此,必须复杂到能够建模非线性关系才能够比较准确地建模复杂的内在关系,而PLOY2就是通过特征的二项式组合来建模这类特征的复杂的内在关系,二项式部分如下图公式:

然而理想是美好的,现实却是残酷的,PLOY2有一个明显的问题,就是在实际场景中,大部分特征都是稀疏的,即大部分特征值为0,对这些稀疏的特征做二项式组合,会发现最后大部分特征值都是0,而在梯度更新时,当大部分feature为0时,其实梯度并不更新,所以PLOY2的方法在实际场景中并不能比较好地解决这类特征组合来建模更复杂线性关系的问题。


123下一页

鲜花

握手

雷人

路过

鸡蛋

最新评论

关闭

站长推荐 上一条 /1 下一条

小黑屋|手机版|Archiver|Java教程网    

GMT+8, 2018-12-17 05:37 , Processed in 0.156250 second(s), 21 queries .

Powered by Discuz X3.2

© 2001-2013 JAVA教程网

返回顶部