数据科学是否无聊?
数据科学是否无聊?
许多人将数据科学(或机器学习)工作描绘得非常理想,激励他人加入这个领域。然而,现实中它往往让人感到“枯燥”。一旦产生这种感觉,焦虑便会随之而来,这导致数据科学领域的离职率相对较高。
在这篇文章中,我将分享自己是如何应对“数据科学中的那些枯燥工作”的。
希望这能帮助你更好地理解数据科学,并在决定踏入这一行业时,能够享受这场长途旅程。
第一课
我的表弟Shawn是一位年轻帅气的小伙子,近期他来到加拿大攻读计算机硕士学位。和许多学生一样,Shawn对机器学习充满热情。他希望在两年后毕业时,能够成为一名数据科学家或从事其他与机器学习相关的工作。
作为Shawn的表哥,我关心他的未来,因此决定分享我在数据科学领域的经历和教训,给他提供谨慎的建议。《哈佛商业评论》曾称数据科学为“21世纪最性感的工作”,但它同样可能让人感到枯燥,甚至令人疲惫,使人屡屡受挫。
尽管这些话可能让Shawn失望,但我认为有责任让他了解事实,希望他对自己选择的职业有充分认识。同时,我也不希望在凌晨时接到母亲和叔叔的电话,提醒我作为家庭一员有责任指导晚辈。
Shawn非常聪明、积极且富有好奇心,他让我详细讨论数据科学的枯燥之处。因此,我写下了这篇文章。
一些背景说明
为了便于理解,首先介绍一下我如何进入数据科学行业(具体情况可查看我的领英)。作为一名数据科学经理,我不仅负责领导团队为财富100企业部署机器学习系统,还要管理客户关系,并承担部分技术工作。
更重要的是,机器学习系统应是一整套解决特定业务领域问题的方案,除了机器学习组件外,还需处理与人或系统相关的其他事务。
部署系统意味着解决方案在实际业务运营中有效。例如,搭建实验环境用于训练和验证机器学习模型不算部署,但若搭建一个每月发送产品服务的推荐引擎则可算作部署。与构建一个优秀的机器学习模型相比,部署机器学习系统需克服更多挑战。如果对此感兴趣,可以点击此处详细了解。
因此,我不会介绍如何在谷歌或其他高科技公司,从初级开发人员成长为技术经理。虽然这些公司在机器学习方面颇有成就,但它们仅代表“前1%”的公司,其他财富100企业在技术成熟度、技术采用速度及投资工具和工程人才储备方面相对滞后。
AI学术让我们仔细看看
许多年轻数据科学家花费大量时间思考如何构建完美的机器学习模型,或用丰富的可视化手段展示突出的商业洞察。虽然这些确实是工作的一部分,但随着数据科学的普及,企业更关注其实际应用价值。企业希望部署越来越多的机器学习系统,但对所使用的新模型或炫酷仪表板并不关心。因此,数据科学家常常要处理一堆与机器学习无关的工作,这使得工作变得枯燥。
那么,数据科学究竟有多枯燥呢?接下来,我将对我的日常工作进行分类阐述,并从期望与现实两个方面进行对比,分享我的应对策略。
以下列举的案例均源自过往实验和团队项目,我将以“我们”的口吻进行叙述。虽然这些案例可能并不详尽,但足以支持我的观点。
设计(占5-10%时间)
在设计阶段,我们发挥智慧解决问题,提出优雅的想法。这些想法可能包括新的模型架构、数据特性和系统设计等。但很快,受时间或其他因素影响,我们往往只能采取最简单(通常也是最无聊)的解决方案。
期望:我们的想法会被收录于知名的机器学习杂志,如NIPS、谷歌AI项目等,甚至幻想赢得诺贝尔奖。
现实:部署后,一切正常运行。不错的白板绘图会拍照记录,作为参考框架。
应对策略:与外行朋友讨论我们的想法,他们会诚实(甚至粗鲁)地劝我放弃那些疯狂的念头;将看似疯狂的好想法作为附带项目;结果发现,大部分疯狂的想法不起作用,或仅比简单方法稍好一点。因此,遵循简单原则(KISS,Keep It Simple, Stupid)让我如释重负。
编程(占20-70%时间,取决于开发角色)
这部分不需多言,想象你戴上耳机,喝着咖啡,拉伸手指,在电脑前敲打出一行行优美的代码,等待奇迹发生。
我们的代码分为五个部分(用代码行数占比说明):数据管道(50-70%),系统和集成(10-20%),机器学习模型(5-10%),调试和演示支持(5-10%)。其他同行也基本如此,这里有一幅大图可以说明此:
如你所见,我们大部分时间都在处理与机器学习无关的事务。尽管机器学习组件非常重要,流行框架和编程语言(如Keras、XGBoost、Python的sklearn等)已帮助我们减轻了许多繁杂的工作。为了达到目的,我们并不需要庞大的代码库,工作流已相对标准化和完善。虽然底层优化不同,但其影响也微乎其微。
期望:大部分时间我们专注开发和重塑机器学习组件,其他部分则交给他人处理。
现实:没有人愿意做自己不想做的事情;所有工作都落在自己身上;并且花费大量时间去优化那些已经相对完善的工作流程。
应对策略:我们依据各自的专业特长做设计决策,除了完成自己的开发工作,还会支持其他人(例如,贡献想法、亲自写代码或进行质量评估)。我们互相学习,从而提升团队水平;更重要的是,这样可以缓解这份“性感工作”带来的焦虑。
质量评估、调试和修复问题(至少占65%时间)
在我看来,这种技术工作是最无聊、最痛苦的部分,部署机器学习系统也不例外。
机器学习系统常见的bug有两类:不好的结果和常见软件问题。不好的结果可能表现为模型得分过低(如:准确性和精准度)或难以解释的预测结果(如:基于业务经验的预测概率呈现偏态分布)。此时,代码没有问题,但结果缺乏解释性或不够理想。常见软件问题则包括代码无法运行、系统配置等。
期望:我们用更聪明的方法构建一个优化的模型,便能解决结果不佳的问题。这一过程需要智慧,如果想法有效那会非常令人欣慰。
现实:在质量评估、调试和处理缺陷的过程中,我们往往有近70-90%的时间在处理常见软件问题。通常,我们构建端到端的训练和验证管道后,会很快得到好结果。然而,实际我们更关注系统问题,而模型则次之。
应对策略:我使用GitHub的issue功能建立了一个游戏化的“奖杯板”。每当关闭一个问题卡时,我都会感到兴奋。看到我们“征服”的问题,我会感到自豪。当然,如果我点击“启动”所有一切都能正常运行,那更让我骄傲。虽然这种情况只在大学提交编程作业时出现过,但我至今仍记得那一刻的感觉。如果现实生活中再次发生,那可能就意味着出错了。
救火(占10-50%时间)
无论计划多么周全,总会发生一些意外让你偏离正轨。对于任何交付团队经理来说,这是一场噩梦。具体来说,意外可以分为三类:
- 外部因素,如范围变更、上游系统依赖以及客户抱怨;
- 内部团队问题,如烦人的bug需要更多时间解决、团队成员离职但未做好交接、人力不足、个人冲突等;
- 自身的无知,包括各种“其他”事情。
期望:全面巡检后,迎接客户、领导和团队的欢呼和拥抱。
现实:意外总在最不合时宜的时候发生。尽管意外有一定规律可循,但没有解决问题的万能良方,这让人十分烦恼。
应对策略:当遇到高技术问题或跨团队协作时,最好将时间周期延长至2到2.5倍,预留充足空间;在团队内设定激进的里程碑;适时通过发泄情绪来平衡心态;深呼吸、保持微笑、学会倾听;与团队共同探索所有可能的方案,根据可行性和难易程度确定优先级;如果一切方法仍然无效,寻求帮助,继续推进。以上都不能算是策略,但在实践中可能会有所帮助。
总结
本文讨论了在真实世界中从事数据科学工作所面临的困难。有志于进入机器学习领域的人需明白,除了构建模型外,还有很多其他事情要做。与其他职业一样,最终你可能会感到枯燥和挫折,这很正常。但更重要的是,你应该建立自己的应对策略,这样你就能长期在这个领域中,享受沿途的小成就,奔向最终的胜利。
[[[IMG_1]]]
[[[IMG_2]]]
[[[IMG_3]]]