什么是lookalike
lookalike算法是计算广告中的术语,不是单指某一种算法,而是一类方法的统称。其目的就是为了实现人群包扩充。
简单场景
广告主需要对100w人投放,但是,从选取的基础数据包中,只有30w,那么如何满足100w的投放需求,这时,就需要通过lookalike的方式进行扩充,既要保证人群数量,又要确保人群的相似。
如果只是简单的从公共池中选取70w,完成100w的匹配,很有可能出现无效用户。例如:高级消费品,尽可能的投放给中高级消费,且具有该品类偏好的人群。
如何进行lookalike
第一种,显式定位,广告主根据标签进行人群选择。
这种方式,最为简单,高效。广告主通过用户画像标签,筛选性别,年龄,品类偏好等。可以直接快速达到人群包提取目的。
但是,这种方法,又具有一定局限性,未必男性就不关心女性用品,也未必食品偏好的人群,就不关心护肤用品。标签的产出,本身基于用户行为,但单纯标签筛选,并不能把潜在相关用户提取出来。
因此,就需要采用第二种方法。
第二种,隐式定位,通过机器学习的方法,对种子用户进行建模。
以30w人群,扩展100w为例。我们需要将30w用户的共有特征提取出来,内容包含性别,学历,年龄,职业,常住地,购买力,RFM分值,最近浏览加购信息等。该人群特征提取完成之后,成为种子包,标记为正样本。
接下来,我们需要有一个基础用户包,用于70w的人群扩展,可以是全量数据,可以是近三个月,近一个月的活跃用户,也可以是品类偏好用户,数据内容取决于具体业务。数据规模,取决于扩展人群数量。需要扩展70w,基础包数量,可以是300w,500w,或者更多。当然了,不是越多越好,数量越多,意味着后期模型转换耗时会更长。
假设基础包用户500w,我们需要从500w中随机抽取30w用户,标记为负样本。
接下来,就是一串的特征处理,StringIndexer,VectorAssembler,OneHotEncoder,QuantileDiscretizer。总是,就是将离散型字符变量整数化,离散型整数变量编码,以减少不同类别之间的距离差,把连续性变量进行分箱,调整为离散型变量,以减少距离差。离散化、归一化、等分位,都是常用的特征处理手段,spark ML中提供了一堆。。。
特征处理完成后,进行模型训练,这里的分类算法,可以是LR,SVM或是其它,不同厂的做法都不相同。效果好就行。
模型训练完成后,重要环节,需要对500w的基础包进行transform,模型会对500w数据中的每条数据进行分类,并预测概率值。从500w数据中,抽取正样本,并按照概率从高到低排序,取出top 70w即可。
最后,将30w人群与70w人群进行合并,标记100w的扩展人群包,用于线上投放。
可能有读者已经意识到,直接把基础包中,随机抽取30w标记为负样本,也许不妥,有可能存在与种子包人群高相似用户。解决这个问题,只有一个办法,就是多跑几次。先以第一次的模型,对30w基础包用户进行分类,产出top,重新修正标记,再从公共池中,抽取等量用户补充,不断迭代,最终会训练一个理想模型出来。
使用技术
机器学习包很多,可以是基于python的sklearn,亦可是spark的mllib、ML,但笔者推荐pyspark。原因是python在数据处理上异常高效,但是无法解决分布式处理的问题,python代码只能在单机上处理。而spark本身基于分布式处理,速度上显然要快,但是spark自身支持的语言scala,又没有类似numpy,pandas这样的高效类库。因此pyspark就是不二之选。
后记
在机器学习中,模型的好坏,极大程度上取决于特征的选取及处理。算法上,可以采用一般的分类算法,亦可采用深度学习中的多层神经网络相关算法。总之,方法很简单,需要的是,对模型进行不断的优化。
以上有任何问题,可留言,或关注同名公众号“IN科技”。