-- 人会说谎, 但是数据不会
声明个人原创, 转载需注明来源 https://www.cnblogs.com/milton/p/16296974.html
数据和决策商业智能(Business Intelligence)是一个总称: 包括数据的定义, 生成, 收集, 存储和分析, 以及最后的一环 -- 决策.
数据化是对信息进行收集, 量化和存储. 这个趋势将一切活动数字化
- 可以电子化的活动: 媒体, 通信, 交易, 票据, 音乐, 娱乐等, 信息化的变革直接取代了过去传统的工作方式
- 无法电子化的活动: 建筑, 制造, 运输, 食品, 医护, 商超等, 因为必须以物理形态交付, 这些活动无法数字化, 但是可以通过IOT将过程数字化, 这方面现在有个流行名词叫数字孪生
由于科技的发展, 存储与传输的成本越来越低, 信息的产生速度与日俱增, 作为企业如何利用数据价值变得前所未有的重要.
数据对于决策的重要性 -- 传说罗斯柴尔德家族通过信鸽, 在滑铁卢战役还没有结束时就提前知道结果, 从而大量买入英国国债, 虽然未必是其成功的关键因素, 但是可以看出信息如何关键.
商业智能作为高价值服务, 自20世纪60年代计算机出现时就已经存在, 当时主要的用户是大型企业和政府部门, 经过半个世纪的发展, 商业智能已经成为中小企业的必备技能.
数据驱动决策如果一个人把决策建立在主观认知而不是事实基础上, 就容易产生错误的决策. 企业也是如此.
使用BI, 企业可以从实际数据中提取关键事实, 将其转化为决策的依据. 是否高效地使用商业智能和分析, 是现代环境中成功的关键.
商业决策根据频率和影响, 通常分为三类: 运营, 管理和战略.
运营决策运营决策通常频繁发生, 每小时每分钟, 与企业的业务相关. 运营决策影响企业的日常经营情况以及盈利能力. 对于生产经营中存在的具体问题, 通过BI系统进行自动决策或辅助决策, 可以提升工作效率, 减小风险, 例如
- 媒体通过分析用户的阅读历史, 向用户推荐喜欢的内容, 提升用户粘度.
- 产线通过收集当前的库存, 产量, 成品率, 未来的订单, 向采购部门提示可能出现短缺风险
- 风控根据用户的信贷历史, 行业, 收入, 住址, 电话, 人际关系, 判断用户的风险等级, 决定信贷额度
- 高频交易系统. 这算是BI系统的一个极端例子.
管理决策的频率不会很频繁, 例如每周或每月, 属于企业中的中层管理决策, 通常这些决策与战略决策的息息相关. 例子包括产品价格调整, 营销策略, 优惠政策等:
- 广告投放中, 根据各通道同类业务的历史performance, 确定在各通道的投放比例和投放策略
- 根据生产原料, 期货市场的市场供给情况预估成本, 确定未来一个季度的产品价格空间
- 根据营销目标, 流量通道的变化, 流量成本和转换成本, 调整营销策略.
战略决策通常由一个组织的最高管理层制定, 将对组织未来长时间的活动造成重大影响. 需要对多种方案进行仔细分析和评估后确定, 这种决策通常是不可重复的. 通过BI可以分析宏观环境, 通过市场趋势, 货币周期, 政策风向, 市场监管, 领导人偏好等重要信息, 结合内生数据对各种方案进行量化, 为最终的战略决策提供依据.
战略决策的例子包括
- 资产的兼并收购和出售
- 事业部整合, 组织架构调整
- 预算和目标调整, 对新市场的投资
- 产线的扩张, 连锁店面的扩张, 新城市的布局
决策中, 每一个层级都为实现上一层的决策服务, 一个大的决策会随着时间不断分解为更小的决策, 直至目标达成, 或目标无法达成不得不更换上层决策.
以俄政府决定武装进攻乌克兰为例
- 战略决策: 制定发动战争的目的, 确定要武装进攻, 确定进攻目标, 对各种情况的推演(需要多少物资和人力, 什么时间开打, 如何应对战争带来的内外风险和Plan B)
- 管理决策: 具体到某一阶段的进攻, 阶段目标, 预估对方规模, 投入的资源, 如何协调各职能, 前线和后勤, 对可能存在风险的预估
- 运营决策: 具体到一个具体的进攻, 对方有哪些工事和火力点, 己方有哪些武器设备, 进攻的选项和判断, 以及战斗过程中出现各种情况的应对.
随着每一个局部战斗(运营决策)的执行, 结果与预期的差距, 导致上层决策(战略决策)不断调整, 从最初的空降基辅, 到五月初的战线收缩转为集中兵力从东部推进. 可以看出在开战之初, 俄政府的数据和决策是有问题的, 基于错误的数据和判断, 做出了开战和冒进的决策.
用于决策的数据从整体看, 这些数据分为
公共数据公共数据指的是能从公开的渠道获取的数据, 例如货币汇率, 证券资产的价格; 某一地的人口, 气温, 降水量和湿度, 手机号归属地, IP归属地, 身份证归属地, 企业所处行业的原材料和商品价格行情, 等等.
不同的业务对公共数据有不同的需求, 体现在精度(准确性), 实时性, 回溯性等方面. 例如交易数据, 可以分为不同的时间间隔, 五秒, 五分钟, 日, 周.
要求不高的数据, 可以从公开渠道下载或自行采集, 但是对精度和实时性要求高的数据, 需要从非公共渠道购买.
非公共数据这部分数据指非公开渠道的数据, 或者需要付费的商业数据. 例如上面提到的高频交易数据, 有专人维护的地理信息和交通信息, 一些行研收集的行业数据, 还有监管机构从被监管机构提取的运营数据等.
内生数据企业运营中产生的数据: 财务数据, 业务数据, 大部分BI系统, 处理的是这部分内容, 配合公共和非公共数据, 产生报表或做出决策.
数据的类型数据的类型, 从不同的角度有不同的分类:
- 定性和定量
- 离散和连续
- 单维和多维 (例如地理坐标)
对于定性数据, 必须将定性数据转化为定量数据, 才能进行正确的分析.
BI系统对数据的分类BI系统对数据的分类有三层, 分别是 Raw(原始数据), Meta(元), Model(模型), 每一层都是对前一层数据的细分.
Raw 原始数据原始数据泛指各种未经校验的, 未处理的, 未结构化的, 无直接的自然含义的数据. 这一阶段的数据是粗糙的, 可能存在噪音, 可能存在不匹配的格式, 需要处理后才能被软件使用.
原始数据的例子- 从传感器采集的每秒的角度读数
根据ADC的采样频率和精度, 传感器读数会是一个固定时间间隔的数字, 这个数字有可能是一个区间的整数值, 例如对于10bit精度的ADC, 采样值范围为[0, 1024], 边界和中点未校准, 例如摇杆角度范围为120度, 读数中点(60度)在 508 而不是 511, 边界是[5, 1021], 而且读数的变化在各个角度是不均匀的, 中间分辨率大, 两边分辨率小. 对于这种数据, 要经过校准, 去噪, 转换等方式, 将读数转变为对下一个阶段有意义的数据. - 媒体的网页数据
从爬虫的角度, 如果是一个HTML结构的页面, 数据是一个很大的字符串, 当中包含了各种HTML标签, 广告和固定的界面元素, 如果需要的是其中的新闻内容, 则需要对数据进行HTML解析, 根据路径提取某一个id或class中的内容. 内容中如果存在一些特殊字符, 例如内嵌了广告, 或者站内的链接, 还需要进一步过滤 - 通话录音
通话录音是一个二进制文件, 根据数据处理的需要, 例如希望做文本分析和关键词提取, 则首先需要根据录音的编码格式, G.726, 还是AC3, MP3, 还原回音频, 使用ASR工具提取文本
从BI软件的角度, 原始数据有以下基础类型
- 字符串
- 数值
- 时间
- 二进制(*)
实际上通用的类型只有三种: 字符串, 数值, 时间. 二进制是一种特殊的类型, 用于处理其它的例外情况, 例如无法识别的数据. 对于二进制数据, 通常需要转换为以上的三种通用类型才能被BI软件处理.
基于以上的基础类型, 进行排列组合可以得到派生类型, 例如
- 多维数据(例如X-Y-Z轴坐标值)
- 数组
对于数值类型和时间类型, 可以进一步衍生出高级类型
- 数值
- 整数
- 小整数(绝对值不超过255的整数)
- 长整数
- 浮点数
- 百分比(取值在0 - 1区间的值)
- 小数位数固定的浮点数
- 整数
- 时间
- 日期(不包含时间部分)
- 时间(不包含日期部分)
- 完整时间(包含年月日时分秒)
元数据是经过加工清洗后, 具有自然含义的数据. 这一阶段的数据是可以被BI软件直观理解的, 与现实世界相关的数据.
元数据的例子- 校准后的角度读数
经过校准和转换, 在规定的误差范围内反映机械摇杆的角度 - 摄氏度气温值
在规定的误差范围内以摄氏度反映温度值 - 中国身份证号
- IPv4地址
不同的基础类型, 可以派生出的元数据类型有
- 字符串
- 身份证号
- 手机号
- 银行卡号
- IP地址
- 邮政编码
- 姓名
- ...
- 数值
- 金额
- 气温
- 海拔高度
- 两地距离
- 速度
- 加速度
- 时间长度
- ...
同样地元数据也可以通过排列组合产生派生类型, 例如
- 一个经度和一个纬度组合产生的地理坐标点
- 两个经纬度组合产生的一条地理连线, 或者一个地理矩形区域
模型数据是映射到模型中具体字段的元数据. 这一阶段的数据, 在模型中是确定的字段(或者说特征量). 将用于模型训练和计算, 影响最终的决策.
模型数据的例子- 财务模型中某个子公司月营收金额
- 交易模型中某个证券资产每天的收盘价格
- 快递物流模型中的发件人手机号
- 快递物流模型中的收件人手机号
因为从元数据可以派生出无穷尽的模型数据, 这部分就无法列举了.
以手机号这个元数据类型举一个简单的例子, 根据不同的模型结构, 手机号可以体现为各种具体的字段
- 银行卡预留手机号
- 交易方手机号
- 交易对手方手机号
- 发件人手机号
- 收件人手机号
- 短信接收方手机号
模型数据根据模型要求, 对数据有额外的属性要求
- 是否允许空值 NULL, 如果不允许空, 则在转换阶段要对空值进行过滤或替换处理
- 是否有限, 例如各种枚举值, 性别, 年龄, 邮政编码, 都属于有限数据
- 是否连续, 例如金额, 速度, 经纬度, 这些属于连续值, 对于连续值字段不能作聚合处理
- 是否无符号, 例如时间长度, 尺寸长度, 这些使用负值没有意义
BI系统对数据的处理, 可以用ETL的过程进行理解. 借用 Power BI 的数据导入和类型作为示例
抽取 Extract抽取可以通俗的理解为数据导入. BI系统的第一件事就是将数据导入. 不管主动还是被动, 通过文件或者接口. 在这个过程中需要适配各种数据源的容量, 频次和格式, 作为BI系统, 这部分也许并不能体现高科技, 但是需要实实在在地投入成本, 控制好质量.
数据的质量, 导入的效率, 异常的处理, 决定了BI系统performance的上限.
技术处理这里不讨论方式和接口适配, 只对入库进行说明.
在抽取阶段, 每个维度/字段/特征的数据格式必须为可用的格式: 字符串, 数值或时间. 如果连字符串都无法存储, 例如二进制数据, 必须通过专用的抽取方法或工具转换为可用的格式.
在实际应用中, 有两种形态: 桌面应用 和 服务器应用
桌面应用如果BI软件直接运行在使用者的个人电脑上, 例如 Power BI, 这种情况下, 系统的资源是有限的, 通常只有4G - 8G的内存, 以及几十GB的存储, 但是BI软件可以直接访问文件(例如Excel和CSV数据源).
在桌面应用中, 导入可以简化为连接数据源, 将数据源作为转换和载入的基础.
服务器应用如果BI软件运行在服务器上, 使用者通过客户端或浏览器使用BI软件提供的服务, 这种情况下, 系统的资源会充裕得多, 例如32G或更多的内存, 数个TB的存储, 但是BI软件面对的数据都在远程, 例如使用者个人电脑上存储的Excel, 公司财务系统上存储的报表.
在服务器应用中, 通常需要将数据缓存至服务端, 再进行后续的清洗和转换. 对于通用的场景, 可以将原始数据都存储为字符串, 对于存在二进制数据的场景可以考虑局部使用二进制字段.
转换 Transform转换中, 需要完成的工作包括数据识别, 数据清洗, 格式转换和属性扩充. 目标是要转换为结构化的元数据.
数据识别对每个维度/字段/特征, 根据数据的形态, 依次判断
- 数据的基础类型(字符串, 数值, 时间)
- 高级类型(细化数值和时间类型)
- 元类型, 进一步跟进数据的格式和特征进行判断, 例如一组字符串, 是否为身份证号? 是否为手机号? 是否为IP地址?
并非所有的数据都完成上面三步的判断.
- 第一步是一定要完成的, 无论如何, 数据可以作为字符串处理.
- 有些数据, 可能是多个数据的组合, 或者一个数据的局部, 需要通过格式转换阶段处理, 这一步可以先识别为字符串或某种数值类型.
- 对于字段混杂, 或者未对齐的数据, 一个维度可能存在多种类型, 对类型的判断可用
- 仅通过前100条(或者其它数量)
- 根据各种类型的比例, 选择比例大的
- 判断数据源无效, 提示错误
根据第一步得到的元类型, 如果无法判断的, 需要人手工指定元类型
- 对字段中的所有数值进行判断, 是否满足
- 根据预先制定的规则, 或者人手工下达的指令, 对不满足的数据进行滤除, 替换或修改
这一步结束后, 字段的数值应当符合元数据类型的要求
格式转换和属性扩充转换和扩充, 指的是数据在清洗之后, 在载入模型之前的所有数据编辑操作. 这些操作丰富多样, 大体有以下类型
- 特殊格式处理
- 例如前面提到的多数据字段, 需要将数据从一个字段中提出, 填充到多个字段
- 而数据局部, 则需要将多个字段提出, 合并填充为一个字段
- 半格式化数据, 例如JSON字符串, 根据解析出的内容, 提取并填充到多个字段
- 扩充属性, 例如从手机号数据, 扩充出手机号归属地信息, 填入省, 市, 区字段
- 多值归一, 例如将各种交易描述: "收款", "入账", "借入", 统一转换为"IN".
- 滤除数据, 例如从短信记录中删除所有发送手机号以10开头的营销广告数据
- 数据替换, 例如为匹配模型数据中的省市名称, 将"乌市"替换为"乌鲁木齐市"
因为这一步之后不再处理清洗, 所以这一步的操作, 其结果都要满足当前字段的元数据类型对数据格式的要求
转换规则对于动态产生的数据, 需要保存各字段的元类型, 需要保存上面得到的转换规则, 以便新数据产生时自动转换为目标数据
载入 Load载入是基于数据模型的, 将对应元类型的数据, 映射到数据模型的某个特征并载入.
在开发上, 涉及到两部分工作
模型识别通过抽取和转换之后的数据集, 是一个字段/维度/特征的集合, 根据这个集合中的元数据类型, 与系统中存在的数据模型进行匹配, 判断与各个模型的相似程度, 并确定或推荐最合适的数据模型.
- 元数据类型判断. 根据数据模型中各个特征的元数据类型, 与数据集中的元数据类型进行对比
- 字段名/表头判断. 如果原始数据带表头, 能提供更有效的匹配依据
- 建立数据集与数据模型之间的字段映射关系
模型匹配和识别通常是一次性的, 甚至在有些场合完全需要通过手工. 这部分是锦上添花的功能, 可以提升用户体验, 但是不会对BI的performance造成实质影响.
数据载入数据载入就是将建立映射关系的数据载入到模型中. 根据BI的处理机制, 通常分为动态和静态两种
静态载入数据导入后, 不会经常更新, 常用于历史数据分析, 以及一些长效的决策. 这种载入对系统的要求不高, 按元数据格式入库即可.
动态载入动态载入用于处理频繁更新, 或需要实时决策的场景, 根据来源数据的情况, 动态载入对系统的要求可能会很高
- 数据的频率, 总量和窗口
处理五秒钟交易数据还是日交易数据, 处理一支股票还是所有上交所股票, 回溯一个季度的数据还是回溯五年数据 - 数据处理的实时性
做高频交易, 还是做行研分析 - 数据可靠性的标准
是否允许中间有丢失的数据, 是否允许局部的时间不一致
不同的场景, 对系统的设计思路是不一样的, 需要具体问题具体分析
总结以上说明了BI系统中决策的类型, 数据对决策的重要性, 数据的类型, 以及最重要的 -- 在BI系统中如何进行数据处理.
参考
- Business intelligence https://en.wikipedia.org/wiki/Business_intelligence
- An in-depth guide to data preparation https://www.techtarget.com/searchbusinessanalytics/definition/data-preparation
- Data Types in Business Intelligence https://buh-lah-kay.medium.com/data-basics-of-business-intelligence-f31ca2fbdcd0
- Data Types Supported by Oracle BI Enterprise Edition https://docs.oracle.com/cd/E28280_01/bi.1111/e10540/data_types.htm
- Enduring lessons from the legend of Rothschild’s carrier pigeon https://www.ft.com/content/255b75e0-c77d-11e2-be27-00144feab7de
- Quantitative Data: Definition, Types, Analysis and Examples https://www.questionpro.com/blog/quantitative-data/