JobPlus知识库 互联网 互联网运营 文章
用户画像建模:方法与工具

用户画像是啥?听起来很高大上的,其实你最熟悉不过了。你的性别,年龄,喜好等等这些都是用户画像的维度。迅雷的产品总监blues认为,用户画像分析的维度,可以按照人口属性和产品行为属性进行综合分析,

人口属性:地域、年龄、性别、文化、职业、收入、生活习惯、消费习惯等;

产品行为:产品类别、活跃频率、产品喜好、产品驱动、使用习惯、产品消费等;

那么问题又来了,互联网公司利用用户画像做啥呢?主要是个性化营销和精准广告。

假如一个电商网站知道你是一个妹子,那么给你推荐女性的商品,你更可能购买。

假如你是一个年轻的小伙子,在视频网站上观看英超比赛,此时给你投放一个体育用品的广告,尽管你不一定会点击甚至产生消费行为,但是总比给你投放一个妇女用品的广告的效果要好。

好了,吹牛逼到此为止。下面开始从技术层面谈谈如何实践用户画像建模。

每个公司拥有的用户信息不太一致,有些公司有用户的真实信息(比如年龄),这种情况很可能不需要建模预测了,本文着重讨论的是我们从用户行为上建模预测各种用户画像维度。

说到预测,自然就会想到机器学习的分类和回归算法(贝叶斯,决策树,逻辑回归,支持向量机等)。对,我们就是采取这些有监督的学习方法,从标注好的训练数据学习到一个预测模型,然后对未标注的数据进行预测。

从中文姓名预测性别说起

告诉我一个名字,让我猜猜是男是女。哈哈,多多少少有点算命的味道。

首先,有监督的学习方法,就需要这样一批标注数据:大量的人名,以及其性别。

下面是某网站的数据,

经过我的验证,上面的是真实的身份证数据,所以数据绝对靠谱和真实。

于是,从上面爬了几百万条的数据作为我们的训练集和测试集。

其中,400w当做训练样本,100w当做测试样本。

分类算法:贝叶斯

特征提取流程:

1 根据姓氏辞典把姓氏去掉,留下不带姓氏的名字;

2 特征有三个维度,分别用X1,X2,X3(=X1X2)表示。

如果是单字名,则X1为空格,X2为单字名,X3就是前两者拼接X1X2,

比如郭靖,X1=” ”,X2=”靖”,X3=” 靖”。

如果是双字名,则X1为第一个字,X2为第二个字,X3由前两者拼接,

比如黄药师,则X1=”药”,X2=”师”,X3=”药师”

如果是三个字以上,则只保留最后两个字,当做双字名处理。

原始贝叶斯公式

工程实现中,上面公式的分母可以去掉。

所以对于名字X1X2,

P(男|X1X2)=P(男)*P(X1|男)*P(X2|男)*P(X1X2|男)

P(女|X1X2)=P(女)*P(X1|女)*P(X2|女)*P(X1X2|女)

特别注意的是,P(X1|男)表示的是训练样本中,男性用户中,名字第一个字出现X1的概率,如果第二个字出现X1,不算在这里。

举个例子,如何判断谢霆锋是男是女?

P(男|霆锋)=P(男)*P(霆|男)*P(锋|男)*P(霆锋|男)

P(女|霆锋)=P(女)*P(霆|女)*P(锋|女)*P(霆锋|女)

P(霆|男)表示的是训练样本中,男性用户第一个字出现霆的概率,

P(锋|男) 表示的是训练样本中,男性用户第二个字出现锋的概率,

P(霆锋|男) 表示的是训练样本中,男性用户第一个字是霆且第二个字是锋字的概率。

工程实现中,在预测阶段,可能会遇到一些特征在训练样本中没有,则需要做一下平滑(比如分子加一个很小的值),不然男女概率都为0,无法预测。

关于这个模型,特征提取和采取贝叶斯模型,是参考了《基于中文人名用字特征的性别判定方法》这篇论文来做的。还有篇论文,是用条件随机场来做的,有兴趣的读者可以看看《基于条件随机场的中文人名性别识别研究》。

在实际应用中,这个模型适合于我们知道用户姓名但是不知道性别的情况,比如某电商网站,一般情况用户订单中填的收货人姓名都是真实的,注册信息中可能带有性别但是不靠谱可能是乱填的。

提到电商,不得不提淘宝,淘宝可是有用户的身份证信息的,但是据说淘宝会保存用户两个性别,一个是身份证信息的性别,一个是预测性别。也许是他们实践过,不同的业务场景,两个性别的效果不一样。

好了,再说说从用户行为来建模预测。不同的产品的用户行为信息不太一致,提取的特征以及方法也不一致。对于视频用户,提取的特征通常是这个视频信息,比如你看了《小时代》,我们就会给你打上一个“杨幂“的标签作为你其中一个特征。对于微博用户,提取的特征来自于你发的微博内容和关注的好友,比如你关注了tfboys,或者经常转发他们的相关的微博,我们就会给你打上”tfboys“和”小鲜肉“的特征。对于新闻资讯用户,提取的特征就是该新闻的主题,关键词等信息。提取的特征来自于结构化信息和非结构化信息。对于结构化信息(数据库表,xml,json等),容易抽取。但是对于非结构化信息,就需要自然语言处理和文本挖掘的方式来抽取,比如常见的tf-idf来提取关键词,lda算法来提取主题。

对于抽取的这些信息,就可以当做用户的基本行为特征,其实也可以当做一部分用户画像的维度了。

然后,我们如何利用这些基本行为特征,来进行其他用户画像维度的预测呢?

还是采取分类的算法。对于有监督学习,当然需要男女,年龄等标注数据了。可以跟第三方公司进行数据合作,也可以人工标注。通常,可以跟第三方广告公司进行数据交换,通过cookie-mapping方式进行用户关联。

好了,特征和标注数据都有了,那么可以建模了。分类算法一大堆,贝叶斯,逻辑回归,svm,gbdt,random forest,神经网络等等。开源的算法库也有很多,后续会介绍liblinear,xgboost,sklearn。

然而,经过实践的工程师都知道,算法不是万能的。一个好的模型,除了算法本身,数据质量,数据预处理,特征工程等等这些都很重要。且外,还需要根据业务情况,进行随机应变。

下面分享一些工作中用到的奇技淫巧。

互联网数据,并不像学术研究中的数据那么完美,而是“杂乱脏“。抛开业务不说,仅从数据上看,标注数据有误,特征数据稀疏,类别不平衡等等。总之由于种种问题,可能导致我们模型不是那么准确。一种有效的思路,就是我们不预测全体用户,只预测我们有把握预测的,因为对于业务方来说,准确率相对于召回率,对他们更重要。朝着这种思路,也有不少尝试方案。比如分群预测,分群的方法可以从业务上分,也可以从算法上分。从业务上分,比如视频用户可以分为电影用户和电视用户等等。从算法上分,可以通过聚类的方法来分。分群完毕后,再对不同的群体进行建模,通过测试集预测,过滤掉准确率较低的群体,保留准确率较高的群体即可。还有种尝试方案,就是特征选择和用户筛选结合起来,特征选择的算法也有很多,比如信息增益,卡方测试等,保留下有分类能力的特征,特征选择完毕后,对用户进行过滤,是否保留这个用户取决于这个用户是否拥有足够多的有分类能力的特征。这个用户过滤环节,训练测试阶段和预测阶段都要进行。

好了,talk is cheap,show me your code。下面开始介绍几个开源算法工具库。

下面三点是我挑选工具的标准:

1 支持类似libsvm格式的稀疏特征输入

2 支持百万级别训练数据

3 轻量级,快

libsvm和liblinear

在特征维度是几万以上级别的前提下,

libsvm只能训练几万条样本。

而liblinear对于百万级别的样本数量,速度很快,

千万级别有点吃力。

liblinear对于libsvm的缺点就是,不能使用核函数,libsvm也正是这点所以耗性能。

数据文件格式:标准的libsvm格式,每一行都是

label index1:value1 index2:value2

的稀疏向量的格式。

liblinear最简单的训练和测试方式:

train train.txt model.txt

predict test.txt model.txt predict.txt

使用liblinear之前,

建议进行L2范式归一化,实现简单,可以加快训练速度,可能会提高准确率。

sklearn特征选择和分类模型

好了,经历了用户画像建模的这段经历,的确体验到算法并不是万能的。所以,我们出了把精力学习那些神奇的算法原理,还需要在数据分析,数据处理,特征工程甚至业务知识方面花功夫。特别是特征工程,在互联网中是永恒的主题。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏支持
419人赞 举报
分享到
用户评价(0)

暂无评价,你也可以发布评价哦:)

扫码APP

扫描使用APP

扫码使用

扫描使用小程序