数据相关的职位一般分为三类:数据分析师、大数据工程师和算法工程师。数据分析师需要丰富的领域知识和敏感的业务思维;大数据工程师为数据分析提供了数据基础和分析工具,需要掌握Spark和Flink等大数据技术,对编程和逻辑思维要求较高;算法工程师的技术要求最高,不仅要懂业务,会大数据,还要熟悉机器学习算法,并且能够将机器学习模型部署到生产环境。当然,因为优质算法工程师稀缺,他们的薪资水平最高。
在大数据和人工智能行业,有众多与数据相关的岗位,名目繁多:数据分析师、数据产品经理、数据挖掘工程师、大数据工程师、数据开发工程师、机器学习工程师、算法工程师、NLP算法工程师、数据科学家等等。很多应届生或准备转行的朋友面对如此多的岗位名称,都会傻傻分不清楚。本文将这些数据相关的职位分为三类:数据分析师、大数据工程师和算法工程师,并从工作内容和技能要求来做一下分析,帮助新入行朋友选择适合自己的岗位。这里我暂且不谈最顶级的数据科学家,这部分人均为名校博士,全世界可能只有几千个,他们可以轻轻松松年薪百万,是整个食物链的最顶层。他们不需要找工作,都是工作在找他们。
2017年 于广西涠洲岛
数据行业金字塔
数据科学金字塔 来源:hackernoon.com
上图的数据金字塔展示了数据科学领域各岗位的大致职能。
- 最底层是数据收集部分,主要是原始数据的生成和收集。这部分数据来自各种IOT设备、传感器、手机APP上的用户行为、外部数据、以及用户生成数据(类似抖音用户主动发布的视频)。
- 第二层是数据存储部分,一般需要构建数据仓库,生成一系列数据流,将原始数据存储至大数据平台。
- 第三层是数据清洗和转化部分,主要对数据进行清洗和预处理,将数据转化为更高层次的数据,为上层数据分析做准备。
- 第四层是数据聚合部分,主要做一些基础的数据分析和业务报表,进行一些数据挖掘,并构建机器学习的训练数据。
- 第五层是机器学习部分,主要构建机器学习模型,将模型发布到生产系统,进行AB实验。
- 最顶层是人工智能部分,顶级的科学家提出新算法或新架构。
绝大多数数据岗位的工作内容一般在第二至第五层,很多岗位的工作内容互相交叉,很难严格区分每个人在做具体哪些事情。无论哪个岗位,都需要衡量候选人以下技能:
- 领域知识
- 数学和统计学
- 逻辑思维
- 编程开发
- 大数据
- 机器学习
数据分析师
我个人认为,数据分析师、数据产品经理(增长黑客)、数据运营以及部分商业智能分析师虽然主要工作各有侧重,但数据相关的核心技能都可以归纳为数据分析。
数据分析师的入行技术门槛相对较低。这里强调技术门槛相对较低,是指“编程开发”、“大数据”和“机器学习”等技能的门槛要求相对较低,甚至可以说,只要会用Excel,就能进行数据分析。但数据分析师的岗位对于领域知识、逻辑思维和统计学的要求并不低,尤其是领域知识和逻辑思维。数据分析师主要在研究和分析该领域的数据,且必须对该领域数据有非常深刻的理解和认识,那领域知识主要指什么呢?以今日头条这样的内容推荐引擎为例,数据分析师所做的事情可能是:
- 用户画像分析:哪些用户是该APP的重度用户?小镇青年还是都市白领?60岁以上老人是否也会使用?哪部分用户是需要下一步重点发展的潜在用户?
- 用户行为分析:用户在一天中的哪个时段会频繁打开APP,是上下班通勤途中还是午饭后睡觉前?每次打开时的核心诉求是消磨时间还是获取有价值信息?当用户短时间内切换了一所城市,用户更希望在当时获取哪些资讯?
- 内容分析:不同类别的用户倾向于阅读哪些类型的文章,国家大事、炒菜养生还是娱乐星座?视频兴起后,该给用户推荐多少视频类内容?
- 广告分析:哪些新的功能会促进用户点击APP类的广告?广告出现的频次应该如何控制?广告与用户阅读兴趣如何结合?
今日头条内容分析报告
如果换做电商领域,则需要分析师对电商场景有独到的理解。对于不同业务场景来说,所用到的统计学知识并不复杂的,所需要分析的内容不尽相同,但都紧紧围绕着业务。数据分析师的领域知识包括对业务系统的熟悉程度、行业的从业经验、对一些数据和场景的深刻的见解。新入行的数据分析师主要在分析过去发生了什么,产生这些结果的原因是什么;有经验的数据分析师能够从数据中预测未来趋势,为管理层提供前瞻性预见。数据是基础,从数据中发现一些潜在的因果关系、产品优化方向、未来商业机会等洞见性的想法才是数据分析的精华所在。
数据分析进阶
数据分析师每天的工作是处理百万或上亿用户的数据,并且能够在这些数据中挖掘到一些有趣的用户行为模式,给决策层提供前瞻性建议,颇有一种站在上帝视角俯瞰众生的感觉,非常有趣也很有挑战。
数据分析师在专业上没有明确的要求,一般要求候选人有计算机、统计学、电子、通信等背景,实际上这个岗位也接受大量其他专业转行。只要了解业务场景,不同专业背景的人都可以快速转行到数据分析上。数据分析师的这个岗位看似“谁都可以做”,但我个人感觉这个岗位的职能在慢慢被其他岗位所蚕食,反而对从业人员的技能要求越来越高。一方面,现在那些所谓“动动嘴皮子”的岗位已经不能再靠“忽悠”就能胜任了,必须用数据说话,一些岗位如“数据产品经理”、“数据运营”以及“商业智能分析师”都要求相关人员在工作中进行大量的数据驱动的分析,抢占了一部分数据分析师的工作。中小型公司为精简成本,会尽量让一个人去做两个人的事情,会让产品或运营来做轻量型数据分析的工作。另一方面,随着数据量的爆炸增长,数据分析师所使用的工具也在发生快速变化,甚至Python都无法胜任大数据的场景,必须使用Hive等大数据分析工具,更不要提Excel这种只能处理单机数据的软件了。
因此,本节一开始提到的:“相比业务知识,数据分析师岗位对「编程开发」等技术门槛要求相对不高”也只是一个相对概念。这并不意味着数据分析师不需要掌握编程技术。翻看某招聘APP上数据分析师的职位要求,几个核心的技能包括:Python、SQL、数据挖掘等。这其实对没有相关工作经验的应届生或转行人士的技能要求相当高了。在无相关工作经验的情况下,一般人很难接触到大规模的数据量,或者可供分析的业务场景,自学了很久的Python,可能在用人单位眼里只是一些小玩具,难以胜任真正的工作。另外,学术圈喜欢使用R语言,互联网公司一般不使用,从R转到Python对于非计算机专业应届生来说也是一个不小的挑战。
数据分析师技能图谱
对于想为数据分析师、数据产品经理、商业智能分析师的朋友,一个大致的学习路线图为:Python基础 -> 数据库和SQL -> 数据分析和可视化 -> 业务实战。本专栏后续会更新一些Python及数据分析的入门教程。
大数据工程师
数据分析师直接面向一线业务,大数据工程师则在为数据分析提供数据基础、分析工具和软件平台,构建数据分析环境。原始的数据就像麦田里的麦子,需要经过层层工序,才能最终将其转化餐桌上的面包。大数据工程师打通了粮食收割、清理、制粉的整个流程,数据分析师和算法工程师就像是大厨,将面粉加工成面包。
OLAP架构示意图
一部分大数据工程师主要关注构建数据仓库,为公司提供OLAP(Online Analytical Processing,联机分析处理)服务:主要是在Hadoop生态上,构建大数据分析平台。包括提供HDFS、HBase、对象存储等数据存储服务;Hive和Spark批处理、Druid和Kylin预处理等数据分析工具;Spark Streaming、Flink等流式计算工具。这部分工程师关注基础设施。
构建高可用数据流涉及众多大数据中间件 来源:www.iguazio.com
还有一部分大数据工程师主要关注ETL(Extract、Tranform、Load):在收集到的基础数据上做提取和转化,生成更高层次的数据。这部分工程师关注业务相关的数据流。因为原始数据一般都是互相独立的,数据与数据之间关联性差,使用这些原始数据,几乎很难快速生成用户画像、广告收入等高层次数据分析结果,更不用提如何进行机器学习建模了。还是以今日头条内容推荐引擎为例,整个推荐引擎要接入不同类型的异构大数据源:每个用户在APP上的使用行为、公司购买的第三方数据(包括用户金融能力数据等)、自媒体产生的海量图文视频内容等等。数据工程师的工作包括:将用户在APP内的点击行为与点击的内容做关联,生成用户兴趣画像;将用户的APP内部数据与第三方数据关联,生成用户的消费能力画像等。
大数据工程师主要对收集过来的底层数据做处理,建立一系列数据管道,将来自不同数据源的原始数据经过层层转化,生成对数据分析和算法建模更有价值的中间数据,一般称这个流程为数据流。小公司限于人力有限,数据流的响应时间有可能是天级或小时级;大公司对数据流的响应要求极高,有可能是分钟级、秒级甚至亚秒级。很多朋友都发现,在某个平台刚刚搜索过某一个内容,下一分钟就能收到相似内容的推荐了,因为大数据工程师提供了这种秒级数据管道。
大数据工程师技能图谱
相比数据分析师,大数据工程师对从业人员的“编程开发”和“大数据”大数据要求比较高,而且数据量越大的公司,对技能要求越高。公司一般要求工程师在Java和Scala语言上,基于Hadoop生态系统,构建实时或批量的数据流。但公司与公司的差异很大,整个技术栈和工作内容与公司架构高度相关。某招聘APP上对大数据开发工程师的技能要求:Java、Scala、Linux、Hadoop、Kafka、Spark、Flink等。面试时一般会重点考察候选人对Google大数据三大论文的理解,即MapReduce、GFS和BigTable,分别对应了开源的Hadoop MapReduce、HDFS和HBase,这三篇论文也被称为驱动大数据的三驾马车。非信息学类专业背景的朋友,未经系统培训,很难转行到这个领域。在校学生应该积极参与校园项目或进入公司实习,以获取大数据开发的实战经验。
算法工程师
人工智能时代最火爆的概念当属机器学习了,机器学习工程师也被推上了风口,曾出现毕业后起薪三五十万,各大公司争相追捧的盛况。机器学习工程师又被称为算法工程师,主要职责是针对业务场景,建立机器学习模型,并将模型部署到生产系统,为公司赢得利润。算法工程师也是一个业务相关的岗位,一个合格的算法工程师必须要熟悉业务,明确工作所要优化的目标,才能有的放矢。不同的业务场景所使用的机器学习模型一般不同,常见的方向有推荐算法、自然语言处理、计算机视觉等。
算法工程师也需要在大数据工程师提供的数据基础上做进一步的数据开发,以构建自己的机器学习数据流。限于公司规模和技术架构,不同公司的算法工程师所做的具体工作可能也有很大差异,但算法工程师的核心工作有两点:
- 构建机器学习模型
- 将机器学习模型发布到生产系统
机器学习典型流程 来源:towardsdatascience.com
很多朋友看到网上的机器学习例子中,只需要调用一下model.fit()
函数就能训练一个模型,认为机器学习非常简单。实际上,一个机器学习流程很长,包括:模型选择、数据预处理、特征工程、样本生成、模型调优以及模型上线。整个工作对工程师的各项技能要求也非常高。
对于模型训练和线上发布,各公司差异也比较大。对于数据量较小的场景,可以直接用“Python Shell SQL”的方式构建机器学习数据流,使用scikit-learn或TensorFlow这样的框架。对于数据量大的场景,还是必须依赖大数据处理框架Spark或Flink,并使用分布式训练工具。大公司一般为适配自己的数据量和业务场景,都会有一套自己的模型训练和上线工具,并配有专人来开发和维护这套机器学习框架。因此,在一个大公司里,可能有一部分人负责模型训练,主要是模型调参和特征工程;一部分人负责模型上线,主要保障模型能够提供稳定的在线服务;一部分人负责机器学习框架开发;机器学习并不是万能的,所以还需要一部分人使用人工策略来解决机器算法无法解决的那部分问题。听起来好像所有人的职责都带机器学习几个字,实际做的事情区别很大,所侧重各有不同。
限于人力条件,有些公司的算法工程师需要做类似于大数据工程师的的ETL工作,从原始数据开始生成机器学习训练所需数据,同时要兼任数据分析师,自己分析数据。算法工程师名字听起来高大上,实际上绝大多数时间在做脏活累活。
典型推荐算法
算法工程师最核心技能还是机器学习和统计学,这关乎机器学习模型能够在何种程度上优化目标、带来多大的效果提升。例如一个推荐算法工程师有可能在面试中被问到的机器学习知识包括但不限于:
- GBDT的原理
- 如何进行特征选择
- 如何评估模型效果
- softmax函数的定义
- 如何将embedding应用到推荐系统中
综上,算法工程师直接面向业务,因此需要有丰富的领域知识,同时需要强大的统计学和机器学习基础,因为算法工程师要生成训练数据,因此要掌握必要的大数据分析和处理工具。负责模型上线的工程师还要有很强的编程开发能力。可见,算法工程师对各项技能的要求非常高。
算法工程师技能图谱
总结
数据相关的职位分为三类:数据分析师、大数据工程师和算法工程师。数据分析师需要丰富的领域知识和敏感的业务思维;大数据工程师为数据分析提供了数据基础和分析工具,需要掌握Spark和Flink等大数据技术,对编程和逻辑思维要求较高;算法工程师的技术要求最高,不仅要懂业务,会大数据,还要熟悉机器学习算法,并且能够将机器学习模型部署到生产环境。当然,因为优质算法工程师稀缺,他们的薪资水平最高。