机器学习开发流程在实际操作层面一共分为8步:需求分析、数据收集、数据预处理、数据分析与可视化、建模调优、特征工程、模型结果展示与分析报告、模型部署与上线反馈优化。如图1-2所示。
图1-2 机器学习开发流程
很多算法工程师可能觉得需求分析没有技术含量,因而不太重视项目启动前的需求分析工作,这对于一个项目而言其实是非常危险的。
需求分析的主要目的是为项目确定方向和目标,为整个项目的顺利开展制订计划和设立里程碑。我们需要明确机器学习的目标输入是什么,目标输出是什么,是回归任务还是分类任务,关键性能指标都有哪些,是结构化的机器学习任务还是基于深度学习的图像和文本识别任务,市面上项目相关的产品都有哪些,对应的SOTA(State Of The Art)模型有哪些,相关领域的前沿研究和进展都到什么程度了,项目有哪些有利条件和风险。这些都需要在需求分析阶段认真考虑。
一个机器学习项目要开展下去,最关键的资源就是数据。
在数据资源相对丰富的领域,例如电商、O2O、直播以及短视频等行业,企业一般会有自己的数据源,业务部门提出相关需求后,数据工程师可直接根据需求从数据库中提取数据。但对于本身数据资源就贫乏或者数据隐私性较强的行业,例如医疗行业,一般很难获得大量数据,并且医疗数据的标注也比较专业,因此高质量的标注数据尤为难得。对于这种情况,我们可以先获取一些公开数据集或者竞赛数据集进行算法开发。
还有一种情况是目标数据在网页端,例如我们想了解杭州二手房的价格信息,找出影响杭州二手房价格的关键因素,这时候可能需要使用爬虫一类的数据采集技术来获取相关数据。
(1)数据来源:
(2)数据存储:
(3)数据收集方式:
(4)机器学习可用的公开数据集:
在实际工作中,我们可以使用业务数据进行机器学习开发,但是在学习过程中没有业务数据,此时可以使用公开数据集进行开发。常用的公开数据集网址如下:
由于公开数据集和一些竞赛数据集非常“干净”,有的甚至可以直接用于模型训练,因此一些机器学习初学者认为只需专注于模型与算法设计就可以了,其实不然。在生产环境下,我们拿到的数据都会比较“脏”,以至于需要花大量时间去清洗数据,有些人甚至认为数据清洗和特征工程要占用项目70%以上的时间。
数据预处理的操作主要包括以下几个部分:
数据清洗完后,一般不建议直接对数据进行训练。这时候我们对于要训练的数据还是非常陌生的。数据都有哪些特征?是否有很多类别特征?目标变量分布如何?各自变量与目标变量的关系是否需要可视化展示?数据中各变量缺失值的情况如何?怎样处理缺失值?这些问题都需要在探索性数据分析(Exploratory Data Analysis,EDA)和数据可视化过程中找到答案。
数据初步分析完后,对数据会有一个整体的认识,一般就可以着手训练机器学习模型了。但建模通常不是一锤子买卖,训练完一个基线(Baseline)模型之后,需要花大量时间进行模型调参和优化。
有关模型评价指标的相关内容参见下一小节。
经过一定的特征工程和模型调优之后,一般会有一个阶段性的最优模型结果,模型对应的关键性能指标都会达到最优状态。这时候需要通过一定的方式呈现模型,并对模型的业务含义进行解释。如果需要给上级领导和业务部门作决策参考,一般还需要生成一份有价值的分析报告。
给出一份分析报告不是一个机器学习项目的最终目的,将模型部署到生产环境并能切实产生收益,才是机器学习的最终价值所在。
如果新上线的推荐算法能让用户的广告点击率上升0.5%,为企业带来的收益也是巨大的。该阶段更多的是需要进行工程方面的一些考虑,是以Web接口的形式提供给开发部门,还是以脚本的形式嵌入软件中,后续如何收集反馈并提供产品迭代参考,这些都是需要在模型部署和上线之后考虑的。