chaojie
2022/06/12阅读:24主题:极简黑
数仓笔记|针对客户维度建模需要关注的5个因素
本文结构
-
前言 -
属性值的标准 -
维度模型的层次 -
三种标签的加工 -
关于数据的变化 -
关于数据的集成 -
小结
大家好,我是超杰。数仓系列计划一共20篇,这是我数仓笔记系列的第6篇。
这一篇主要是针对客户维度建模会遇到的一些问题,我把这些问题划分成5类。
0、前言
主要通过聊聊客户维度建模的细节问题,来帮助大家解决工作中,出现类似的问题。
或许,你会收获到:
-
有意识地进行数据质量的管理 -
了解到不同层次的维度的解决方案 -
数据资产的形态,以标签为主的解决方案 -
针对数据变化频繁,了解优化加工数据的效率策略 -
针对数据集成,了解维度模型开发会出现的隐患
当然,以下是本人阅读书籍资料以及融合个人工作经验所写下来的笔记。
希望能够对大家有所启发。
1、属性值的标准
先讲讲属性值是什么意思?
性别是属性,男,女,未知,这些就是属性值。爱好是属性,打篮球,下棋,绘画,这些就是属性值。
客户维度一般会包含几十甚至上百个属性,如果不对属性值做标准,后续的数据分析工作会特别困难。
举个例子,我工作中,遇到地址信息填写不完整的现象特别多,客户随便填写,导致我们很难分析到很细的数据。
这些脏数据是没有价值的,如果我们不做标准,即便有上百个属性,没有标准也没有分析价值。
总之,一句话,没有标准,没有价值。
下面这是地址细到街道的标准,需要自取。
关于更新全国统计用区划代码和城乡划分代码的公告 http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2021/index.html
国家统计局 http://www.stats.gov.cn/tjsj/tjbz/
2、维度模型的层次
维度模型的层次一般分为2种:
-
层次固定 -
层次不固定
第一种,层次固定
大概是什么意思呢?
有些商业客户的性质,存在不同客户具有不同的客户类型,不同的客户类型之间,又有层次的说法。
就拿客户举例,A客户分为总公司,地方子公司,地方门店。像这种层次,就是固定的,固定的三种客户类型,母公司,子公司,以及终端门店。
针对固定层次的问题,我们会采用扁平化存储。
客户 | 客户类型 | 母公司 | 子公司 | 终端 |
---|---|---|---|---|
伙食好便利店(南山分店) | 终端 | 伙食好股份集团有限公司 | 伙食好股份集团有限公司(深圳分公司) | 伙食好便利店(南山分店) |
伙食好股份集团有限公司(深圳分公司) | 子公司 | 伙食好股份集团有限公司 | 伙食好股份集团有限公司(深圳分公司) | Null |
那么,还有一种情况,层次不固定。层次不固定可以使用桥接表。
层次不固定的场景有哪些呢?
举个例子,我要找到某个企业的具有决策权的人。公司的股份分配,可以由法人持股,个人持股。我们找到的持股超50%,就算绝对控股。
如果我们找到的控股是法人,则要继续找法人的绝对控股的人是谁,直到找到的绝对控股是个人才算结束。
这就是典型的深度不固定,且深度不可预测,面对这种桥接表。
法人 | 控股人 | 控股占比 | 层数 | 实际控股人 |
---|
大家感兴趣的可以思考一下,要如何开发设计。
3、三种标签的加工
客户维度存在很多属性,属性又可以分为三类:
-
基础标签 -
行为标签(加工类) -
预测标签(挖掘类)
基础类
基础类的标签,一般是客户直接填写得到的,比如说地址,姓名,性别,年龄。
这种标签,直接通过业务系统的客户信息表,直接获取的。
行为标签
而行为标签,是从事实表加工过来的。什么是行为标签,凡事要进行统计,才能得到的标签就是行为标签。
比如,近一个月的消费超1000元,近一个月登陆次数大于20次
为什么需要这些行为标签?
业务分析师,一般拿到简单的统计指标,是没有很大价值的,对于他们而言,拿到高价值客户,往往更有意义。
比如说,我想知道,我们APP的粘性较高的客户有多少?(举例:量化 粘性较高:上线次数1天大于3次,消费时长大于30分钟)
遇到这种需求,如果我们每次查询都从事实表过来,很消耗集群资源。
如果将这些标签加工到维表,好处很多:
-
提高复用性 -
降低事实表查询的频率,节约集群资源
挖掘类指标
接下来,聊聊挖掘类指标。
大家在工作中,可能会接触到一个客户评分及分析系统方法,RFM模型。
-
相关度 -
频繁度 -
消费度
相关度,客户最近一次访问APP是什么时候
频繁度,客户在某个时间周期,访问APP的次数
消费度,客户在某个时间周期,消费的总金额
重点不在RFM模型,不过感兴趣可以看看RFM模型。
RFM模型 https://baike.baidu.com/item/RFM%E6%A8%A1%E5%9E%8B/7070365
接下来,我们会通过三种权重,每个月针对每个客户去评一次分。
分数会记录下来,加载到客户维度表里。
客户 | RFM模型 | 其他行为标签 |
---|---|---|
小明 | 60|60|40|80 | ... |
小红 | 80|90|80|60 | ... |
数据挖掘师会拿到我们的数据,对客户行为进行数据挖掘分析。
接下来,因为标签的特殊,所以在数据分层不太一样。

数仓分层不同人有不一样的理解,分层主要起到划分的作用,便于管理的作用。
比如,需要挖掘的需求多了,单独分了一层数据挖掘层。又比如,数据资产以标签的形式体现,单独分一层标签层。
有些公司管理标签,则是使用一个标签系统,记录着某个表的某个字段是客户实体的基础标签。
这些公司的数仓建模可能跟维度建模不太一样,所以使用系统对标签进行管理。
我会将客户信息表会分为3类,一类是基础信息表,一类是行为信息表,一类是挖掘信息表。
将三张表加工到一张表,加载到标签层也行。
或者,三张表放到维度层(dim),用后缀区别标签类型也行(基础,加工,挖掘)。
4、关于数据的变化
分析数据的变化,本质是关注数据生命周期。
比如说,关注某个时间,活跃客户有多少人。
被打上活跃客户的标签,它的生命周期被关注到了。
凡是被关注到的标签/属性,都需要设计数据如何存储的问题。
哪些数据是没被关注的呢?
比如说年龄,每天都有人生日,这数据也是在变。
但分析师觉得,性别的属性变化没有分析价值。数据就算刷掉,也影响不大。
能够关注到生命周期的数据存储,我想到的是拉链表。
关注生命周期,换句话说,关注历史状态。
还有另一种情况,只存储最新的状态,这种直接采用增量快照的存储方式。
比如说,某个订单号的状态变更为“已发货”。
分析师只要最新的状态,这时,我们针对这一类情况,采用增量存储即可解决问题。同时,可以避免计算资源的浪费。
5、关于数据的集成
数据仓库的其中一个作用,消除烟囱式的开发,将数据源集成起来。
多个业务系统存在多个客户数据,我们集成要做的事,先对数据分级,选择其中“最具权威”的源,获取到客户数据,并且删除属性值不标准的数据。
一致性问题
当然,“最具权威”的源,或许不止一个。
接下来,会涉及到一致性问题,比如属性数量不同,属性不同,以及属性值不同。
保证一致性呢,本质是共享多个可管理的属性,这些属性具有相同的字段名和属性值。
列举一些属性;
-
性别:男,女,未知; -
政治面貌:群众,九三学社社员,共青团团员
维度可以根据维护共同属性,达到局部一致性的效果。
由于是多个源,拿到的客户信息。
如果用客户维度,关联多个事实表,可能出现某个客户在某个事实度量为空值的现象。
举个例子,房地产卖房,来看房的客户,不一定都成交。
如果拿到访客信息表和合同信息表,整合成一张客户信息表。
现在是用客户信息表,关联访客信息和合同信息,可能会出现大多客户,没有合同信息,成交额为空值。
数仓中,一般会尽量避免空值出现。
而且空值数据会使数据挖掘过程陷入混乱,导致不可靠的输出。
6、小结
-
没有标准,数据就没有价值; -
维度层次扁平化还是设计桥接表,取决于业务需求; -
客户维度属性划分标签,将数据转化为资产的,可以深入去研究; -
数据变化,重点关注历史状态,可考虑全量快照和拉链表的方案; -
数据集成,不得不考虑的一致性问题,以及数据质量问题。
这篇文章就到这里了,希望能对你有所帮助,欢迎加微信交流~
公众号:超杰的数据仓库笔记
私人微信:chaojieY
- END -作者介绍