数据建模那点事儿

Power BI——数据建模案例分析 一、概念: 从多个表格、多个来源的数据中,根据不同的维度,不同的逻辑来聚合分析数据;而提取数据的前提是要将这些数据表建立关系,这个建立关系的过程就是数据建模。 二、案例: 比如有个电子产品专卖店,销售产品有三类:手机、电脑、平板,每一类又分别来自三个品牌:小米、苹果、三星,那么这个店销售的产品共计 9 个,其销售明细也是记录这些产品每天的销售数据, 为了能分析每个品牌的销售金额,或者分析每个产品类别的销售情况,其实还应该设计个 产品明细表以及对应的品牌表和种类表,像这样的: 分析以上4个表的关系:品牌表 阅读详情
AI摘要

本文通过一个真实的案例,详细解析了从确定目标到数据获取、清洗、整理直至建模的全过程,并分享了使用Python进行数据建模的经验。


作者:陈丹奕

今天要说内容是建模。为啥我作为一个数学能力并不强的人要在这献丑讲建模的事呢?其实我的目的很简单,就是为了告诉大家一个事实:数据分析中的建模,并没有想象中那么高深莫测,人人都有机会做出自己的模型。

第一部分:数据建模理论和逻辑

一、从数据分析的定义开始

维基百科对数据分析的定义如下:

Analysis of data is a process of inspecting, cleaning, transforming, and modeling data with the goal of discovering useful information, suggesting conclusions, and supporting decision making. Data analysis has multiple facets and approaches, encompassing diverse techniques under a variety of names, in different business, science, and social science domains.
(来源:Data analysis)

简单翻译:数据分析是一个包含数据检验、数据清洗、数据重构,以及数据建模的过程,目的在于发现有用的信息,有建设性的结论,辅助决策的制定。数据分析有多种形式和方法,涵盖了多种技术,应用于商业、科学、社会学等多个不同的领域。

和上篇文章中我画的图对比一下:


我在上篇文章中为了让初学者更容易走通全流程,简化了数据清洗的过程,实际上数据清洗绝非一次完成,“检验-清洗-检验”的过程可能会重复数次乃至数十次。

而建模呢?再次引用维基上对数据建模的定义:

Data modeling is a process used to define and analyze data requirements needed to support the business processes within the scope of corresponding information systems in organizations. Therefore, the process of data modeling involves professional data modelers working closely with business stakeholders, as well as potential users of the information system.(来源:Data modeling)
简单翻译:数据建模是一个用于定义和分析在组织的信息系统的范围内支持商业流程所需的数据要求的过程。因此,数据建模的过程需要专业建模师与商业人员和信息系统潜在用户的紧密合作。这段话的定义更偏向信息系统和商业数据建模,我之所以在此引用这段话,是为了明确接下来的讨论内容主要方向是商业数据分析和建模,至于科学研究方向的数据建模,不在这篇文章的讨论范围以内。

请注意上边这段话中的一个核心:支持商业流程。商业数据建模,乃至商业数据分析,其最终目的都是要支持某种商业流程,要么优化原有流程,提高各部分效率;要么重构原有流程,减少步骤;要么告诉决策者,哪些流程改造方向是错误的,以避免走错路。最终的目标,一定是提升效率。但在不同的情况下,提升效率的方式也是不同的,因此在每个模型建立时,都需要确定其解决的具体目标问题。

再往前走一步,数学—主要是统计学,在建模的过程中又扮演什么样的角色呢?继续引用维基:

Mathematical formulas or models called algorithms may be applied to the data to identify relationships among the variables, such as correlation or causation. In general terms, models may be developed to evaluate a particular variable in the data based on other variable(s) in the data, with some residual error depending on model accuracy (i.e., Data = Model + Error)(来源:Data modeling)

简单翻译:数学公式或模型称为算法,可应用于数据以确定变量之间的关系,如相关性或因果关系。在一般情况下,模型开发出来后用于评估一个特定的变量与数据中其他其他变量的关系,根据模型的准确性不同,这些关系中会包含残差(即,数据=模型+错误)

这段描述很明确,统计学在数据建模的过程中,主要用于帮助我们找出变量之间的关系,并对这种关系进行定量的描述,输出可用于数据集的算法。一个好的数据模型,需要通过多次的测试和优化迭代来完成。

综上,给出一个我认为的“数据建模”定义:数据集+商业目标+算法+优化迭代= 数据建模。定义中的每一部分都必不可少。

二、数据模型的建立过程

照例,先上流程图:


上图的流程颜色对应数据分析全流程,为了方便大家阅读,我把全流程图再贴一次:

接下来,我重点解读明黄色(浅黄?)部分的内容:

  • 选择变量与重构变量

在进行建模之前,首先要考虑的是使用哪些变量来建立模型,需要从业务逻辑和数据逻辑两个方面来考虑:

业务逻辑:变量基于收集到的数据,而数据在收集时,会产生与业务层面相关的逻辑,比如在汽车参数中,一旦我们定义了“家用轿车”这个类别,那么无论什么品牌什么车型,“轮胎数量(不计备胎)”这个变量就有99%以上几率为4……当然在接下来的建模中,我们不会选择这个变量。这一类情况是业务知识来告诉我们哪些变量可以选择,哪些不能选择。

数据逻辑:通常从数据的完整性、集中度、是否与其他变量强相关(甚至有因果关系)等角度来考虑,比如某个变量在业务上很有价值,但缺失率达到90%,或者一个非布尔值变量却集中于两个值,那么这个时候我们就要考虑,加入这个变量是否对后续分析有价值。

我个人认为,在选择变量时,业务逻辑应该优先于数据逻辑,盖因业务逻辑是从实际情况中自然产生,而建模的结果也要反馈到实际中去,因此选择变量时,业务逻辑重要程度相对更高。

而在变量本身不适合直接拿来建模时,例如调查问卷中的满意度,是汉字的“不满意”“一般”“满意”,那么需要将其重构成“1”(对应不满意)“2”(对应一般)“3”(对应满意)的数字形式,便于后续建模使用。

除这种重构方式之外,将变量进行单独计算(如取均值)和组合计算(如A*B)也是常用的重构方法。其他的重构方法还有很多种,在此不一一阐述。

  • 选择算法

我们在建模时,目标是解决商业问题,而不是为了建模而建模,故此我们需要选择适合的算法。常用建模算法包括相关、聚类、分类(决策树)、时间序列、回归、神经网络等。

以对消费者的建模为例,举一些场景下的常用算法对应:

划分消费者群体:聚类,分类;

购物篮分析:相关,聚类;

购买额预测:回归,时间序列;

满意度调查:回归,聚类,分类;

等等。

确定算法后,要再看一下变量是否满足算法要求,如果不满足,回到选择/重构变量,再来一遍吧。如果满足,进入下一步。

  • 设定参数

算法选定后,需要用数据分析工具进行建模。针对不同的模型,需要调整参数,例如聚类模型中的K-means算法,需要给出希望聚成的类别数量,更进一步需要给出的起始的聚类中心和迭代次数上限。

这些参数在后续测试中会经过多次调整,很少有一次测试成功的情况,因此请做好心理准备。

  • 加载算法与测试结果

算法跑完之后,要根据算法的输出结果来确定该算法是否能够解决问题,比如K-means的结果不好,那么考虑换成系统聚类算法来解决。或者回归模型输出的结果不满足需求,考虑用时间序列来做。

如果不需要换算法,那么就测试一下算法输出的结果是否有提升空间,比如聚类算法中指定聚类结果包含4类人群,但发现其中的两类特征很接近,或者某一类人群没有明显特征,那么可以调整参数后再试。

在不断的调整参数,优化模型过程中,模型的解释能力和实用性会不断的提升。当你认为模型已经能够满足目标需求了,那就可以输出结果了。一个报告,一些规则,一段代码,都可能成为模型的输出。在输出之后,还有最后一步:接收业务人员的反馈,看看模型是否解决了他们的问题,如果没有,回到第一步,再来一次吧少年……

以上,就是建模的一般过程。如果你有些地方觉得比较生涩,难以理解,也没有关系。下一篇专栏中,我将向你们介绍一个具体的数据模型,我会对建模的过程一步步进行拆解,力求简明易懂。


第二部分:数据建模的应用

我写了个建模的流程,有过建模经验的人自然懂,没有经验的各位也不要着急,这次我以一个真实模型为例,给大家详细讲述建模的各个步骤。照例,先上流程图:


大家可以看到,这个图是由我之前文章中的两张图拼合而来,而我今天讲的这个真实模型,将把图中所有的流程都走一遍,保证一个步骤都不漏。

Step 0:项目背景

话说这个项目跟我加入百度有直接关系……

2013年的最后一天,我结束了在三亚的假期,准备坐飞机回家,这时候接到一个知乎私信,问我对百度的一个数据科学家(其实就是数据分析师啦)职位是否感兴趣,我立刻回信,定了元旦假期以后去面试。两轮面试过后,面试官——也是我加入百度后的直属Leader——打电话给我,说他们对我的经历很满意,但是需要我给他们一份能体现建模能力的报告。

按说这也不是一件难事,但我翻了翻电脑后发现一个问题:我从上家公司离职时,为了装13,一份跟建模相关的报告文件都没带……最后双方商定,我有一个星期时间来做一份报告,这份报告决定了我是否能加入百度。

那么,是时候展示我的技术了!我的回合,抽卡!

Step 1:目标确定

看看报告的要求:

数据最好是通过抓取得来,需要用到至少一种(除描述统计以外)的建模技术,最好有数据可视化的展示

看来是道开放题,那么自然要选择一个我比较熟悉的领域,因此我选择了……《二手主机游戏交易论坛用户行为分析》

为啥选这个呢?你们看了我那么多的Mario图,自然知道我会选主机游戏领域,但为什么是二手?这要说到我待在国企的最后半年,那时候我一个月忙三天,剩下基本没事干,因此泡在论坛上倒卖了一段时间的二手游戏……

咳咳……总之,目标就确定了:分析某二手主机游戏交易论坛上的帖子,从中得出其用户行为的描述,为用户进行分类,输出洞察报告。

Step 2:数据获取

简单来说,就是用python写了个定向爬虫,抓了某个著名游戏论坛的二手区所有的发帖信息,包括帖子内容、发帖人信息等,基本上就是长这个样子:


(打码方式比较简单粗暴,请凑合看吧……)

Step 3:数据清洗

这个模型中的数据清洗,主要是洗掉帖子中的无效信息,包括以下两类:

1、论坛由于其特殊性,很多人成交后会把帖子改成《已出》等标题,这一类数据需要删除:

2、有一部分人用直接贴图的方式放求购信息,这部分体现为只抓到图片链接,需要删除。

数据清洗结束了么?其实并没有,后边会再进行一轮清洗……不过到时再说。

Step 4:数据整理

用上面的那些帖子数据其实是跑不出啥结果的,我们需要把数据整理成可以进一步分析的格式。

首先,我们给每条帖子打标签,标签分为三类:行为类型(买 OR 卖 OR 换),目标厂商(微软 OR 索尼 OR 任天堂),目标对象(主机 OR 游戏软件)。打标签模式是”符合关键词—打相应标签“的方法,关键词表样例如下:


(主机掌机那个标签后来我在实际操作时没有使用)

打完标签之后,会发现有很多帖子没有打上标签,原因有两种:一是关键词没有涵盖所有的产品表述(比如三公主这种昵称),二是有一部分人发的帖子跟买卖游戏无关……

这让人怎么玩……第二次数据清洗开始,把这部分帖子也洗掉吧。

其次,我们用发帖用户作为视角,输出一份用户的统计表格,里边包含每个用户的发帖数、求购次数、出售次数、交换次数、每一类主机/游戏的行为次数等等,作为后续搭建用户分析模型之用。表格大概长这个样子:

之后这个表的列数会越来越多,因为数据重构的工作都在此表中进行。

整理之后,我们准备进行描述统计。

Step 5 & 6:描述统计 & 洞察结论

描述统计在这个项目中的意义在于,描述这一社区的二手游戏及主机市场的基本情况,为后续用户模型的建立提供基础信息。

具体如何进行统计就不说了,直接放成品图,分别是从各主机市场份额、用户相互转化情况、地域分布情况进行的洞察。





Step 7 & 8:选择变量 & 选择算法

因为我要研究的是这些用户与二手交易相关的行为,因此初步选择变量为发帖数量、微软主机拥有台数、索尼主机拥有台数、任天堂主机拥有台数。

算法上面,我们的目标是将用户分群,因此选择聚类,方法选择最简单的K-means算法。

Step 9 & 10:设定参数 & 加载算法

K-means算法除了输入变量以外,还需要设定聚类数,我们先拍脑袋聚个五类吧!

(别笑,实际操作中很多初始参数都是靠拍脑袋得来的,要通过结果来逐步优化)

看看结果:



第一类别的用户数跟总体已经很接近了,完全没有区分度啊!

Step 7‘ & 8’ & 9‘ & 10’ & 11:选择变量 & 选择算法 &设定参数 & 加载算法 &重构变量

这一节你看标题都这么长……

既然我们用原始值来聚类的结果不太好,那么我把原始值重构成若干档次,比如发帖1-10的转换为1,10-50的转换为2,依次类推,再聚一次看看结果。


哦哦!看上去有那么点意思了!不过有一类的数量还是有一点少,我们聚成四类试试:


哦哦,完美! 我们运气不错,一次变量重构就输出了一个看上去还可以的模型结果,接下来去测试一下吧。

Step 12:结果测试

测试过程中,很重要的一步是要看模型的可解释性,如果可解释性较差,那么打回重做……

接下来,我们看看每一类的统计数据:


这个表出来以后,基本上可以对我们聚类结果中的每一类人群进行解读了。结果测试通过!

Step 13 & 14 & 15:输出规则 & 模型加载 & 报告撰写

这个模型不用回朔到系统中,因为仅仅是一个我们用来研究的模型而已。因此,输出规则和模型加载两步可以跳过,直接进入报告撰写。

聚类模型的结果可归结为下图:


眼熟不?在我的第二篇专栏文章第一份数据报告的诞生 – 一个数据分析师的自我修养  中,我用这张图来说明了洞察结论的重要性,现在你们应该知道这张图是如何得来的了。

撰写报告的另外一部分,在描述统计-洞察结论的过程中已经提到了,把两部分放在一次,加上背景、研究方法等内容,就是完整的报告啦!

最后附送几张各类用户发帖内容中的关键词词云图:




那么,这篇文章就到此结束了,最后的最后,公布一下我做这份报告用到的工具:


大家可以看到,要当一个数据分析师,要用到很多类别的工具,多学一点总是没有坏处的,在此与大家共勉。

本文来自作者陈丹奕的知乎专栏>>>

8大数据分析思维,解决90%的分析困境 任何模型都有其产生的历史背景、数据基础、使用范围,也不是所有模型的目的都是精准。简单、好用、省事,是更多时候的考虑。 阅读详情

相关推荐

数据仓库建模方法与建模案例

1. 数据仓库建模的目的是什么?2. 常见的数据建模方法有哪些?3. 常见的建模工具有哪些?1.数据仓库建模的目的?为什么要进行数据仓库建模?大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在 性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑 访问性能:能够快速查询所需的数据,减少数据I/O 数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数 据系统中的存储成本和计算成本 使用效率:改善用户应用体验,提高使用数据的效率 数据质量:改善数据统计口径的不一致.

ytp552200ytp的博客 5276

数据库建模

数据库建模

DeamonicHackers的博客 1599

说说AUTOSAR数据类型的那些事儿

数据类型的定义是AUTOSAR设计中非常重要的一部分,在Signal-Based的架构中,数据往往是一些简单的类型,如布尔、枚举、有/无符号整型。随着以太网在车载上的应用,面向服务架构的兴起,在功能定义和网络设计中,我们也面临越来越多的复杂数据类型的定义,如结构体、多维数组、变长数组、变长字符串、Union等等。这些类型的数据库文件(ARXML)开发及建模是一系列复杂繁琐的步骤,受一系列规则的约束限制,对我们而言无疑是一个新的挑战。 AUTOSAR数据类型回顾 AUTOSAR按照不同的抽象级..

怿星科技的博客 4918

终于有人把数据建模讲明白了

实体建模强调业务抽象,范式建模强调结构规范,维度建模追求分析效率,三者各有优势,服务不同场景。真实项目里,没有哪种方法是“标准答案”,更多时候是协同使用、分层应用、动态演进的。理解每种方法背后的逻辑和业务目标,才是做好数据建模的第一步关键。

oOBubbleX的博客 1420

Python让自动驾驶“看见未来”:环境建模那些事儿

哈喽,大家好!我是Echo\_Wish,今天咱们聊聊自动驾驶中一个“隐形但又极其重要”的技术——环境建模,重点聊聊怎么用Python帮自动驾驶“描绘世界”。

Echo_Wish 312

基于51单片机的智能花盆灌溉系统设计与实现

本文详细介绍了基于51单片机的智能花盆灌溉系统设计与实现,通过DS18B20温度传感器、土壤湿度传感器和LCD1602显示屏等硬件模块,结合精确的算法控制,实现自动监测与灌溉。系统解决了传统灌溉依赖定时器、缺乏可视化界面的问题,适合上班族、园艺爱好者和植物园工作人员使用,有效提升植物养护效率。

honey的博客 1015

初学Matlab数学建模的那些事儿

数学建模,说到底是一个不断试错的过程。初学的时候,建议从简单的问题入手,慢慢积累经验。Matlab的功能非常强大,熟悉一些常用的工具箱(比如Curve Fitting Toolbox)会让你事半功倍。Matlab数学建模C完整思路和源代码图标,思路说明如果你是一个刚刚接触建模的小白,可能还会感到有些力不从心。但是别怕,多练多试,总有一天你会发现,Matlab不仅仅是一个工具,更像是一个可以帮助你解决数学问题的“朋友”。最后,记得在建模的时候,一定要注重问题的实际背景,不要一味地追求模型的复杂度。

obDLaSfLKr的博客 719

02-Cesium-实现天地图标记

首先天地图申请token,然后Cesium-实现天地图标记详细说明

m0_62785037的博客 1171

建模那点事儿(下)

本篇文章多图,请谨慎打开。 文首声明:此文中的所有数据均为个人在14年初收集而来,不保证其有效性,请勿使用该数据进行商业活动。 再声明:这个模型是我两年前做的东西了,有一些细节可能因为记忆问题有错误,各位有看不懂的地方请直接问,我尽量解答。 上一篇我写了个建模的流程,有过建模经验的人自然懂,没有经验的各位也不要着急,这次我以一个真实模型为例,给大家详细讲述建模的各个步骤。 照例

zhuiqiuuuu的博客 688

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程

本文详细解析了企业微信群机器人的Webhook配置全流程,从创建机器人、获取关键Webhook地址,到使用代码发送文本、Markdown等多种消息类型。内容涵盖安全加固、错误处理及与CI/CD等系统集成的实战指南,帮助企业快速构建高效、稳定的内部通知系统。

ik678901的博客 1784

LLC谐振电路增益公式推导

LLC谐振电路增益公式理解

金凯*博客 1万+

读书笔记(Verilog HDL那些事儿_建模篇1)

读书笔记(Verilog HDL那些事儿_建模篇1)      说明:写代码总感觉不是很好,向前辈学习,提升自己。      感悟:1: 系统 -> 封装 -> 模块 这样的层次结构不只是Verilog,基本所有的代码都是                  可以这样划分的。              2: “代码风格”或者“代码结构”的确是需要好好考虑的问题。相同的“代码风格”  

时间的诗 1687

stc8g1k08硬件iic读取aht20温湿度及0.91寸oled显示

使用stc8g1k08读取aht20温湿度及0.91寸oled显示。

qq_61688416的博客 2772

读《java程序员,上班那点事儿》的一点摘抄分享

近来看了不少书(技术性的和非技术性的参差),其中有一本觉得对像我这样希望进入IT行业的菜鸟来说比较有帮助的叫《java程序员,上班那点事儿》的书。其中有两句话让我受益匪浅的。   1   2“先不要急着问能赚多少钱,   先要想想你能为别人提供什么服务。”   1   2“逐个排除你恐惧的理由,   一定要写在纸上,而不是只在心里想”   还有在书中着重的讲到日常工作中程序员会碰到的

u012920183的专栏 804

PyTorch实战(20)——生成对抗网络(Generative Adversarial Network,GAN)

自生成对抗网络 (Generative Adversarial Network, GAN) 提出以来,一直是一个活跃的研究和开发领域。本节探索了 GAN 的基本概念,重点解析了其两大核心组件——生成器与判别器的架构设计,深入阐述了 GAN 模型的整体工作机制,并使用 PyTorch 从零开始实现了深度卷积生成对抗网络 (Deep Convolutional GAN, DCGAN)。

盼小辉丶的博客 3545

华为OD机试:查找接口成功率最优时间段 (C/C++/Py/Java/JS/GO)

华为OD机试双机位C卷 查找接口成功率最优时间段,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。

qq_45776114的博客 4687

数据分析那点事儿(二)

在之前我们给大家讲了讲什么是数据分析以及数据分析的目的,数据分析就是通过使用合适的方法进行统计,统计也不是随随便便的统计的,需要找对方法。统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。而数据分析的目的就是通过分析数据找到企业未来的发展情况。今天就给大家讲一下如何分析数据分析。 那么如何进行数据分析?首先我们需要进行数据建模。数据建模的意义在于...

CDA数据分析师 245

华为OD机试 - 学校的位置 - 数学问题(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题。

学Java,找哪吒 455

数据及分析那点事儿

基础: 这世上只有时间对于每一个人都是公平的,只不过从先辈身上延续而来以及自身的时间质量不一样。 1) 万物都是数据,只是数据源的形式和数据获取的方式不同 2) 万事都是算法,每个个体除去生来的不同,真正有区别的是思维方式,进一步反映到行为方式以及习惯 例如:我们的形、色、闻、味、触五种感觉器官会无时不刻地抓取周遭环境的信息,再经过大脑的分析判断, 最终再转化为对外界环境的行为;这种分析

柒的方向 290

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数据仓库的哪些事儿

数据仓库 大数据平台 简介 通常说的大数据平台主要包括三部分: 数据相关的工具、产品和技术: 批量数据采集传输sqoop,spark 离线数据处理Hadoop,Hive,Spark 实时流处理Storm,Spark Streaming,Flink 数据资产: 公司业务本身产生和沉淀的数据 公司运作产生的数据(如财务、行政) 第三方数据:外界购买、交...

weixin_34387284的博客 465

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: 对线性回归,logistic回归和一般回归的认识
下一篇: 一个数据分析师的自我修养
achuo
博客等级 码龄18年 491粉丝 11原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值