kaggle是feature为王。做feature engineering比model tuning 更有用。
现实的工作生活中的数据分析也是这样吗?感觉选model调参数也很重要啊。
那么,Kaggle的比赛和平时的数据分析究竟有哪些区别?
这是一个很好的问题,许多还没有进入工业界的朋友,可能或多或少都默认机器学习工程师或者算法工程师/科学家的工作主要内容就是建模。
如果有这样的想法,自然而然就会好奇在工业界建模和在比赛中或者自己做项目建模有什么区别?这里有三个关键点:一个是用“机器学习”,一个是“解决”,一个是“问题”。
一.问题
先说“问题”。在工业界,问题的定义往往是不清晰的,广泛的,甚至是需要Tech Lead自己去发现的。而在Kaggle,问题是定义明确的,衡量指标是确定的。
举一个例子,Kaggle的一个著名的Zillow房价预测的比赛问题(kaggle.com/c/zillow-pri.),就非常明确的说明了参赛者的任务就是用这样一个固定的数据集和这样一些特征,来预测实际房屋售价,并用log error(测录误差)这样一个Metric(指标)来衡量。这是一个被定义得非常明确的问题。
而在工业界,一个组往往有一个明确的目标,比如提升推荐系统的线上指标,但是工程师需要去思考这样一个目标可以被拆分成哪些问题或者项目,每个问题或者项目又是否可以被机器学习解决。
工程师需要自己去定义问题和项目,去发现目前组里不足然后把不足转化为一个明确的机器学习问题去解决。
二.解决
再说“解决”。在Kaggle,一个机器学习项目主要需要解决的是建一个好的模型。而在工业界,建模只是需要解决的事情之一。
比如,机器学习工程师在建模前,首先要解决数据的问题。比如:应该用什么数据集?从公司的数据库里可以拿到哪些特征?特征在线上能实时获得吗?特征线上的空快率高不高?这些问题都是Kaaale选手不需要去解决的,但是在工业界却是很堂见的问题。再比如,模型上线后是否需要选代?选代的话频率要多高?选代训练策略应该是怎么样的?等等。
这也是为什么,硅谷西雅图的大型科技公司在面试高级机器学习工程师时,都会有一轮MLDesign的轮次。这个MLDesign的轮次一方面就是在考察面试者有没有发现并解决以上这些,除了建模之外工业界常会遇到的其他问题的能力。
三.机器学习
最后是“机器学习”。Kaggle比赛使用的机器学习算法模型和工业界模型有一定的区别。Kaggle的建模重视模型的效果。
但是在工业界,除了模型效果,我们同样重视模型在线上的推理速度,模型本身的大小,模型训练时间与资源等等。有时候,我们甚至会牺牲模型效果,来获得更小的模型和更低的线上延迟。
建一个好的模型的确是一个机器学习丁程师的核心技能,但是这并不是一个好的机器学习工程师最稀缺的技能。
目前机器学习社区代码高度开源,机器学习与深度学习框架相对成熟,先进模型基本都有开源实现。在这样的背景下,就业市场上能写出一个复杂模型的人并不在少数。
同时,AutoML的出现也让建模这件事受到了巨大的挑战,比如我们组的用AutoML搜索出来的模型结构已经不输最先进模型的效果了。