数据挖掘之性别训练

摘要:业务存在大量数据,需要根据用户行为对用户添加性别年龄标签。本次主要处理性别标签。

一、训练过程:

1.先爬取qq资料页的号码与性别。根据解析出的 qq号/性别 列表匹配出 user_id/性别 列表,加上一个序列号,保存到一个用户/index/性别的字典中,存在一个文件里。

样例

Y054AOYY78WZWTWDY5QYB62Z9US4RR3W 0 Male

55O6XT2ZYWL7YWYQ5C84X3VF29PXAPND 1 Male

US485633ATU91PWZZ019A7TA55EQQ408 2 Female

X1SU532WBZRVB15SQA0S22XNA303ZZUA 3 Female

XY8R0CV2WZVWM1T75QS1MPUT529Q13V5 4 Male

BU3R1116UUB9ZD1PT7X9YW28S2MB7B21 5 Female

13P6RRW7UWABBV59A40AAW8DA1000697 6 Male

2.找到所有这些user_id的行为,如近90天,取 user_id,ActionType,ActionIndex这几列,

联合ActionType_ActionIndex为特征key的维度

'user_id/特征key/ gender分类'

0012C25V6YXZ0235N224O18SNYZAFZ82 c_54 Male

001YW18225PWS4USDTP5Y7XRZS9083U6 b_505692 Male

003X90C0BP7P0R844ZET7U2D14A48Z12 b_507712 Female

0088V21YVUUXZ0A9UQ5YSZ2CP10OU475 c_20 Female

00QB15Z011RPX120WX5Z9Z0X3O3X0ZS5 b_515978 Male

00WVYQSYXOC2QXY5100YW9T6AAF042R5 c_36 Male

00WYUT3W706TQXR320XXPDX308R3AW0W c_35 Female

0112C941Q349V3V2T51B2Z0211Z5VQ10 c_7502 Male

01134VB462B3T2Z8WY4VZW295039T2U7 b_64 Male

3.分析下所有行为标签来筛选特征,目前选择的标准:

1)该行为标签在所有人中出现的比率大于0.001(至少1000个人中有一个标签)

2)该行为标签在男女的lift值之差大于一定阈值(现在选的0.3)

lift(行为标签a,男) = 该样本在男性UV中出现的总次数/男性UV的总数

lift (行为标签a,女) = 该样本在女性UV中出现的总次数/女性UV的总数

diff =abs(lift(male) - lift(female)) / min(lift(male/female)) > 0.3

=>有效行为标签当特征

这样筛选出特征来,保存到一个字典中,用于组织特征矩阵

样例

f_2:564:: 0

4_4031188 1

b_130 2

c_44 3

f_6:501813:: 4

4.这样根据两个字典和2里的行为数据流,初始化生成一个全0矩阵feature_mat,维度 UV数*特征数

根据行为数据流,每读到一行,改写feature_max[Dict_uv[user_id]][Dict_feature[feature_key]]= 1

目前只把在所有特征中,有大于n条特征的uv当做有效uv进行训练和测试(现在取n> 10)

就组织成了所有样本的特征矩阵

训练数据 X = 特征矩阵

y = X每行对应的user_id对应的性别(同样存在1中的字典里)

5.训练模型,引用Python机器学习包,sklearn的线性模型 逻辑回归

fromsklearn.linear_model import LogisticRegression

classifier = LogisticRegression(class_weight='balanced')

用该模型来fit X,y矩阵就行,然后交叉验证准确度

metric =cross_val_score(classifier, X, y,cv=5,scoring='accuracy')

目前交叉验证结果:

阈值1,选取行为标签在所有人中出现的比率大于阈值0.001

阈值2,该行为标签在男女的lift值之差大于一定阈值(现在选的0.3) 有721维特征

阈值3,目前只把在所有特征中,有大于n条特征的uv当做有效uv进行训练和测试(目前n>5)

交叉验证准确度为 69~70%的样子。

下面是10-FoldsCross Validation的结果

在已经有的样本条件下我试了很多不同的参数和特征组合,差不多这样已经是最优的了。

二、对以后的样本做分类与结论。

找到所有需要分类的UV,可以分成n分,分别键uv字典,同理找到所有的行为数据流通过保存的特征字典生成新的特征矩阵,然后离线测试,读本地训练好的逻辑回归模型,计算出分数score。

如果做2分类score >= 0.5归于1类即Male,

或者不直接分类,保存score,以后想要女性人群比如200万,就取Top200万score小的user_id就可以。

每次测试一批新的样本,保存

user_id/ score / gender_class到指定hive表里

之后需要组织一下SQL和把各部分的python脚本放到一起,将符合条件的user_id跑出对应的性别分数,通过分数确定该用户行为偏男性还是女性。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180403G1ECCX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券