一个业务型算法工程师的技能清单

     我们知道算法工程师分为两类:研究型算法工程师和应用型算法工程师。虽然都叫算法工程师,别看只有2字之差,但其实他们的 有着很大的区别。

  • 研究型算法工程师研究型算法工程师主要分布再各类大厂的研究院,基本上是博士起步,工作内容跟在高校的区别不大:读论文,复现,改进,投稿,专注点是算法性能的提升。

  • 业务型算法工程师业务型算法工程师约等于全能型工程师,主要分布在各个行业,本科硕士均可,工作内容是应用算法于实际的业务之中:获取数据,ETL, 验证效果(也需读论文),部署,专注点是业务指标的提升。

    那么实际工作他们有什么区别呢?研究型算法工程师主要工作是读论文和复现改进,因此技术偏重数学理论,一门编程语言以及写作功底。而业务型算法工程师的技术栈就是五花八门了,下面根据我个人3年的经验按照重要性排序进行说明:


1. 业务沟通交流:

为什么我将业务沟通放在首位,因为这是最为重要的开始。前期对业务的理解程度和分析程度决定了项目的成败,因此在立项前一定要理清什么能做、什么不能做、能做到什么程度。这就要求你对行业以及相应的流程有着一定的理解,否则项目后期就会有很大的风险。这是业务型算法工程师排在首要的能力,也是与其他IT角色最不相同的一点。

2. 解释复杂事情的能力:

业务型算法工程师汇报的对象是业务主管、BOSS等职位较高的角色,对于他们而言,年纪偏大并且对算法毫无概念,因此如何把算法简单化,生活化,将一个算法讲解给0基础的人听懂是业务型算法工程师必备的能力。当你无法让BOSS听懂,你就无法推进项目,就会陷入泥潭。

3. 数据处理

  • 首先做算法你要有数据吧,因此SQL是必不可少的技能,但是呢有SQL还不够。SQL只是一个标准型的取数语言,那么取数据的时候平台有千千万万种,尤其在大公司,平台更是数不胜数。因此你需要对各个数据平台有个基础的了解:传统关系型数据库例如Oracle,SQL Server, Mysql等, 传统非关系型数据库Redis、MongoDB等,传统大数据平台Hadoop,Spark,Hive等,谷歌/微软/亚马逊等厂家提供的云平台数据库Amazon Redshift, Google  Could SQL 等。当然,具体使用哪些数据平台取决于你所在的公司。

  • 有了数据之后就要开始做ETL,整合各个平台的数据作为一个或数个数据集,将数据整理成业务所需的形式,因此需要你会一门编程语言例如R,JAVA,VB,Python等,或者不使用编程语言使用ETL工具例如Alteryx等。ETL部分还是看你习惯偏好什么以及团队或者公司的偏好。

4. 套用算法

  • 这里使用“套用”这两个字,点名了业务型算法工程师的本质:不是去研究算法,而是去运用算法。根据当前业务的背景、流程及问题,选择相应算法。是分类问题、是回归问题、是聚类问题、是推荐问题、还是优化问题等等?需要根据我们的经验去选择算法进行实验。当然,在此期间,偶尔也需要看些论文,有时是为了加深对原有算法的理解, 有时是为了使用最新的state-of-art的算法。

  • 在这一阶段,我想提醒两点:1) 一定要先做一个Baseline的算法。一方面可以尽快出输出一些基础结果,另外一方面方便跟后续的算法进行比较。2)特征工程是一个漫长的工程,是不停迭代的过程。当算法实验效果比当前业务好, 其实就可以去跟老板做报告可以上线了,上线之后再持续fine-tune。其实这里的思想也就是项目管理领域的Agile开发方式,不停迭代直到达到目标期望。

5.系统设计和开发

    当套用算法阶段完成后,下一步就要去解决如何将算法嵌入到当前业务系统之中。这里牵涉到的部门和系统比较多,五花八门,每家公司都有不同的业务和系统,这里就不方便具体细谈。业务型算法工程师的一个技能就是系统设计的能力,不管系统是你自己开发还是交给其他部门或者外包开发,一定都是按照你提供的系统设计方案去做开发的。所以对你的要求就是需要理解和设计系统,包括UML设计, 面向对象设计,接口设计等。

  • 当需要你选择自己开发系统,那么用到的技术需要和当前公司或者团队的技术栈相同: JAVA/Python/Php/C++/JS等。
  • 当公司资源分配有盈余,那么可以向其他部门提需求或者寻找外包,这时又需要你的沟通能力上场,如何让其他人再不了解你项目的情况下,理解并掌握你的项目对整体项目的进展是及其重要的。

6. 部署

    当一切准备就绪,需要开始部署算法和系统,这一整套东西部署再哪里,后期如何运维,系统失效时候怎么办,又是一个令人头大的问题。

  • 首先对于系统部署在哪里,后期如何运维这个问题,笔者尝试过部署在部门的服务器上,发现管理能力太弱,一切都要手动;尝试使用过IT部门的搭建的CI/CD(Continuous Intergration and Continuous Deployment)  工具流程,部署在kubernate里,虽然说代码流程方便管理了,但是算法的数据管理以及算法的再训练仍需要手动;后来公司引入了第三方平台(这第三方平台也放入了公司的Kubernate里),这平台提供了较为强大的CMCT(Continuous Modelling and  Continous Traning)的功能,解决了数据和算法再训练的手动问题。

  • 当系统失效时怎么办?我想这个是任何系统都要面对的一个问题。这是需要你和各方业务部门例如生产部、IT部门等协调和定义,一定要考虑到当系统完全崩塌时的解决方案,也就是要求一切都可以恢复到系统上线之前的状态。

7. PPT撰写和汇报

    我想这是当代职场人必备的技能要求吧,你的ppt的排版,字体配色等等都需要考量,当然最终目的还是为了让听众能听懂并且接受你的内容;至于汇报,主要还是看你的演讲能力。当然这是需要长期锻炼的,笔者所在的公司时不时的会有这方面的培训,如果你的公司没有这方面的培训,最好有意识的去提高这方面的能力。


以上就是本人3年以来作为一个业务型算法工程师的思考与总结,所以综合来看,业务型算法工程师的要求是比较综合的,有别于传统的IT角色以及业务角色,是一个大融合。至于项目周期,笔者所在的公司是比较轻松的,一个项目大概是1年左右,会有2个项目会同时并行。最后,我用一张图来展示一个项目中各个阶段业务型算法工程师的时间分配比重:

关注我,带你走进数据算法的世界。

  • 微信公众号 数据算法小屋

  • CSDN  https://blog.csdn.net/TommyLi_YanLi  

  • 知乎 https://www.zhihu.com/people/74-25-40-76-26

  • 作者邮箱:[email protected]

你可能感兴趣的:(算法,大数据)