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

前言

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

本案例是一个专注于flink动态规则计算的项目,核心技术组件涉及flink、hbase、clickhouse、drools等
项目可根据各类个性化需求进行二次开发后,直接用于实时运营,实时风控、交通监控等场景的线上生产
项目完整视频教程和资料代码等,可在易学在线 https://v.51doit.cn 获取
技术交流,可加微信: haitao-duan
在这里插入图片描述

画像标签体系

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

用户基本属性标签

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

字段类型定义备注
user_idbigint用户编码
login_namestring登录名称
user_namestring用户姓名
user_status_idint用户状态
gender_idint用户性别
birthdayint用户生日
user_ageint用户年龄
constellation_namestring星座名称
zodiac_namestring生肖名称
cellphone_idstring手机号
cert_idstring证件号
source_idbigint注册来源
is_real_name_authint是否实名认证标志
is_valid_cellphoneint是否认证手机标志
is_has_photoint是否有头像标志
is_tmp_user_flagtimestamp注册时间
create_timestring注册日期
create_datetimestamp修改时间
modify_timestring修改时间
modify_datetimestamp修改日期
date_idstring数据日期

用户登录活跃标签

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

字段类型定义备注
user_idint用户id用户唯一id
login_city_rationstring常登陆地用户近一个月常登陆的3个地点及比率
last_online_datestring最近登陆时间用户最近一次登录日期
online_frequencyint登录频次用户近一个月登录频次
online_timeint登录时长用户近一个月登录时长

用户年龄段标签

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

字段类型定义备注
user_idstring用户编码
contact_idstring联系人编码
user_sexstring用户性别
user_age_crowdstring用户年龄群体儿童(0-10)少年(11-15)…

用户交互行为标签

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

字段类型定义备注
user_idstring用户id用户唯一id
org_idstring原始id标签id
org_namestring标签中文名称标签对应标签的中文名称
is_validstring是否有效1有效
cntstring行为次数用户行为次数
date_idstring行为日期产生用户该条标签对应日期
act_type_idint用户行为类型1搜索2浏览3收藏4下单5支付6退货
tag_type_idint频道类型1母婴2家电3美妆4美食5服装6鲜花

用户消费能力标签

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

字段类型定义备注
user_idstring用户编码
sum_paystring累积付费金额
sum_numdecimal累积付费次数
paid_levelint付费分层1:[0,30)

用户订单画像标签

字段类型定义备注
user_idbigint用户
first_order_timestring首单日期
last_order_timestring末单日期
first_order_agobigint首单距今时间
last_order_agobigint末单距今时间
month1_order_cntbigint近30天购买次数
month1_order_amtdouble近30天购买金额
month2_order_cntbigint近60天购买次数
month2_order_amtdouble近60天购买金额
month3_order_cntbigint近90天购买次数
month3_order_amtdouble近90天购买金额
max_order_amtdouble最大订单金额
min_order_amtdouble最小订单金额
total_order_cntbigint累计消费次数(不含退拒)
total_order_amtdouble累计消费金额(不含退拒)
total_coupon_amtdouble累计使用代金券金额
user_avg_order_amtdouble平均订单金额(含退拒)
month3_user_avg_amtdouble近90天平均订单金额(含退拒)
common_addressstring常用收货地址
common_paytypestring常用支付方式
month1_cart_cnt_30bigint最近30天加购次数
month1_cart_goods_cnt_30bigint最近30天加购商品件数
month1_cart_submit_cnt_30bigint最近30天提交件数
month1_cart_submit_ratedouble最近30天商品提交占比
month1_cart_cancel_cntbigint最近30天取消商品件数
dw_datestring计算日期

用户退拒货行为画像标签

字段类型定义备注
user_idbigint用户
p_sales_cntbigint不含退拒商品购买数量
p_sales_amtdouble不含退拒商品购买的商品总价
p_sales_cut_amtdouble不含退拒实付金额(扣促销减免)
h_sales_cntbigint含退拒购买数量
h_sales_amtdouble含退拒购买金额
h_sales_cut_amtdouble含退拒购买金额(扣促销减免)
return_cntbigint退货商品数量
return_amtdouble退货商品金额
reject_cntbigint拒收商品数量
reject_amtdouble拒收商品金额
dw_datebigint数仓计算日期

用户购物偏好画像标签

字段类型定义备注
user_idbigint用户
common_first_catbigint最常购买一级类目名称
common_second_catbigint最常购买二级类目名称
common_third_catbigint最常购买三级类目名称
common_brand_idbigint最常购买的品牌
dw_datebigint数仓计算日期

画像标签存储及表结构

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

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

rowkey(deviceId)sexagevip
1200212132vip-1
1200213028vip-2

用户画像整体技术架构

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

用户画像库数据模拟

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

rowkey(deviceId)sexagevip
1200212132vip-1
1200213028vip-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 用户画像数据模拟器
 * <p>
 * deviceid,k1=v1
 * <p>
 * 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();
    }
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值