从零构建FLINK整合Drools动态规则实时运营系统(项目案例)-第5篇(用户画像篇)

前言

项目介绍在线视频: https://www.bilibili.com/video/BV1zv41157yY

本案例是一个专注于flink动态规则计算的项目,核心技术组件涉及flink、hbase、clickhouse、drools等
项目可根据各类个性化需求进行二次开发后,直接用于实时运营,实时风控、交通监控等场景的线上生产
项目完整视频教程和资料代码等,可在易学在线 https://v.51doit.cn 获取
技术交流,可加微信: haitao-duan
从零构建FLINK整合Drools动态规则实时运营系统(项目案例)-第5篇(用户画像篇)_第1张图片

画像标签体系

  • 用户基本属性标签
  • 用户订单属性标签
  • 用户退换货属性标签
  • 用户购物车属性标签
  • 用户活跃属性标签
  • 用户偏好属性标签

用户基本属性标签

用户属性指标主要根据业务数据来源(业务系统中的用户信息)
尽可能全面地描述用户基础属性
这些基础属性值是短期内不会有改变的,如年龄、性别、手机号归属地、身份证归属地等

字段 类型 定义 备注
user_id bigint 用户编码
login_name string 登录名称
user_name string 用户姓名
user_status_id int 用户状态
gender_id int 用户性别
birthday int 用户生日
user_age int 用户年龄
constellation_name string 星座名称
zodiac_name string 生肖名称
cellphone_id string 手机号
cert_id string 证件号
source_id bigint 注册来源
is_real_name_auth int 是否实名认证标志
is_valid_cellphone int 是否认证手机标志
is_has_photo int 是否有头像标志
is_tmp_user_flag timestamp 注册时间
create_time string 注册日期
create_date timestamp 修改时间
modify_time string 修改时间
modify_date timestamp 修改日期
date_id string 数据日期

用户登录活跃标签

看用户近期登录时间段、登录时长、登录频次、常登陆地等指标

字段 类型 定义 备注
user_id int 用户id 用户唯一id
login_city_ration string 常登陆地 用户近一个月常登陆的3个地点及比率
last_online_date string 最近登陆时间 用户最近一次登录日期
online_frequency int 登录频次 用户近一个月登录频次
online_time int 登录时长 用户近一个月登录时长

用户年龄段标签

在做营销活动或站内推送时,可对不同年龄段做针对性运营

字段 类型 定义 备注
user_id string 用户编码
contact_id string 联系人编码
user_sex string 用户性别
user_age_crowd string 用户年龄群体 儿童(0-10)少年(11-15)…

用户交互行为标签

记录用户在平台上每一次操作行为,及该次行为所带来的标签。后续可根据用户的行为标签计算用户的偏好标签,做推荐和营销等活动

字段 类型 定义 备注
user_id string 用户id 用户唯一id
org_id string 原始id 标签id
org_name string 标签中文名称 标签对应标签的中文名称
is_valid string 是否有效 1有效
cnt string 行为次数 用户行为次数
date_id string 行为日期 产生用户该条标签对应日期
act_type_id int 用户行为类型 1搜索2浏览3收藏4下单5支付6退货
tag_type_id int 频道类型 1母婴2家电3美妆4美食5服装6鲜花

用户消费能力标签

看用户的消费金额、消费频次、最近消费时间。进一步结合用户登录活跃情况,可以对用户做RFM分层。

字段 类型 定义 备注
user_id string 用户编码
sum_pay string 累积付费金额
sum_num decimal 累积付费次数
paid_level int 付费分层 1:[0,30)

用户订单画像标签

字段 类型 定义 备注
user_id bigint 用户
first_order_time string 首单日期
last_order_time string 末单日期
first_order_ago bigint 首单距今时间
last_order_ago bigint 末单距今时间
month1_order_cnt bigint 近30天购买次数
month1_order_amt double 近30天购买金额
month2_order_cnt bigint 近60天购买次数
month2_order_amt double 近60天购买金额
month3_order_cnt bigint 近90天购买次数
month3_order_amt double 近90天购买金额
max_order_amt double 最大订单金额
min_order_amt double 最小订单金额
total_order_cnt bigint 累计消费次数(不含退拒)
total_order_amt double 累计消费金额(不含退拒)
total_coupon_amt double 累计使用代金券金额
user_avg_order_amt double 平均订单金额(含退拒)
month3_user_avg_amt double 近90天平均订单金额(含退拒)
common_address string 常用收货地址
common_paytype string 常用支付方式
month1_cart_cnt_30 bigint 最近30天加购次数
month1_cart_goods_cnt_30 bigint 最近30天加购商品件数
month1_cart_submit_cnt_30 bigint 最近30天提交件数
month1_cart_submit_rate double 最近30天商品提交占比
month1_cart_cancel_cnt bigint 最近30天取消商品件数
dw_date string 计算日期

用户退拒货行为画像标签

字段 类型 定义 备注
user_id bigint 用户
p_sales_cnt bigint 不含退拒商品购买数量
p_sales_amt double 不含退拒商品购买的商品总价
p_sales_cut_amt double 不含退拒实付金额(扣促销减免)
h_sales_cnt bigint 含退拒购买数量
h_sales_amt double 含退拒购买金额
h_sales_cut_amt double 含退拒购买金额(扣促销减免)
return_cnt bigint 退货商品数量
return_amt double 退货商品金额
reject_cnt bigint 拒收商品数量
reject_amt double 拒收商品金额
dw_date bigint 数仓计算日期

用户购物偏好画像标签

字段 类型 定义 备注
user_id bigint 用户
common_first_cat bigint 最常购买一级类目名称
common_second_cat bigint 最常购买二级类目名称
common_third_cat bigint 最常购买三级类目名称
common_brand_id bigint 最常购买的品牌
dw_date bigint 数仓计算日期

画像标签存储及表结构

画像数据,行数基本与公司用户规模相同;
列数则众多(一个中型互联网企业,用户的画像标签通常都在1000-2000个之间),而且会在实际运营中,不断增加新的标签,则会不断增加新的列;

考虑到行数及列数规模巨大(数亿行*数千列),以及列的动态增加特性,业内通常将用户画像标签数据存于Hbase之中,再辅以elastic search做二级索引,以实现对hbase中画像数据的快速检索;

rowkey(deviceId) sex age vip
1200212 1 32 vip-1
1200213 0 28 vip-2

用户画像整体技术架构

关于用户画像,限于本课程的侧重点和篇幅,这里就不详细展开了。
有兴趣的朋友,可以学习多易教育的数据分析类项目课程《Titan综合数据运营系统》
https://v.51doit.cn/detail/p_5fba7371e4b04db7c0903f2b/8

用户画像库数据模拟

假设公司已有的用户画像库,存储在hbase中,表结构为如下
列簇 f

rowkey(deviceId) sex age vip
1200212 1 32 vip-1
1200213 0 28 vip-2

可用数据模拟器快速生成约100万个用户的画像标签数据(每个用户1000个标签)

/**
 * @author 涛哥
 * @nick_name "deep as the sea"
 * @contact qq:657270652 wx:doit_edu
 * @site www.doitedu.cn
 * @date 2021-03-27
 * @desc 用户画像数据模拟器
 * 

* deviceid,k1=v1 *

* hbase中需要先创建好画像标签表 * [root@hdp01 ~]# hbase shell * hbase> create 'yinew_profile','f' */ public class UserProfileDataGen { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); conf.set("hbase.zookeeper.quorum", "hdp01:2181,hdp02:2181,hdp03:2181"); Connection conn = ConnectionFactory.createConnection(conf); Table table = conn.getTable(TableName.valueOf("yinew_profile")); ArrayList<Put> puts = new ArrayList<>(); for (int i = 1; i < 1000000; i++) { // 生成一个用户的画像标签数据 String deviceId = StringUtils.leftPad(i + "", 6, "0"); Put put = new Put(Bytes.toBytes(deviceId)); for (int k = 1; k <= 100; k++) { String key = "tag" + k; String value = "v" + RandomUtils.nextInt(1, 101); put.addColumn(Bytes.toBytes("f"), Bytes.toBytes(key), Bytes.toBytes(value)); } // 将这一条画像数据,添加到list中 puts.add(put); // 提交一批 // 攒满100条一批 if(puts.size()==100) { table.put(puts); puts.clear(); } } if(puts.size()>0) table.put(puts); conn.close(); } }

你可能感兴趣的