(下)原理都懂,就是不会建模?来,顶尖数据模型走一波

简介: (下)原理都懂,就是不会建模?来,顶尖数据模型走一波

前言

上文咱开了个头,给大家分享了一下什么是FSLDM,以及FSLDM是怎么切分主题域的。我们简单回顾一下:

建模的核心是对现实世界的抽象。一个好的模型应该是稳定的是灵活、可扩展的是规范的是中性的、通用的

这其中最重要的,不是稳定,不是灵活、可扩展,不是规范,而是中性、通用。

我们建的模型应该把抽象出来的对象尽可能的打散、重组,然后抽象、再重组,直到能够非常通用才可以。

因为只有这样,我们建设的模型,才能为同类型的新业务服务,甚至外延到其他BU。才可能稳定、灵活、可扩展。

LDM位置

上次其实忘记说一个很重要的点:LDM是干啥的。在流程图中,LDM已经搞定到逻辑建模这个位置了:

但是在数据仓库的架构中,它的位置处于中间这个位置:

有同学就好奇了,为啥LDM会在这里呢?为啥LDM不把上面的维度建模也搞定呢?还有上面的Cube也建起来,不是更牛X么?

昨天群里有个同学也问,DWD层宽表的元素构成主要考虑那些因素?是要更多的考虑下一层所需的灵活性,多弄一些字段,还是为了降低存储压力,减少一些字段呢?

这就得回到分层建设的核心目标是什么。你认为是什么?

分层是为了解耦。

解什么的耦?解业务和数据的耦。这也是LDM为什么要通用的原因。LDM通用了,上层的业务随便改,下面的LDM不用改。下面的数据结构变了,LDM也不用大改。

所以回到文章最开始说的,什么是好的模型?为什么要做到灵活性、稳定性、通用性?

因为要解耦。

好,刚才那位同学的问题,你觉得应该怎么回答?

首先第一点:现在存储很便宜,所以不需要节省存储空间。

第二点:单纯的追求灵活性是不够的,极致的灵活,就是所有的数据都存,也就是现在的数据湖的套路。

OK,我个人的理解是这样的:DWD层可以不用考虑节省存储的问题,必须要追求灵活性,但是同样要考虑到通用性、规范性和稳定性。所以,合适的抽象和选择,是更重要的。但是如果是灵活性和存储两个选项,我选灵活性。

因为LDM的任务是解耦,为了节省空间,失去了解耦的灵活性,就舍本逐末了。

不过,尽信书不如无书。我们学习经典,也要跟追时代的步法,否则就变成老古董了。

上图中,业务系统和LDM都必须遵循三范式。但是现在互联网行业由于高并发的场景,业务库设计的时候就已经退化范式了,尤其是一些大数据环境,从工具层面就已经退化了。所以我们得结合实际去看哈。

当事人主题域

上篇文章里,我们看了一下FSLDM的十大主题域,分别是:当事人、资产、财务、区域、营销活动、协议、事件、内部组织、产品和渠道。

下面,我们拿其中一个主题域详细说说,看看他们具体是怎么设计的。

先上定义,比较枯燥,嫌费劲可以先略过:

当事人是指任意的个人或团体。比如:客户、潜在客户、各种组织、雇员、银行分行、内部部门等等。是客户概念的外延,能支持不同的关系(父子、雇佣、夫妻等);可以是一个具备相同目的的个体组合,如协会、社会团体、家庭、亲友团等;可以是一个外部或内部的组织机构。

然后呢?为啥要叫“当事人”?叫“客户”不行么?想解释这个问题,很简单,看你要解决多大的问题。

如果你要说抽象到客户一层,也可以。但是你还得弄一个“员工”。而且出现内部员工也是客户的情况咋办?保险的客户和基金的客户是一样的吗?医院的病人是不是也可以算是客户的?学校的学生呢?

哥们是不是觉得我在抬杠?有哥们会说了,我*,直接抽象成人不就完事了?整那么复杂!

嘿嘿,真的吗?企业是否也可以成为我们的客户?可以吧?那你是不是还要出现一个企业的实体?嗯?搞定企业就行了?我能不能发展政府部门的生意?

你是不是想说加一个字段区分啊?

嘿嘿,光有一个字段区分还不行,因为个人、公司和政府的唯一码不一样,所以可能还得分两张表。而且,他们的层级、关系都不一样,购买的产品和对应的政策也都是两套。你看,晕了吧?

之所以出现这些问题,是因为抽象的还不够高。当然,不是说抽象的越高越好啊,咱还得根据咱的实际业务去走。

比如FSLDM的当事人定义为:“任意个人或者团体”,这从最根本上就解释了:“我们是为谁服务的”这个问题。同理,IBM的BMDW也不是客户,而是关系人。

然后咱再往下梳理:当事人有几种?不同的当事人的属性也不一样,那必须得分开啊。他们之间是否还有层级关系?也要体现出来了。

所以,FSDLM当事人的模型就是就是这么构建的(懒,没用PD,大家凑合看哈,意思到了就行):

这样的结构可以完美解决上述的各种问题。最上一层,抽象为当事人,往下分为个人和团体机构。

个人和团体各自有自己的细分、关系、属性,各自分的清清楚楚,明明白白的。

个人又会衍生出两种不同的关系,一种是家庭,一种是员工。

机构呢,则细分为内部机构和外部机构,各自又有细分和上下级关系。

个人与个人、个人与家庭、机构与机构、个人与机构,都是可以发生任意关系的,这些关系都会在关系表中。

所以什么是检验模型好坏的标准?是你设计的模型,能够承接当前商业环境下任意的业务关系。

不好的模型是什么样的?这边业务逻辑稍微变一点,数据模型就没法支撑,就得加字段、加表,甚至重构。

到这里就结束了吗?远远没有。

前面说过,FSLDM第一层是10个主题域,第二层是50多个实体,第三层是近3000个实体和一万多个属性,以及300多个逻辑模型。

10个主题域我们说过了。并且选了其中一个,阐述了其中“当事人”领域,学习了他们是怎么抽象一个能够支撑核心业务的核心实体,以组建“当事人”主题域的。再往下一步就得再解剖一个核心实体,看看这个实体具体怎么设计的。

个人实体

很多人具体到建更细的实体的时候,就会有各种问题,这个属性怎么关联?有共性的该咋弄?这个是不是要单独建一个属性/实体等等。

其实这些问题我也不能给你准确的答复,也没有一个绝对标准的回答。在建模这块,基础的共识是:根据建模师的经验和喜好,比较自由的去构建。

这个有点像建筑设计师的感觉。只要结构合理,力量支撑到位,对下层的操作数据友善,对上层的业务拓展开放,就是一个非常好的建模。

在FSLDM的当事人主题-个人域中,是这样构建的(图片不严谨,凑合看哈):

中间是当事人-个人主题域的层级关系。这里核心实体有3个:当事人、个人、雇员。

为什么语言放在当事人实体上呢?我们思考一下,当事人除了人,其实还有组织机构。组织机构其实也是有语言偏好的。好比我们给各大领事馆打电话,用他们的官方语言是尊重的表现,即便是他们也懂中文。

但是职业历史、个人技能、婚姻状况等就只能放在“个人”实体上了。而下面雇员其实也有自己的属性,这我就没画出来了。

在个人层面,各种属性就不说了,根据业务要求来。请注意右侧,还有一个付款时序和奖励时序。这两个就跟银行的业务关系非常紧密了,而且后续可以做很多的业务洞察。

有人说了,那银行保险之类的公司最重要的不是额度、签约历史、联系方式、身份验证等,这些信息在哪里?

嘿嘿,这些信息是非常重要,但是不单单是只有个人才有哦!机构也是有的。所以这些统统都放在“当事人”那一层,比如这样:

并且,因为额度、身份、签约、联系信息等内容其实都是会变化的,有些信息变化可能还会很频繁,所以建历史表是最合适的了。

那跟其他主题域发生关系咋弄?你得有一个区域,专门放当事人跟其他主题域的关联关系。

那有其他业务怎么办?具体看是什么业务,如果是核心业务,比如协议、产品,用上面的关联关系直接连通到其他主题域。

如果是风险、信用报告、资产和负债等与当事人关系非常紧密的,单独划分一个个的小区域,专门存放这类模型。

所以当事人这个大的主题域下,还会细分以下部分:

个人、机构业务、机构信息、关系、分类、风险、信用报告、资产、负债等等。

每个小块中都是以当事人为核心,各自展开。当然,关注的内容、建立的实体、关系都完全不一样,相互独立,却有互相关联、支撑。这有点MECE的那个意思。

顺序

这一个主题域我们说完了,这还有9个呢。怎么搞?按什么顺序建呢?有些同学喜欢按照重要程度去建设,前面不是已经整理出来了么?跟其他主题域关系最紧密的就是啊。那就是当事人、协议和组织了。

这个逻辑很有道理,但是你贸然决策,就肯定会踩坑。因为有些领域是非常个性化的,非常耗费时间,有些领域还没啥产出。

而且,你评判主题域是否重要的指标是什么?跟其他领域的关系密切程度吗?那个的确能代表重要程度,但是这同样也代表了复杂程度啊。

我的经验是重要性+价值度,评价出优先级别。这样的好处是边建设,边有业务产出。

不过FSLDM的建设逻辑既不是按上面说的那种重要程度排序,也不是按重要+价值综合评定,而是按这个逻辑:

这也是分轻重的,但是有没有发现规律?那就是除了重要、价值两个维度之外,还有一个“数据”的维度。

为啥要加这个维度?因为没参考数据,建模的工作就是空对空啊,全凭想象。而且,建模之后有一个非常关键的动作,就是模型的验证。没数据,也没办法验证你这个模型的好坏。

所以,加入数据因素,综合评判,更适合建模工作的推进。

你是不是好奇FSLDM的建模工作推进流程?这个当然不能少了!

简单来说,项目得分准备、研讨、分析源系统、业务定义、客户化和模型验证6个环节。

不过这个参考意义不大,因为他们已经有标准模型了,相当于是改装车的工作流程,而不是造车的流程。

其中比较有意思的环节是研讨环节。这个环节相当于是在拉平认知。后面的事情就好办了。

为什么说参考意义不大呢?因为现在,已经没有哪个公司愿意这么做了。主要的原因一言难尽呐!如果你感兴趣,就继续点“在看”,我看有没有足够的动力,推动我去吐槽一下现在行业数据仓库工作状态和未来发展方向。

结语

建模是一件非常考验数据建模工程师功底、专业性极强的工作。模型架构的合理不合理,完全取决于你对于业务的理解、对于方法的熟练掌控能力,以及对于数据的结构性架构的能力。

提升能力的方法,最好的办法就是阅读经典,理解、掌握其内在逻辑,不断的思考、总结、提炼,然后在实践中磨炼。祝好!

感谢阅读,本次分享的内容就结束了。本公众号目前保持日更3000字,为你提供优秀的数据领域的分享。

相关文章
|
搜索推荐 领域建模 调度
(上)原理都懂,就是不会建模?来,顶尖数据模型走一波
(上)原理都懂,就是不会建模?来,顶尖数据模型走一波
|
数据可视化 数据挖掘 大数据
大数据可视化理论与案例分析|青训营笔记
通过本篇文章,可以帮助读者对数据可视化的概念和原理有一个整体的认知,并且介绍了数据可视化中常见的可视化图表的种类和使用场景。
284 0
大数据可视化理论与案例分析|青训营笔记
|
机器学习/深度学习 SQL 数据采集
数据分析理论与实践 | 青训营笔记
埋点:埋点数据是指上报的记录着触发原因和状态信息的日志数据。按照上报方来看,可以划分为"服务端埋点”和"客户端埋点”,按照上报形式,可以划分为"代码埋点”、“可视化全埋点” 。
167 0
数据分析理论与实践 | 青训营笔记
|
存储 SQL 分布式计算
从理论到工程实践——用户画像入门宝典(一)
用户画像是大数据顶层应用中最重要的一环,搭建一套适合本公司体系的用户画像尤为重要。但是,用户画像的资料往往理论居多,实践少,更少有工程化的实战案例。 本文档结合了常见的用户画像架构,使用Elasticsearch作为底层存储支撑,用户画像的检索和可视化效率得到了大幅度的提升。文档从用户画像的理论到实践均有所涉及,大家可以参照此文档完成用户画像系统从0到1的搭建。
735 1
从理论到工程实践——用户画像入门宝典(一)
|
SQL 消息中间件 存储
从理论到工程实践——用户画像入门宝典(二)
用户画像是大数据顶层应用中最重要的一环,搭建一套适合本公司体系的用户画像尤为重要。但是,用户画像的资料往往理论居多,实践少,更少有工程化的实战案例。 本文档结合了常见的用户画像架构,使用Elasticsearch作为底层存储支撑,用户画像的检索和可视化效率得到了大幅度的提升。文档从用户画像的理论到实践均有所涉及,大家可以参照此文档完成用户画像系统从0到1的搭建。
394 0
从理论到工程实践——用户画像入门宝典(二)
|
机器学习/深度学习
一图看懂所有机器学习概念
一图看懂所有机器学习概念
一图看懂所有机器学习概念
|
机器学习/深度学习 人工智能 算法
南大周志华、俞扬、钱超最新力作:《演化学习:理论与算法进展》正式上线
梯度下降或最速下降法,是机器学习最为重要的模块之一。尤其是在深度学习时代,梯度下降已成为不可或缺的组成部分。但同时,梯度下降也限制了机器学习推广到更广泛的一些任务中,例如不可微的目标函数。这一缺陷,却正好能被本书的主题「演化学习」解决。
487 0
南大周志华、俞扬、钱超最新力作:《演化学习:理论与算法进展》正式上线
|
搜索推荐 数据挖掘 SEO
三大强者优化思维:数据分析、坚持写作、抓住重点
我们在做任何事情的时候,如果是一些比较简单的工作,我们就会很得意或者是不屑去做,但是如果遇到一些比较困难的事情的时候,大部分人都会选择退缩、害怕,在搜索引擎优化方面也是如此,一般的seo人员对于网站的优化总是轻描淡写,对于网站的布局很简单,内容也是草率的写作,没有核心主题,但是强者就会做好数据分析、坚持写作和抓住重点,后面就是静观其变网站的数据变动,并且根据这些变动进行合理的调整,不断的提升网站不足的方面。
575 0
三大强者优化思维:数据分析、坚持写作、抓住重点
|
人工智能 安全 算法
12月6日云栖精选夜读 | 三张图读懂机器学习 :基本概念、五大流派与九种常见算法
机器学习正在进步,我们似乎正在不断接近我们心中的人工智能目标。语音识别、图像检测、机器翻译、风格迁移等技术已经在我们的实际生活中开始得到了应用,但机器学习的发展仍还在继续,甚至被认为有可能彻底改变人类文明的发展方向乃至人类自身。
2995 0