机器学习项目如何开展

Featured image

之前写了很多机器学习相关的具体算法,然而算法工作只是机器学习项目中的一部分;一个成熟的机器学习项目需要多面工作的支持,如:服务端、客户端(安卓/IOS/WEB等)、大数据、特征工程、用户隐私、响应时间、关键指标、效果评估、各项监控以及具体的业务场景等等。如果将算法视作项目的灵魂,那么必须要有健康的骨架和血肉才能发挥作用。

充分理解业务需求

谷歌的机器学习最佳实践中开文就提到,打造优质的产品,需要先做为一个优秀的工程师去思考,而不是机器学习专家。工程项目离不开业务场景,所以一个优秀的机器学习实践一定是建立在对业务场景的充分理解之上。
当开始着手一个机器学习项目的时候,应该充分了解业务场景,首先想是不是可以不通过算法,通过一些简单规则去解决业务中的部分问题。特别重要的一点是:机器学习技术并不是100%可靠,甚至有时候准确性很低,比如广告推荐系统,被推荐的广告点击率往往不到1%;如果机器犯错,会造成什么后果,这个后果可不可以接受 自己在工程项目中遇见过这种场景,由于某些算法的错误输出会产生一些可大可小的负面影响。比如:信息流推荐系统根据算法的输出往往会推荐一些低俗的文章。

搭建完善的工程体系比优化算法更重要

在充分理解业务需求的前提下,确定要着手开发机器学习系统;这时候的建议是从最简单的算法甚至可以不用算法从规则做起,去搭建项目工程。
业务指标的统计与监控: 这是业务后续效果评估与进一步发展的指引,没有这个指标就相当于是没有方向,并且这个统计与监控一定要保证正确、稳定、可用性高
实验环境的搭建: 为了体现机器学习系统的价值,以及不同算法的效果差异,必须要做对比实验;并且保证实验的正确性,保证两个对比实验组除了需要实验的条件之外,其他特征的完全一致。一个好的实验平台非常有利于后续项目的开展,如果实验平台本身就是不可靠的,那么最终的实验结果也将失去价值。
特征监控: 机器学习算法往往依赖很多特征,但实际场景中数据往往会有一定的缺失与错误,这在实际中也是允许的,但是应该做到特征的问题,如果特征波动较大,或者延迟较大,就会直接影响算法的效果;如果没有监控,当算法效果变差的时候就很难排查,比如某项特征之前缺失20%,昨天缺失40% 直接导致算法效果变差;

数据分析优先

这里举两个例子说明数据分析的重要性:
案例一:提取某个短文本中的凭证码,方案有很多种比如字符串多模匹配、实体识别等;但进行数据分析之后,实际上只需要几个简单的正则就能达到比较高的准确率和召回率;

案例二:基于加速度传感器进行用户行为识别,前一波人认为不太容易理解数据,多种行为的数据进行可视化后确实很难区分(直接使用原始数据X、Y、Z),所以直接使用原始数据建模,调节神经网络各种参数,但效果始终不太理想;但仔细想想实际上由于手机放置状态的不同,X\Y\Z三个数据是没有固定顺序的,并且正负号也仅仅表示方向,与大小无关。也就是说如果使用XYZ作为特征,需要模型解决这里的顺序问题,即:1、2、3和-3、1、-2这两个数据应该有相同的输出;
实际上来讲,决定运动状态的应该是合成加速度,这是基于物理分析得出的;