译|在Stack Overflow做数据科学家的一年

译|在Stack Overflow做数据科学家的一年_第1张图片
640-21.jpeg

关于作者:

David Robinson是Stack Overflow的数据科学家,用Python和R工作。

关于译者:

孙磊,传统外贸家居行业产品开发10年+,熟悉欧美市场。兴趣广泛,喜欢阅读和音乐,对世界仍抱有小小的好奇心。数据思维学习ing。


2013年1月的某天,我发现自己在互联网上浪费时间。

这看起来不太好:我和任何读两年半的博士一样忙。我得完成一些酵母遗传学研究的报告,我与纽约大学合作者的论文进度已经落后了几个月,更别提那些更久前剩下的本科研究了。我也忙于我的个人生活 — 我已从以色列回来,刚开始学习巴西柔术和慢跑。

但是这天,我正在浪费时间回答一个陌生人关于贝塔分布beta distribution的问题 ,这个问题是在Cross Validated网站上的,这个网站是开发者问答网站Stack Overflow的统计数据姐妹网站。那时我作为Stack Overflow上一个活跃的回答者已经有大约一年了,而在Cross Validated网上,我还不是这么活跃的回答者。这当然是我最喜欢浪费时间的方式。

当时我有一个有趣的想法,用棒球统计数据来解释贝塔分布beta distribution — 这个答案后来演变成了“了解贝塔分布”这篇帖子 和“了解贝塔二项回归”这个系列 。

译|在Stack Overflow做数据科学家的一年_第2张图片
640-22.jpeg

在我读博期间,我做了很多我引以为豪的事,但我做了更多没什么印象的事或不重要的事。就对我事业的影响而言,这个答案是我感到最快乐的工作成果。

在Stack Overflow的一年

上周四(2016年6月16日)是我作为数据科学家在Stack Overflow入职一周年的日子。

在我入职Stack Overflow前的一个月,我已完成了博士答辩,去工业界工作对我来说是一个相当大的变化。因为仅仅几个月前,我还一直在计划继续进行学术研究,专攻计算生物学领域。我已经开始申请博士后奖学金,甚至没有考虑过就业。

究竟是什么改变了我的想法?

这始于2015年1月,Jason Punyon发现了我关于贝塔分布的帖子(那时帖子已经发布两年了)。

以下来自Twitter:

我喜欢在@StackExchange工作的理由 #14785: 我们有这样棒的答案:http://t.co/NkgvYHMEAy 谢谢 @drob
— JSONP (@JasonPunyon) 2015.1.7
@drob P.S 我知道我们这并不如完成博士学位那么令人兴奋,但是如果你想来Stack面试那就来吧:)
— JSONP (@JasonPunyon) 2015.1.7

当时我相当确定要进入学术界,但我不想放弃看看Stack Exchange办公室的机会,而且也想见见这款产品背后的人。基本上,在我去了他们办公室一次后就改变了去学术界发展的打算。几周后,面试结束我拿到了Stack Overflow数据科学家的职位并当即签下合同。

我一直在做的事情

人们知道网页开发人员做什么,但数据科学家是做什么的? ( 我不是唯一被问过这个问题的人 )。以下这些内容并不是我手上所有的项目,但能让人们对数据科学家的日常工作有点概念。

设计、开发和测试机器学习功能

关于机器学习,最突出的例子是在我们的产品Providence中; 我们这个系统能匹配用户和他们感兴趣的职位。(例如,如果你在Stack Overflow主要访问Python和Javascript的问题,你最终会看到Python网页开发职位的广告)。我与数据团队的工程师们(Kevin Montrose,Jason Punyon和Nick Larsen)一起设计改进和实现这些机器学习的算法。(这里有更多关于系统架构的内容,在我入职之前建的)。举个例子,我们努力在两种算法间取得平衡:是地理位置靠近用户还是在技术方面完全匹配,并确保用户获得的是多样化的职位,而不是反复看到相同的职位。

很多过程涉及到设计和分析A / B测试,特别是关于改变我们的目标算法,广告设计和其他因素,以提高点击率。这个过程在统计学上比我预期的更有趣,在一些案例中,让我找到了过去分析生物实验方法的新用途,而在其他案例中则鼓励我学习新的统计工具。事实上,很多我的系列文章(将贝叶斯Bayesian方法应用于棒球击球统计),就是我用来分析互联网广告点击率的方法的简单版本。

学习很酷的东西

我不再是学术导向的科学家了,但那并不意味着我失去了从数据中提取结论的兴趣。 Stack Overflow有一个关于软件开发生态系统的鸟瞰图 — 数百万的问题,用户和日访问者。我们可以从所有这些数据中学到什么?

首先,通过用户标签的运用,我们可以发现技术的自然集群:1

译|在Stack Overflow做数据科学家的一年_第3张图片
640-23.jpeg

这使我们将框架和包自动分类到它们所属的更高级的语言和集群中,而不需要手动注释。

但它确实仅向我们展示了标签如何共同出现在特定的编程问题中,而不是如何在同一个项目中用到(例如,C#和SQL Server可能并不总是出现在同一个问题中,但他们通常被用作相同技术栈的一部分)。为此,我可能查看另一个数据源-Stack Overflow的职业资料,查看哪些技术被相同的开发人员使用:

译|在Stack Overflow做数据科学家的一年_第4张图片
640-24.jpeg

我喜欢这种标签的划分标准,不只是严格的类别而是“技术生态系统”。这种理解不限于编程技术。Stack Exchange网络包含种类繁多的问答网站。通过查看哪些社区有相同的活跃用户,我们可以类似地创建一个网络关于我们的网站是如何相互关联的:

译|在Stack Overflow做数据科学家的一年_第5张图片
640-25.jpeg

(我所做的项目并不都是网络相关的,只是举些一看就令人感兴趣的例子)。

所以,为什么花时间做这些分析?

有时,他们可以能对产品功能有直接贡献。例如,理解定量的技术集群可以帮助我们改进开发者类型的模型,驱动普罗维登斯(Providence)的目标。其他从商业前景来看可能是很有价值的洞察。我已经与销售,营销和社区团队一起工作过几次,解释他们的数据并帮助他们决策。

本质上来说,我对能学到什么和可视化这种信息是非常有兴趣的; 这也是让这个工作变有趣的事情之一。在这里的第二年我有个计划是公开分享更多的这种分析。我的前一篇帖子分析了哪个是最两极分化的编程语言,我期待着能尽快分享更多这样的帖子。

开发数据科学架构(公司内部R包)

我喜欢使用R语言来学习数据中有趣的东西,但我的长期目标是让我们任何工程师都能轻松使用它。入职时,我是公司里第一个使用R的人,但在一年中R已经流行开了,因为R语言真的是一个非常好的方法能直接参与数据且能回答有趣的问题。(当才华横溢的软件工程师们打开Excel去做一张线图时,我真的很受伤)。

朝着这个目标,我一直专注于建立可靠的工具和框架,让人们可以应用于各种问题,而不是“一次性”分析脚本。(在StitchFix上Jeff Magnusson有一个非常棒的帖子关于通用的挑战性)。我的途径是建立公司内部R包,类似于AirBnb的策略(虽然我们的数据团队比他们年轻,规模也比他们小)。这些内部包可以查询数据库和解析我们内部的API,并且用户也不知道有各种安全和基础结构问题的存在。

这也涉及到构建R教程和编写“入职”材料。举个例子,我公开了一个教程,介绍了内部sqlstackr包如何查询我们的数据库.2 同时这又作为一个通用的dplyr/tidyr/ggplot2的介绍,我发现这比给开发人员一个通用的dplyr教程有用得多 (因为这是我同事们确定感兴趣的数据!)我希望随着数据团队的成长,和学习R语言的工程师的增多,这个包和指南的生态系统可以成长为一个真正的内部数据科学平台。

学术和行业

Twitter上有一个流行的数据科学家的定义:

数据科学家(名词):指那些统计学比任何软件工程师更好且软件工程比任何统计学家更好的人。
— (((Josh Wills))) (@josh_wills) 2012.5.3

这个描述整体上是褒义的,但要注意的是(反之亦然):读研时实验室里我没有其他人懂统计学,而在新工作中,我没有同事们懂软件。那是怎么反转的呢?

比别人更懂统计学

有很多“程序员需要学习统计学”这样吸引眼球的文章。事实上比起同事我有更多的统计学经验和训练(我也是第一个有博士头衔的,无论哪个专题)。但在我的工作中,开发人员好像并没有感到这是一个障碍。

一方面我注意到在很多重要领域这个差距正在靠近。我碰到的解释A / B测试的开发人员已经意识到p-hacking和多假设测试的危险性,以及效应大小和置信区间的重要性。特别是数据团队已经努力推广好的做法,更多是习惯的差距,是更接近于“使用泊松Poisson而不是线性回归”或“知道什么时候使用对数标度”。

更重要的是,我发现开发人员一直愿意倾听和学习我提出的统计学问题,到目前为止我感觉我已经建立了相互信任的工作关系了。就这个案例,我的经验真的没有反映“程序员需要学习统计”这个观点,这篇文章将开发者描画为过度自信的狂热分子。关于这方面,我们可能是一个不寻常的功能性工程部门(我听说过其他公司更糟糕的故事!),但也有可能软件开发行业的态度在过去六年中发生了变化,因为统计学的重要性更加广为人知了。

我想念学校的一点是我能从别人那里学习统计学。我周围都是比我更学识更渊博的人,在实验室的会议和研讨会上,我接触到了很多有用的统计理论和方法。如果我犯了个错误我也能指望别人指出来。但大部分我目前的统计学教育必须自我驱动的,而且我需要非常谨慎的对待我的工作:如果在报告中使用了不合适的统计假设,不太可能有其他人会指出来。

没有别人懂软件工程

我长期关心编程实践,一直用GitHub并贡献了开源Python和R项目多年,但在一家科技公司工作确实代表了一些转变。我是一个Mac死忠,在过去几年中完全用R工作。Stack Overflow是建立在微软的技术上的,特别是C#、ASP.NET和SQL Server,在我加入公司前,没有人用R。尽管在编程语言的战争中我比较中立,但我当然有点紧张这变化对我意味着什么。

结果这也并不是一个多大的障碍,特别是我发现我可以在Mac上用R语言为公司做出很多贡献。我非常感激那些RSQLServer和jTDS驱动的开发者,由于他们我可以轻松地从RStudio查询我们的数据库。我在mac上一直开着windows的虚拟机Parallels和开发工具Visual Studio,但我发现大多数日子我甚至不需要用它。我有时确实直接将代码推送到产品上(通常与广告定位实验相关),但它不是摩擦的根源,在许多软件工程领域我没有同事懂得那么多,像前端网页设计和网站可靠性工程,但就像在任何公司,我最终从那些担心中解脱出来。

其他变化

  • 离开了生物学研究领域:

这可能是最让我紧张的变化。八年来(包括本科的大部分时间),我一直专注于生物学研究。通过花几个月时间在其他方向上工作让我意识到,实际上,我对生物学问题从来没有那么大的热情。

以下为Twitter对话:

@daattali @JennyBryan @noamross @hspter
我:我有个最奇怪最长的梦想,我关心核糖核酸RNA
妻子:那不是一个梦想,是一个博士学位
— David Robinson(@drob)2016.4.16

生物学带来了许多有趣的计算和统计问题,生物信息学领域中涌现了许多令人兴奋的工作。但是当我完成生物学分析时,对最终的结果(例如,对刺激反应改变表达的一百个基因),我自己却没有知识或兴趣去解释。 (即使与作为整体与酵母基因工作多年后,通过名字我也只能识别少数基因)。相反,我一直是Stack Overflow的长期用户,对于软件开发者生态系统的现状大都感兴趣,所以我看到像上述网络那样的结果,我立即就能知道它是否有道理。**在做我真正感兴趣的数据工作时,这感觉是不一样的。 **

  • 写作:

这是个被我低估的优势。我在校时写了很多,但主要是学术期刊和学位论文,就是那种咬文嚼字的书面语,写起来感觉相当生硬。而在过去的一年里,我大部分是为内部报告,文档或博客文章而写作,就比较通俗和口语化。(尝试比较下我论文的语言和这个博客的任何帖子)。虽然我还有些剩余的研究工作准备发表,由于上述原因,我很难再回到学术论文的写作心态。

我的同事们

我有一种奇怪的幽默感,很多我的推特涉及一个虚构的“Dev”作为一个喜剧衬托,要么模拟工程师文化,要么嘲笑我自己毫无经验。

以下来自Twitter:

我:你不能只是把两个p值加在一起。
Dev:该死我不能:
newPval = pval1 + pval2;
Me:但是-
Dev:统计学都这样容易?
— David Robinson(@drob)2016.3.29
我(得意地):所以你看,当你使用正确的校正,p值是 .023,而不是 .02
Dev:你是那个昨天破坏构建的人吗?
— David Robinson(@drob)2016.4.11

为避免不够明显,这些Twitter的每一条都是公开的谎言。首先,这些交流一次都没有发生过,但更重要的是,他们并不代表我合作过的开发人员。公司里充满聪明、能干和体贴的家伙们,这正是我最喜欢在这儿工作的原因之一。

有很多人值得列出(当然是数据和广告投放引擎团队的所有成员),但我就说几个名字来举例。 Jason Punyon是最初发现我贝塔分布帖子的开发人员。 Jason是一名优秀的工程师,在这里工作了六年后,他建立了惊人数量的有用的产品知识。让我印象非常深刻的一个方面是他把关心数据和关心我们用户相结合的方法。

几个月前,我做了一项实验,结果显示在求职广告中显示薪水范围有很大的好处(关于这点会在以后的帖子中有更多提及),并在公司内分享了结果。我只是很高兴分享我得到的一些结论,但是Jason采纳了它并付诸行动,开始给所有雇主(包括我们自己)做推送,在表单中需提供职位的薪水信息。他这样做是因为他对待数据很严肃,作为一个指导他决定的参照,也应该作为一个指导公司决定的参照。他也关心开发人员,作为我们产品的用户也作为求职者,认为他们应该事先知道薪水信息。我很自豪能与他一起工作。

许多让我印象深刻的人并不都是工程团队的,我特别喜欢和社区团队合作。例如,Taryn Pratt(也叫 bluefeet)在我前几个月加入了团队。我来这里工作前就对Stack Overflow社区做过贡献,但这无法和Taryn的贡献相提并论。她多年来一直是个活跃的答者和版主,包括回答了3500多个问题和修改了22,000多个有用的标志(!!)。

虽然Taryn并不是开发人员,但她拥有优秀的技术经验和技能(大多数社区管理者都是这样),并且她用这些技能(特别是SQL)来辅助Stack Overflow社区。这方面她最近开始学习R,这样她可以应用统计和数据驱动的方法来分析和理解网站上问答行为(Q&A)的模式。在她和团队其他人的帮助下,我真的很期待能看到数据科学可以为社区做出什么样的贡献。

对在校生的建议:创作公开的作品

在我被录用一段时间后,我了解了更多Jason推特背后的故事,以及关于考虑雇我的内部对话是始于一次突发奇想.

Wow!如果我们雇了那个家伙会怎么样 ?

我觉得我拥有现在的工作真的很幸运,鉴于这种幸运让我觉得更幸运了。我的录用情况可能有太多奇怪的偶然性而不能从中获取任何建议。但如果我仍试图给在校学生提供建议,我想说的是:**公开作品绝对有必要。 **

当我在校时,我最关心的是让论文发表; 我以为那是学业成功的标志,是唯一能绝对我职业生涯的事。最终我发表的论文大约是我这个领域一个博士学位发表的中位数(可以在这里找到我的论文 http://varianceexplained.org/about/). 我很高兴我这么做了,但老实说,如果我发表的论文更少甚至没有,这也很难指向一条让我生活从此不同的路。但我确信,如果我没有发布关于贝塔分布的帖子,我的生活一定会有所不同,而如果我从没有在Stack Overflow上回答问题,则会有更大的不同。

期刊文章是创建公共作品的一种方法,但并不是唯一途径:期刊审稿缓慢,并且在提交之前需要“完美”。如果认为这是唯一公开作品的方式,态度有点危险。因此学术界很多好作品多年来日渐衰弱或完全消失,就因为它不是一篇论文而无法提交。(当然我所有的博客文章并没有资格王学术期刊投稿)所以我说,如果你有一些有趣的东西,但它并不是一篇论文,那就作为博客来写,或Stack Overflow的答案,或GitHub的开源项目。**总之,就是要公开写作。 **

如我一开始所说,我真的很庆幸我回答了那个关于贝塔分布的问题。它给了我机会去为一个赋予我许多编程知识和创造力的产品去工作。我和创造它的人们一起工作,那些人直到今天仍一直给我留下深刻印象。一年过去了,这是我可以追求到的最好工作。

好吧,几乎是最好的:)

以下来自Twitter:
好吧,我猜我得回去工作了
— David Robinson (@drob)
3AM - April 8, 2016

注:《在Stack Overflow做数据科学家的一年》于2016.6.20公开发表于作者的博客

1.如果你想自己分析做这个图的话,这里是可复制的代码和数据(https://rpubs.com/dgrtwo/technology-clusters)。 ↩

2.如果你在Stack Overflow工作,想学习更多关于我们内部R的工具, 去查下这个指南,它包含了其他教程的链接。 ↩

题图摄影:Richard Noan
图片授权基于:CC0协议

推荐阅读:

  • 周瑞珍:黑天鹅-通往真实世界的钥匙
  • 余欣:用SCRUM敏捷框架来学习数据科学
  • 请拿出你的执行力,解密大数据来袭,课程火热报名ing!

关于解密大数据社群

本社群是Tiger为了顺应大数据时代降临,方便更多朋友入门和深入学习数据而创办的社群服务。

解密大数据社群旨在为百思不得其解并苦于无法入门数据分析的爱好者们提供一个学习和成长的平台,此外,为了服务转行大数据行业的朋友们,我们特别打造了数据分析的系列精品课程,集合了美国和中国的一线大数据从业者,提供完整的数据分析行业从学习到就业的落地方案。

欲入社群或课程咨询请在公众号后台留下联系方式,期待你和我们共同成长!

译|在Stack Overflow做数据科学家的一年_第6张图片
640-26.jpeg

你可能感兴趣的:(译|在Stack Overflow做数据科学家的一年)