机器学习数据挖掘类工程师平时主要的工作内容是怎样的?

比如研发类工程师可能就是根据项目需求写代码,那机器学习,数据挖掘类工程师平时主要的工作内容是怎样的?我理解的是:根据项目选取不同的模型做实验,根据实验结果调参等等。经常阅读本领域内相关的paper,实现一些最新的研究成果,参加各种学术会议。是这样的么?请有在公司工作过的各位大大说明一下,谢谢了。
已邀请:

gus

赞同来自: 安之若素 candy

举一个真实的例子。

背景:
当初所在的产品团队所做的是一款类似于Steam的产品,游戏下载是核心需求之一。但是因为国内用户的机器普遍比较差,许多大型而高配置的单机/网络游戏,下载后基本跑不起来,极大伤害用户体验。因此为用户下提供了配置检测功能,在下载前根据用户的机型配置告诉其能否玩某款游戏
对机器配置打分以及对游戏最低配置要求打分都是基于很粗糙的经验公式,经常出现False Positive(系统说能玩,但是用户花了好几个小时下载和安装,结果不能玩;被用户骂得狗血喷头)或者False Negative(系统说不能玩,结果后来实践发现该配置其实能玩,损失了用户的粘性,PM恨死你)

故事在这里开始发生。

第一步,产品团队提出需求
产品团队要求数据团队基于海量数据(日活几百万,日游戏下载数量过百万,日游戏启动次数过千万),优化配置检测的评分系统。

第二步,将需求转化为数学语言或者数学模型
数据团队一看,这个简单呀,其实就是:
目的:优化机器配置的打分函数f(机器配置)和游戏最低配置要求的分数的函数g(游戏)
评价:降低之前提到的FP和FN(可以使用小范围的用户反馈收集以及后台运营人员的小范围测试)

第三步,搭建平台和抽取数据
根据数据量以及不能影响业务的最低职业操守,我们的选择是Hive + MySQL + Python + R,然后开始抽取最近数月的日志。

第四步,数据处理和清洗形成核心数据集
这一步应该是做这一行的同学们最恨的,原因无他:做起来看似最无技术含量而最耗时间,而往往又最影响最后的产出。(这一段撸啊撸的血泪史就省去了,诸君共勉)最后形成核心数据集,比较核心的字段包括:用户ID、机器配置及得分、玩各个游戏的时长、各个游戏的配置要求最低分等等。

第五步,研究数据和选择合适的模型
一开始就热血沸腾,这个需求好简单呀,我能立马体现价值!对于某些高配置游戏,查看各种配置的机器玩这些游戏的平均时长,就能优化各种配置的得分了。道理也很直观,低配置机器因为很难支持高需求游戏的运行,会出现卡顿或者蓝屏,所以游戏平均时长必然很短。这个推断非常有道理,结果数据跑出来完全偏离常识,这里出现第一坑:
可能出现了脏数据:中国的PC环境太复杂,各种机器改装、刷机(比如许多同一个MAC地址的多个网卡等等)以及软硬件伟哥式得打补丁增强,已经严重改变了该配置本来的性能
可能出现了Survivorship Bias(Survivorship bias),那些明知机器很烂但是仍旧坚持下载、启动并玩高配置游戏的用户,可能是真爱,游戏时间往往会更长

发现第一个坑,意识到问题没有这么简单,开始调整模型,比如:是不是可以用某个配置玩一些高配置要求的游戏的相对比例,来确定机器配置的得分(玩高要求配置游戏越多的机器,按理说配置得分应该越高)。迅速发现第二个大坑:
游戏的最低配置要求往往来自于游戏开放商,其实也是很不靠谱的,所以最低分函数g(游戏)也应该要优化。其中g(游戏)是官方推荐,可以基本不用管了
机器->游戏->机器->...,是一个循环,高配置机器的用户更爱玩高要求的游戏,高要求游戏的用户更多是高配置机器……(怎么快搞成Collaborative Filtering的问题了)

然后在这第五步中间不断摸索爬坑,甚至回到第四步,甚至的甚至让产品新上线一些功能收集新的数据(比如:让用户对用户是否能玩点击确认或者否认),但是让产品增加需求这个真的很难,产品汪和程序狗已经很不容易了,建议不要尝试。

第六步,评估模型
优化后的配置打分的算法以及游戏最低要求配置得分的算法上线,这时候产品和程序员是愿意增加一些功能来收集数据帮助数据分析师评估模型和效果的。然后根据评估效果(FP和NP的出现概率),如果不行的话,回到第四步重新开始吧。

安之若素

赞同来自: candy

数据预处理,数据预处理,数据预处理。
大部分时间在做数据预处理,真正实际的模型选择,参数调优占的工作时间大概不到30%。
有一句话说的挺好: 数据和特征决定了机器学习的上限,模型和参数决定了逼近这个上限的程度。
所以,花大力气去做特征工程是很有意义的。

candy

赞同来自:

首先说明一下,在你印象中阅读paper,搞科研成果的数据挖掘工程师可能在各大公司研究院中存在比较多(比如百度IDL)。一般公司的机器学习岗位很实际,找到的工程师往往是要解决一些实际问题的,所以有业务压力,没有给你预留做研究的时间。@卢嘉颖 已经说了,数据预处理其实占用了相当多的时间,机器学习算法的好坏其实实际中主要取决于训练数据质量,所以“特征工程”就显得十分重要,数据预处理做得好,简单的算法往往就可以达到目的,数据预处理差,再牛逼的算法也没有卵用。所以,干这行有时候会干点体力活,就是这块。
OK,主要工作内容是什么?跟研发类工程师其实差别也不大,接受商务部门的需求(比如预估一次广告投放的曝光量或互动率),然后就去做模型了,找一堆以往的投放数据,简单的你可以做做回归预测,在一定误差内能解决问题。干这行有个问题,你不光得像研发工程师一样去写代码实现算法,你还会遇到一堆无解的问题(我觉得基本都无解),你选模型了,万一模型然并卵呢?万一参数然并卵呢?研发可以码完code回家打Dota了,数据挖掘工程师的工作才刚刚开始... ...知道了吧,跟研发最大的差别是码完代码你的工作才刚刚开始。
最后,再留一条一个类似问题的解答 做算法工程师是什么样的工作体验? - 数据挖掘,去看看吧

要回复问题请先登录注册