关于机器学习任务分层降难度的思考

笔者是研究量化交易的,使用标榜机器学习的量化交易框架Abupy。 所以前段时间学习的历程是这样的:

  • 从KNN开始学习基础概念、工具和术语 -> 学习评估指标(ROC曲线、AUC、F1、召回率等) 和模型调试方法 -> 尝试各家学说(逻辑分类、决策树、svm、以及多种模型融合)提高模型评分。

  • 回到Abupy,发现我们只要了解svm,按照一个固定模式(继承一个Python class并实现抽象方法)提供描述特征的class,Abupy框架即可完成训练并用于指导新的的交易。并没有很复杂的东西。

  • 接着学习了DNN + CNN,也是按照: 先熟悉工具(Keras + TensorFlow和Caffe)和术语 -> 学习评估指标和模型调试方法 -> 尝试各家学说提高模型评分 的套路。结果发现DNN + CNN擅长图片等2D、3D数据场景,在量化金融领域暂时找不到用武之地。

  • 目前在研究RNN,在寻找RNN在时间序列数据强大能力是否能服务于量化金融。可能会参考Ernest P. Chan 的《Machine Trading》 。 暂时没有涉足无监督学习和强化学习领域。

感觉这门学科有点复杂,单靠一个人研究全部的细节有点难,在真实工作中是否可以借鉴web开发界分层以减轻难度呢?例如web开发可以分:前端、后端、基础设施服务。机器学习是否可以分层为:

  1. 数据工程:整理可能来自公司自有业务,开源社区,或者是大数据领域的数据。评估数据是否存在可挖掘的可能,例如,如果只有用户的性别、年龄、星座、血型、身高体重,要预测其“贷款违约可能性”肯定是以失败告终的。

  2. 特征工程:这块需要懂业务知识,例如在量化交易领域如果不懂行情图和各种技术指标会完全不知道该提取什么特征。决策树模型面对只有开盘价、收盘价、最高价、最低价和成交量的原始数据也完成无力。

  3. 模型工程:核心部分,需要懂各种评估指标、模型调试方法、模型融合方法 以及熟练工具的使用。

  4. 应用层:将已经训练好的模型应用于新的数据和业务。这步简单,熟悉工具即可。

  5. 工具/基础设施:各类工具(TF、KubeflowMLflowTensorWatchLudwig, 以及PyTorch家族的一些工具)安装、配置、维护。好像并不需要机器学习的知识,普通的基础设施架构师、Docker工程师、Kubernetes 工程师都可以完成 ,甚至程序员都可以利用Pulumi完成。

这样是不是简单多了,每一层的工程师都可以更专注于自己所在的层,要研究的知识减少了,但是和团队成员一起却更容易创造出伟大的作品。