quant 转 DS/MLE 全系列面试准备+经验分享

avatar 773360
seewhatsee
20006
61
三个月全力跳槽终于结束了,最后去了一家做自动驾驶的公司做 MLE,中途走了许多的弯路,也总结了一些个人的经验,希望大家求职能一切顺利!

我现在主要在buyside 做 portfolio manager,做一些 modeling,alpha signal etc,平时工作不太忙,主要是读 paper 和 implement,老板不太管,所以也给跳槽留有了充分的时间。由于一些个人原因,要去西海岸,也对 tech culture (比 finance 真的 flexible 很多!)和包裹(finance 基本都是没有 stock 的,更别说 ipo 暴富了)的向往,就开始准备跳槽了。

1. 确定自己的 target position
市场上主要的 data 的岗位太多了,data scientist,applied scientist,research scientist,machine learning engineer(i.e. SDE, data science)。
由于前期对 data 的行业不太了解,走了许多弯路,前期投的主要岗位都是偏 product 相关的 DS,发现在面试的过程中对 product sense,ab testing 和实验设计的考察非常多,如果大家本身是做 product 相关的 DS/DA,这个应该是最容易 transfer 的了。也在面试的过程中,学习和了解到了很多的product 相关的名词和技术,后面在具体说一下准备的过程和材料。在面 DS过程中了解到 MLE也是一个不错的选择,相对于 product sense,算法刷题对一个理工男来说,是比较好掌控和量化的,在 JD 中也对 ML 的要求比较高,结合自身的情况,刷题会比刷 product和实验会更有动力。于是开始主要找 MLE 的岗位。希望大家不要像 LZ 这样前期对 target position 模糊不定,造成一定的时间和资源的浪费。

2. 准备和一些小技巧
2.1 DS
其实 DS 面试占了全部的 60-70%,就先说一下自己对 DS的见解和准备过程。
根据 JD 确定一下这个岗位是否是自己想去的,如果这个公司 ds 有很多个 track,注意是analytic or model,现在很多 DS 其实对应着DA的工作,主要看一些 keywords,SQL/AB testing/ Dashboard 一般对应着analytic work,看他对 ML的要求有多高,一般 basic ML like regress/SVM 这样,一般也是偏analytic的。像 FB,robinhood 他们的 DS 都比较analytic,像 Google,Uber 的 DS 比较hard core 一些。

依据重点排序
- SQL/ Python
SQL 基本是 DS的必考选项,join/groupby/where/order/limit/subquery/case when 这些都是必考的,如果大家平时工作中就用到了这些,其实不需要太多的准备,如果这个 DS 是非常偏 dashboard / reporting/ pipeline的话,window function 也是会考的,lz 也有遇到,但是不多,像 dropbox,confluent 都会考察,其中 rank,rolling 频率最高。另一个注意的点就是,sql 不光考察 query 的能力,也考察 product 能力,一定要 clarify 面试官要求是什么,你可以说明一下你的 metric/ ratio 会怎么计算,得到肯定答复后再写,别上来就直接写,最后发现写的的东西不是面试官要的,一是浪费时间,二是留下一个 product sense 不好的印象

Python 不一定是必考,但是考的话主要是 easy 的algo 或者是 pandas 的 data manipulation
  • Algo 一般只考 string 的处理 like split,array 和 dictionary 的结构使用。
  • data manipulation 就是对 dataframe的处理了,像 df.groupby(col_1)[col_2].mean(), df.col.rolling().mean()…,df[lambda],这几个得会


两个经典的题库,最好都要做完,个人觉得 1-2 遍足够了,不一定要写出来,脑子里可以很快的浮现出 query 就可以
hackerrank.com
leetcode.com

- AB testing
这里泛指 ab testing 中的Hypothesis Testing 以及前后期的实验设计和对 pm 的实验解释和建议。

实验设计的话,这个希望大家能上一下 udacity 的ab testing 课。
  • 前期实验设计:

metric design,sample size,population,flow design, experiment period,
每一个都有很多的考点,基于 business 的metric,sample size计算的四个要素(其中的标准差怎么算,基于什么分布),实验过程中就已经显著了怎么办,这些都是考点。

  • 后期实验分析:

Hypothesis Testing 之前的数理统计学过,主要就是 t-test 和 z-test,他们的区别是什么,什么时候用哪个(像proportion就是用 z-test)。检验结果的解释,常考 p-value 的tech/ no-tech 解释,这个要背好,有时会问区间估计。然后就是怎么和 product manager沟通,怎么解释,不显著怎么办,他坚持要 launch 怎么办,其他的指标trade off (e.g engagement and ads revenue) …

- Case study
这个也是必考的,是不是感觉 DS 真的非常多分析和 collab工作。一般来说有几个大类,某个指标上升/下降了怎么分析,要 launch 一个新的 feature 怎么分析,这都是case by case,希望面的时候有机会可以下载他们的 product 亲身体验一下是最好的,在面试的过程“有意”的提及自己的使用感受,会比较加分。这里我提供一个我分析的框架,附上图片了,大家可以按照这个模板挑一些重点分析,千万别生搬硬套。如果有不理解的,欢迎留言交流。

- take home challenge
我一共做了 8 个。现在一般公司要求做一个 take home,确实挺花时间的这个,大家可以认真的做 1-2 个 project,然后都把内容写成 function,尤其是画图和 modeling,这样的话基本所有的 take home 都可以套用。大家提交 Jupiter notebook的时候最好在顶部写一个 summary markdown,把目录和重要结论写上,会比较加分。然后就是代码尽量多写一写 comments,图片或者分析结果后面多加一些解释。建议大家也别话太长时间,一般 10-12 小时足够了。不太好 share my code,附件share了其中一个的 framework,供大家参考,GitHub 里有很多优秀的 project,建议大家多看看,构建一个自己的 framework。

- ML
DS 的话看具体的岗位,一般来说对 linear regression/ LR 掌握细节,然后把ML八股文那些准备一下就够了。具体的准备细节放在下面的 MLE 里写。

2.2 MLE
大家搜岗位的时候别只看 data scientist,MLE。有的时候,岗位的名称是 software engineer, data science/AI framework。
- Algo
Algo 就是重中之重了,估计占 50-60%的时间,把自己去面 sde 去准备,medium - hard level 的题。刷题应该其他地里的帖子说的更好,我就简单说一下我自己刷题的情况,我刷了大概 50 题左右。建议大家多看看地里面经,一边面一边刷,一定要按照算法类型刷,像 DFS/BFS 是刷的重点。每个题下面都有 similar question,建议一起刷了。每个题都可能有很多解法,多看看 discussion,总结一下别人的思路以及复杂度。lz 从最开始的DFS都不会写,到最后 AWS SDE vo coding 都做出来了,题不在多,相信大家多思考和总结,每晚睡前like洗澡的时候,回想一下自己今天刷了哪些题,属于什么类型,有什么样的写法,把他们像快照一样存起来,第二天刷题前再回想一下。刷题真的是一个痛并快乐的过程,有的时候 debug 很久也不知道为什么过不了,气的睡不着,最后做出来后又十分的畅快,建议大家加个小分队,相互鼓励!

这个算法的介绍推荐大家看看 bilibili.com

- ML
因为 LZ 平时工作接触这块比较多,就没有花太多的时候,把网上的 ML 面试题看了一下就没有太多的复习了。这一块一般考察深度和广度,深度就是具体的理论,广度就是各个算法之间的 pros and cons。
深度一般考察logistic,linear regression,naive bayesian,尤其是 LR,一定要吃透。LZ 举几个例子,看看大家觉得自己有没有准备到位。
  • LR 的基本假设是什么,数据服从什么分布,是生成还是判别模型
  • LR 的优缺点
  • LR 和 linear regression有什么不一样(都是广义的线性回归,优化目标区别,LR 鲁棒性更好)
  • 怎么防止过拟合
  • 为什么正则可以防止过拟合,L1/L2 区别,分别是什么先验?L1不可导怎么办(坐标轴下降法,最小角回归)
  • Cost function 是什么,优化目标函数是似然函数,会推导么,为什么要用对数似然
  • 参数怎么求解(梯度下降法,随机梯度下降法,区别是什么,后面这几个知道更好 like 牛顿法,LBFGS,BFGS, OWLQN)
  • 特征高度相关怎么办,参数会有什么影响
  • 不一定考,LR 在怎么并行,batch gradient descent,并行的工具是什么?


广度的话就是 ML 的八股文,地里应该有,一定会考的比如各种 metric(precision, recall, AUC 是重点,怎么来的,数据 balance 和 imbalance 应该用什么),random forest 和 xgb 有什么差别,这个一般是根据对话和 resume 确定的,自己不懂的东西不要说,不要写。一般不会让你去推 xgb 的,深度到 2阶导,重要的参数,并行就可以了。网上有人推荐 ESL 什么的,真的不太推荐,耗时耗力。我一般都是直接搜某个算法考点,推导等等,看别人总结的帖子,如果能 cover 住就可以了,其实面试官也不一定能深度理解的,面试嘛,让他相信你懂就可以了。
另一块就是 deep learning 的东西,这个看具体的岗位,有的需要 NLP,有的需要 perception。如果不是很对口的话,其实没有必要浪费时间面试,因为 resume 里写了一些 NLP,所以买时的时候考了 topic modeling,BERT,transformer 等等,怎么调参,怎么防止 overfit,怎么还有一些工程实现的东西,这个 case by case 了,如果大家有相关的问题的话,可以留言讨论一下。

- ML system design
这个一般 experienced hire 会考的,看你面的岗位,我没有被问到 MLOps的东西。这个平时有时间多看看 blog,like airbnb,Uber,Netflix 的,可以学到很多,短效的话,把下面的两个 link 多看看。有的面试管是告诉你一个情况,让你设计,也有的是让你说你的一个 project,然后从 data collection 一直go through 到 deployment,各个环节的细节一定多练习,自己不熟悉的板块可以问问其他组员了解一个大概,到时候说别的 team 负责这一块,但是你知道大概的 framework,就可以了。

towardsdatascience.com
huyenchip.com

3. 一些 tricky things 和碎碎念
  • 准备 cheat sheet,像附件的 case study 的 framework,太多了记不住,我面试的时候也会看的,没什么不好意思的。如果大家能多练习,背下来当然是最好的。
  • 多找人内推,地里是个很不错的资源,每天都会刷一些有没有新的帖子来内推,很高效。如果有想去的公司,我也会先搜一下地里有么有同胞内推 。内推的模板,自我介绍都准备好,到时候发邮件效率高。
    jobs.1point3acres.com
  • 准备一个 Excel 记录自己的申请过程,时间,job link,及时和 hr follow up
    docs.google.com
  • 准备多个简历,DS 的,MLE 的,SDE 的,关键词不一样的,像 DS 的话一些 collaboration,metric 的 keyword 一定要有,根据自己的 dream company 设计一下
  • 一定要注意身体,千万别把身体累坏了,奖励餐多安排安排。
  • 工作嘛,缘分最重要。LZ 一个 quant,做偏 ML 和 NLP 的东西,也是跳到了一个自己完全不熟悉的自动驾驶领域,也成了转码大军的一员。以为自己会 quant 一路到黑,最后创业做一个自己 fund。也会思考自己是不是就远离金融了,之前的经验和学习都白费了。但是人生无尽可能,谁知道未来会发生什么呢,趁还年轻可以奋斗,何不尝试一下呢。
  • 希望大家找工作一切顺利!多加米!
  • 509
61条回复