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

简介: 一年级阿里算法工程师的工作总结

被暴打的现实


5月入职的时候,老板安排的是去做 CTR 模型。当时看到线上模型比自己想的更加简单,于是理所当然的认为把模型升级到学界最新的那种肯定能带来效果上的提升,但是做了很多尝试,最后发现其实并没有那么简单… 于是在被现实狠狠教育了一番之后,终于痛定思痛,开始做一个 SQL 工程师,一切从特征做起,模型配合着特征进行相对应的升级,自己的算法道路才渐渐走上正轨。


一些积累经验


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



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


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


2. 线上线下特征一致性



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


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


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


3. 线上环境特征的引入



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


4. 离线指标的全面化



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


5. 快速验证想法的能****力



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


6. 要有产品思维



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


7. 学习和创新



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


相关文章
|
达摩院 算法 决策智能
阿里达摩院研发了一款运筹优化算法开发平台
使用数学规划技术时,需要运用运筹学的知识分析问题、数学建模和开发程序来计算。平台式的开发环境,可以集成多款优化求解算法和数据处理软件,易于使用,能提高开发的效率,帮助快速将优化技术应用于业务。
阿里达摩院研发了一款运筹优化算法开发平台
|
缓存 算法 架构师
阿里P9架构师终于把毕生心血而成的分布式高可用算法笔记开源了
说在前面的话 分布式系统无处不在。 一台计算机内部多个互联的处理器组成了一个分布式系统,它们通过“一致性缓存”算法使每个处理器核心看到相同的数据。近三十年来,随着互联网的发展,越来越多的互联网后台系统采用计算机集群的方式来应对海量请求和数据的需求,这个计算机集群也是分布式系统。 为了简化分布式系统的开发,出现了很多为开发者提供分布式框架的开源项目,例如Apache基金会旗下的ZooKeeper项目就是一个应用广泛的分布式框架。 同时,国内也有很多关于如何使用这些分布式框架来搭建应用的书籍,它们极大地推动了分布式系统在国内的应用。我们不仅要知道如何使用这些现成的分布式框架来搭建应用,而且应
|
6月前
|
存储 算法
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
|
负载均衡 监控 算法
【阿里二面面试题】说说你对 Raft 算法的理解?
【阿里二面面试题】说说你对 Raft 算法的理解?
799 0
【阿里二面面试题】说说你对 Raft 算法的理解?
|
6月前
|
算法 搜索推荐 Java
太实用了!阿里内部强推的超全Java算法学习指南,已被彻底征服
算法和数据结构一直以来都是程序员的基本内功。 数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠地执行起来。
|
6月前
|
算法 NoSQL Java
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
11月前
|
存储 人工智能 算法
|
算法 网络协议 Java
48W字?GitHub上下载量破百万的阿里:图解Java、网络、算法笔记
Java基础这个东西,无论在哪个公司都被看得尤为重要,而面试中关于基础的问题也是层出不穷。所以基础可以说是重中之重,当你的基础打牢了,其他的也就没有那么重要了。
|
Kubernetes 算法 关系型数据库
No.3 腾讯,阿里,字节,优科面经(上-算法篇)
No.3 腾讯,阿里,字节,优科面经(上-算法篇)
|
算法 安全 Java
阿里二面:JVM 的三色标记算法你了解吗?
阿里二面:JVM 的三色标记算法你了解吗?
113 0