数据科学工作者(Data Scientist)
的日常工作内容包括什么

众所周知,数据科学是这几年才火起来的概念,而应运而生的数据科学家(data
scientist)明显缺乏清晰的录取标准和工作内容。即使在2017年,数据科学家这个岗位的依然显得“既性感又暧昧”。

我随手搜索了几家国内国外不同领域的数据科学家招聘广告(国内:阿里巴巴,百度 |
海外: IBM,道明银行,Manulife保险),通过简单的归纳总结,我们不难发现其实岗位要求有很大的重叠部分:

学历要求:硕士以上学历,博士优先。统计学、计算机科学、数学等相关专业。

工作经历: 3年以上相关工作经验。

专业技能:
熟练掌握Hive\SQL\Hadoop,熟悉大规模数据挖掘、机器学习、自然语言处理(NLP)

分析语言: R, Python, SAS, JAVA

额外要求:
对数据敏感,具备良好的逻辑思维能力、沟通技巧、组织沟通能力、团队精神以及优秀的问题解决能力

有趣的是,这个广告适用于来大部分的数据科学家招聘,甚至不分行业不分地域。可能唯一的不同是,金融领域更强调擅长反欺诈和风控,而电商领域强调熟悉推荐系统,侧重点不同而已。其实这个现象的本质就是:数据科学家是一个不限行业,拥有广泛就业需求,高度"相似"却又"不同"的职位。因此结合我自己的经验,以及与国内国外这一行同事/朋友的交流心得,我想来谈谈我对数据科学家这个岗位的理解。

在个人理解的前提下,我想谈谈:1. 数据科学家为什么是“科学家”?2.
数据科学家的工作内容有什么? 3. 一些对于数据分析的感悟 4. 如何成为一个合格的数据科学家?

1. 什么是数据科学家?“科学家”是否言过其实?

数据科学家成为了一个跨学科职位。我将数据科学家定义为:
能够独立处理数据,进行复杂建模,从中攫取商业价值,并拥有良好沟通汇报能力的人。

关于数据科学家这个岗位怎么来的,说法不一。我自己的理解是随着机器学习和更多预测模型的发展,数据分析变得"大有可为"。为了区分拥有建模能力的高端人才和普通商业分析师/数据分析师(data
analyst),数据科学家这个职位自然就产生了。通过这个新岗位,行业可以与时俱进的吸收高端人才。在机器学习没有大行其道,也没有大数据支撑之前,这个岗位更贴近统计科学家(statistician),和研究科学家(research
scientist)也有一点点相似。

对于科学家,我们的一般的定义是在特定领域有深入研究的人,因此潜台词一般是“拥有博士学位的人”。而数据科学家的基本要求是硕士以上学历,甚至有时候本科学历也会被接受,而且似乎数据科学家的工作并不会在特定领域有深度。那么数据科学家是否言过其实了?

我的看法是:不,数据科学家的“广度"就是其"深度"。从另外一个角度来看,数据科学家的优势在于其优秀的跨领域技能,既可以抓取数据,也可以分析,进行建模,还能将有用的信息用抓人的眼球提供给决策层。能拥有这样解决问题能力的人,似乎并不愧对一声“科学家”。

而正因为数据分析更要求的广度而不是深度,所有现在只有纽约大学提供科学博士,而现在大部分从业的博士都是统计学/计算机/数学/物理背景。正是这个原因,这个行业对于数据科学家的要求是硕士及以上,而计算机或者统计的人更适合的原因是其在机器学习/统计学习方面的积累,其他所需技能可以以很低的代价赶上。相对应的,如果一个心理学博士想要从事这一行就会发现需要补充的技能太多,而因此不能适应这个岗位。

与研究科学家(research
scientist)相比,数据科学家更像是全能手但在特定领域深度不足。和普通分析师(analyst)相比,数据科学家应该有更强的建模和分析能力。在和数据工程师相对比时,数据科学家应该具备更强的汇报和沟通能力。

2. 数据科学家的日常工作内容包括什么?

我最近在和朋友闲聊时,惊讶的发现大家的工作内容都很相似。主要包括:

2.1. 分析数据和建模

此处的工作特指根据客户需求,从数据中攫取商业价值,而这个过程中一般都会涉及统计模型(statistical
learning)和机器学习模型(machine
learning)。如果在数据没有处理的情况下,我们的工作偶尔也涉及清理数据。有时候我们反而希望数据是未经过处理的,因为很多重要信息都在被处理中遗失了。一般的项目遵循以下几个流程:

确定商业痛点 - 明白要解决的问题是什么?

获得数据并进行清理,常见的数据预处理包括: a. 缺失值处理 b.特征变量转化
c.特征选择和维度变化(升维或者降维) d.
标准化/归一化/稀疏化。涉及文字的时候可能还要使用一些自然语言处理的手段,更多的相关方法可以看我最近的回答[1]。

模型选择与评估。这个过程常常是比较粗暴的,往往需要做多个模型进行评估对比。

提取商业价值,编写报告或意见书,并向相关负责人汇报。

2.2. 与团队其他成员的沟通

与纯粹的机器科学工程师不同,数据科学家的重要工作内容是交流沟通。如果无法了解清楚客户的需求是什么,可能白忙活一场。如果无法了解数据工程师在采集数据时的手段,我们使用的原始数据可能有统计学偏见。如果不能讲清楚如何才能有效的评估模型,负责在云端运行模型的工程师可能给出错误的答案。因此,数据科学家除了建模必须亲手来做以外,其他的环节可以“外包”给别人。在数据量特别大的时候,这个需求变得更为明显。

2.3. 开会/汇报/写报告

良好的沟通能力不仅仅是指和团队成员的沟通,向老板和客户的汇报也很考察数据科学家的能力。作为一个数据科学家,我们一般有几个原则:

汇报时避免“黑话”,避免给不同背景的老板和客户造成疑惑。

直击重点而不炫技。尽量简明扼要,不要过分介绍模型的内部构造,重心是得到的结论。

实事求是不夸大模型能力。很多机器学习模型其实都已经不同程度过拟合,不刻意避开交叉验证而选择“看似表现良好的”过拟合模型。

给出可以进一步优化和提高的方向,为项目提出新的方向。

在汇报时尽量用可视化来代替枯燥的文字。

以我去年做的一个项目为例:

我们公司的领导层希望了解为什么我们的员工离职率很高,如何才可以避免这一点。遵循我上面介绍的流程:

从人事部门收集数据,清楚的告诉他们我需要的数据时间跨度,变量。并和法务部门一起将数据中的隐私部分去除。

进行数据预处理,建模并评估。

从中挖掘商业价值,如 a.
为什么员工会离职(将变量重要性进行排序,用决策树可视化分类结果) b. 什么样的员工值得留住?

制作报告,并像领导层汇报我的发现,过程设计可视化等。

和其他部门的同事将这个项目包装成一个案例,卖给我们的其他客户。

这个基本包括了数据分析项目的基本流程,对于这个项目的一些有趣发现可以看我的另一个回答[2]。但不难看出,整个流程中有大量的沟通过程,甚至还包括销售的部分,这在一次体现了数据科学家的工作广度。

3. 对于数据科学家的一些感悟

3.1. 不要沉迷于自己的“职位”

数据科学家是个听起来非常“性感的”的岗位,别忘了我们小时候的梦想都是成为一个科学家。但抛开这些虚的东西,我们必须认清这个岗位的核心就是将很多技能封装到一个人身上。而我们工作的正常开展少不了其他同事的支持和帮助,所以千万不要看不起别人的工作内容。没有数据工程师进行数据采集,没有分析师帮我们美化图表和提出质疑,我们无法得到最好的结果。

数据分析项目一直都是众人拾柴火焰高,没有人可以当超人。所以在得到这样“高薪性感”的职位后,我们更应该把心装回肚子里,脚踏实地。

3.2. 不要盲目迷信算法

承接上一点,虽然我们的工作重点之一是建模,但请不要神话算法,也不要挟算法以令同事,觉得只有自己做的部分才有价值。

简单来说,可以通过没有免费的午餐定理(No Free Lunch
Theorem -> NFL
Theorem)来解释。NFL由Wolpert在1996年提出,其应用领域原本为经济学。和那句家喻户晓的"天下没有免费的午餐"有所不同,
NFL讲的是优化模型的评估问题。

在机器学习领域,NFL告诉机器学习从业者:"假设所有数据的分布可能性相等,当我们用任一分类做法来预测未观测到的新数据时,对于误分的预期是相同的。"
简而言之,NFL的定律指明,如果我们对要解决的问题一无所知且并假设其分布完全随机且平等,那么任何算法的预期性能都是相似的。这个定理对于“盲目的算法崇拜”有毁灭性的打击。例如,现在很多人沉迷“深度学习”不可自拔,那是不是深度学习就比其他任何算法都要好?在任何时候表现都更好呢?未必,我们必须要加深对于问题的理解,不能盲目的说某一个算法可以包打天下。

周志华老师在《机器学习》一书中也简明扼要的总结:“NFL定理最重要的寓意,是让我们清楚的认识到,脱离具体问题,空泛的谈‘什么学习算法更好’毫无意义。”

在这个深度学习就是一切的时代,作为数据科学家,我们要有自己的独立判断。

3.3. 重视数据可视化和模型可解释度

数据科学家作为一个更偏商业应用的岗位,而不是研究岗位,需要重视数据可视化的重要性以及模型可解释度的意义。原因很简单,如果客户看不懂我们做的是什么,或者客户不相信我们做的东西的可靠性,你即使有再酷炫的模型,也只是浪费时间。在大部分中小型的数据分析项目中,用深度学习的机会是很有限的。原因包括但不限于:

数据量要求很大

调参成本太高且奇淫巧技太多

模型可视化即解释度低

而比较常用的机器学习模型是: 广义线性模型(generalized
linear models),如最普通的逻辑回归;还有以决策树为基底的模型,如随机森林和Gradient Boosting
Tree等。这两种模型都有很好的可解释性,而且都可以得到变量重要性系数。以Sklearn官方文档中的简单的决策树可视化为例:

Scientist) 的日常工作内容包括什么">

我们可以清楚的看到一个数据点如何从上至下被分到了不同的类别当中。作为一个需要和不同背景的人沟通的职业,分类器可视化是一个很好沟通基础。

而可视化的好处远不止于此,在数据建模初期的可视化可以避免我们走很多弯路。以ISL[3]中附带的线性回归为例,我们一眼就可以看出最右边的图不像左边的图中的数据可以通过简单的线性回归进行拟合,可以直接跳过线性回归来节省时间。

Scientist) 的日常工作内容包括什么">

3.4. 避免统计学偏见 & 给出严谨的结论

承接上一点,对于一个问题我们通常无法得到所有的相关变量,这导致了大部分数据分析的结果其实或多或少都有偏见。讲个经典的统计学笑话,夏天溺水身亡的人数相比冬天大幅度上升,而夏天吃冰激凌的人数也上升,所以得到结论:
“吃冰激凌”会导致“溺水”。这种数据会说谎的本质就在于我们无法获得所有的隐变量,如夏天去海边的人数上升,游泳的人数上升等。

而在数据分析的项目中,大部分谬误无法像上面这个例子一眼就可以看穿,我们常常会获得很多看起来很可信但实则大误的结论。作为一个数据科学家,请在分析时小心在小心,谨慎再谨慎,因为我们的分析结果往往会直接影响到公司或者客户的收益。假设你做人事分析的项目,错误的结论可能导致优秀的员工被解雇。

所以万望大家不要总想搞个大新闻,对于没有足够显著性的结论请再三检查,不要言过其实。这是我们的责任,也是义务。

4. 如何成为一个合格的数据科学家?

假设你已经有了基本的从业资格:即有相关领域的学位,掌握了数据分析和建模的基础能力,也懂得至少一门的分析语言(R或Python)和基本的数据库知识。下面的这些小建议可以帮助你在这条路上走的更远。

4.1. 扎实的基本功

像我在另一个机器学习面试回答[4]中提到过的,保证对基本知识的了解(有基本的广度)是对自己工作的基本尊重。什么程度就算基本了解呢?以数据分析为例,我的感受是:

对基本的数据处理方法有所了解

对基本的分类器模型有所了解并有所使用(调包),大概知道什么情况使用什么算法较好

对基本的评估方法有所掌握,知道常见评估方法的优劣势

有基本的编程能力,能够独立的完成简单的数据分析项目

有基本的数据挖掘能力,可以对模型进行调参并归纳发现

至于其他软实力,暂时按下不表。

4.2. 从实践中培养分析能力

屠龙之技相信大家都有,我常常听别人说他已经刷完了X门在线课,熟读了X本经典书籍,甚至现代、优化、概率统计都又学了一遍,但为什么Kaggle上还是排名靠后或者工作中缺乏方向?

简单来说,上面提到的这些储备,甚至包括Kaggle经验,都属于屠龙之技。数据分析领域的陷阱随处可见,远不是几本书几篇论文就能讲得清楚。最好的方法只有从工作中实践,跟着你的师傅学习怎么分解项目,怎么提取价值。

我记忆很深的一个例子是:有一次我和我的老板为某国家铸币中心制定最优的纪念币定价方案,来最大化收益。但根据客户给我们的例子,我们的优化模型效果很差,误差极大。我的老板给了我几个建议:1.
把回归问题转为分类问题,牺牲一部分精度 2. 舍弃掉一部分密度很低的数据,对于高密度区域根据密度重建模型 3.
如果不行,对于高密度区域用有限混合模型(Finite Mixture
Model)再做一次。采纳了老板的建议,最终我们对于百分之75%的纪念币做到了最佳的优化结果,为客户带来了价值。客户对于剩下25%无法预测表示理解,因为他们无法提供更多的市场数据。

那个时候的我总觉得不能舍弃数据,但我的老板用行动告诉我客户最需要的是获得价值,而不是完美的模型。而这种感悟,我们只有在实际工作中才能获得。所以当你作为数据科学家开始工作时,请多想想如何产生价值,而不是一味地炫屠龙之技。

4.3. 平衡技术与沟通能力

数据科学家的重要工作内容就是汇报和写报告,因而良好的"讲故事"(storytelling)能力非常重要。在学习的过程中,请不要把全部的重心放在技术能力上。技术能力可以保证你有东西可以说,但讲故事这种软实力可以保证你的辛苦没有白费,你的能力获得大家的认可。同时,这种沟通能力也可以让你在社交中更加如鱼得水,一改理工科给人留下的沉闷的印象。轻沟通,重技术,是一种工程师思维,但这并不适用于数据科学家。

最后想不恰当的引用一句西方谚语:“欲戴王冠,必承其重。”在这个数据为王的时代里面,成为优秀的数据科学家不仅仅代表着高薪,还代表着我们对于这个时代的贡献与价值。然而道路阻且长,还有太多太多需要我们学习和完善的方向。

数据科学工作者(Data Scientist) 的日常工作内容包括什么的更多相关文章

  1. 数据分析师(Data Analyst),数据工程师(Data Engineer),数据科学家(Data Scientist)的区别

    数据分析师(Data Analyst):负责从数据中提取出有用的信息,以帮助公司形成业务决策.工作内容包括:对数据进行提取,清洗,分析(用描述统计量,趋势分析,多维度分析,假设检验等统计常用方法对数据 ...

  2. (数据科学学习手札42)folium进阶内容介绍

    一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...

  3. DBA日常工作内容和职责

    1.统计数据库总容量 按表空间分别统计: 总容量(单位为M): 2.计算用户下所有对象大小 3计算USERS表空间的大小 4计算该USERS表空间对象大小 ---------------------- ...

  4. 数据科学(data science)概览

    0. 硬件平台设计 一种分层的体系结构: 自下到上依次是: 硬件层 分布式系统层 分布式管理层 分布式处理层 应用层: 1. 总论

  5. (数据科学学习手札43)Plotly基础内容介绍

    一.简介 Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图,本文就将以jupyter notebook ...

  6. (数据科学学习手札41)folium基础内容介绍

    一.简介 folium是js上著名的地理信息可视化库leaflet.js为Python提供的接口,通过它,我们可以通过在Python端编写代码操纵数据,来调用leaflet的相关功能,基于内建的osm ...

  7. 现在很火的数据科学到底是什么?你对做DATA SCIENTIST感兴趣吗?

    转自– Warald (Email: iamxiaoning@gmail.com) 博客: http://www.1point3acres.com,微博:http://www.weibo.com/wa ...

  8. 七个用于数据科学(data science)的命令行工具

    七个用于数据科学(data science)的命令行工具 数据科学是OSEMN(和 awesome 相同发音),它包括获取(Obtaining).整理(Scrubbing).探索(Exploring) ...

  9. 敏捷数据科学:用Hadoop创建数据分析应用

    敏捷数据科学:用Hadoop创建数据分析应用(数据分析最佳实践入门敏捷大数据首作分步骤|全流程演示思路.工具与方法) [美]Russell Jurney(拉塞尔·朱尔尼) 著   冯文中 朱洪波 译 ...

随机推荐

  1. 前端每日实战:80# 视频演示如何用纯 CSS 创作一个自行车车轮

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/XBXEPK 可交互视频 此视频是可 ...

  2. WebX.0:Web1.0

    ylbtech-WebX.0:Web1.0 web1.0时代是一个群雄并起,逐鹿网络的时代,虽然各个网站采用的手段和方法不同,但第一代互联网有诸多共同的特征,表现在技术创新主导模式.基于点击流量的盈利 ...

  3. linux命令行光标移动技巧

    看一个真正的专家操作命令行绝对是一种很好的体验-光标在单词之间来回穿梭,命令行不同的滚动.在这里强烈建立适应GUI节目的开发者尝试一下在提示符下面工作.但是事情也不是那么简单,还是需要知道“如何去做” ...

  4. [转载]真正的inotify+rsync实时同步 彻底告别同步慢

    原文链接http://www.ttlsa.com/web/let-infotify-rsync-fast/ 背景我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题.但当 ...

  5. 31. Git与Github

    Github介绍 GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub. GitHub于2008年4月10日正式上线,除了Git代码仓库 ...

  6. 【C++第一个Demo】---控制台RPG游戏2【通用宏、背包类】

    [通用 ]--一些游戏中常用的宏.函数和枚举 #ifndef _MARCO_H_ #define _MARCO_H_ //------------------------常用系统库---------- ...

  7. HBase 入门之数据刷写(Memstore Flush)详细说明

    接触过 HBase 的同学应该对 HBase 写数据的过程比较熟悉(不熟悉也没关系).HBase 写数据(比如 put.delete)的时候,都是写 WAL(假设 WAL 没有被关闭) ,然后将数据写 ...

  8. cesium默认全屏按钮自定义

    cesium默认全屏按钮自定义 1  隐藏默认的svg 2  修改它默认的按钮边框,背景 3   修改它点击时的样式 代码如下: .cesium-viewer-fullscreenContainer ...

  9. 关于 AfxGetStaticModuleState ()

    写MFC的DLL的时候,总会在自动生成的代码框架里看到提示,需要在每一个输出的函数开始添加上AFX_MANAGE_STATE (AfxGetStaticModuleState()).一直不明白这样做的 ...

  10. 【题解】sweet

    题目描述 为了防止糖果被小猫偷吃,John把他的糖果放在了很多的高台上,一个高台可以认为是一段平行于X轴的线段,并且高台的y坐标都是大于0的,每个高台都有左端点和高台的长度,每个高台都有糖果.所有的高 ...