一般来说,为用户画像应该考虑的维度有:性别,年龄,居住地,职业,收入,以上属于人的社会特征;兴趣偏向等属于用户的个性特征。大部分的推荐算法都是挖掘用户的个性化特征对用户进行个性化推荐,比如协同过滤算法。为什么不利用用户的社会特征进行推荐,其原因是因为数据的准确度,覆盖度太小,社会特征属于用户的隐私,一般用户也不会公开。但是用户的社会特征可以缩小推荐用户群的大小,提高精准度。比如:一个男性用户,就可以将推荐结果中的某些偏女性的物品去掉或减小其权重,如 购物等信息。在社会特征中,最重要的也是性别属性,其他的属性的获取非常困难,而且数据质量差。
这篇文章我只泛泛的说一下算法的思路,不具体的讨论算法的实现。
为移动用户进行用户画像,存在很多难点:
1、社会特征几乎没有,并且无法获取。
2、兴趣变化快,我们只能从用户的安装列表等信息中获取用户的兴趣偏向,但是一般用户对一个应用,尤其是游戏的喜爱的持续时间会非常短,除了一些常用的工具。
3、移动用户的的应用列表获取后,并不一定代表用户的喜好。比如一个用户下载了一个应用,但是马上就删除了,或者下载了打开了一次就再也没有用过,那这个应用反而是一个负评价。但是这又引出了另外一个问题,既然他不喜欢这个应用,那为什么还要下载,肯定是因为某些东西吸引了这个用户,才会导致下载,当然这样的分析就太过细致了,不适合初期的系统。
一、获取性别特征。
那么,如何获取用户的性别特征?渠道有很多,比如利用社交网络帐号和设备的关联关系获取用户的性别,社交网络中的用户一般都会填写正确的性别信息。但是,这样的数据对一个企业来说非常宝贵,不会轻易得到。其实说白了,我们关心的并不是设备持有者的真实性别,而是这个设备的性别偏向。这个性别的偏向就不用从其他渠道获取了,因为这个可以通过算法进行学习。
一个移动设备,有其安装列表,就可以做一个比较简单的用户性别的评分。首先从应用库中挑出一些男女性别偏向比较明显的应用,根据这些应用,确定一些用户,再根据这些用户的安装列表,对应用进行性别评分,迭代至平稳即可。这是最简单的性别评分算法,也可以说成是二部图扩散算法。我们只要一段时间更新一次数据就能保证结果的准确度。
但是这个方法还是有缺点的,就是,我们把用户的安装列表中的应用的权重都看做是一样的,但是事实上却不是这样,用户打开一个应用的次数完全可以左右结果,比如说,如果一个用户一个月打开一次某个应用和一天打开10次。这样的应用同样在安装列表里面,但是他们的权重却不能一样。所以,如果有用户的最近打开列表的话,最好使用打开列表进行性别评分,可以提高准确度。
上面两种方法需要大量的人工工作用来挑选男女应用,要想保证数据结果的数量,开始的基础数据就必须越多越好。但是如果没有精力挑选大量应用的话,那就只能用算法帮助你挑选应用了,但是我们又不能让算法直接看应用的名字就能挑选出男女应用,如果这时候你有所有应用的描述信息,而且这个描述信息质量还是比较高的话,就能避免人工的体力活。先用LDA根据应用的描述信息跑出所有应用的topic model,topic model中产出的topic vector 和key words都能作为应用的维度。做完topic model后,就又有两个方向,可以进行下一步打分的工作。
第一种方法就是观察每一个topic的key words,归纳出男女的topic ,再查找属于这个topic 或者在这个topic占比比较大的应用来作为原始数据,这些应用可以根据其在topic中的占比进行打分。找出原始数据后,可以根据上述二部图扩散的方法进行打分,也可以用这些应用在用户中划分出一部分用户作为训练数据,用分类算法进行求解,最后得出结果。这个方法理论性很强,人工干预的程度很小,但是由于在LDA阶段损失了一部分精度,在分类阶段又损失了一部分精度,可能导致结果的准确度并不高。
第二种方法就是利用topic model输出的每一个应用的topic vector,可以看作这个应用的隐藏属性(有点儿类似于矩阵分解),然后在根据每一个topic vector做一个相似度计算,多种相似度算法都可以用,比如cosine similarity等等。不过这个算法还是得预先找出一定的确定男女的应用,以这部分的应用作为种子数据进行扩散后再根据用户的应用列表进行打分,得出男女的评分。
根据应用标签的处理,理论上是行的通的,并且节约了大量的人工劳动。但是这个方法太依赖于应用描述的准确度,对数据的抗噪能力较差。
其实算出设备男女的倾向的评分就可以用了,但是有一些时候需要确定一个阈值,来确定这个应用到底是偏男还是偏女,或者说是,这个评分到了某个数值一下就不可信。其实这个方法很简单,基本思想就是根据正太分布,在数量很大的情况下,男女比例是基本上是1:1的,据此我们可以先确定一个阈值,然后不断迭代让男女比例逼近1:1,当稳定后就可以输出结果。
至于性别评分的判定的话,就得根据其应用列表进行人工的判定了,如果你有真实的用户的性别的数据,那就可以用这个做验证集,还可以分出一部分数据作为种子数据进行二部图扩散算法的训练。
从做出的结果上来看,以上算法还是比较能靠的住的,尤其是用打开数据训练的二部图扩散的算法,精准度还是很高的,因为无法计算AUC,也没有办法进行科学的判断,只能在直觉上判断了。