• 商业智能中的决策, 数据和数据处理方法


    -- 人会说谎, 但是数据不会

    声明

    个人原创, 转载需注明来源 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区间的值)
        • 小数位数固定的浮点数
    • 时间
      • 日期(不包含时间部分)
      • 时间(不包含日期部分)
      • 完整时间(包含年月日时分秒)

    Meta 元数据

    元数据是经过加工清洗后, 具有自然含义的数据. 这一阶段的数据是可以被BI软件直观理解的, 与现实世界相关的数据.

    元数据的例子

    • 校准后的角度读数
      经过校准和转换, 在规定的误差范围内反映机械摇杆的角度
    • 摄氏度气温值
      在规定的误差范围内以摄氏度反映温度值
    • 中国身份证号
    • IPv4地址

    元数据的类型

    不同的基础类型, 可以派生出的元数据类型有

    • 字符串
      • 身份证号
      • 手机号
      • 银行卡号
      • IP地址
      • 邮政编码
      • 姓名
      • ...
    • 数值
      • 金额
      • 气温
      • 海拔高度
      • 两地距离
      • 速度
      • 加速度
      • 时间长度
      • ...

    同样地元数据也可以通过排列组合产生派生类型, 例如

    • 一个经度和一个纬度组合产生的地理坐标点
    • 两个经纬度组合产生的一条地理连线, 或者一个地理矩形区域

    Model 模型数据

    模型数据是映射到模型中具体字段的元数据. 这一阶段的数据, 在模型中是确定的字段(或者说特征量). 将用于模型训练和计算, 影响最终的决策.

    模型数据的例子

    • 财务模型中某个子公司月营收金额
    • 交易模型中某个证券资产每天的收盘价格
    • 快递物流模型中的发件人手机号
    • 快递物流模型中的收件人手机号

    模型数据的类型

    因为从元数据可以派生出无穷尽的模型数据, 这部分就无法列举了.

    手机号这个元数据类型举一个简单的例子, 根据不同的模型结构, 手机号可以体现为各种具体的字段

    • 银行卡预留手机号
    • 交易方手机号
    • 交易对手方手机号
    • 发件人手机号
    • 收件人手机号
    • 短信接收方手机号

    模型数据的属性

    模型数据根据模型要求, 对数据有额外的属性要求

    • 是否允许空值 NULL, 如果不允许空, 则在转换阶段要对空值进行过滤或替换处理
    • 是否有限, 例如各种枚举值, 性别, 年龄, 邮政编码, 都属于有限数据
    • 是否连续, 例如金额, 速度, 经纬度, 这些属于连续值, 对于连续值字段不能作聚合处理
    • 是否无符号, 例如时间长度, 尺寸长度, 这些使用负值没有意义

    BI系统对数据的处理

    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

    转换中, 需要完成的工作包括数据识别, 数据清洗, 格式转换和属性扩充. 目标是要转换为结构化的元数据.

    数据识别

    对每个维度/字段/特征, 根据数据的形态, 依次判断

    1. 数据的基础类型(字符串, 数值, 时间)
    2. 高级类型(细化数值和时间类型)
    3. 元类型, 进一步跟进数据的格式和特征进行判断, 例如一组字符串, 是否为身份证号? 是否为手机号? 是否为IP地址?

    并非所有的数据都完成上面三步的判断.

    • 第一步是一定要完成的, 无论如何, 数据可以作为字符串处理.
    • 有些数据, 可能是多个数据的组合, 或者一个数据的局部, 需要通过格式转换阶段处理, 这一步可以先识别为字符串或某种数值类型.
    • 对于字段混杂, 或者未对齐的数据, 一个维度可能存在多种类型, 对类型的判断可用
      • 仅通过前100条(或者其它数量)
      • 根据各种类型的比例, 选择比例大的
      • 判断数据源无效, 提示错误

    数据清洗

    根据第一步得到的元类型, 如果无法判断的, 需要人手工指定元类型

    1. 对字段中的所有数值进行判断, 是否满足
    2. 根据预先制定的规则, 或者人手工下达的指令, 对不满足的数据进行滤除, 替换或修改

    这一步结束后, 字段的数值应当符合元数据类型的要求

    格式转换和属性扩充

    转换和扩充, 指的是数据在清洗之后, 在载入模型之前的所有数据编辑操作. 这些操作丰富多样, 大体有以下类型

    • 特殊格式处理
      • 例如前面提到的多数据字段, 需要将数据从一个字段中提出, 填充到多个字段
      • 而数据局部, 则需要将多个字段提出, 合并填充为一个字段
      • 半格式化数据, 例如JSON字符串, 根据解析出的内容, 提取并填充到多个字段
    • 扩充属性, 例如从手机号数据, 扩充出手机号归属地信息, 填入省, 市, 区字段
    • 多值归一, 例如将各种交易描述: "收款", "入账", "借入", 统一转换为"IN".
    • 滤除数据, 例如从短信记录中删除所有发送手机号以10开头的营销广告数据
    • 数据替换, 例如为匹配模型数据中的省市名称, 将"乌市"替换为"乌鲁木齐市"

    因为这一步之后不再处理清洗, 所以这一步的操作, 其结果都要满足当前字段的元数据类型对数据格式的要求

    转换规则

    对于动态产生的数据, 需要保存各字段的元类型, 需要保存上面得到的转换规则, 以便新数据产生时自动转换为目标数据

    载入 Load

    载入是基于数据模型的, 将对应元类型的数据, 映射到数据模型的某个特征并载入.

    在开发上, 涉及到两部分工作

    模型识别

    通过抽取和转换之后的数据集, 是一个字段/维度/特征的集合, 根据这个集合中的元数据类型, 与系统中存在的数据模型进行匹配, 判断与各个模型的相似程度, 并确定或推荐最合适的数据模型.

    1. 元数据类型判断. 根据数据模型中各个特征的元数据类型, 与数据集中的元数据类型进行对比
    2. 字段名/表头判断. 如果原始数据带表头, 能提供更有效的匹配依据
    3. 建立数据集与数据模型之间的字段映射关系

    模型匹配和识别通常是一次性的, 甚至在有些场合完全需要通过手工. 这部分是锦上添花的功能, 可以提升用户体验, 但是不会对BI的performance造成实质影响.

    数据载入

    数据载入就是将建立映射关系的数据载入到模型中. 根据BI的处理机制, 通常分为动态和静态两种

    静态载入

    数据导入后, 不会经常更新, 常用于历史数据分析, 以及一些长效的决策. 这种载入对系统的要求不高, 按元数据格式入库即可.

    动态载入

    动态载入用于处理频繁更新, 或需要实时决策的场景, 根据来源数据的情况, 动态载入对系统的要求可能会很高

    1. 数据的频率, 总量和窗口
      处理五秒钟交易数据还是日交易数据, 处理一支股票还是所有上交所股票, 回溯一个季度的数据还是回溯五年数据
    2. 数据处理的实时性
      做高频交易, 还是做行研分析
    3. 数据可靠性的标准
      是否允许中间有丢失的数据, 是否允许局部的时间不一致

    不同的场景, 对系统的设计思路是不一样的, 需要具体问题具体分析

    总结

    以上说明了BI系统中决策的类型, 数据对决策的重要性, 数据的类型, 以及最重要的 -- 在BI系统中如何进行数据处理.


    参考

  • 相关阅读:
    td 内容自动换行 table表格td设置宽度后文字太多自动换行
    拿到别人的VUE项目要怎样做
    npm install相关参数详解
    自定义starter valar
    Linux 文件映射虚拟内存操作
    CH9121网络串口透传模块STM32驱动
    shell脚本test命令使用总结和实例
    bootloader与app程序合并程序
    shell基础之多文件编程
    STM32G0低功耗介绍
  • 原文地址:https://www.cnblogs.com/milton/p/16296974.html
Copyright © 2020-2023  润新知