[数据科学DS/BA面经总结] 资深面试官眼中的数据科学case study面试 - 附推荐系统面经

我是Techie的数据科学项目负责人 汪淼(Jason)。这篇文章原文首发于我的Techie数据科学文章: 资深面试官眼中的数据科学案例分析面试, 纯手打原创, 分享到论坛中和大家一起交流讨论。如果感兴趣其他数据科学,数据分析面试文章,也可以浏览Techie面经题解系列文章,也欢迎大家加入Techie的免费会员,获取更多面经干货文章。

techie_posts

数据科学岗位的面试会涉及到编程算法, SQL, 案例分析(case study) 等不同内容, 其中大家普遍反映最难准备的就是案例分析这类面试题目. 这类问题涵盖的知识范围很广, 而且根据公司和具体应聘岗位(Data Analyst, Data Scientist, Machine Learning Engineer)的不同, 案例分析面试的考察点又有很大区别, 这导致很多求职者在有限的备考时间内很难抓住重点.

我 (汪淼Jason) 博士毕业后在业界工作了近十年, 在硅谷一线大厂做过Data scientist和Machine Learning Engineer, 以面试官和hiring manager的身份参加过近百场数据科学岗位面试, 最近几年我也帮忙辅导过很多朋友跳槽或转行进入数据科学领域. 我把这些经验总结成了这篇6千字长文分享给大家, 希望能对正在求职的朋友们有所帮助.

在这篇文章中, 我首先会从面试官角度解析数据科学案例分析面试的考点, 然后通过一道我自己编的包含11个followups的面试题给大家展示不同职位面试考察形式, 最后会给大家提一些备考建议.

如果你想跟我一起体验数据科学面试流程, 为你指导面试备考或者答题过程中的问题, 欢迎报名参加Techie备受好评的数据科学集训营以及数据科学模拟面试服务. 如果你在数据科学备考或学习过程中有任何问题, 也欢迎扫描下方的二维码添加我的微信, 期待和大家的沟通!

1. 案例分析面试考什么?

数据科学案例分析面试在不同公司的不同岗位招聘中考点区别很大, 有时候甚至面试名称都不一样:

  • 在Data Analyst or Business Analyst岗位面试中, 它通常被叫做case study interview, 涉及的内容包括统计理论, A/B testing实验设计, SQL, product sense等.
  • 在Data Scientist or Machine Learning Engineer面试中, 它会被叫做machine learning applications/system interview, machine learning theory interview等等, 涉及的内容包括机器学习模型知识, machine learning workflow design等, 有时也会包括一些类似于软件工程师面试中distributed system design的内容.

在面试过程中, 面试官会首先结合具体的产品应用场景提出一个问题, 比如

[Data Analyst] How to evaluate the business impact of a new feature in Instagram Stories?

[Data Scientist] How to design a user targeting system to improve email click rate?

随后求职者需要在30-40mins的时间内, 通过与面试官的沟通, 给出一套完整的解决方案. 在这个过程中, 面试官主要考察以下3点:

  • 分析问题的能力 - systematic thinking. 在case study面试中, 我们第一步要做的事情就是transfer the abstract business question to a verifiable problem with quantitative approaches. 求职者需要通过与面试官的沟通来clarify questions and define metrics. 很可惜的是, 很多junior求职者会忽视这一点, 经常在面试前5分钟问题还没定义清楚的情况下就开始在白板上写公式, 这种行为大部分情况下都是red flag.
  • 对基础知识点的深刻理解. Case study面试在很多情况下也包含理论知识考察的部分. 现在极少有公司会利用填空选择题来考察机器学习理论问题, 但是面试官会在case study问题讨论中, 结合你选取的分析方法来针对一两个知识点做deep dive. 这里考察的知识点一般都是经典的机器学习基础知识, 不会涉及到很复杂的概念或者最近几个月新发布的研究成果.
  • 数据系统设计能力. 优秀的case study solution一定是建立在一套完整的分析框架基础上, 它保证了我们在分析问题的时候不漏掉任何一个关键环节, 这在实际工作中也是非常重要的. 对于data analysis problem, 这个框架可能是A/B testing experimental design framework. 对于machine learning modeling problem, 这个框架可能是model training workflow. 建议求职者在备考时把常见的解决问题框架总结好 (在后文的具体案例中我给出了2个例子), 面试时甚至可以把这个框架直接画在白板上, 然后有侧重点地进行讨论. 很多朋友反映在case study面试时"无话可说", 出现这种问题的主要原因是面试时脑中没有一个预先总结好的框架.

以上讲的内容比较抽象, 下面我结合一道经典的recommendation system case study面试题来做举例说明.

2. 一道实战面试题 - 广告推荐系统设计

Interview Question: How to design a recommendation system to optimize ads efficiency on Facebook Platform?

推荐系统问题是case study面试的常见内容. 类似的大部分问题主要是关注在推荐系统content relevance & personalization的方向. 而这道题中又引入了在线广告这个场景, 因此考察角度会更加多样化. 这道题目中包含的11个followups来自于我在工作和面试中的经验总结, 基本包含了数据科学不同岗位(Data Analyst, Data Scientist, Machine Learning Sngineer)面试中的常见考点, 希望能给大家在面试备考方向上提供一些参考.

Q1: How to define “ads efficiency”?

这一步就是我在前面提到的"clarify questions and define metrics". 它在任何数据科学岗位的case study面试中都是重要环节. 在很多情况下, 面试官甚至会故意在介绍面试题的时候不给出清晰的metric definition, 而是希望求职者主动与面试官沟通来clarifiy这些细节.

回到这个问题, 对于efficiency的定义, 首先可以从每个广告推荐商品对应的engagement metrics入手, 包括: impressions, clicks, conversions, conversions without cancellation等等.

进一步地, 我们可以把广告相关的cost引入到efficiency的定义, 包括: Cost per Click (CPC), Cost per Acquisition (CPA), Return on Investment (ROI) 等.

此外, 如果求职者在广告行业有一些domain knowledge的话, 还可以讨论一些advanced metrics, 比如ads incremental value, 即对比没有广告情况下organic traffic带来的revenue与有广告情况下整体revenue的增量差值. 其他可以提到的影响ads efficiency定义的因素还包括, ads attribution logic, user life time value (LTV) 等.

对这个问题的讨论可以算是Data Analyst面试最关键的环节, 它会与后续的实验设计等步骤相关联, 因此讨论得会比较细致. 而对于Machine Learning Engineer岗位的面试, 我们一般不会在这一步停留过长时间.

Q2: What data do you need?

这一步包括feature definition和table schema design. 在实际工作中, 很多情况下我们做数据分析或者建模工作所需要的数据并不是现成的. 我们需要自己定义table schema甚至自己在产品中添加log来收集数据. 这也是实际工作与kaggle competitions或course projects的区别之一.

Table schema design并不难, 我们需要注意结合数据内容的安全级别和数据量大小把信息分类存放,比如

  • User profile table

  • Product feature table

  • User-item activities table

  • Ads table

对于Data Scientist和ML engineer岗位的case study, 这一步也会涉及到label definition的讨论. 举一个简单的例子: 对于某一个用户, 如果我们optimize for ads click的话, 我们可以把candidate products中用户点击过的广告商品定义为positive label (1). 那么如何定义negative label (0)? 是不是要把其他全部商品定义为negative label? 一个值得讨论的处理方法是: 结合impression data, 只把viewed but not clicked商品定义为negative label.

Q3: How to design a rule-based recommendation system?

在case study面试中, 我们不一定非要给出model-based solution. 结合具体的应用场景和产品要求, rule-based solution在很多情况下效果并不差, 比如在计算实时性要求较高, 或者推荐系统中用户行为数据较少(比如cold-start problem)的情况下, 我们更倾向于先给出non personalized solution作为baseline.

在这一步中, 我们可以把商品推荐方法设定成: Always recommend the top 5 popular handbags among female users in the age range between 20 and 30 in United States. 很显然, 要想得到这个信息, 我们可以利用在Q2中设计的tables做SQL query. 这也就是case study面试中比较常见的SQL考法: 求职者根据优化目标, 自己设计table, 自己设计问题, 然后自己写出query来解决它.

Q4: How to design a personalized recommendation system?

以rule-based方法为baseline, 我们可以进一步利用supervised learning model来优化推荐系统的content relevance. 在这里需要注意的是, 不要直接进入model loss function细节的讨论, 而是最好先把整个machine learning workflow快速介绍一下, 如下图所示:

‌这就是我前面提到的解决问题框架之一, 看上去确实非常简单, 但里面每一个环节都可以进一步深挖. 比如:

Q4.1: How to deal with categorical features at feature transformation stage?

这里涉及到feature encoding的方法, 比如one-hot encoding, label encoding, target encoding等. 如果选择用one-hot encoding这种sparse representation方法的话, 后续也要考虑模型对sparse feature的处理能力, 很多情况下我们需要做降维处理. 除了Principal Component Analysis (PCA)方法外, Neural Network Embedding是很好用的降维方法. 而如果选用embedding方法的话, 又涉及到这个Neural Network训练使用的label与原推荐系统模型使用的label是否一致的问题.

Q4.2: When and why do we need to do feature normalization?

Feature transformation这一步涉及到很多内容, 前面的Q4.1算是feature representation的处理, 其他的操作还有feature normalization, missing value handling等等. 其中feature normalization就是scale all the numeric feature values, 它可以在机器学习模型参数求解的过程中可以帮助数值优化算法更快收敛到最优解. 但这个操作并不是必须的, 需要考虑feature的物理意义.

由于面试时间的限制, 肯定不可能对每一个环节都做面面俱到的讨论. 因此在这一步面试官会选择1-2个方向做deep dive.

Q5: How to design & optimize your recommendation model?

对于一部分data scientist岗位和大部分machine learning engineer岗位, model theory的考察是必不可少的. 就像我在上文提到的, 在这里面试官要考察的是对基础知识点的深刻理解. 两个关键词: “基础"和"深刻”. 比如, 设计推荐系统模型时我们可以直接把它建模成一个logistic regression分类问题, 那么面试官可能会针对logisitic regression提出这样一个问题:

Q5.1. What’s the difference and correlation between ordinary linear regression and logistic regression?

这个问题回答的角度有很多, 算是一个开放式问题. 但是, 如果我们只回答"两者的Model assumption不同"或者"两种model对应的label type不同(continuous vs. categorical)", 那么一般很难令面试官满意. 我建议的回答角度是, 在Generalized Linear Model (GLM)的框架下对两个model的assumption进行比较. 当然完全没必要当场把GLM的复杂定义全写出来, 只要展示出两个这Model是在 g(E(Y|X)) = X*beta的框架下, 根据不同的assumption选用了对应的link function g(). 就可以了.

可能很多朋友对GLM很不屑, 觉得它很土. 那咱们还是回来讨论推荐系统模型: How to design your recommendation model?

首先, 推荐系统至少包括两部分: candidates generation 和 fine-tune scoring. 前面提到的logistic regression模型是在fine-tune scoring阶段的一种基本方法, 我们回过头来讨论candidates generation这一步. 我们从简单到复杂有多种不同的模型选择:

  • K-nearest neighbor: 也就是collaborative filtering最简单的实现方法, 直接基于item-based or user-based方法找出用户可能喜欢的一组商品. 模型比较简单, 更新速度快.
  • Matrix Factorization: 综合item & user全部信息进行推荐, 精度较高. 但每次计算比较耗时, 不便于实时更新.
  • Neural Network: 可以整合更多user profile信息进入模型, 是比Matrix Factorization更加通用的方法, 计算精度更高. 但是模型更加复杂, 做实时预测时会有一些延时或者需要较多computation resource.‌

对模型理论知识点的准备, 不需要过分追求很新很难很高级的模型. 首先要把最基础的机器学习模型知识点掌握清楚, 其次要注意多对不同模型的特点做横向比较. 面试官希望你清楚为什么选用了这个模型, 它背后的intuition是什么? 你权衡了哪些不同的tradeoffs, e.g. accuracy, latency performance, etc?

由于论坛篇幅的限制,后面更加重要的第6-11题follow-ups没有办法放在这里。感兴趣的小伙伴可以看我在这里写的Techie面经总结原文:资深面试官眼中的数据科学案例分析面试 . 如果大家对文章内容有任何问题或者建议的话,欢迎扫描下方的二维码加我微信。也欢迎大家加入Techie的免费会员,获取更多面经干货文章。期待和大家一起交流学习! 祝大家都能顺利通过面试,拿到理想的offer!

techie_posts