Data Scientist 转 Machine Learning 小总结

参考了别的论坛帖子,小小总结一下。希望对大家有用。我把更好的内容放在回贴啦,可以跳到楼下去看。

Q:DS转MLE的话 CS哪些基础知识一定要补一下
A:最最基本 :data structures, algorithm, ml 各种算法如何写代码实现。
OOD,Design patterns还是很有用的。读懂别人代码,给你个api会用,也是很基本的。

Q:从sde转做mle容易还是ds转做mle容易呢?
A:SDE 和 DS 转行相比较,要补的东西不同。泛泛而言,DS一般建模理论和实践比较强,但是相对于SDE来说,写码能力会差一些,并且CS基础知识欠缺。反观SDE,看之前 概率,数理统计,各种建模,学习了多少,基础如何,真的从零学起的也不是很容易。
所有的容易不容易都是相对而言,每个人背景不同,想做的事情不同。列好补课提纲,也要行动力嘛。

Q:作为非cs背景的ds,在转mle的过程中应该如何丰富自己的简历与其他qualification呢?
A:ML eng看重建模,编程,解决问题能力,有时还要自己写点data processing pipeline。想一下自己现在的工作内容有什么相关的,有没有可能争取到做相关的project。也可以去上课,各大mock平台那么多,online CS master可能耗时太久,local大学上一些课。Kaggle也是一个途径。现在参与的人多了,能拿到好成绩还是挺厉害的。

Q:怎么提高自己的建模能力呢!我在面试过程中,发现自己主要是在具体的case study的建模里容易卡顿,比如,之前遇到的一题,每个文件包括不同数量的3个feature,已知处理文件的时间随文件数目的分布图,建模分析提高哪个feature最有利于减少时间。类似于这样的case我觉得自己分析的不是很全面,想问问楼主这种问题有没有具体的回答思路和训练方法呢?
A:这个话题好庞大,可以写长帖了。case study 除了看建模方面的例子(例如各大科技公司的blog, kaggle各种kernel,积累经验很重要),还可以看一下商学院准备case study的资料,cracking the PM interview 等等来扩展自己的思维。单就面试而言,答题可以用总分总的模式,要解决什么问题,接下来要做哪几步(收集数据,建baseline,尝试模型,offline/online evaluation,如何改进,最终上线),然后总结你解决了什么问题。白板上列出大纲有利于理清思路。毕竟面试时间有限,某一点具体展开讲之前,问下面试官要不要花这个时间。面试官问的问题可能故意很模糊,需要你问 clarification questions来搞明白。有什么数据,能用什么数据,model是否看重容易理解,都要问清楚。做assumption之前,解释下为啥这么做,问面试官这么想是否合理。 面试官给提示的时候要记得follow。

Q:experienced ds 转mle 的话是不是还是得从entry level做起呢?
A:看面试表现,之前的经验和级别,不是特别资深的,一般平级问题不大。以前就是搞ML,coding又强,跳槽时候升一级不是没可能。别的状况,就看你自己觉得值不值得了。转行要趁早,越往上,换方向代价越大。

Q:我是小公司的ds,除了做research,也要implement code,然后跟engineer合作一起做production,感觉定位不是很明确。想请问lz,mle的话会有类似于research偏理论和实验的内容(比如读paper,测试新的算法和特征)么?还是说确定了用某个算法之后做implementation多一些?
A:大公司应该有,这个要找内部人士打听,毕竟同一个职位组和组之间差别可以很大。

Q:小菜鸡MS应届生目前在大厂做ML engineer, 主要做recommendation system从infra到pipeline到model啥都涉及。目前苦于今后的职业规划,可以给一些建议吗?应该侧重哪些方面?啥都做感觉啥也做不精
A:ML eng 和 swe 到一定程度,要么选择继续做IC,当 tech lead 带技术队伍,要么去做 people manager。tech lead不光要了解技术细节,大局各种架构更加重要。people manager其实就是另一套 skill set了。这个怎么选择,看个人偏好了。做了几年,觉得另一个方向更适合自己也可以再转。junior时候多学多问多观察。听你的描述,你们组可以学到的东西很多,具体的技术方向肯定是要先了解才能做选择。看看你周围你佩服的人在哪些方面强于你,你如何可以变得和ta一样厉害。

Q:Design patterns 是指OOD不? 有木有推荐的资料呀。编程语言的话除了python这种, c++和java是不是也得会一个?
A:design pattern是OOD的一部分。production code不一定会是python,C++和java至少得会一个。有的公司用spark处理数据,scala可能也要学一下。

2 Likes

可以参考

某上市公司 Machine Learning Engineer的 Data Scientist跳槽总结

准备方向
lz现在大厂搬砖,title是Data Scientist,统计小硕,小于五年工作经验。想要做ML/modeling相关的工作,没有考虑analytics职位。前期准备是为了最大化拿offer的概率:

  • 刷题:leetcode刷了大部分的easy,小部分的medium
  • 统计概率:基本功,master level的数理统计和概率要熟练掌握
  • ML/modeling: 看书复习
  • SQL:刷了leetcode里面的easy和medium,还好申的职位都没有考SQL,lz并不会写花式sql
  • A/B Testing: Udacity那门课,看paper和blog,听课
  • Product Sense:公司的blog,paper,tech talk, 试用公司产品,以及听课
  • 面经:glassdoor和地里能找到的都看了
  • Behavior: 常见的问题自己准备了份答案,要面公司的mission什么的,以及亚麻的 leadership principles 有几条很好用

面试体会以下都是前辈和朋友们教给我的:

  • (纯感慨) 乔帮主2005年在斯坦福毕业典礼上讲过这样一段话:"You can’t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something – your gut, destiny, life, karma, whatever.” 好几年前lz纯粹因为好玩去学了一门外语,最近几年还在每天学习一点点,防止完全忘光。这次面试,这门外语居然帮助我回答了好几个不同的问题,一些行为问题,和PM聊他的工作,和hiring manager聊team match。和这门外语的native speaker 同事聊到面试经历的时候,我想到了乔帮主的这段话。

学习资料
声明:评价基于个人感受,每个人背景不同,适合我的不一定就一定适合你

免费

付费

  • Andrew Ng DL specialization on coursera(当时只有前三课)讲的浅显易懂,感觉偏基础。DL这块lz都是在自学,所以这个系列还比较适合lz,面试中也用学到的一些基本概念扯扯淡。
  • Leetcode subscription: 公司tag很有用

时间管理
Goal: 尽量在同一时间拿到所有offer,方便讲价

  1. 考虑跳槽的时间。多和小伙伴们打听各家的流程及速度。如果哪家出了名的慢,要先申请。接下来是假定各家公司进度正常。
  2. 制定学习计划
  3. 在准备差不多 2/3 的时候,投简历。最好能找人内推,一般会在一个星期内之内被recruiter联系
  4. 跟recruiter问清楚流程,计划好接下来的时间
  5. 看情况该拖延就拖延,一切为同一时间拿offer为主
  6. data chanllege 不少会给48小时,最好安排两个整天做这个。早上收邮件,这样子最后时间不够,还可以选择熬夜。
  7. 如果前面安排合理,收到onsite通知会在差不多的时间。拿到第一家onsite,就可以催下别家
  8. onsite也是要尽量安排在一周或者两周之内,但是也会有某家安排特别慢或者临近假期,非常难安排的状况,最好错开大家都去休假的时段。onsite安排的远一点是可以的,跳槽的人直接请一周假会不那么可疑。之前在medium上看到一篇五天面五家的帖子,万分佩服。onsite之后可能会非常累,也要考虑自己脑力能不能承受密集的面试。
  9. onsite之后通知结果,recruiter非常喜欢打电话说。安排通话时间也是可以拖几天的。同样,可以拿第一家offer催别家。
  10. recruiter会问你别家给了什么数,如果是在同一时间出结果,你可以坦诚的说还在等。一定要让对方先给数字,information is power

战线不宜拖得过长,人会过于疲惫。这里面运气成分也不少,人算不如天算

讨价还价


[面试经验] Data Challenge

data challenge 我听说过的,有 analytics,modeling,ab testing 三个大类的(如有遗漏,欢迎补充)。Analytics的职位我没有投过,没有经验讲。AB testing 这个实际应用水比较深,还是挺看经验的,也不在讨论范围。此文着重 modeling

前期准备

  • 可以通过看别人的经验贴,某本电子书,翻以前ML project相关作业的report,和朋友请教经验等等方式了解这个东西大体应该怎么搞
  • 常用的code可以提前准备了好,例如 LaTeX 写报告的模板,写报告常用语句,EDA 相关code,常用模型的code
  • cheatsheet手边待用
  • 想好modeling的大体思路,先检查data,画各种图,选定evaluation metric,train一到两个model,检查结果,写结论

时间安排

  • 大部分 data challenge 会给 24 或 48 小时,可以和recruiter商量好时间接收。我当时是第一天早上十点接受,保证收到立马开始进入工作状态,时间不够用的时候还能熬夜赶工。
  • 为了几家公司进度差不多一致,我九天之内做了三个(累觉不爱):一个周末两天,周中请假两天,接下来的周末两天。
  • train model的时候需要考虑train的时间。我碰到有个数据量比较大,R跑起来特别慢,中途换了python。

几点注意

  • 解释你的选择:为什么数据这么清理,为什么feature这么搞,为什么用 model A,而不是 model B,为什么用这个metric,为什么做这个假设
  • 不是特别常见的 model 可以简单解释下原理,毕竟批卷子的人也不可能什么都懂。当时直接调别人一个现成的包,用了不太常见的一个model,reference按规矩写好
  • 个人偏好加一个future work,说一下如果时间充足,你还打算做什么,以示考虑充分
  • Summary/Conclusion 这个前面帖子lz已经强调过了,是一定要写的。通过你的模型,发现了什么。最好能给出 actionable insights (是的,这词很俗。换位思考,公司出 data challenge 是想考察你解决问题的能力,而不是调包的能力。

[面试经验] Data Challenge套路

大多数招DS的公司都有这个环节,我也是从去年找实习的时候做一个takehome跪一个到现在基本都能拿到onsite,来分享一下经验也给自己攒点运气。因为很多公司都不能share data,所以就不说具体的问题了,但是其实data challenge都大同小异,给一个或者几个data和几个business problem,让建模来解决。有的公司让提交report和代码,也有的公司是提交ipython notebook或者r markdown。我以前都不太能抓住重点,觉得takehome给的时间不长data也不算太大,所以总是想做点fancy的其他人想不到的东西,于是很多时间都花在并不熟悉的模型然后fit数据急急忙忙给个结果,report也并没有写的很详细,每次挂了OA都没有feedback所以也一直不知道是哪里做的不对。后来给machine learning当TA,判学生project的时候看了很多栗子才开始思考怎样才算很好的处理数据和展示结果,就总结了一些我现在用的套路希望可以帮到大家。

我一般会把report分成几个部分:

  1. Problem Overview 用自己的话复述问题介绍一下给的数据,最好能讲一下这个问题可以给公司带来哪些opportunity。

  2. 然后就是数据处理阶段了,数据处理应该占绝大部分的时间。列出来都有哪些variable,他们的类型,给出descriptive statistics summary,然后看分布找outlier看看每个variable的missing value比例,也要做multivariate study,看feature之间的联系,是不是高度相关可以互相代替,然后也要看看每一个feature和response variable的关系,哪些在data exploration阶段就可以看出来非常significant,哪些看起来像是noise。这一部分可以画很多图来给出直观的展示。

  3. 接下来就是建模了,其实在第二阶段impute完missing value去掉outlier做好这些preprocessing之后建模阶段很简单,先挑一个简单易懂的当做baseline model,然后定义好拿什么当evaluation metric看一下baseline performance,然后就可以套各种常规的或者fancy的model挨个看performance,选top的几个model继续parameter tuning,然后可以继续处理feature,比如说去掉correlated或者纯noise的feature,也可以自己加一些interaction term,比如建一个新的variable,X1*X2。这种就是interaction term看看能不能提高model performance。最后选模型的时候能给出合理理由就可以了,比如evaluation metric特别高,运行速度最快,模型比较好解释,在各种情形下非常robust。基本上没有正确答案的,解释的能让人信服就可以了。

  4. 最后不要忘了conclusion。夸一下final model的优点,如何可以解决现有问题,最好可以结合公司业务讲一下business value,再给一下未来可以继续做的问题。


Becoming a Machine Learning Practitioner


上图来自Google 2015的论文,图片里面很小的黑色矩形是ML算法,其他部分是围绕算法的很多其他成分。

业界做ML,当然有算法的成分,有些公司也有很高深的算法(比如Google),但是工程的成分其实经常会远远,远远的多于算法,在一个激灵想出来的算法能真正落地给业务产生impact之前,有大量的工程方面的设计和考虑。好的大公司也在纷纷构建自家的机器学习平台让ML的投产变得更容易。

但是这些需求在学校ML课程里面很少被提及,给人的印象就是,做ML就是“调包,调参”。但是实际工作里面调包和调参的时间比例可能也就10-20%…

为什么发这篇帖子,也是来自于之前一直在DS领域总结学习,希望持续分享自己学习的历程,求讨论

Why this post

It’s an opinionated list of core skills that I found useful in the daily work of a machine learning practitioner, in the tech industry. I am not a researcher and am not interested in becoming one, so the list does not go in depth into any active research domain.

需要强调的是,我不是做ML科研的,也不想做科研,所以本文就是于业界做ML的大家交流讨论,并不打算深入任何科研领域,请做科研的大牛轻拍。

另外这篇内容也并不会多完备。机器学习领域大牛很多,领域很广,应用更是广阔到难以尽数,所以不求尽善尽美,只是抛砖引玉,求交流学习。

本文适合什么人

0. Who is this for

This is a practitioner’s approach. Researchers: This post is not for you. 不是给ML方向做研究的人;牛人路过就好,不喜勿进。

  • Data analyst: you don’t need this.

  • Data scientist who’s more junior in modeling or focuses on causal inference: 3, some of 4.

  • Machine learning scientist: 2, 3, expert knowledge of 4,

  • Machine learning engineer: 1, 2, some 3, good knowledge of 4, 5, some knowledge of 6

  • Machine learning systems engineer: 1, 2, maybe 3, some knowledge of 4, expert knowledge of 5 and 6

1. CS Fundamentals 计算机基础

论坛这些资料也有人分享,比如 分享九章大数据,九章Python视频课程资料

Operating System (Book: Modern Operating Systems)

2. Programming languages 编程语言

为什么与上一节计算机基础分开来说:因为老是遇到同学说我会numpy啊为什么你说我基础不行。。。。实际上是可以在不太懂基础的情况下楞刷题,或者写些基本能用的代码的。但是稍微深一点的地方会感觉基础知识的缺乏会让人难以在ML道路上上升到一定高度。

Must have :Python, Java

必须一门Python(因为ML好多framework就是python),和一门compiled language.

仅仅只会python,作为scientist是够了,作为engineer就会有显著差距。

Good to have: C++ 不一定是必须的。但是如果做的工作对速度有比较强的要求,那还是需要会C++的

Will likely encounter at work: scala/go/js 这些看每家tech stack不一样,会有不同涉及。遇到了再学即可。

Will likely encounter in academic settings: Matlab/Octave, R, Julia 这些是学校里面用的多,我至今(2018年底)没看见公司里面用julia的。

3. Math Fundamentals 数学和统计基础

Linear algebra 线性代数,必须的

Calculus 这个大家应该都上过

Optimization 优化:必须的

Statistics 基础统计(不是概率论 which is also good to have,这里是特指统计)

(real analysis and functional analysis might be useful, but is not required)

有空的话学实分析和泛函也可以,但是不是必须的

4. Machine Learning, from intro to advanced

这部分稍微区分一下从入门到进阶

4a. Intro 入门

  • 这门课可能没有人不知道了 [Introductiont to Machine Learning by Andrew Ng]

  • 这本书是ESL的简单版,作为直觉培养和思路练成,仍然是不错的,但是那里面的编程就很轻很轻了,真的只够本科生用 Very light but still a good book: an introduction to statistical learning

  • 深度学习,也是Ng这课来入门还是不错的 [Introudction to Deep Learning by Andrew Ng]

  • 另外个人比较喜欢Udacity的第一门旗舰课程讲AI的,基于斯坦福的一门本科生课程。会稍微设计一点比前几门入门课更宽广的概念,虽然很浅但是对了解domain很有好处。Introduction to Artificial Intelligence by Udacity

4b. Advanced 进阶

  • 前面几门主要还是supervised learning,下面这门稍微宽广一点,并不完全是ML,但是也是因此感觉对知识面和 落地 有帮助

Data mining & other topics: Mining Massive Data Sets http://web.stanford.edu/class/cs246/

经典不必多说,CS角度 Pattern Recognition and Machine Learning

6 Likes

太赞了,必须成功啊,优秀的小姐姐