查看原文
其他

论一枚数据科学家的自我修养

2017-11-20 林荟 AI科技大本营


作者 | 林荟

责编 | 何永灿



在回答这个问题之前,希望你先想想另外一个问题:为什么要成为数据科学家?当然,如果你是为了10万美元的年薪也无可厚非,但是我衷心希望你能将这个职业和自己的价值感挂钩。因为成为数据科学家的路途会很辛苦,但如果你将其看成是实现个人价值的一种方式,那么追寻目标才能带来长久的成就感,在这个过程中会感到快乐并且动力十足。




数据科学家技能包



要回答“如何成为……”这样的问题,首先当然需要知道想要成为的对象是个什么样子。图1是一个数据科学家的技能表。


图1 数据科学家的技能


首先编程能力是数据科学家需要的基本技能。数据读取、整合、建模分析和可视化的整个环节都需要用到这些工具。在业界环境中,整个数据链大概分为5块:


  • 云端数据存储系统。比如亚马逊的云服务AWS,大数据可以用分布式存储在S3中。AWS更像是一个生态系统,里面有数据库,也可以在上面运行一些代码,比如实时从社交网站上爬取数据储存在云端数据库中。最近亚马逊还在云端提供了一个类似于SQL客户端的工具,叫做Athena,方便你直接在AWS内写SQL代码从S3中读取数据。


  • 安全门。读写数据都需要经过这道安全门,这个部分主要是由公司的IT部门建立。安全门有3种限制访问权限的方式:

    • IP地址:只接受从特定IP地址的访问

    • 职能:比如只有头衔是数据科学家和数据工程师的人有权限

    • 用户名密码: 公司常常会同时使用上面3种方法,也就是有特定职能,从特定IP地址,通过用户名和密码访问。数据工程师会训练数据科学家穿越这重重安全门。这里对数据科学家的计算机要求并不高,只需要知道一些基本的Linux就可以,苦活累活都让工程师们包揽了。


  • SQL客户端。数据科学家需要通过SQL从数据库中读取相应数据。根据数据库的不同,使用SQL的类型和语法也略有不同,但大体上非常相似。掌握基本的数据库读取操作是非常必要的。


  • 数据分析。现在使用最广的数据分析语言是R和Python,熟练使用至少其中一门语言几乎成为数据科学家的标配。只会SAS行不?不行。当然,这些都只是工具,工具是解决问题的手段,而非目的。你必须要有一个能用来进行数据分析的工具,偏好因人而异,但选择工具的时候最好考虑工具的灵活和可扩展性。比如说,新的方法是不是能够用该工具实现?该工具是不是能够和其他工具结合实现新功能(可重复报告、交互可视化,将结果转化成数据科学产品App等)?该工具是不是容易整合到应用系统中大规模的使用(比如电商的推荐算法、搜索的广告优化、精准农业中的化肥量推荐等)?


  • 结果报告。这里会用到基于D3.js的交互可视化,Rmarkdown自动化报告以及Shiny应用。


图2是数据流程构架图。

图2 数据流程构架


另外一个重要的技能是分析建模。这个模块可以进一步细分成下面几个:


  • 数据科学家应该具备基本的概率统计知识,能够熟练进行t检验,开方检验,拟合优度检验,方差分析。能够清楚地解释Spearman秩相关和Pearson相关之间的区别。熟悉抽样、概率分布、实验设计相关概念。


  • 了解贝叶斯统计(很快就能在白板上写下贝叶斯定理)。不是所有的应用数据科学领域都需要用到贝叶斯,即使你所处的行业用得很少,了解贝叶斯的基本概念也是很有必要的。使用“贝叶斯”这个词的方式有很多。但其主要代表了一种解释概率的特别方式。用流行的术语表达,贝叶斯推断不外乎计算在某假设下事情可能发生的方式的数目。事情发生方式多的假设成立的可能性更高。一旦我们定义了假设,贝叶斯推断强制施行一种通过已经观测到的信息进行纯逻辑的推理过程。频率法要求所有概率的定义都需要和可计数的事件以及它们在大样本中出现的频率联系起来。这使得频率学的不确定性依赖于想象的数据抽样的前提之上——如果我们多次重复测量,将会收集到一系列呈现某种模式的取值。这也意味着参数和模型不可能有概率分布,只有测量才有概率分布。这些测量的分布称为抽样分布。这些所谓的抽样只是假设,在很多情况下,这个假设很不合理。而贝叶斯方法将“随机性”视为信息的特质,这更符合我们感知的世界运转模式。所以,在很多应用场景中,贝叶斯也更加合适。


  • 机器学习相关技能。知道什么是有监督学习,什么是无监督学习。知道重要的聚类、判别和回归方法。知道基于罚函数的模型,关联法则分析。常用的黑箱模型:随机森林、自适性助推、神经网络模型。如果从事心理相关的应用的话(如消费者认知调查),还需要知道基本的潜变量模型,如探索性因子分析、验证性因子分析、结构方程模型。在应用过程中还需要加强对模型中误差的来源分类的理解,知道相应误差的应对方法。当前存在的机器模型太多,理解模型误差可以帮助你有效地通过尝试少量模型找到足够好的那个。


除了技术能力以外,还需要其他一些非技术的能力。这些包括将实际问题转化成数据问题的能力,这一过程需要交流,也就要求良好的交流沟通能力。关注细节,分析是一个需要细心和耐心的职业。还有就是展示结果的能力,如何让没有分析背景的客户理解模型的结果,并且最终在实践中应用模型的结论。

这个单子还可以一直列下去。看起来是不是不只一点吓人?其实这个技能单是动态的,你一开始不必具有上面列出的所有技能,但在工作过程中,需要不断的学习成长。一个优秀的数据科学家不是通过数据找到标准答案的人,而是那个接受和适应这个充满不确定性的世界,给出有用方案的人。一个成熟的数据科学家面对分析项目时会看到多种可能性和多种分析方法,给出结果后依旧时刻关注这个结果,不停地保持小幅度频繁更新。再次强调自学能力和成为一个终生学习者是优秀的数据科学家的必要条件。




如何获取相关技能



现在你对数据科学家需要具备的技能应该有个大致的概念了。接下来的问题是如何获取这些技能。这个问题的答案部分取决于你的专业背景。当前数据科学家的背景其实很杂,这里主要着眼于数学、统计、计算机或其它定量分析学科(电子工程、运筹学等)本科以上学历的情况。数学统计背景的学生,需要加强计算机方面能力的培养。而计算机背景的学生需要更多的了解统计理论。如果是其他定量分析学科,可能需要同时加强这两者。


其他专业的学生成为数据科学家有两种情况:


  • 从事和自己专业相关行业公司的数据分析。比如在一些精准农业应用的公司,会常常看到数据科学家是生态学博士,或者土壤学博士。其实这些人不能算是广义上的数据科学家。因为他们处理的问题局限于非常特定的领域,对生态和土壤的了解的要求高于对数据分析的要求。


  • 虽然是其他专业,但是本身有着很强的计算机技能,比如物理学专业的学生会成为数据科学家或者量化交易员,这因为他们通常具有很好的编程能力。


关于数据科学家的学位背景,根据2017年的统计数据,美国的数据科学家41%有博士学位,49%有硕士学位,只有10%是本科。研究生博士期间的课题最好偏向机器学习、数据挖掘或预测模型。其次需要的是数据库操作技能。在工作中通常需要用SQL从数据库读取数据。对于统计或者数学专业的学生,在校期间可能不需要使用SQL,因此不太熟悉。这没有关系,我也是工作以后才开始使用SQL的。但你要确保自己至少精通一种程序语言,之后遇到需要用到的新语言可以迅速学习。现在有大量的MOOC课程,以及一些在线的数据科学视频,都是提升自己的很好方法。


有的人问我怎么选择学习课程。通常情况下我会看讲课的老师,如果是想要彻底清晰地了解某种技术,那就去搜下写这个领域相关书籍的人,如果他们有开课,可以选这些课;或者那些在数据科学行业名字如雷贯耳的,比如吴恩达这样的。选这样的人讲的课,才能听得明白,因为这些人对相关的专业知识足够了解。




常见误区



在数据科学的应用中有哪些常见误区?


  • 会用函数跑模型就可以了。


会开车的只是司机,要当汽车工程师,仅靠会开车是不行的。这点放在数据科学领域也是一样。不需要你背下模型背后的所有数学公式,但是至少需要学过一遍,让你可以翻着书解释模型机理。


  • 模型精确度越高越好。


在实际应用中需要同时考虑收益和成本。如果模型精确度是90%,但是提高到95%需要复杂得多的模型,因此需要大量的计算设备投入,同时带来的边际收益很小的话,满足于精确度小的模型就好了。模型选择和评估可能是数据分析流程中最难的环节。


  • 技术过硬就是尚方宝剑。


接受这个现实,人常常是不理性的,我们的行为和对周遭的态度受感情的影响。你永远看不到一只单纯的狗,你看到的是一只可爱或者不可爱的狗,我们总是会对所有的事情加上自己的主观判断。当然,你公司的同事,领导看待你的方式也受到主观的影响。很遗憾,这个主观的感受通常更多的来自于你作为人的部分,而不是机器的部分。你觉得自己技术好是一件事情,领导觉得你技术好是另一件事情,领导觉得你的技术是有用的那又是新的一件事情了。这点,美国中国貌似没差。所以“做技术”不等于“情商低点没关系”。


  • 技术不断更新,让人难以招架。不明觉厉,被泡沫裹挟着失去方向。


我理解,这种感觉很不好受。有的时候我感觉自己永远都是菜鸟,但现在我才明白,这才是当前世界的真实状况。不断升级将会是一种常态,这不仅仅是数据科学,你必须这么做,因为所有的东西都在升级,就像军备竞赛一样,升级已经成为事物本身的存在方式。无论你使用一样工具的时间有多长,升级后你又会变成一个菜鸟。所以做菜鸟是可以的,但是不明觉厉,随意跟风是不允许的。面对不懂的技术,要么就说不懂,要么就去学。其实你真正鼓起勇气,开始认真去学习这么技术的时候,会发现其实没有那么神秘。当然,马上又会有新的神秘的东西出现,这个过程又会重复。但你就是在这样循环反复中成长的,产品是这样,人也是这样。




数据科学领域现状



我们从数据上看看数据科学的现状吧。从最大的职业社交网站领英(LinkedIn)的数据看来,数据科学家职位的年薪在7.5万~ 17万美元之间,中位数是11.3万美元。 


其中雇佣数据科学家的公司主要集中在微软、IBM、Fackbook、亚马逊、Google这些计算机互联网公司,图3为前10名雇佣数据科学家最多的公司。


图3 前10名雇佣数据科学家最多的公司


数据科学家所处的行业也集中在科技或者研究性组织,图4是排名前10的行业。


图4 前10名数据科学家集中的行业


不同公司的数据科学团队架构不一样。主要有如下2种:


  • 独立式。独立的数据科学部门,会有一个数据科学总监这样的领导角色领导。这通常在研究所或者公司科研型的部门。对于数据科学家而言,在这样部门的优点是能够和很多其他数据科学家有技术上的交流,也有明确的职业轨道。缺点是,很难脱颖而出,需要和很多其他科学家竞争一些资源(比如培训会议的机会)。


  • 嵌入式。数据科学家各自嵌入到不同的职能部门中。常见的是市场部的数据科学家。领导者就是传统的市场总监。在这样的团队优势在于直接和公司高层接触,影响商业决策。因为独特很容易脱颖而出获取很多行业内培训和会议的机会,而且市场部是核心部门,如果你想在这个公司发展,这是很好的地方。缺点就是,无法和其他数据科学家交流,很多东西需要自己决策,周围人只能选择相信或者不相信你,但不能给出特别的帮助。久了会有在专业上落后的危险,所以需要充分利用在市场部的培训会议资源,积极参与数据科学家社区。最大的缺点是没有清晰的职业轨迹,因为在市场内部的分析团队不会太大。如果你的职业目标是最后管理一个大团队或者职能的话,这可能不能满足你的目标。但其职位本身从初级到高级的跨度可以很大。


数据科学家这个职位还比较新,所以从团队建设和职业轨迹上都还在发展,具有很好的前景。希望你能成为一个不断思考,终生学习的数据科学家!


附录:R代码


下面是文章中两幅图的R代码,感兴趣的读可以运行下面的代码:

dat<-read.delim("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/DS.txt")


library(ggplot2)

library(dplyr)


# 前10的公司


df <- dat%>%

  select(Companies, ComCt)


colnames(df) <- c("Company", "Counts")

df$Company <- factor(df$Company, levels = df$Company)

ggplot(df, aes(x=Company, y = Counts, fill=Company))+

  geom_bar(stat="identity")+theme_minimal()  +

  coord_flip()+ theme(legend.position="none")


# 前10的行业


df <- dat%>%

  select(Industries, ComCt)


colnames(df) <- c("Industry", "Counts")

df$Industry <- factor(df$Industry, levels = df$Industry)

ggplot(df, aes(x=Industry, y = Counts, fill=Industry))+

  geom_bar(stat="identity")+theme_minimal()  +

  coord_flip() + theme(legend.position="none")



作者简介:林荟,美国杜邦公司商业数据科学家,美国爱荷华州立大学博士。《套路!机器学习:北美数据科学家的私房课》作者。2017年1月至今主持美国统计协会市场营销在线数据科学讲座。个人网站:http://linhui.org/。 

责编:何永灿 

本文为《程序员》原创文章,未经允许不得转载。



本文来自《程序员》杂志“AI工程师职业指南”一期,由《程序员》和GitChat联合推出,你可通过以下方式获得该系列文章


方式一,扫描⤵️二维码 下载程序员(含iOS、Android及印刷版)客户端订阅


方式二,扫描⤵️二维码 在Gitchat达人课上订阅 


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存