@(ML)[Engineering]
「大数据其实有点儿像青少年的性。每一个人都兴致勃勃地谈论它,但是没有任何一个人真的知道该怎么做。每一个人都觉得身边的人都在尝试,为了不落人后,于是每个人都在外面宣称自己也已经有『伴儿』了」 - Dan Ariely
基本输出

基本交付
在生产环境中部署建模输出时依赖如下四个基本交付:
- 如何从线上数据中抽取出模型所需要的特征?
- 每个特征的意义,如果有的话;
- 每个特征如何抽取,以及特征如何排列的例程;
- 对NLP应用而言,可能还有一些字典需要交付,用于辅助特征抽取;
- 对使用DNN做feature engineering 而言,还需要相应的DNN模型;
- 模型
- 一共有几个模型,他们各是如何命名的,用于什么用途,加载顺序是什么,如何验证模型文件的完整性?
- 如何加载模型以及如何使用模型进行预测?
- 如何加载模型并初始化预测器?
- 如何使用模型模型来预测?
- 模型输出是什么以及如何解释/使用模型输出?
- 模型输出值的取值范围[min, max]。
- 输出值的物理意义。
- 如何使用模型输出,按阈值判断?直接输出给规则引擎?如何与规则引擎结果混合?
模型的持久化方式
持久化建模所得的最终模型,供生产环境使用.
建模环境与生产环境一致
- Spark
- save/load w/ corresponding model class(e.g. RandomForestClassificationModel)
- Scikit
- pickle.dumps / pickle.loads
- joblib.dump / joblib.load
- Weka & other Java based
- writeObject / readObject methods of Serializable class
建模环境与生产环境不一致
- PMML(Predictive Model Markup Language)
- scikit.learn建模,Spark生产,两者都有PMML支持(原生或第三方支持)
- 直接使用自己的格式或方法
这个一般用于模型不是很复杂的场合, 如decision tree, LR.- Tree & Forest
- Tree & Forest可以自己写成if-else逻辑deliver <如高架识别例子>
- LR
- 直接保存每个特征的系数就好了 <如广告的例子>
- Tree & Forest
工程性输出
工程性输出的目的是从算法角度考虑如何使生产环境更鲁棒,容灾。
异常检测与处理
识别并处理好异常,避免扩散至其他环节。
- 关键的特征缺失
- 特征值超出合理范围
- 预测值超出合理范围
如何监控算法性能
对线上应用而言,需要建立监控平台,监控关键的算法指标和业务指标。在指标出现异常的时候需要告警,以及进行算法/模型的回滚。
版本化的交付
版本化交付,利于问题的追踪以及出现问题后的回滚。
网友评论