浅谈数据相关工作及其技术栈、岗位特点和核心竞争力

        大家在求职过程中,不管是传统行业还是新兴互联网行业,又或是一些老牌科技公司,有很多岗位的title都和数据两个字挂钩。比如说数据工程师、数据分析师、大数据工程师、数据挖掘工程师、数据科学家等,又或是虽然没有数据二字,但是总让我们觉着和大数据关系很深,或是岗位要求技能有一些重合,看起来都和机器学习算法统计有些关联。比如算法工程师、机器学习工程师、商业分析师等,这些岗位在工作内容上有哪些区别?在公司的业务当中承担什么样的角色?各自入行所需要的硬技能门槛都是什么?各自晋升路线又是什么样子的?我们这篇博客可以简单聊聊这个话题。

        咱们先把概念放在一边,可以看一个案例分析。在一个阳光灿烂的上午,B站老总把产品经理小王喊到办公室,说:“最近我每天都在看宅舞区视频,发现一个非常有趣的现象,有很多视频用户反馈数据很有特点,比如视频播放量和点赞很高,投币很少,收藏却非常多,咱们能不能利用用户加入收藏夹这个显示动作反馈,提升B站首页信息流的个性化推荐质量呢?”。产品经理小王说:“行啊,你想怎么办?”,老总笑着说:“咱们可以不可以在征得部分建立了收藏夹用户同意后,在首页信息流视频推荐当中,直接加入少量收藏夹推荐,直接让其他用户在首页一键获取别人收藏夹,同时可以给那些虽然不是up,但是维护了高质量内容收藏夹的用户一些内容激励计划的奖励”。产品经理小王直呼内行,老总nb。

        当然了,这件事情光靠吹彩虹屁肯定是没有用的,想要真正的在B站首页上线,该怎么做?

        第一步,我们假设有这样一波人,他们对B站所有视频相关数据进行整合,比如每个视频基础的播放量、播放数据,每个用户在各自看过每个视频的播放时长,播放次数,是在什么时间段观看的,以及播放设备,有没有来回拖拽这样的机构化数据。还需要对一些原生日志数据进行处理结构化,可能还有其他业务的,比如直播数据等。最后把它们整合到一个全新的平台上,因为B站视频,直播日志等业务是由不同业务团队负责的,不同团队负责可能原生数据存在于不同的地方。这波人就建立了一个新的平台来做数据整合这个事情。

        接下来出现了第二波人,他们就在第一波的工作成果上进行操作,在这个已经整合好的平台上,比如筛选出宅舞区视频,统计它们点赞收藏转发投币的比例,每天各个时间段有多少人同时观看再去统计究竟有多少个视频是被加到了多个列表,有多少是私人收藏列表等。然后再继续配合产品部门设计一个调查问卷或者用户访谈,问问有多少建立收藏夹的用户有意愿将自己收藏列表公开,愿意分享给别人。再问问有多少人愿意在首页推荐当中出现收藏夹推荐。把以上收集到的所有数据进行统计分析,可以用到数据分析或者机器学习工具,然后把结果形成图表做成ppt,然后给产品部门和业务部门进行汇报。假设情况都很好,调研结果也证实了改动是非常可行的,可以提高用户留存,可以提高宅舞区视频的活跃度,也可以提高用户满意度。最后产品部门拍板通过,决定在线上正式部署上线,让部门用户可以在产品上获得一些尝鲜的体验。

        这时候第三波人登场了,他们也是在第一波人搭建的平台基础上进行操作,他们获取到所有公开列表的视频,对视频进行一些图像处理以及视频标签的自然语言处理,再去计算公开列表的属性以及图像层面的分类。最后根据用户观看习惯,决定给哪个用户推荐什么样的收藏夹。怎么设计流量池,怎么选择部分用户来尝鲜体验到这个功能,最后依据每一个用户真实反馈情况自动调节推荐信息流当中收藏夹的出现的比例和次数,再次不断优化用户体验。

        整个例子不太全面,我省略了很多细节,但我觉着可以代表一个互联网产品的一个功能上线一般流程,下面我们再具体看一下这三波人都会涉及到什么样的内容。

        首先B站后端工程师依据,比如用户隐私规范采集数据基本格式要求,采集到数据之后保存到业务端数据库。虽然up数据是共享的,但是视频业务的反馈数据,比如视频点赞投币转发数据会放在其中一个地方,但是列表收藏夹可能放在另一个地方,比如说收藏夹,每个视频加入时间,以及每个视频up是否有人关注,观看次数等。还有一些可能不在数据库里面,比如还有一些没有结构化好的原始日志。

        刚才我们提到的第一波人工作是什么呢?他们就是汇聚不同来源的业务数据进行整合,比如按照up这个维度整合多个来源,hot path,cold path进行整合,比如说cold path虽说有三个小时延迟,但是有全量的数据。hot path虽然只有一分钟的延迟,但是只有最近一周的数据。整合完毕后会把它们放到一个全新数据库当中,这个数据库和B站后端工程师维护的数据库一般来说是不同的。那么搭建好这个数据库之后需要简单的数据分析,聚合和处理的入口,还有要支持一些API能够让内部员工可以方便的取到这个数据,还需要对取数据的内部员工权限进行监管,比如谁在什么时间取到了什么数据。不同业务部门也要分配不同的查询数据权限范围,以及在一些系统中设置任务调度的工作。假如公司有好几百个员工,同时需要在这个平台当中取数据或者进行一些聚合计算,如何来做任务的优化?怎么去合理优化平台资源?这部分人我们称为数据工程师。他们有什么硬技能呢?或者说想在这行吃这碗饭,需要会什么基本技能。首先需要熟悉SQL和NoSQL数据库,和大数据工具,或者是平台打过交道,负责将不同来源数据进行整合,最基本的数据清洗、数据管理、数据转换去重。我们最重要的就是开发面向公司业务层和开发层的一个数据仓库,也就是我们之前提到的整合平台,并且维护相关API。该角色倾向于一个软件工程师,本质上是和大数据存储和架构打交道的软件工程师。涉及到的技术点和工具目前主流就是Hadoop那一套,比如MapReduce的操作优化,MapReduce中combiner是什么,怎么用combiner去优化mr job,怎么去分片,RecordReader怎么来定义,还有分布式缓存技术,还有一些数据分析层面的Pig,Hive操作,partitioning的性能提升,默认的meta-store有什么样的限制,NoSQL数据库(像HBase和RDBMS之间的比较),master-slaver model是什么,HBase内部结构是什么样子的,Sqoop,Flume,Spark的RDD概念,容错,programming model,数据流,Spark生态环境等等。这个工作岗位有哪些特点呢?首先第一个特点就是知识点比较杂乱,系统的知识不容易获得,科班对应的理论研究方向一般是分布式存储和分布式计算,这其实也是system方向知识特点。学习曲线相当不平缓,无论工作还是学习,第一年或者前一状态基本持续懵逼。一方面本科操作系统和体系结构知识基本是衔接不上;第二方面是国内计算机本科是以各种数据结构算法论,普遍认为编程语言是实现工具不重要,操作系统不重要,算法才是王道才是核心。现在找工作也是靠刷题套路,这种情况可能会更差,再有岗位需求工具非常杂乱。这类岗位竞争点在于对大数据生态环境的各个组件是否熟悉,是否了解这些组件底层原理,各自的瓶颈和使用场景,各自的优缺点分析,甚至需要在公司不同量级情况下不同业务需求设计搭建符合要求的数据平台,而不是简单使用Spark或者HBase,同时它也是与时俱进的,现在也在用容器K8S这样比较新的技术。另外一个特点是对工程有相当要求,由于生态环境限制了这类岗位对java语言要求较高。这个岗位的核心竞争力是什么呢?在我看来,理论上重点是集中在system领域的分布式计算、分布式存储这类知识点,比如存储、计算、锁、数据库、消息队列、服务治理,还有一些就是和运维相关内容,比如容器化熔断、限流、降级、服务拆分、服务集成、持续交付、持续部署等等偏架构的东西,工程方面涉及到的大多是大数据的那套技术Hadoop,卡夫卡,Docker,K8S,还有Thrift这样的RPC框架,Redis,Chubby这些工具的核心原理。并且不能只停留在会用阶段,需要了解这些技术工具使用场景,它们优缺点,能够在当下公司当前场景下,现有资源条件下给出合适的架构方案。架构师是一个比较合适的成长路线,虽然我们这里称为数据工程师,也有公司因为工作绝大多数时间都是和大数据系统、工具打交道,也会把它叫做大数据工程师或者数据仓库工程师。

        我们接下来聊一下第二波人,他们就在第一波的工作成果上进行操作,按照自己的需求提取自己想要的数据。再去用自己熟悉的数据分析工具或者是机器学习方法处理信息。再者配合产品经理或者UX一起设计调查问卷,或者是用户访谈内容,如何科学的筛选用户,如何设计问卷中的问题,怎么整理结果,如何确认结果的可信度,最后把这个可信报告或结果用合适图标或ppt形式汇报给产品部门以及老总。最终的目的是帮助或者方便老总和产品部门决策,你可以从结果角度佐证,也可以是真实数据去反驳,这波人我们称为数据分析师这波人需要哪些职场硬技能呢?首先从技术角度的硬技能来说,你得会用SQL或者平台特有查询语言去取到数据,然后需要用熟悉的数据分析工具统计计算,落实自己想法验证结果。数据分析工具方面一般按自己偏好即可,够用就行,可以用python或者R、weka,甚至可以使用Excel工具,或者是使用一些主流商用化套件PowerBI、Tableau等。那么理论知识的点会主要集中在描述统计和推断统计上,比如正态分布、标准化、偏度、峰度、中心极限定理,假设检验、线性分析、ANOVA、皮尔逊、斯皮尔曼这种关联分析,残差分析等等。也可以用一些机器学习方法来做,比如sklearn、xgboost、lightGBM,特别是一些无监督聚类方法和解释性较强的机器学习算法(线性模型、树模型、NLP内容)。重点是得到数据当中可解释的那些信息,可以对产品部门决策起到影响的结果,这个是最重要的一个技能。就像是你参与射击项目,枪其实不是那么重要,临时学习都可以,但是重点是打中靶子才对。尤其不要小看对数据的感觉和直觉,对业务的快速认知理解。数据分析师这个岗位都有什么特点呢?首先要对业务足够熟悉,产品和业务的感觉要足够强。比如老总在提出添加收藏夹这个功能的时候,能够第一时间知道这个需求核心诉求是什么,什么样的结果数据能够对这个需求提供强有力的数据支持。个人认为数据分析师至少要和产品经理对产品的认知在一个lever上,只要这样才能不用老总或者产品经理提出需求的时候,凭借自己对数据和业务的感觉,从数据中尝试和发现一些隐藏的需求,去倒推和改进产品上的不足,或者是提出一些想法。第二个特点是工具千万不要贪多,对工具要熟悉,对结果要有感觉,正态分布、标准化、描述统计常见的均值方差期望线性分析、ANOVA、学生T分布、假设检验、皮尔逊系数,这些公式是非常容易理解的,但是它们在不同业务场景中得到的结果往往是非常微妙的,要弄明白这些数据的数学意义和物理意义。第三点就是信息传达,不管通过什么工具方法,都要对最终结果进行解释,冰冷冷的数字是没有意义的。这个岗位的核心竞争力是什么呢?很多时候产品经理都是由数据分析师做的,相比做内容的或是运营的,有数据分析背景的产品经理更容易得到青睐。很多公司也会把这个工作细分到不同业务,比如商业分析师之类的。

        我们接着说第三波人,我们假设刚才数据分析师从数据角度佐证了业务的可行性,产品经理已经拍板可以进入正式设计开发流程了。第三波人实现B站手机APP首页推荐栏当中插入收藏夹推荐这一功能,很多时候也同样需要在数据工程师搭建的那套平台上进行操作,把所有宅舞区收藏夹进行聚合计算,得到每一组收藏夹当中一组向量表达。举一个例子,比如有一个收藏夹里面有三十个宅舞区视频,收藏夹名称就叫做考研英语,接下来他们会用图像处理工具捕捉每一个视频中关键帧信息,捕捉关键帧当中up主的动作姿势,着装以及up主信息,其实可以做到把这些图像存下来之后,继续按照每个视频的标题、简介、评论和收藏夹名字,提取关键词信息,或者用一些预训练的语言模型得到其中一些embedding。顺便再拿到这个收藏夹当中每个视频up信息收藏点赞播放数据,将所有信息编码成一组向量,向量尺寸和普通视频一样,放进原有视频推荐信息流中,完成推荐。最后再加上一组0到0.1之间参数控制收藏夹在视频推荐信息流中出现的比例,并且可以让他根据每一个用户反馈自动学习和调整。我们把这波人叫做算法工程师入行基本硬技能都有哪些呢?首先需要在业务需求已经明确的情况下,尽快的给出一个切实可行的算法角度和工程实践方案,很多时候需要给出多个不同方案,有的简单但是可以快速部署上线,有的效果好但是非常吃性能,或是有些其他数据上有成本要求等。明确需求后,可以用图像领域方法提取关键帧,对up着装等进行捕捉和特征提取,再用自然语言处理方法得到视频和简介中有用的信息,以及一些其他的结构化信息,将它们进行向量组合,从而放进现有的视频推荐流当中。至于具体用到哪些方法,比如图像分割、目标检测,必须要知道现有工具到底有哪些,目前可以做到什么程度,总体上至少要有个判断。最后需要编程实现落地部署等工作。说起来好像很简单,但是其中涉及到的技术点其实还是非常多的,光是传统的推荐系统就很多了,更别说这种涉及到图像和自然语言处理的联合特征。当然了很多时候算法团队也不是一个人,也都是一个团队,无论CV还是NLP,你至少掌握一个。比如要是CV方向,肯定要对分割、目标检测、细粒度图像分类、曲面图像、各种GAN变种等熟悉,或者至少了解其最新进展。NLP也是一样,要了解预训练已经发展到什么程度了,现在这种参数量变态大模型到底能不能用,每一个子领域最新的最成熟的方案都是什么。合格的这个岗位肯定是具备基础的后端岗位技能,要会写代码,需要知道一个完整的lifecycle是什么样的各个环节怎么配合。很多人看不上清洗数据这个工作,其实只要你正经地洗过数据,你就知道洗数据这个流程怎么设计,以及怎么洗,是完全依据后面算法来做的,是非常有技术含量的。如果你洗数据太干净,不仅数据量少,而且在真正部署到线上的时候你会发现,针对线上大量没有清洗过的数据,模型泛化能力会很差。又或者是遇到正负样本不均衡的问题,如果下游模型是树模型,本质上是不用管,因为树模型是用信息熵划分样本空间,熵的计算和样本数量完全没有任何关系。只有那些计算样本loss,像是逻辑回归,深度学习这些方法,可能需要做上采样或者下采样。所以如果你对算法本身不够了解,做数据分析预处理清洗这个环节是肯定做不好的。除了基础的机器学习能力之外,应该至少对一个应用领域的方案比较熟悉,有比较多的积累,特别是小方向上里程碑式论文和成熟开源工具,在这个领域不求多但求熟练。让你能够在给定的数据条件下,能够在比较短的时间内快速给出切实可行的方案。这个岗位有什么特点呢?第一点是代码能力,现阶段比大多数人想象中的要求要高,因为要实打实写工程代码,远远不是看看paper改改模型参数就可以的。你需要扎实面向对象编程,设计API,和后端同时联调接口,代码是要求能写出工业级标准的(可以通过多读源码获得技能)。此外我感觉你还需要一门高并发语言Golang,去做线上的inference。第二个和市场有关系,供求不均衡,市场基本属于供大于求状态,从需求上看,基本上还是跟着企业数量和量级处在一个比较健康和稳步发展的阶段。问题在于供给端,这些方向属于交叉学科,不适宜过早开设课程,应该好好打信息论,数理统计,概率论基础,后期有的是机会学习。如果抱着快速赚钱心态投机算法岗位,终究会被慢慢趋于稳定的人才市场供需关系逐出去的。最后是这个岗位的核心竞争力我认为硬技能核心竞争力有两个,一个继续抓算法,深耕某个小领域。可以从工业界角度提出创新,因为确实有很多研究问题的出发点来自工业界,虽然很多时候并不能拿到什么奖项或者学术成就。另一个是继续抓工程,跟所有的工程问题一样,单点单机什么都挺好,规模一大,机器一多,什么都有可能出问题。在大规模分布式场景当中,算法的并行化训练,迭代效率收敛速度,线上推理一切都会发生变化,比较遗憾的是这类工程能力的锻炼比较需要机会,或者说只有那些垂直领域的大厂才有,最好是能赶上一家以数据和算法驱动有足够体量的公司。一句话总结就是用机器学习去解决公司业务上的问题。

        多说一句,绝大多数公司算法岗位或者数据科学家研究员还不是一个东西,这两拨人核心KPI是不同的,一拨人工程上做业务,另一拨人目的发论文。很多人其实也不会在这两个岗位之间进行选择,比如微软亚研院当研究员,竞争岗位显然应该是各个高校的博士后,或者谷歌、阿里、脸书这种research scientist进行对比。简单来说,如果你日常工作不是每天赶着各个会议的deadline投论文,研究员岗位基本就不是面向你的。data scientist数据科学家这个岗位,不是一个well defined position,总的来说核心要义是需要在已知数据当中,定义问题解决问题,这个岗位参与面非常多,可以完整参与整个有关数据的生命周期之中,可以了解业务数据的基础上定义需求,推动产品,也可以参与到机器学习模型的训练建设当中,还可以和工程师一起参与构建分布式训练框架,也可以和research scientist一起合作或者单独发论文。大公司可能会进一步将数据科学家进行划分,做机器学习的叫做applied scientist,或者是特别注明data scientist、mechine learning方向等等。

        最后我们也不要把title看的太重,不要仅仅因为一个title而忽视了真正的工作内容,也不要因为一些比较新或者是听起来比较平庸title,而错失一份可能真正给你带来飞速成长工作机会。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页