分享技巧:Emebeding降维(用户偏好分析)
在Tencent广告算法大赛中,在对用户点击之后的转化情况预估时,笔者主要需要考虑两方面情况:
(1)用户对点击的App偏好;
(2)具体点击场景与用户的匹配情况。
其中(1)又可分为:①具体用户对App的偏好;②用户的属性对App的偏好。这两点大致可理解为:我喜欢APP,所以我下载,或者虽然我以前没接触过这类APP,但这类APP对我这类人群具有天然的吸引力,所以我也下载了。这里主要分析①中用户偏好。
根据比赛提供的数据,用户偏好可以从以下三个方面寻找:①用户近期的流水安装;②用户的历史APP安装;③用户近期的点击情况。这三点中,重要性程度:①>②>③,但是①的数据量只有部分,约占到全部数据量的1/10,②的数据量约1/2,③就更稀疏,训练数据中300万,去重的USERID有180万,每个用户的平均记录只有2条,想要找到对应该用户在前面几天点击该APP的记录很困难,只对部分用户有效。
虽然在XGBOOST中,但过多的缺失会导致重要的特征变得不重要,因此我们在进行Emebeding时只采用历史安装数据,保证Emebeding数据的标准性,不需要再进行其他规范化处理。
用户安装历史数据统计如下:
这里我把未知类型的APP当作一类APP来看待,现在看来,未知种类的APP在考虑偏好时,应该去掉不予考虑。
用户偏好可从用户历史安装数据出发,近期用户安装流水数据作为近期用户偏好在这里不进入分析(实际上,近期的偏好更能反映用户点击时的转化情况),用户历史安装数据中App种类较多,远多于我们分析的50种App,因此在Emebeding时,只统计用户每小类安装的APP数目,用户安装之后打开APP的几率较大。Emebeding流程如下:
统计用户的APP安装使用情况,共有5大类APP,50小类APP,1800多个APP,因为这1800个APP中在训练数据中出现的只有12个,且如果采用大类数目统计,这些大类APP安装数目很容易占到非常大的特征权重,因此这里只按APP小类目进行统计。
统计出转化与未转化的分布如下图,其实转化与未转化之间并没有分开,只是可以看见转化了的分布较集中,越靠近中间的簇,是不是就转化率越高,暂时还不清楚,笔者用Emebeding之后的特征与时间窗特征,xgboost单模型,可以跑到0.10059的分数。
主要工具:
sklearn中的feature_extraction.text.Tfidf(),sklearn中的mainfold.TSNE(),这个模块只能用来实验,对于样本数超出100000时,基本无能为力,因此这里给大家提供一个额外的计算程序,实际上这个程序也好不了多少,笔者能力有限,是用MATLAB完成的这部分处理,有经验的同学,Python程序可以轻松的转为MATLAB程序。
TSNE是由SNE衍生出的一种算法,SNE最早出现在2002年,它改变了MDS和ISOMAP中基于距离不变的思想,将高维映射到低维的同时,尽量保证相互之间的分布概率不变,SNE将高维和低维中的样本分布都看作高斯分布,而Tsne将低维中的坐标当做T分布,这样做的好处是为了让距离大的簇之间距离拉大,从而解决了拥挤问题。
TSNE算法原理:http://blog.csdn.net/zhangweiguo_717/article/details/70188517 TSNE的Python实现:http://blog.csdn.net/zhangweiguo_717/article/details/70998959
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。