网站优化外包,北京网站建设方案排名,世界网站流量排名,蕴川路上海网站建设文 | 桔了个仔知乎本文已获作者授权#xff0c;禁止二次转载大家好#xff0c;这里是桔了个仔#xff0c;目前是一名Data Scientist(不太想翻译成数据科学家#xff0c;毕竟感觉自己就是个工程师#xff09;#xff0c;过去几年在做基于机器学习的风控与合规系统#xf… 文 | 桔了个仔知乎本文已获作者授权禁止二次转载大家好这里是桔了个仔目前是一名Data Scientist(不太想翻译成数据科学家毕竟感觉自己就是个工程师过去几年在做基于机器学习的风控与合规系统参与了一些算是成功的项目和团队一起成功在几个跨国银行那里落地了我们开发的系统。根据我的经历以及对身边同事的观察我个人会把落地工程师的「落地能力」分为三个维度1.技术层面很多人以为算法工程师日常工作就是调下参改个算法再跑跑直到神经网络输出符合预期。在入行前他们以为算法工程师的日常是这样的▲图源《如何创造可信的AI》事实上算法工程师可能涉及的技术范围是很广的。很可能是这样的[1]▲图源《Hidden Technical Debt in Machine Learning Systems》中间那个小小的几乎都快看不见的黑块你放大图片会发现里面写着ML Code这就是「算法」的部分。当然别被这个图吓到这不一定全是你的工作这里是一个团队的任务这个团队可能是两人的团队也可能是几十人的团队但可以肯定的是无论你在哪个公司一个算法工程师都不太可能只做纯「算法」不要忘了「工程师」三个字。对于要做产品落地的工程师搞算法的时间很可能不到10%其他技术部分可能占据你40%。要增强自己落地能力中的技术水平除了算法要基础打好你还需要学会数据获取。原始数据需要经过ETL才能被算法利用。ETLExtract, Transform, Load是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程目的是将企业中的分散、零乱、标准不统一的数据整合到一起为企业的决策提供分析依据。也许你们公司有专职的数据工程师来做ETL但你如果能稍微参与到ETL的过程中不仅让你在大数据技术方面得到提升而且对你理解上游业务非常有帮助。ETL工具的典型代表有:Informatica、Datastage、OWB、微软DTS等。构建特征。如果没有机会参加到ETL里也没关系我也没毕竟客户不想给让我们接触原始数据。这时候你也可以处理ETL之后的数据从中构建特征。其实特征构建的过程能帮助你理解业务例如给银行预测信用卡逾期风险你了解到债务负担率和用户风险有着一定关联于是你会考虑把用户所有信用卡的欠款加起来除以这个用户的收入得到一个新的特征。关于相关技术我知道很多人肯定马上想到pandas但老实讲句我做了几年数据工作能用到pandas的机会真的不多。产品都要落地了几百万条的数据马上进来了还在玩pandasspark, hadoop, flink等分布式计算平台赶紧给我研究起来。可视化数据。我相信问出来这个问题的人都知道哪些python库可以做可视化例如matplot, seaborn等等。当然除了python库excel里的可视化也要做好这与算法无关但在你做汇报时能帮助你把一个结果解释清楚。会用服务器。一般数据产品部署得上云或者私有服务器吧那么如果你还不熟悉linux那就赶紧练练吧。你把系统部署到服务器时是不太可能用鼠标拖拽个exe就完事的。如果你还能熟练使用aws等云服务那就更好了。至于UI层面例如构建网页等等开发app这种这就不再推荐算法工程师学了毕竟人的精力有限。前面技术部分花了10%40%的工作时间然后其他50%的时间呢用来和客户或者产品经理沟通然后理解业务做ppt汇报结果。杂事很多很难接受吧没错我刚入行时也是觉得自己一身技术无处施展后来我上司一句话启发了我技术是逻辑的艺术业务也是所以只搞技术不管业务的不能算是逻辑能力出众的。你现在应该有疑问了那怎么才算「懂业务」嘿嘿马上道来。2.业务层面其实关于「懂业务」可以分为宏观业务和微观业务两部分。宏观业务指的是行业的「共性」。例如你的产品所服务的对象所在的行业都有什么「痛点」。sorry句子有点长而且说法也有点「老土」但了解客户痛点永远都是必须的。例如我做金融风控客户的痛点是「旧的专家系统规则更新慢」而我们提供「基于机器学习的方案」数据来了就自动更新规则就能解决他们痛点。他们这项业务目前的工作流程如何。例如我做反洗钱那么我得了解洗钱的三个步骤反洗钱的警报产生警报调查等等。这些流程在不同客户之间都是一样的我了解清楚了这些我才能知道我的产品是在哪个环节发挥价值。如果你做的项目是对内的例如为自己公司电商搞推荐算法那你必须清楚用户在你们APP上的路径例如首页到搜索页再到详情页。以及在每条路径上怎么做推荐商品例如有的商品是推荐搭配有的商品是推荐近似替代品。微观业务是指不同部门/公司在实践上的不同。微观业务是最容易被人忽视的而且也是最辛苦的因为大家都有不同的「知识沉淀」方式学习起来并没有那么立竿见影。但我发现有趣的一点是当你接触微观的业务多了你还是能从中提取「共性」。例如某个算法工程师之前在银行做风控在银行获取数据流程会比较长每个步骤要做的事情不能跳过现在去某互联网金融公司做风控可能获取数据流程变得很短但是你会发现共性是大家都有准入审查、逾期催收等环节用到的技术可能也是相近的。现在你已经掌握了各种技术准备大干一场准备拿最强的深度学习模型给客户设计一款准确率非常高的产品。现在你开始学习相关业务我建议你带着问题学习。不过你什么都不懂时你应该问自己的第一个问题是什么没错那就是这个系统的真实需求是什么这个问题很重要。有个故事是这样的某大型日化公司引入了一条国外肥皂生产线这条生产线将肥皂从原材料加入直到包装箱自动完成。不过产品线有瑕疵个别肥皂盒是空的这家公司联系厂商后被告知这是设计上的缺陷无法避免。于是老板要求工程师们解决这个问题以数名博士为核心形成一个技术攻关团队耗费大笔资金之后终于宣告解决。解决的办法是在生产线上安装一套 X 光机进行扫描识别。在另一家私人企业老板让新来的小工解决问题小工所用的办法是找来一台电风扇放在生产线旁边.不知道这是真实故事还是段子不过我们可以知道的是如果你只顾着解决自己拿到的问题而不想问题背后的真实需求是什么埋头苦干用复杂的方法来解决个很简单的事那么会弄出大炮打蚊子的笑话。第二个该问自己的问题是有什么制约因素对于机器学习系统落地时的制约因素主要包括但不限于开发时间。即使项目刚开始你还不知道要花多久你也得计划开发时间出来你计划不出来领导也会给你设定期限。毕竟做产品不同于做研究做产品大家都喜欢确定的投入和可预估的汇报。计算资源。因为机器学习系统使用是需要成本的你得知道用户能承受怎么样的成本或者自己服务器能承受怎样的成本。算法性能。算法落地不同于打kaggle比赛并没有时间能把性能压榨到极致。只要比预期好些基本就「先用着再说」了要在这三个限制因素里面取得微妙的平衡才能使得产品落地。我刚做数据科学工作时总喜欢搞算法调优来炫技但其实压榨算法的边际收益很低你用一个月把算法准确率从70%提升到80%可能还不如提前一个月把系统上线使用起来的收益高。第三个该问自己的问题是算法、性能评估和业务是否吻合还是拿我自己的经历做例子。我工作中面对的数据是非常的不平衡的我们做二元分类100条数据里标签为1的只有2~3条其他97~98条数据标签都是0。这个时候显然需要选择一些合理的评估方法首先就排除了用准确率Accuracy作为评判标准了F1-score, AUC都可以备选。原因可以看我在另一个问题的举的例子。《如何评价德国训练探雷犬和寻尸犬识别新冠患者称准确率达94%嗅探犬接触患者后会成为病毒传播介质吗》[2]然后是模型选择。银行的业务需要强解释性所以又否决了所有黑箱模型。剩下的就在tree-based model、logistic regression还有线性kernel的svm之间选择了。上线之后要评价模型对正负样本区分度于是又要引入KS值。随着时间迁移数据分布可能会变化又要引入PSI值来监控数据偏移程度来决定是否重新训练模型。你看模型和评价指标都是和业务息息相关的。如果你看到这里还是感觉到迷茫不知道怎么补足相关业务知识例如产品和运营的知识可以看我之前写的一个回答这里就不重复叙述了。《算法工程师如何补足产品和运营知识》 [3]那怎么检验自己真的「懂业务」了呢你可以检查下自己能不能做到下面这些点检查下自己是否能快速复现方案如果能快速复现方案是否能估算每个阶段大致需要多少人多少时间面对不同的数据量能否估算一个大概的服务器性能需求3.软实力层面懂技术了又懂业务了是不是感觉还不够差点什么能力去推动产品落地这个是抛开技术和业务之外的东西要描述成一个具体的能力真的很难我会把这些能力都归结于「软实力」。我认为主要是表现在沟通思维这两方面。情商、亲和力、共情能力、有眼光这些算不算软实力当然算但你有没有发现这些软实力都是基于沟通和思维的。沟通和思维等软实力包括但不限于和客户沟通的能力。听你讲的客户并不一定是算法工程师或者数据科学家你是否能把自己的方案原理讲清楚设计到技术的概念是否能让非技术的听众也能大致理解思考能力。例如结构化思维和批判性思维。其实有一定套路只要多加练习就能掌握。推荐书籍有《金字塔原理》、《批判性思维工具》等。推动团队的能力。和个人魅力息息相关。这里说个真实故事和算法无关和软实力有关。我大舅是开工厂的产品良品率之前一直上不去。我二舅退休后就去我大舅厂里做质量监督。我二舅就中学学历普通话也不标准但我二舅进厂后产品良品率上去了工厂也扭亏为盈了。我问他怎么做到的他说很简单啊对于那些手工不精湛的小伙子我就亲自做一遍给他看并告诉他我一个退休老头都能按质做好为啥你不行就这么耐心的一个个沟通一个个教学盯着他们直到确认他们能做好为止。看起来这很简单是吧但这过程需要耐心沟通需要系统性思维找到关键因素。这就是软实力的表现之一。如果你观察销售团队的日常你会发现他们做的事情看起来简单大部分时间就是给客户发发邮件和客户开开会都是动嘴皮子的事情但是如果让你去做这些你会发现你会缺少自己貌似很难推进你会问自己自己嘴皮子咋就不那么好呢软实力就像肌肉运用软实力的过程就像搬砖把砖头从A点搬到B点看着很容易但搬起来才发现自己肌肉还不够强大。而锻炼软实力的方法无它只有干多了软实力才能上去。具体的说对于算法工程师而言就是不要逃避那些繁琐的看似没收获的事情。例如在我为某客户落地风控系统的过程中我们需要和他们的项目经理保持联系有问题也要给他们的数据团队反馈。其实这过程还挺难搞因为他们作为一个跨国大公司显然数据中心是需要同时对接很多vendor的所以当和他们合作时需要经常主动推进项目进度不然他们的项目经理会问责我们。例如我们有个pipeline每天固定时间要跑他们作为上游需要在运行时间前把数据给到我们。当时间到了数据还没给到我们我们要做的第一个事就立马需要给数据团队发送邮件抄送项目经理分清责任然后积极跟进回复搞清楚原因和数据团队商量个预计解决时间并且在这个时间点来临前就问问进度以预留足够时间来应变。在这些看似繁琐的沟通过程中我掌握了推进工作的方法养成了积极推动工作进展并在deadline来临前检查进度以预留时间应变的好习惯。总结算法工程师的「落地能力」包括技术能力业务理解还有软实力。但对自己要求不要太苛刻就好像你玩游戏时很少能用到每个维度的能力都满分的英雄一样人的能力是有个频谱的不可能方方面面都能做得满分所以不要对自己感到挫败。就拿我自己说大家别看我说的头头是道但是说实话说了这么多其实我自己也并不能每个方面都做得好。这个「落地能力频谱」就像是一个打分卡帮助你从更全面的角度来分析自己的能力频谱。有的人技术不那么精湛但很懂业务很会带队也能使得产品顺利落地有的人技术满分但业务和沟通能力欠缺但配合其他团队成员的优势也能使得产品顺利落地。所以接受自己的不足尽可能动态平衡自己的能力频谱总有一日你能成为具有超强「落地能力」甚至能独当一面的算法工程师。后台回复关键词【入群】加入卖萌屋NLP/IR/Rec与求职讨论群后台回复关键词【顶会】获取ACL、CIKM等各大顶会论文集 [1]Hidden Technical Debt in Machine Learning Systems https://wiki.esipfed.org/w/images/5/5f/NIPS-5656-hidden-technical-debt-in-machine-learning-systems.pdf[2]https://www.zhihu.com/question/442962994/answer/1717172385[3]https://www.zhihu.com/question/436066262/answer/1695872348