数据仓库
用户画像的应用流程从原始的数据输入到模型应用可分为5块(图1),包括将操作型环境数据经ETL后集中存储在数据仓库,之后经过对数据的建模、挖掘、分析建立用户画像模型,最终将建好用户画像的数据接口调用到BI报表、经营分析、精准营销、个性化推荐等各系统模块。
图1
用户画像开发,主要是对数据仓库中的业务表、日志表、埋点表中的相关数据进行各维度建模。所以要对数据仓库和元数据非常熟悉。
案例
为了讲清楚如何开发用户行为标签,这里随便举一个某图书电商网站的例子,在介绍清楚案例相关元数据的基础上如何结合业务开发行为标签,案例及相关的元数据如有雷同、纯属雷同。
某图书电商网站拥有超过千万的网购用户群体,所售各品类图书100余万种。用户在平台上可进行浏览、搜索、收藏、下单、购买等浏览、交易行为。为了更好地运营网站产品,需要进一步了解用户,以便做精准营销和个性化推荐。为此需要开发出用户行为标签表。
相关元数据
商城自建立以来,数据仓库中积累着大量业务数据、日志数据及埋点数据。如何充分挖掘沉淀在数据仓库中数据的价值,有效支持到用户画像的建设,成为当前的重要工作。
在本案例中,可以获取到的数据按其类型可分为:业务类数据、用户行为数据。其中业务类数据是指用户在平台上下单、购买、收藏物品、货物配送等与业务相关的数据;用户行为数据指用户搜索某条信息、访问某个页面、点击某个按钮、提交某个表单等通过操作行为产生(在解析日志的埋点表中)的数据。
涉及到数据仓库中的表主要包括:用户信息表、商品订单表、图书信息表、图书类目表、APP端日志表、WEB端日志表、商品评论表等,下面就用户画像建模过程中一些主要用到的数据表做详细介绍。
这里对上面的表做个汇总:
-
用户信息表 (dwd.user_basic_info)
-
商品订单表 (dwd.gdm_ord_order)
-
图书信息表 (dwd.book_base_basic_info)
-
图书类目表 (gdw.book_std_type_df)
-
WEB端日志表 (dwd.beacon_web_books_client_pv_log)
-
APP端日志表 (dwd.beacon_app_books_client_pv_log)
-
商品评论表 (dwd.book_comment)
-
用户收藏表 (dwd.book_collection_df)
-
购物车信息表 (dwd.book_shopping_cart_df)
-
搜索日志表 (dwd.app_search_log)
上面列举了涉及到的10张表作为示例,在实际开发中涉及到的业务表、日志表、埋点表...要比这多的多。
用户行为标签开发
一、开发背景
用户行为标签表是根据用户在产品上的访问行为、下单行为提取用户标签,用于定位用户在产品上的访问情况,进而根据用户的浏览习惯、消费偏好做推荐和营销。
其主要数据来源包括业务类数据表、日志数据表和埋点数据表。其中日志数据和埋点数据记录了用户在产品上的全部行为,如用户浏览某个页面、搜索某个关键词、点击了某个点位即会在日志数据中有相应记录。
日志数据量非常大,需要数仓人员将其解析成结构化数据,落表以供调用。业务数据库记录用户购买、添加购物车等业务相关行为。
[ 数据来源 ]:用户行为属性标签主要来自用户属性标签表、商品订单表、图书信息表、图书类目表、WEB端日志表、APP端日志表、商品评论表、用户收藏表、购物车信息表、搜索日志表、行为权重配置表
用户行为标签表加工依赖表
最终建模后的目标——用户行为标签表表结构:
下面介绍这张行为标签表如何建模产生。
二、数据开发
本案例基于hadoop平台的Hive数据仓库进行开发。
这里首先确定用户行为标签表的表结构,包含哪些字段,这些字段都是什么数据类型,用户属性表创建代码如下:
在开发用户行为标签表,将用户与图书相关行为的标签打在用户身上的过程中,需要建立系列临时表,下面分5步详细介绍用户个性化标签表的建立过程。
Step1:建立临时表获取图书和图书类型的信息
从图书信息表和图书类型表中抽取图书id、图书名称、图书类型等信息建立图书相关信息的临时表1,其中图书信息表和图书类型维表通过图书id相关联。代码执行如下:
Step2:建立临时表从日志数据中提取用户浏览信息
日志数据对用户的每一次操作行为都进行了记录,对于探究用户行为偏好具有非常重要的意义。例如用户在WEB端浏览过某个图书详情页,对应的在WEB日志表中记录该次浏览行为,包括时间、日期、页面url、来源页url、用户id、设备id、ip地址等数据。一般商品页面链接中包含有该商品id的参数,通过对url进行解析可以找到该商品的id。
这里从日志相关的表中(包括APP日志表和WEB日志表)获取用户浏览图书对应的页面链接,通过正则表达式匹配出用户浏览图书页面链接所对应的图书id,代码执行如下:
上面这段逻辑中用了嵌套语句,匹配出页面链接中detail/后面的对应该图书的id参数。
Step3:将用户行为产生的图书标签插入到用户行为标签表中
用户行为标签表记录了用户在平台上购买、浏览、评论、收藏、取消收藏、放入购物车、搜索等各种行为过程所带来的标签。需要开发的表结构包括用户编码、标签id、标签名称、用户行为类型、标签类型、行为日期、行为次数共计7个字段。开发过程中需要将相关表的数据经过抽取、清洗后插入到用户行为标签表中。关于行为标签表的7个字段,各字段的释义如下:
-
用户id(user_id):用户唯一id;
-
标签id(tag_id):图书id;
-
标签名称(tag_name):图书名称;
-
用户行为次数(cnt):用户当日产生该标签的次数,如用户当日浏览一本图书4次,则记录4;
-
行为日期(date_id):产生该条标签对应日期;
-
标签类型(tag_type_id):在本案例中通过与图书类型表相关联,取出每本图书对应的类型,如《钢铁是怎么炼成的》对应“名著”;
-
用户行为类型(act_type_id):即用户的购买、浏览、评论等操作行为,在本例中通过预设数值1~7来定义用户对应的行为类型。1:购买行为,2:浏览行为,3:评论行为,4:收藏行为,5:取消收藏行为,6:加入购物车行为,7:搜索行为;
下面通过7段代码来讲述如何将用户每一种行为所带来的标签插入到用户标签表中。
行为类型1:用户购买图书行为带来的标签,代码执行如下:
在该段HQL逻辑中,我们从商品订单中抽取用户购买图书行为带来的标签数据放入该表中。对于第8行的逻辑,这里我们通过将数值1定义为用户购买行为,逻辑写死。后面当需求查看用户购买行为带来的标签时只需要添加限制条件“where as act_type_id=1”即可。同理下面几段业务逻辑中,我们分别为act_type_id设置值2、3、4、5、6、7来代表用户相应行为。
这里虽然将act_type_id的数值与对应的用户行为逻辑写死,但是每个用户行为带来的标签都是从与该行为相关的表中抽取,这里保证了每类行为带来标签的完整性及便于维护性。
行为类型2:用户浏览图书行为带来的标签,代码执行如下:
行为类型3:用户评论图书行为带来的标签,代码执行如下:
上述代码中在解析评论带来的图书标签时,首先需要将商品评论表和商品订单表关联(通过订单id),然后从商品订单表中找到对应的图书id。
行为类型4:用户收藏图书行为带来的标签,代码执行如下:
行为类型5:用户取消收藏图书行为带来的标签,代码执行如下:
行为类型6:用户加入购物车行为带来的标签,代码执行如下:
行为类型7:用户搜索图书行为带来的标签,代码执行如下:
到这里,用户个性化标签表的创建工作就完成了。用户个性化标签表记录了用户在WEB/APP端每一次操作带来标签的明细数据,并且该表每天增量更新昨天产生的数据(数仓T+1天更新数据)。
增量更新保证了用户所有历史行为的全量记录,如用户甲2017年6月20日浏览了图书《钢铁是怎样炼成的》,标签表中会在6月20日打上这样一条记录,该用户隔了两天6月22日又浏览了《钢铁是怎样炼成的》,标签表同样在6月22日再次打上一条记录(不会覆盖历史数据)。