算法工程师为什么成天做数据,都做哪些数据?

大家好 , 前几天群里有小伙伴说希望看到更多的算法工程师的日常 。其实对于算法工程师而言 , 最大的日常就是做数据了 , 所以给大家分享一下做数据的那些事 。
为什么很少做模型在大家想象当中 , 可能算法工程师做的事情是今天看paper , 明天把paper实现了 , 后天就上线使用 , 然后公司的收入刷刷涨 , 我们的工资、级别也跟着涨 。但实际上 , 大多数岗位下的工程师日常并不是这样 。国外有一个著名的大佬(我忘记名字了)曾经说过 , 算法工程师有70%的时间是投入在数据上的 , 花在模型和调参上的只有不到20% 。
这句话大家可能或多或少都听过 , 但是想必都不是很理解 , 为什么会这样呢?为什么不能多花点时间做模型呢?原因也很简单 , 并非不想 , 而是不能 。
不能的原因也很有很多 , 我随便举几个最常见的 。
框架限制模型不能随便动的原因有很多 , 一般来说最常见的是框架的限制 。这种情况在大公司和小公司里都有 , 比如之前我在某大公司的时候 , 公司的框架非常成熟 , 以至于很少写代码去实现某一个模型 , 而更多的是可视化界面的连线以及设置操作 。问题来了 , 在这个场景当中 , 可视化界面当中可选的模型是固定的 , 都是基础团队开发好的 , 他们开发好了这么多模型 , 我们就只能使用这么多模型 , 除非我们脱离这整个流程 , 但显然这是不可能的 。
所以当时在很长的一段时间里 , 我们只能在有限的模型当中做选择 。直到后来 , 公司开发出了新的框架工具 , 可以让我们自己定制神经网络的代码实现深度模型 , 这才鸟枪换炮迎来了全面升级 。
小公司虽然不像大公司这样有一套成熟且不易改动的框架 , 但是一般也会有自己的一套流程 。比如公司前人留下来链路是基于开源xgboost开发的 , 你想要使用TensorFlow训练神经网络模型代替原有的xgboost , 一般来说这是肯定有效果的 , 也一定会迎来提升 。但问题是 , 你可能需要把训练模型、线上调用模型的整个链路都重构 。很多算法工程师的开发能力不太行 , 而且也不太愿意做工程重构的事情 , 再加上这块工作量也不小 , 所以很容易出现的情况就是 , 大家都明知道怎么做比较好 , 但是由于投入比较多 , 大家也都不愿意做 , 一直delay 。
效果难保证第二个原因是paper上的一些模型和做法 , 效果其实是很难保证的 。如果你读过paper会发现paper的结论往往都有很多前提 。比如某某特定的数据或者是场景 , 前期强大的recall以及过滤系统 , 或者是完善的特征准备等等 。paper里不会把这些都写出来 , 它只会写上做法以及结果 。所以这就导致了 , 很多paper里写得天花乱坠的方法 , 实际应用起来效果可能并不好 。
这也不是paper吹牛 , 而是你没有同样的条件 。举个例子 , 阿里的数据埋点非常精准 , 精准到用户从打开App到关闭app的每一个动作和行为都有记录 , 每一个商品或者是模块在用户处展示了多少时间 , 甚至是用户翻页的速度都有全面完整的记录 。就这种数据 , 一般规模的小公司根本做不了 。你做不了这个数据 , 你就没有paper里那些精准的特征 。那你如何保证你使用阿里的模型也有同样的效果呢?
优先级问题我们都知道 , 事情根据紧急以及重要可以分成四类 , 不重要不紧急、紧急不重要、紧急且重要、重要不紧急 。很多人也都知道 , 最重要的事情是把那些重要且不紧急的事情做好 。说起来大家都会说 , 但是实际上未必人人都会这么选 。
当你面临KPI考核压力的时候 , 一线的工程师可能就只能盯着紧急的事情做 。因为他们需要赶紧做出一点成绩来完成自己的业绩 , 完成自己业绩的最好方法绝不是去升级或者是更新模型 , 而是找一些特征做一做 , 或者是使用一些取巧的方法看看能否提升效果 。花时间去更新模型 , 付出的劳动很大 , 也不一定有效果 。但是做特征代价很小 , 做了一个没效果 , 可以再做一个 , 迭代也快 。


推荐阅读