zoukankan      html  css  js  c++  java
  • 阅读笔记《一个数据分析师眼中的数据预测与 监控》

    角色:数据分析

    目标:预测

    内容: BI 日常工作中的数据分析方法以及在统计模型 搭建过程中的注意事项。

    1 非时序预测

      在机器学习和深度学习大行其道的当下,一个好的预测模型不在于应用了多么高深的算法, 而在于如何从简单的模型开始进行尝试,兼顾业务逻辑,基于某个 baseline 来控制时间和应 用成本。

      对于非时序数据或是无明显趋势、季节特征的时序数据,回归和树模型是目前主流的预测方法。 

      广义线性回归,如线性最小二乘和 logistic 回归,因其模型的可解释性,从诞生之日至如今 依旧发挥着其不可替代的作用,如金融风控中评分卡的开发,医学中对患者生存期限的研究 等。

      为了处理非线性问题,依托着分布式计算,又孕育出树模型和基于树的 boosting 模型,如 Decision Tree 和 Xgboost,以及后续的 LightGBM 和 CatBoost 等。

      考虑到线性回归和 logistic 回归在处理非线性问题上的短板,以及为了适配模型需对数据做 大量的预处理,如填补缺失,防止共线性等,我们自然偏向于树模型来做分类和回归预测, Xgboost 便是一个很好的选择。 R 和 Python 都提供了 xgboost 的接口,Python 不仅拥有 xgb 的原生接口,更有适配 sklearn 的接口,便利了参数的网格搜索。

      

    对于预测任务,我们的应用场景主要分成两类:

      离线(T+1)预测,主要针对小批量数据,通过 shell 脚本调用 R 或 Python 的服务器, 返回结果。 

      实时预测,由于线上预测需要实时响应,如在毫秒级内返回模型预测值,跨平台跑模型 并不能满足要求。这就需要将模型文件打包成 PMML (预测模型标记语言-Predictive Model Markup Language,简称PMML,https://www.cnblogs.com/pinard/p/9220199.html)文件供 Java 调用,响应速度极快。

    应用 Xgboost 时:是否对分类变量做了正确的编码。

      1)xgb 分类器只接受数值型变 量,任何的字符型变量都需转换成数值型。 

      2)分类器默认数据是连续且是有序的,2 一定比 1 大。 但无序分类变量的特征值之间 是没有可比性地,比如变量“城市分类”,其特征值分为:一线城市,新一线城市,二线城 市,其他城市。如果将其编码成(1,2,3,4),分类器便会误解为二线城市大于新一线城 市,事实上特征值代表的仅是一个类别,不可相互比较。 

    解决:

      对此类变量采取独热(one-hot)编码,每个特征值都作为一个新的衍生 变量,每个衍生变量都是一个二元(0/1)互斥特征,这种编码方式充分考虑了分类变量每 个特征值的独特性。当然,如果特征值过多,特征矩阵也会过于稀疏,此时可基于业务逻辑 和数据分布对特征值进行分组处理。 

    模型调参:为调参的目的不仅在于获得模型提升, 更在于通过多次实验,基于概率确保模型参数的稳健性。 

    在实时预测模型中,打包的 PMML 文件不仅要包含模型文件,还要包含数据的预处理过程, 这就需要借助管道(Pipe)将原始数据的处理过程(如编码,标准化,正则化等)和分类器 的训练过程串联,再将管道本身打包成 PMML 文件。 

      恼人的是,管道一体化的过程限制了特征工程中的个性化发挥,接口提供了一些简单的数据 转换函数和自定义函数功能,但这远远不够。此外,网格搜索过程中参数的赋值方式也略有 改变。最后,特征重要性的可视化也并不友好,原因在于管道中的数据预处理掩盖了原有的 特征名称。

      管道中的网格搜索还需注意:假设通过 sklearn 接口预先定义了分类器,后利用管道包装了 数据预处理过程和分类器,那么在网格搜索时,参数赋值相比传统方式将有所改变

    (上面2段还不能理解)

    2 时序监控与预测 

      时序监控,主要还是针对各业务指标的异常值检测以及模型上线后的稳定性检测。 

     业务指标的异常检测多是单变量的检测,而提及单变量异常检测,首先想到的便是 3 sigma 原则。和线性回归中的极大似然估计类似,3 sigma 准则的应用前提需假设原始数据满足或 近似满足正态分布,而实际数据往往具体一定的偏态性。作为数据科学家,切莫不假思索的 去应用惯用的准则,而应从数据的分布出发找到合适的途径来分析数据,比如对偏态的数据 采用 Box-Cox 转换。

      其次,业务指标的监控是个双重任务,一是要及时发现数据中的异常,二是要对未来一天或 是一段时间进行预测。如果能找到一个统计模型同时处理这二重任务,问题会显得简单多, 可一个特定的模型往往很难适应多个场景。 

    。。。

      如果专注于预测的高精度,Prophet 模型是一个不错的选择。模型通过 Fourier 转换可分解 多周期序列,且在趋势处理上也有了新的创新,比如考虑环境和系统的承载力,提出阻滞增 长和分段线性增长的想法。 

    结束:

      数据分析与挖掘离不开统计知识和算法设计,不同场景下的问题解决方案各有不同。数据分 析师不仅要有良好的知识素养,也要深谙业务背景,更缺不了工程师团队的付出。

  • 相关阅读:
    Python 性能剖分工具
    串口编程
    拼音输入法实现
    Android 第三方分享中遇到的问题以及解决方案
    linux C 获取与修改IP地址
    git拉取远程分支并创建本地分支
    再次探讨企业级开发中的Try......Catch性能问题
    [手游新项目历程]-38-Supervisord守护进程
    公务员考试
    概念的内涵和外延
  • 原文地址:https://www.cnblogs.com/xunyingFree/p/10413142.html
Copyright © 2011-2022 走看看