用户标签计算系统设计

实时计算部分参考自博文:

  1. 实时用户标签生成系统设计

用户标签系统的用途

用户分类,精准营销。

标签的定义

我司常用的标签有:新用户、老用户、流失用户、活跃用户等。此外,还可以根据用户以往行为,如投诉、订单取消、查看报价等,为用户打上相应的标签。标签系统提供了从多维度进行用户分类的方法 。在用户分类的基础上,实现差异化营销、差异化优惠,则可以节约营销成本。

标签的时效性

标签如新用户、流失用户等 ,会随用户在系统中下单而失效。而活跃用户会随着用户在系统中长期不下单而变成流失用户。通常,用户半年以前的行为参考性较低。用户标签需要根据用户近期行为生成。因此,标签必须与用户的实际状态同步,从而不误导营销决策。

标签的使用需求

使用标签的需求有2种:

  • 第一种是给定一个用户,问用户是否具有某标签。在给用户发放代金券时,用户标签可用于决定券的金额、券种。此种情况下,用户标签必须是实时的。
  • 第二种是给定一些标签,问具有这些标签的用户有哪些。在节假日、重大营销节点时,可通过为指定特征的用户集中推送优惠信息,实现促销。在这种情况下,用户标签为准实时即可。

总而言之就是:从用户角度查询;从标签角度查询

实时计算用户标签

为用户打上标签本质上是为识别用户的某种历史行为特征并标记出来。由于标签的时效性要求,需要分析用户近期的行为。因此,我们将用户的行为作为基本的记录、分析单位。

一条记录的例子如下:

用户Id 发生时间 行为类型 订单Id 其它
123 2016-10-20 12:10:32 取消订单 orderId .....

每当用户进行某个行为时,则为用户添加一条记录。为方便实现更多的查询、搜索扩展,我们把用户行为数据实时导入到Elasticsearch中。

当计算给定用户标签时,从elasticsearch/数据库中查询到指定时间段内用户行为,实时为用户计算标签返回。

由于用户行为是实时导入的,而用户标签是根据用户最新行为记录生成的,因此生成的标签具有实效性。由于每个用户在一段时间内的订单相关行为数据量不大,因此计算开销可以忽略。

以上设计的好处在于,我们可以随时调我们生成标签所关心的时间段。可以关心最近3个月,或者突然改到半年。而标签的定义也可以随时更改。底层是最原始的用户行为数据,不需要任何改变。

准实时标签查询用户

根据标签查询用户则要困难一些。我们必须提前为每个用户计算好标签。才可以根据标签建立索引,最后实现查询。在数据量较大的情况下,计算一次可能需要1-2天。如果只在少量时间节点使用此功能,这样的时间开销可以接受。

我们考虑如果需要经常使用此功能,如何实现 ?

由于我们已经有了实时计算给定用户标签的能力。因此,每当用户有新的行为时,我们可以重新为此用户计算标签,并入库。系统运行一段时间之后,在系统中有行为的用户在数据库中都有了记录。行为越频繁的用户,其标签状态越实时。

为了保证用户标签不过时,我们记录用户标签的更新时间。通过逐条扫库的方式,更新数据库中更新时间较为久远的数据,重新计算标签。

由于用户最新的行为会导致标签更新,因此扫库的方式只是为了保证标签不会因为时间的推移而过时。这方面的时效性要求在一周,一天以内都可以接受的。

用户行为的监听

一种监听用户行为的方法是通过异步消息。用户的行为会在不同的服务器中发生。当服务器检测到相关的事件时,通过消息系统发出消息通知,从而告知标签系统。然而采用消息系统实现有以下2个问题:

  • 需要其它系统配合发出消息
  • 如果消息丢失、消息重复则标签计算不准确

消息重复的问题可以通过去重来解决,而其它问题则无法解决了。

因此我们想到采用canal,通过监听数据库的变化,来得知订单状态变更的事件。这样,不需要其它系统的配合,需要完成事件的可靠监听。

总结

我们阐述了一种实现实时标签系统的方法。通过存储用户的历史行为,我们的底层系统具有了以不变应万变的能力。通过实时计算标签,用户标签的定义就可以随时修改了。通过将用户行为放入elasticsearch中,加快了用户行为查询的速度。

另一方面,通过实时重新计算用户标签,我们保证了用户标签根据用户行为实时调整。而对于标签的随时间推移过时问题,我们通过扫库的方式来逐渐更新。从而做到了用实时更新应对快速变化,用后台任务应对慢速化。

下面是我的补充:

用户标签的离线计算体系

我司目前有很多用户标签都是都是通过离线数据分析计算出来的,比如:散单高频用户(散单:非包月包年套餐,高频:每月内连续下单超过3次)、余额不足(会员卡内余额小于50)、沉睡用户(会员卡余额大于200,但近30天内有完成单,近14天未创建订单)等。这些标签都是可以通过各个业务表内的数据 进行汇总计算出来的。所以,我们的方案是定期同步相关数据表到hdfs中形成Hive数据表,然后使用Hive SQL对数据进行离线数据分析,然后将数据清洗到现有的用户标签相关数据表中。

原文地址:https://www.cnblogs.com/boothsun/p/8379258.html

时间: 2024-10-28 14:28:53

用户标签计算系统设计的相关文章

推荐系统实践第四章: 利用用户标签

基本上可以通过3种方式联系用户兴趣和物品: 用户喜欢过的物品(item-cf) 用户的好友或者有相似兴趣的好友喜欢过的物品(user-cf) 用户具有哪些feature, 哪些物品保护 之前用了user-cf,item-cf, 现在考虑使用标签进行推荐. 标签是一种无层次化结构的.用来描述信息的关键词. 给物品打标签: 专家.作者 用户 标签系统中存在的问题: 如何基于标签推荐 如何给用户推荐标签 基于标签的推荐系统示例: 利用Delicious数据集:(待链接)      格式:userID 

推荐系统实践(项亮)— 第4章 利用用户标签数据

标签应用:一种是让作者或专家给物品打标签:另一种是让普通用户给物品打标签(UGC).当一个用户对一个物品打上标签,这个标签一方面描述了用户的兴趣,另一方面则表示了物品的语义,从而将用户和物品联系了起来.标签,是一种重要的特征表现方式. 4.1 UGC标签系统的代表应用 标签系统的最大优势:发挥群体智力,获得对物品内容信息比较准确的关键词描述,而准确的内容信息是提升个性化推荐系统性能的重要资源. Delicious / CiteLike / 豆瓣 / Hulu 4.2 标签系统中的推荐问题 主要问

微信开发第4章 通过accesstoken获取用户标签管理

通过access_token获取用户标签管理: 1.获取标签列表 调用接口为: http请求方式:GET(请使用https协议) https://api.weixin.qq.com/cgi-bin/tags/get?access_token=ACCESS_TOKEN 返回为: 代码如下: 获取结果如下: 2.创建标签 一个公众号,最多可以创建100个标签. 调用接口说明: 请求地址: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-

袋鼠云数据中台专栏(七):用户标签体系建设的四字箴言

本文作者:子玺 袋鼠云数据中台解决方案专家.拥有近10年大数据从业经验,拥有PMP项目管理资格认证,精通数据类项目的开发实施和管理.曾服务过国家工商总局.北京市工商局.北京市财政局.广州开发区大数据局.平湖人社局.海盐人社局等行政单位,担任多个大型数据项目的数据应用咨询顾问/项目经理. 正文: 一.什么是用户画像?什么是标签? 当我们从互联网时代逐渐步入大数据时代后,企业及消费者行为不可避免地要面临一系列改变与重塑.其中最大的变化莫过于,消费者的一切行为在企业面前似乎都将是「可视化」的,然而,「

[转载]浅析海量用户的分布式系统设计

我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ拉.微信拉.淘宝拉.那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是想从最基本的地方开始,探寻服务器端系统技术的基础概念. 承载量是分布式系统存在的原因 当一个互联网业务获得大众欢迎的时候,最显著碰到的技术问题,就是服务器非常繁忙.当每天有1000万个用户访问你的网站时,无论你使用什么样的服务器硬件,都不可能只用一台机器就承载的了.因此,在互联网程序员解决服务器端问

大规模IM在线用户的计算和数据存储方案

简单的计算模型 1.如果一秒钟处理1000笔请求(每条都进行存储),那么一天的数据量是:24*60*60*1000=8640万:如果每秒1万笔的话,数据大概是8.64亿 2.行业里一般的统计方法是峰值是日活量的五分之一,日活是总用户的8%.按照,按照峰值1万来进行计算的话,总的用户数是: 1万*5/0.08=62.5万,另外付费用户占总用户一般在5%左右,具体看运营情况. 3.日活跃用户产生峰值的计算:一般的消息类的,大概能到0.5%到1%就不错(一秒钟同时发出,网络游戏可能有点不一样,会高一点

浅析海量用户的分布式系统设计

我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ拉.微信拉.淘宝拉.那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是想从最基本的地方开始,探寻服务器端系统技术的基础概念. 承载量是分布式系统存在的原因 当一个互联网业务获得大众欢迎的时候,最显著碰到的技术问题,就是服务器非常繁忙.当每天有1000万个用户访问你的网站时,无论你使用什么样的服务器硬件,都不可能只用一台机器就承载的了.因此,在互联网程序员解决服务器端问

高级接口--用户标签管理

官方文档 官文中是标签管理. 创建标签: def create_tag(access_token,name): # groups create_url = 'https://api.weixin.qq.com/cgi-bin/tags/create?access_token=%s'% access_token #create_url = 'https://api.weixin.qq.com/cgi-bin/tags/create?access_token=%s'% access_token #

用户标签设计

http://blog.csdn.net/lili72 背景: 需要更加符合实际的了解用户对产品的使用情况,取每天流水数据,统计分析一个时间段用户的行为特点: 用户地区属性:最近30天出现的地方,据此推测用户所在地方,用户出现最多和用户最近出现的地方. 用户偏好属性:最近30天用户使用的菜单,据此推测用户所偏好的产品,更深入知道用户的年龄层,定向向用户推送类似的产品. 用户时段属性:最近30天用户出现的时段统计(比如:早上,上午,下午,晚上等),据此推测用户使用产品时间段,每个时间段停留时长,大