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

b0defac5c5728c39c29850d35caff948.png

大家好,前几天群里有小伙伴说希望看到更多的算法工程师的日常。其实对于算法工程师而言,最大的日常就是做数据了,所以给大家分享一下做数据的那些事。

为什么很少做模型

在大家想象当中,可能算法工程师做的事情是今天看paper,明天把paper实现了,后天就上线使用,然后公司的收入刷刷涨,我们的工资、级别也跟着涨。但实际上,大多数岗位下的工程师日常并不是这样。国外有一个著名的大佬(我忘记名字了)曾经说过,算法工程师有70%的时间是投入在数据上的,花在模型和调参上的只有不到20%。

这句话大家可能或多或少都听过,但是想必都不是很理解,为什么会这样呢?为什么不能多花点时间做模型呢?原因也很简单,并非不想,而是不能。

不能的原因也很有很多,我随便举几个最常见的。

框架限制

模型不能随便动的原因有很多,一般来说最常见的是框架的限制。这种情况在大公司和小公司里都有,比如之前我在某大公司的时候,公司的框架非常成熟,以至于很少写代码去实现某一个模型,而更多的是可视化界面的连线以及设置操作。问题来了,在这个场景当中,可视化界面当中可选的模型是固定的,都是基础团队开发好的,他们开发好了这么多模型,我们就只能使用这么多模型,除非我们脱离这整个流程,但显然这是不可能的。

所以当时在很长的一段时间里,我们只能在有限的模型当中做选择。直到后来,公司开发出了新的框架工具,可以让我们自己定制神经网络的代码实现深度模型,这才鸟枪换炮迎来了全面升级。

小公司虽然不像大公司这样有一套成熟且不易改动的框架,但是一般也会有自己的一套流程。比如公司前人留下来链路是基于开源xgboost开发的,你想要使用TensorFlow训练神经网络模型代替原有的xgboost,一般来说这是肯定有效果的,也一定会迎来提升。但问题是,你可能需要把训练模型、线上调用模型的整个链路都重构。很多算法工程师的开发能力不太行,而且也不太愿意做工程重构的事情,再加上这块工作量也不小,所以很容易出现的情况就是,大家都明知道怎么做比较好,但是由于投入比较多,大家也都不愿意做,一直delay。

效果难保证

第二个原因是paper上的一些模型和做法,效果其实是很难保证的。如果你读过paper会发现paper的结论往往都有很多前提。比如某某特定的数据或者是场景,前期强大的recall以及过滤系统,或者是完善的特征准备等等。paper里不会把这些都写出来,它只会写上做法以及结果。所以这就导致了,很多paper里写得天花乱坠的方法,实际应用起来效果可能并不好。

这也不是paper吹牛,而是你没有同样的条件。举个例子,阿里的数据埋点非常精准,精准到用户从打开app到关闭app的每一个动作和行为都有记录,每一个商品或者是模块在用户处展示了多少时间,甚至是用户翻页的速度都有全面完整的记录。就这种数据,一般规模的小公司根本做不了。你做不了这个数据,你就没有paper里那些精准的特征。那你如何保证你使用阿里的模型也有同样的效果呢?

优先级问题

我们都知道,事情根据紧急以及重要可以分成四类,不重要不紧急、紧急不重要、紧急且重要、重要不紧急。很多人也都知道,最重要的事情是把那些重要且不紧急的事情做好。说起来大家都会说,但是实际上未必人人都会这么选。

当你面临KPI考核压力的时候,一线的工程师可能就只能盯着紧急的事情做。因为他们需要赶紧做出一点成绩来完成自己的业绩,完成自己业绩的最好方法绝不是去升级或者是更新模型,而是找一些特征做一做,或者是使用一些取巧的方法看看能否提升效果。花时间去更新模型,付出的劳动很大,也不一定有效果。但是做特征代价很小,做了一个没效果,可以再做一个,迭代也快。

这其实并不完全是工程师鼠目寸光,也是整个职场氛围的影响的结果。大家都看重业绩和绩效,以至于大家都陷入了局部最优解,但是却离整体最优解越来越远。

要想避免这种情况,需要有高瞻远瞩、统筹规划的架构师或者是leader,能够抗住升级模型的风险压力。对可能出现的情况以及将来要做的事情有充足、详细的规划,并且有足够的经验应对各种可能出现的事情。但是大家也都知道,拥有这种能力的leader在职场里凤毛麟角。大公司里都不多见,小公司里就更加难得了。

做哪些数据

说完了模型的问题,我们来聊聊数据,既然不能频繁地变更模型,工程师们就只能更多地来做数据了,那么工程师们到底又在做哪些数据,需要花费这么多时间呢?

训练数据

大公司里有完整的流程,我们把流程设计好了之后,训练数据、测试数据、模型训练以及部署可以一条龙流水线作业。但是在中小型公司里,这往往是做不到的。

原始数据是不能直接用来训练模型的,这中间需要复杂的处理流程。首先,需要做采样。就拿CTR预估的场景来举例,一般情况下真实场景下的点击率不会超过10%。但是模型训练一般正负样本的比例是1:3左右,那么这就需要我们对负样本进行采样。

采样你还不能直接采,因为可能这些样本当中还存在很多脏数据或者是非法的数据。我们需要先把这些有问题的数据过滤了之后,再进行采样,这样才能保证我们的数据是干净的。采样了之后,我们需要进行特征和字段的查找补全。因为数据往往是分开存储的,比如用户的基础信息是一张表,用户的行为数据又是一张表,商品的信息是一张表,各种各样的数据存放在各种各样的地方。我们有了样本之后,还需要去查找很多的数据,才能把所有需要用到的字段搜集齐。

当我们搜集了所有需要的数据之后,我们才能开始真正样本的制作,也就是使用这些我们查找以及搜集到的原始数据生成输入模型的样本特征。每一个特征可能都有自己独特的生成逻辑,这也是一个庞大的工程。这一步做完还没结束,还会需要把数据转化成模型需要的格式。比如tfdata或者是tensor、json之类的。

这么一系列步骤,大公司一般都有一整套完整的自动调度流程, 工程师们不需要操心,只需要拿来用就好了。但是在中小型公司,可能就只有一些手动工具了,需要数据都需要手工去跑一些任务或者是脚本。跑的过程当中还有可能会失败以及遇到各种问题,虽然说起来平平无奇,也没什么价值,但这些事情都是需要工作量的。

新的特征

特征怎么做?在kaggle之类比赛当中,可能就是使用pandas写两个函数,或者是几行处理的逻辑就搞定了。但实际上绝不是这么简单。

我举一个最简单的例子好了,比如我们将年龄进行归一化,做成一个标准化年龄的特征。这个简单吧,我们就用比较简单的最大最小值归一化方法好了,公式是:

归一化之后,这个特征值会被缩放到0-1的区间里。但是这里面用到了两个参数,一个是最大值,一个是最小值。这两个参数怎么来?你可能会觉得这还不简单,我们遍历下数据不就知道了。但问题是这个数据你并不是只用一次,以后每次生成训练数据都需要生成这个特征,难道每次跑的时候都手动遍历一下数据找下最大最小值吗?而且数据是在变化的,每一天用户年龄的最大和最小值可能都不一样,假如说我们要跑好几天的训练数据怎么办?

设计一个新的特征是简单的,但是里面的一些参数会让事情变得复杂,我们往往需要设计复杂的机制来将新完成的特征加入流程。

效果分析

还有一块数据处理的大头在效果分析,效果分析有两种,第一种是做一些之前没有的指标以及相关的分析,或者是应老板的要求做一些业务指标的分析,达成我们的绩效。

比如像是最基础的CTR、CVR、收入等数据,也有像是老板临时起意想要看的某些数据。比如分析一下某些特征的分布,比如看一下某个特定族群中样本的数量或者是数据的情况,等等等等,不一而足。

第二种是我们模型做出来之后的效果分析,如果说模型的效果还,那还好。如果效果不好,问题就来了,我们怎么样确定是哪里出了问题?是因为模型本身的性能不足呢?还是我们的特征不够或者是特征当中存在问题呢?还是我们的数据质量不高呢?还是说什么地方存在bug呢?

算法不像是工程,工程当中绝大多数事情是确定的,结果不对一定是因为逻辑有bug,那么只要仔细测试,分析原因,总能解决。那种难以复现,找不到原因的问题非常罕见。但是算法不一样,大多数情况下并没有绝对的错误和正确,甚至没有绝对的原因。我们扮演的角色更多地像是侦探,根据一些蛛丝马迹推测导致问题的原因,然后用实验尝试着解决,在这个过程当中就涉及到大量的数据处理和分析的工作。

比如,如果你怀疑是某些特征分布有问题导致了模型效果不好,那么你需要分析特征的分布。如果你怀疑是数据存在bug,那么你需要设计方案,筛选数据,仔细甄别数据当中的问题,验证自己的想法。如果你觉得是训练数据量不够,那么你需要增大训练量,设计对比实验……总之,想要排查问题都需要大量的数据分析,绝不仅仅是看看代码,想一想就能有结论的。

感想

很多想要从事算法的人真正做了算法之后,往往会有幻灭感。会有一种强烈的面试造航母,入职拧螺丝的感觉。原因也很简单,我们面试的时候问的是各种各样的模型,各种先进的理念和方法,但是入职之后面临的工作却是各种各样的数据分析以及数据准备。比如我当年大部分时间都在写SQL做数据,我一度怀疑公司的职位安排。

但当我理解了这一切的运作机制之后,我就理解了。实际的工作场景和线上算法比赛不同,线上比赛我们可以使用各种各样的trick来提升成绩。还可以搞各种跨界混搭,比如今年的腾讯算法大赛的冠军的做法就是把BERT应用在了用户行为分析的场景下。但是在实际的场景当中,由于系统以及各方面的制约,这些想法都是很难实现的而且效果也难保证,最终还是要落实到基本的数据支撑上来。

打个不确切的比方,各种各样的算法模型就好像是工具箱里的各式工具,我们仅仅了解工具是没用的。最重要的是要理解使用工具的场景,从而可以根据需要选择最合适的工具。但很遗憾的是,我们对数据以及场景的理解是很难量化的,所以面试的时候只能退而求其次问你工具的使用了,长此以往很多人本末倒置,搞错了核心竞争力,出现对面试的种种非议也就不奇怪了。

今天的文章就到这里,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发

原创 | 算法工程师为什么成天做数据,都做哪些数据?​mp.weixin.qq.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编写html要注意,编写XHTML需要注意的问题以及和HTML的区别

文档必须是编排良好的元素必须嵌套,尽管SGML规定层叠非法,但现有的浏览器普遍允许层叠。正确:嵌套元素。here is an emphasized paragraph.不正确:层叠元素。here is an emphasized paragraph.嵌套与层叠元素和属性名必须小写对所…

结对开发Ⅴ——循环一维数组求和最大的子数组

一、设计思路 (1)数据的存储结构是链表,最后一个结点的next指向第一个元素的结点; (2)数据个数为n,则最多有n*(n(n-1)...1)种情况(包括重复); (3&…

微软 MVP 福利大赏

前言成为微软 MVP 后, 可以获得微软提供的诸多福利。那具体有哪些福利呢?让我们一起来看看。行政表彰信行政表彰信宣布你的 MVP 身份,并恭祝你对技术社区的贡献。同时,概述了 MVP 项目的影响和意义。可以设置为 PDF 下载,也可以选…

canoco5主成分分析步骤_R语言 PCA主成分分析

微信公众号:生信小知识关注可了解更多的教程及生信知识。问题或建议,请公众号留言;R语言 PCA主成分分析前言统计学背景知识协方差相关系数函数总结实例讲解1.载入原始数据2.作主成分分析3.结果解读4.画主成分的碎石图并预测5.PCA结果绘制后记前言PCA分析…

地理术语

1、无霜期:指一年中终霜后至初霜前的一整段时间。在这一期间内,没有霜的出现。农作物的生长期与无霜期有密切关系。无霜期愈长,生长期也愈长。无霜期的长短因地而异,一般纬度、海拔高度愈低,无霜期愈长。 2、返青(turn green):指植物的幼苗移栽或越冬后,由黄色变为绿…

物理专线流量平滑切换

在从传统IDC向云上迁移过程中,物理专线作为连接云上和云下的桥梁,在混合云架构中占有绝对重要的地位。作为基础设施,在伴随业务不断发展的过程当中,也会进行相应的更换升级。本文将介绍在物理专线特定情况下进行流量切换时&#x…

Android之使用PopupWindow让背景变黯但是华为手机出现屏幕一闪一闪问题解决办法

1、问题 我们使用PopupWindow设置背景变黯(代码如下),但是部分华为手机出现屏幕一闪一闪 //设置背景透明度public void setBackgroundAlpha(float bgAlpha) {WindowManager.LayoutParams lp CurrentActivity.this.getWindow().getAttributes();lp.alpha bgAlpha;…

利用计算机窃听,observer模拟监听器的实现

observer模拟监听器的实现考试吧(Exam8.com) 2008-10-14 08:00:00 评论(0)条学过awt,尤其是swing的就知道,swing中observer模式被大量的使用。比如,button.addActionListener(...)后,一旦你点击button后就能触发相应的事件。很多人一定想知道…

linux桌面版排行2019_新兴的桌面发行版 Septor Linux 发布 2019 版

导读Septor Linux 是一个新兴的桌面 GNU/Linux 发行版,基于 Debian “Testing” 分支,支持以 live 模式启动。其以 Tor 加密网络流量来匿名地访问网络,并搭载了一些常见的日用或匿名性软件。Septor Linux 是日益增多的关注于英特网访问时的匿…

怎么实现动态设置静态文件存储目录?

前言文章名字有点绕口,举例说明一下:多用户使用同一个网站上传文件,但是因为一些原因,文件需要存储到服务器的不同目录下。比如用户 A 对应 c:\abc,用户 B 对应 d:\xyz\123。并且,文件需要以静态文件方式提…

编写函数判断一个数是否是回文数_程序员面试金典 - 面试题 01.04. 回文排列

题目难度: 简单原题链接 题目描述给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。示例 1:输入:"tactcoa" 输出…

ArcGIS地理坐标系与投影坐标系

地理坐标:为球面坐标。 参考平面地是 椭球面,坐标单位:经纬度 大地坐标:为平面坐标。参考平面地是 水平面,坐标单位:米、千米等 地理坐标转换到大地坐标的过程可理解为投影。

js去除重复数值

var c[2,4,3,5,2,2,2],a {},i 0;for(;i<c.length;i){a[c[i]] 1 //利用对象名称不能重复的特性来去重}c[];for(var g in a){c.push(g-0);}console.log(c);转载于:https://www.cnblogs.com/xupeiyu/p/4373871.html

ubuntu之sudo apt-get update提示Could not connect to 127.0.0.1:8081 (127.0.0.1)解决办法

1、问题 由于要使用Git,需要执行 sudo apt-get install git 但是执行之前我需要先 sudo apt-get update 麻痹的,当我执行这个的时候错误提示如下 Could not connect to 127.0.0.1:8081 (127.0.0.1). - connect (111: Connection refused)Err:1 http://archive.canonical…

Facebook为Messenger应用添加群组付款功能

Facebook在2015年为Messenger应用添加了好友免费转账功能。这个使得用户可以方便安全地向朋友转账&#xff0c;但是如果用户需要向多人支付&#xff0c;可能会耗费时间。幸运的是&#xff0c;Facebook已经通过其最新的Messenger应用更新解决了这个缺点。扩展付款功能现在允许用…

浙大计算机系可以转专业吗,求教。。浙大转专业容易吗

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼学长考试周忙里偷闲水一会儿贴吧&#xff0c;终于看到有人问这个问题了。作为一名即将跨入大二的浙江汉子&#xff0c;刚好符合你说的跨大类的条件。自我介绍一下&#xff0c;我前不久从理科大类跨到了社科大类(财管)。回想起一年前…

hfss史密斯图_HFSS仿真工程实例 (微波器件).ppt

HFSS仿真工程实例 (微波器件)(3)要结束观看时&#xff0c;可点击Close按钮。 图5-3-18 SolutionData收敛曲线   2)创建报告   ※创建差分对S参数绘图   (1)在AnsoftHFSS窗口中选择菜单项HFSS>Results>CreateReport。   (2)在创建报告(CreateReport)窗口做…

Xamarin.Forms 5.0 项目实战发布!

活动介绍本次活动主要是 .NET Xamarin.Forms 移动端项目开发实战教程, 与以往相同, 本次的收入(其它部分会另行说明) 将用于社区公益活动, 不限于:公益性质的个人/组织机构捐赠开源社区个人/项目捐赠内部投票活动本次的活动费用为:399元, 相对于去年组织的WPF公益实战视频而言,…

unity webgl读写txt文件_VB 读写txt文件

No.7 读写txt文件​mp.weixin.qq.com许多程序需要读写数据&#xff0c;比如商品管理&#xff0c;图书管理&#xff0c;学生档案等&#xff0c;当需要查询的时候&#xff0c;就是读取数据&#xff0c;新增或者更改就需要写数据&#xff0c;VB来讲&#xff0c;中小型的数据一般用…

Android studio导入项目提示The same input jar [*.jar] is specified twice

1 问题 把项目导入Android studio提示用gradle编译提示下面错误 The same input jar [*.jar] is specified twice 2 原因 gradle里面配置了 dependencies {api fileTree(dir: libs, include: *.jar) } 然后在混淆文件proguard.cfg里面进行了如下配置 -libraryjars ./li…