从0到1构建用户画像(二)

这篇文章主要针对用户性别这一标签进行实战开发介绍。

语言:python3.6

用户性别
  • 基于身份证

身份证号有18位,也有15位的,18位的第17位代表性别,15位的最后一位表示性别,奇数为男,偶数为女。

  • 用户姓名-性别判断模型

样本数据:带有身份证号和姓名的数据

分类算法:贝叶斯模型
在这里插入图片描述


import ngender

import re

def is_chinese(name):

    g = re.search(r'^[\u4e00-\u9fa5]{0,}$', name)

    if g is None:

        return False

    else:

        return True



train_data = train_data[train_data['user_name'].map(is_chinese)==True]

train_data['guess'] = train_data['user_name'].map(lambda x:ngender.guess(x.strip()))

train_data['r'] = train_data['guess'].map(lambda x:x[1])

train_data['guess_gender'] = train_data['guess'].map(lambda x: 1 if x[0]=='male' else 2)

  • 基于用户行为建模

决策树:变量处理灵活,不要求相互独立,不用预先对模型的特征有所了解,对于表达复杂的非线性模式和特征的相互关系,模型相对容易理解和解释。通过训练数据来构建一颗用于分类的树,从而对未知数据进行高效分类。在构建决策树的过程中,最重要的是入好找到最好的分割点。[如何选择分割]和[如何停止分割],过拟合问题。最简单的办法是设定较少的树的深度或者枝叶,但是这样会欠拟合。所以使用交叉验证:

特征:用户ID KOL账号属性 浏览商品类目属性 性别

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import StratifiedKFold
X_train, X_test, y_train, y_test= train_test_split(train_data, lable, test_size=0.2, random_state=42, stratify=lable)
rf = RandomForestClassifier(n_jobs=3, random_state=2019)
rf.fit(X_train,y_train)
print(classification_report(y_true=y_train, y_pred=rf.predict(X_train)))
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=2019)
gsearch1 = GridSearchCV(estimator=RandomForestClassifier(oob_score=True, random_state=2019),scoring='f1', return_train_score='info', cv=cv, n_jobs=-1, param_grid=param_test1)
gsearch1.fit(X_train,y_train)
标签的计算
  • 基础表
    借用数据仓库的思想,有利于表中的字段和数据复用。首先我们对基础数据进行整合成一个大宽表,不同标签模型需要的特征可以来源于这些宽表。

  • 加工表
    每一个用户标签结果可以存为一个Hive表,表结构设计为

create table if not exists portrait.portrait_gender(
  user_id             int                                   comment '用户ID'
  ,gender        struct<d:string,c:int,t:int>          comment '用户性别'
)comment '用户画像-用户性别'
partitioned by (stat_date string comment '统计日期');

标签存储格式为:(统计类的标签置信度为100)

{d: 标签, c: 置信度, t: 标签生成时间戳}
例如:
user_id	gender
1	{"d":0,"c":80,"t":1557551007242}
  • 标签计算调度
    开发统一的标签写入工作流,负责将hive表的数据写入Hbase和es,传入的参数为表名。
    标签计算调度依赖管理和监控
  • Hive标签结果宽表
    为了方便标签的统计与分析,读取Hbase上的最新版本表写入Hive表中。
标签的管理
  • 标签分层、增删改查、加工属性(离散、连续)
参考
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值