登录
首页大数据时代从软件到机器学习工程师的旅程
从软件到机器学习工程师的旅程
2022-03-14
收藏


我已经在iZettle工作了大约四年了。我在这家公司的旅程并不是以机器学习工程师的身份开始的,而是随着我在公司的成长而过渡到机器学习工程师。

我的正规教育是计算机科学/软件工程,事实上我已经做了大约8年的软件开发人员。作为一名软件工程师,这些年给了我一些技能,这些技能使我走向ML工程的道路变得相当特别。我想和大家分享我希望在准备这个角色时能更多地关注什么,以及我认为我的背景如何帮助我完成这个转变。

怎么开始的


首先-为什么?我对我的软件工程师工作不满意吗?我认为做一名ML工程师比做一名软件工程师更好吗?绝不是!这只是我喜欢花什么时间的问题,那就是数据。我从15岁就开始编码了,我一直很喜欢它。但我最喜欢的是用我的作品去了解世界。作为许多人,我有许多“宠物项目”想法永远不会出现,但当我阅读这份想法清单时,我发现了这样的事情:构建工具来使用推特数据来检测自然灾害,分析我的社交媒体账户数据来理解我自己的行为,检测朋友聊天中的情绪,等等。你看到模式了吗?所有这些项目想法都寻求对某些情况的理解,并且都以数据为中心。那时我一直对数据很感兴趣,大约两年前我决定把它作为我的主要工作。我想认为机器学习是我个人的选择,但本着数据驱动的精神,我可以将我的决定与近年来机器学习领域的炒作联系起来,当时你读到的每一篇科技文章都是关于ML创新的,所以我想我永远不会知道。

不管怎样,我做出了这个决定,对我来说幸运的是,iZettle正在运行一个机器学习指导项目,我很高兴地加入了这个项目。

学习过程


在这个指导程序中,我们学习了bookPython机器学习的所有章节。每周,我们会讨论一章,编写一些练习来实验所学的概念。我发现它非常令人兴奋,它确实奠定了我对机器学习如何工作的基本理解。

除此之外,我利用空闲时间参加了一些在线课程,比如Udacity中的aDeep Learning Specialisation,参加inKagglecompetitions(我不得不承认,没有太大成功),并试图实施我之前提到的一些项目。

我告诉你们所有这些不是为了吹牛,而是为了让你们明白我正在尽可能多地吸收关于这个主题的知识,当我准备更换标题时,我觉得我对机器学习有非常扎实的理解。

经过6个多月的紧张学习,我加入了iZettle的机器学习团队。

什么课程和书本没有教给你


我充满活力地加入了这个团队,渴望开始我的第一个项目。从第一个项目开始,我开始注意到学习机器学习和实际机器学习是多么的不同。第一个项目是试图为我们的商人预测破产,这样我们就可以伸出援手,帮助他们做生意。

当你做一个来自一门课程或一本书的项目时,该项目最重要的部分已经为你完成了。也就是说:您到底想做什么?在课程中,您会得到一个数据集和一个目标度量,您所要做的就是“按摩”您的数据和训练模型,以便在您的目标度量上获得良好的性能。

在这种情况下,有几件事你没有学到,甚至从来没有质疑过:

问题定义:如何将问题公式化,以便从机器学习的角度来看它是有意义的?对于破产问题,我感到震惊的是,我的脑海中突然冒出了多少问题,几乎是不知从哪里冒出来的:预测破产意味着什么?是不是意味着一个商人明天就要破产了?一周后?一个月后?我怎么知道我们哪一个商户已经破产了?是缺乏活动吗?那么季节性呢?是一些外部信息吗?我如何将它映射到一个标签,让我的算法可以从中学习?…我太习惯于被赋予一个有标签的数据集,以至于我从未考虑过仅仅创建这个标签需要大量的思考、领域知识和业务考虑。这取决于您如何定义标签,您可以使用的问题和功能完全改变。

data:我已经暗示了接下来会发生什么,而且众所周知,获取正确的数据是ML问题的一个困难部分。然而,当你第一次偶然发现这个问题时,它仍然会打击你。数据很难得到,而且很杂乱,不应该盲目相信。构建标签实际上是在获得数据源之后。在我的第一个任务中,我有两个来自不同来源的数据集,我必须合并并映射到每个商家自己的特性集。对于您引入的每一个新的信息源,您不仅需要确保数据质量是可接受的,而且要确保您没有引入任何偏见,或者至少您对此做出了解释。

在某些情况下,你甚至没有你想要解决的问题的数据,机器学习在任何一行代码之前几个月就开始了,建立数据收集策略和与其他团队的关系。

评估:我们有数据集和标签。我们开始建模…我们如何衡量性能?这不仅是使用哪种度量的问题,而且是它是否有业务意义的问题。权衡在这里起着很大的作用。我以前从来没有考虑过用什么指标来衡量我的模型的性能,这是给定的。我真的在等别人告诉我:使用精确度/ROC-AUC/等。当这种情况没有发生时,我不得不考虑一个指标及其含义,我意识到花很多时间思考这个问题有多重要,我对我所学的任何一本书或课程都很少关注这个话题感到失望。只要想一想:根据当它实际上是假的(即假阳性)或任何类似的变化时预测真的“糟糕”程度,您可能希望保持最低的精确度或召回率,而不管您的一般度量(如ROC-AUC)如何上升或下降。这只是一个例子,还有很多。

这些是我意识到在我所学的任何课程或阅读的任何书籍中都没有学到的要点。这些都是我在工作中日复一日学到的东西,感谢真正有经验和耐心的同事。

在我的旅程中是什么帮助了我


当然,也有一些意想不到的好的部分,在这些部分中,我可以利用我作为一名软件工程师多年来获得的技能。列举一些:

  • 通用软件开发实践:在许多课程中,大量的时间用于解释常见的软件开发实践:版本控制、基本编程、专注于单一编程语言(90%的时间该语言是Python)等。在与软件工作多年后,这不仅是我已经有过的实践,而且是我“内心深处”的东西。这使得我更容易开始测试和实现想法,并希望传播这些实践,激励我最近加入的团队。
  • 阅读和理解他人的代码:因为这是我一直在做的事情,所以我非常乐意阅读其他同事的代码,并希望能给出建设性的反馈。
  • 灵活性当涉及到“工作的正确工具”时。机器学习工程师往往会陷入他们所使用的工具中,无论他们喜欢什么。虽然我没有数据来支持这一说法,但我注意到了这一点。因为我使用过许多语言和框架,所以我发现它相对容易(而且令人兴奋!)尝试新的工具和库,希望这给了我一个更广泛的视图和工具集。

所以...怎么办?


如果您的情况与我类似,我有以下附加练习,用于您正在阅读的书或您正在学习的课程中的下一个练习。尝试回答以下问题:

  • 您试图解决/预测什么?您理解问题的所有部分吗?
  • 提供的数据对您试图解决的问题有意义吗?
  • 数据是如何收集的?如果您不能肯定地回答这个问题,您将如何收集数据?需要多长时间?谁需要参与数据收集?是web开发人员(可能点击事件),还是应用程序开发人员(应用程序使用数据),等等
  • 如果这是一个要在公司内部解决的问题,那么除了您的预测之外,该项目还需要什么?一些基础结构?有什么商业决定吗?应用程序中的新功能?将涉及谁
  • 您使用的评估指标是什么?您了解吗?对这个问题合适吗?对于这个问题,有没有其他更有意义的度量方法?遗漏样本分类的成本是多少?
  • 不管目标性能是什么:何时如果这是一个真正的项目,您会感到高兴吗?为什么是这个数字?为什么不调低/调高?

我相信,如果你真的试图回答所有这些问题,你在学习过程中遇到的每一个练习,你会在“现实生活中”发展出一个更广泛和现实的机器学习观点。

我希望这个帖子对很多人的学习之旅有所帮助!如果你有任何问题,请联系我们,或者想与我们分享你的故事,我们很乐意听到它!



数据分析咨询请扫描二维码

客服在线
立即咨询