在知乎看到一篇算法工程师工作总结,深有感触,分享给大家~

作者 | shane miao

来源 | 文末『阅读原文』处

20年5月到现在入职阿里已经快一年了,一年之中也做了几个项目,期间趟过了不少坑,以往的年度总结都是闭门造车,写完了扔印象笔记之中给自己看,今年在知乎上看了很多大佬们的文章,收获很多,尤其是在讨论的过程之中,对自身能力的强化很是受用。于是想晒晒自己一年的收获,欢迎各位大佬交流~

被暴打的现实

5月入职的时候,老板安排的是去做 CTR 模型。当时看到线上模型比自己想的更加简单,于是理所当然的认为把模型升级到学界最新的那种肯定能带来效果上的提升,但是做了很多尝试,最后发现其实并没有那么简单...

于是在被现实狠狠教育了一番之后,终于痛定思痛,开始做一个 SQL 工程师,一切从特征做起,模型配合着特征进行相对应的升级,自己的算法道路才渐渐走上正轨。

一些积累经验

数据的准确性是非常重要的

具体地说,就是我们需要做很多数据清洗的工作。比如在日志中将虚曝光(服务器端打点)除去,只保留真正的实曝光(用户看到的),以及海外业务,还需要将国内的流量进行清洗等等。总之,核心思想就是要保证训练数据是用户真正看到的,且经过在线链路打分的数据。

另外如果没有必要,千万别对当前的数据做采样。首先做了负采样,就已经改变了数据的分布,它的效果就已经不够置信了,其次,采样完成之后还需要还原,尤其是在广告业务中,还原之后还需要再加上校准... 整套流程下来不仅提升了整个链路的复杂程度,拿到的效果还不一定是正向的。

线上线下特征一致性

这算是一个老生长谈的话题了,很多时候,我们发现离线 auc 涨幅喜人,上线之后发现在线指标纹丝不动,甚至还有向下波动的趋势,第一反应就是特征不一致。于是立刻返工去查找线上特征和线下特征是否一致,导致整个项目周期拉的特别长。

笔者今年在这一块就吃了很大的亏。由于我们业务的在线链路中的特征是由 c++、 lua 等语言处理得到的。但是我们离线开发的时候使用的是 python、java以及 SQL 处理得到,导致我们在加新特征的时候往往需要先用 python 和 sql 写一遍离线逻辑,再用 c++、lua 实现同样的在线逻辑。这样的做法首先会导致重复开发,其次两套代码的业务逻辑以及不同语言底层库实现的区别势必会导致在线/离线特征处理的不一致。

为了解决上面的问题,我们使用 C++ 开发了一套特征处理库,我们将所有的特征处理逻辑全部封装进该库之中,只要保证在线、离线输入的数据是一致的,那么得到的特征也可以保证一致。离线情况下,我们则通过 streaming 调 c++ 库的方式来生成离线特征。

线上环境特征的引入

由于我们组的业务场景、流量来源比较复杂,因此笔者刚开始做CTR相关工作的时候,锚定了流量渠道这个一个小点,挖了一部分特征,离线 auc 上也确实拿到了一定的涨幅,但是一上线人就懵了,在线指标跟online模型一模一样。后续跟朋友、师兄的讨论才明白了,渠道特征本质上是环境特征。这一部分特征,让模型可以分辨高 CTR 渠道和低 CTR 渠道,但是对于用户最后会不会点并没有过多的贡献。

离线指标的全面化

CPC 广告场景中,一般情况下,最后的排序计算公式都是 ctr * bid_price, 这就要求在广告场景中,我们不仅仅需要保证预估的序是对的,还需要保证预估的 CTR 的值是准的。当然,其实值如果准了,那么序也应该会更准。但是离线指标中的 auc 仅仅只能验证模型对序的预估情况,并不能实际反应值是否准确。因此,广告场景下,我们还应该关注类似于 COPC (click over predicted click) 这样的指标,当然 COPC 这个指标也有一定的局限性,比如样本中如果有一半的数据被高估、另一半的数据被低估,那么 COPC 的计算结果很可能表现的还不错。

快速验证想法的能力

同是打工人,大家身上都背着 KPI 和绩效。这时候,我们做的很多事会需要确定性结果,但是,作为算法工程师,我们做的很多事,都不能保证有确定性的结果。这时候,快速验证想法就是很重要的能力,我们需要在简短的 1-2周内验证自己的思路是否能产生效益,然后再决定是否加大投入时间,把这个想法做的更加饱满,全面。举个简单的例子,比如我们需要挖掘文本类特征对 CTR 模型的重要性,最简单的办法就是去做一些重合特征,比如判断 query 和 item title 的重合度,重合词等等,看这些重合特征能对 CTR 模型带来多大的离线收益,如果能够带来比较不错的收益,我们便可以顺着这个路子把文本类特征做的更加完备。

要有产品思维

算法工程师其实并不应该仅关注自己手中的事,其实多思考思考产品的形态,也是极好的。虽然这一块,笔者自己的体会并不是特别深,但还是想写出来告诫一下自己别成为一个只懂算法的人。最后,个人对产品和算法的看法是算法的不确定性某种程度上是可以通过产品来进行弥补的。这个观点也是在最近我们大团队内部的某个产品上线后取得了非常好的效果之后逐渐形成的,算是一个抛砖引玉吧。

学习和创新

对于算法工程师而言,保持学习是一项重要的能力,紧跟学界、业界的前沿个人感觉还是比较重要的,另外根据业务的发展,或者手头需要做的事情来有针对性的学一些知识点也是很重要的。最后,关于创新,感觉和学生时期做的论文真的差异很大,学生时代是确定大方向之后,四处开花,哪里好做做哪里,工作之后,受限于业务和数据,这时候还能做论文创新的,不得不说,确实很强。

写在最后

聊一些有的没的把,工作是一场长跑,身体的好坏其实是相当重要的。每天抽时间出来锻炼身体,做身材管理,我个人认为是比赚钱多少更重要的事情。

另外,作为算法工程师毕竟会面临很多不确定性,如何在失败的情况下,保持一个好的心情也是一个很重要的能力。余以为每个人都应该找到一个适合自己的解压方式,比如我自己在压力大或者心情不佳的时候选择长跑,10km下来,就又是一个元气满满的自己。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)

END -

谈一谈算法工程师的落地能力

2021-02-17

微软亚洲研究院周明 | 从语言智能到代码智能

2021-02-16

斯坦福大学——人工智能本科4年课程清单

2021-02-13

社招一年半 | 微软、腾讯、网易算法岗热乎面筋

2021-02-09

一年级算法工程师的工作总结相关推荐

  1. 在非互联网公司?!算法工程师的工作内容及心得建议

    [导语]网上已经有很多在互联网公司工作的算法工程师的日常了,那么小编便来说说在咨询公司,身为算法工程师,工作是一种什么样子的体验,同时也为对咨询感兴趣的小伙伴指明点方向. 具体内容: 工作内容详解 对 ...

  2. CV算法工程师:工作一年的小反思

    今天是正式工作后的第一年,打算做一件事,以后要持续记录自己的工作感想和生活状态.人这一辈子那么有限,作为一个普通人,也许我穷极一生也不会有什么大的成就可以让外人为我写下一个传记.但是我可以用自己的手记 ...

  3. python算法工程师简历_7 年算法工程师的工作总结,太精辟了!

    原标题:7 年算法工程师的工作总结,太精辟了! 大家好,我是chris,入行前5年在一家上市游戏公司做算法,从数据挖掘算法在业务线落地开始,涉及机器学习.深度学习,后来逐步负责整个算法团队建设. 现在 ...

  4. 一年级阿里算法工程师的工作总结

    来源:知乎@shane miao.20年5月到现在入职阿里已经快一年了,一年之中也做了几个项目,期间趟过了不少坑,以往的年度总结都是闭门造车,写完了扔印象笔记之中给自己看,今年学习了很多大佬们的文章, ...

  5. 7 年算法工程师的工作总结,太精辟了!

    大家好,我是chris,入行前5年在一家上市游戏公司做算法,从数据挖掘算法在业务线落地开始,涉及机器学习.深度学习,后来逐步负责整个算法团队建设. 现在在阿里,也是负责算法方面的工作,涉及到的领域涵盖 ...

  6. 算法工程师找工作经验

    总体流程:简单介绍下自己.各个公司面经.总结.薪资 1.简单介绍 面试岗位:机器学习 | 数据挖掘 | 算法工程师 | 基础研究 比赛经历:天池比赛Top 10,滴滴算法大赛Top 5,京东算法大赛T ...

  7. 初阶算法工程师的工作感悟

    文章目录 1.工作感悟 1.1.对比大公司和小公司 1.2.各岗位女生占比 2.找工作看什么 2.1.职业发展规划 2.2.办公环境 3.面试 3.1.面试准备 3.2.面试提问 3.2.1.问HR ...

  8. 算法工程师找工作笔试题总结1(达达-京东)

    1.进程与线程是什么?区别与联系 答:进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:线程是进程的一个实体,是CPU调度和分派的基本单 ...

  9. 作为算法工程师,在咨询公司工作的另类体验

    [导语]网上已经有很多在互联网公司工作的算法工程师的日常了,那么小编便来说说在咨询公司,身为算法工程师,工作是一种什么样子的体验,同时也为对咨询感兴趣的小伙伴指明点方向. 具体内容: 工作内容详解 对 ...

最新文章

  1. key to ribbon chart in powerbi: time, category, value
  2. java学习(94):cpu随机调用线程测试
  3. 外设驱动库开发笔记38:RTD热电阻测温驱动
  4. linux系统挂载磁盘慢,arch开机速度竟然是挂载磁盘拖慢了。。
  5. Oracle数据库to_date()和to_char()的相关
  6. 中文同义词近义词库 vs 词向量
  7. 计算机网络智能化在铁路通信的发展,浅谈新技术在铁路通信中的应用
  8. Axure RP for Mac中文汉化破解版
  9. 复变函数在计算机科学中的应用,复变函数的应用以及发展史.doc
  10. IFRAME 元素语法
  11. 微信公众号图片上传_base64图片上传处理
  12. Spring boot Mybatis type-aliases-package错误解决
  13. [转]JFFS2源代码情景分析Beta2
  14. 分享Android单元测试
  15. JDO(Java Data Object )
  16. Eboot之函数BootloaderMain函数分析
  17. 双目相机计算稠密深度点云(一)
  18. (全栈旅行足迹地图打卡网站 0-1)-项目旅行足迹布局-04(WebGIS Vue-js-go-mysql)
  19. 前端使用pako.js加密解密
  20. VS2022报错:E1696 命令行错误: 无法打开 元数据 文件 “platform.winmd”

热门文章

  1. An effective self-supervised framework for learning expressive molecular global representations to d
  2. 从原理到实践:Oracle 12.2 Sharding技术揭秘
  3. InterSystems开发者社区中文版上线:打造更高效的技术交流和资源共享平台
  4. 桌面没有计算机的图标,电脑桌面没有图标怎么办
  5. VCA821,VCA824做程控放大器使用总结
  6. MySQL必备知识表的查询
  7. ICEM软件学习笔记
  8. 日志系统优化选型之采集端
  9. 功能化M-IRPA-MOF负载型催化剂-单原子Ca-MOF纳米复合催化剂
  10. 请远离让男人性趣全无的伤精食物