Facebook DS新鲜面试题你会做吗?

原创: elroyxiao
Data Scientist求职,很多人都会被问到analytics面试题目(经常也被称为 case studies)。题目往往open ended,没有固定的答案,考察的是你分析问题的思路是否靠谱。

有位同学elroyxiao近期分享了Facebook Data Scientist Summer Intern的电面面经:

楼主是美本数学专业毕业,现在在fordham data analytics研究生一年级在读,由于本科同学比较厉害,很容易要到了FB DS的refer,… HR轮没什么好说的,… HR当天给了回复安排首轮电面,… 面试官是一个白人小哥… 首先也是双方自我介绍,然后要我描述了一个data project,这个部分算是驾轻就熟了,感觉ok然后就进入了case的考核

来,看看她被面了什么

如果你来面,

会怎么回答?

第一个问题可以说是非常细节并且问的是instagram,可以说是新题了,题目如下:

  • Instagram为了使用户方便launch了可以迅速切换账号的button,以前想要切换必须退出当前账号再登陆,现在简化了这个步骤,点屏幕右下方就可直接切换,请问如何判断这些账户来自同一个user?

我的回答有:device number,ip address,geographic data,demographic data,很快就被面试官抓住了漏洞,他就问我怎么用demographic 区分,我想了一想发现不好区分,因为使用这个功能的用户往往想获取不同的内容,大概率想在另一个账户上be anonymous,我直接表达了我的意思,他接着问

有没有人不想be anonmous的?

(楼主这个时候已经是抓耳挠腮了,原本以为这个面试更偏向考logic,没想到问的这么细节)

对于这个follow-up我给的回答是:有一些人会为了给某个post点赞去创建很多账号,这样他们的目的就并不是获取内容,而是做popularity contest了。。

接下来又有follow-up:

你怎么判断哪些账户属于该类?

我:可以根据点赞的时间间隔,往往这种点赞的时间间隔会更加evenly distributed,因为用户想一次性点完所有赞就会连续的切换账号。

(说完这个我就陷入了沉思,好在面试官给了一个提示,说我们有user name,follower,following的data)

然后我就上道了,说我们可以通过following和follower的intersection来判断这些账户可能来自于同一个账户,还可以通过取user_name 的pattern

接下来又有follow-up:

follower会有什么intersection?

我:因为是水军账户所以follower不会有什么real people,可能就是一些广告,推销或者色情的账户

(这part就过了,又问了下一个问题,下一个问题还在预料之中,是一个counter-metric的问题)

*我们做完了test后,发布了这个feature,但是只看到了用户增长,没看到time spent的增长,为什么?

我:data是否correct?test有没有错,有没有population selection bias?

(很快被打断了,他说test啥的都没问题,直接说原因)

我:novelty effect,在一个可能这个数据是短期的,我们可以等一等,看看以后time spent会不会因为network effect增长。(他好像没大听懂我说的network effect,不过我也没有过多解释了,直接就下一个问题了)

  • 不做test直接就roll out 给所有用户好不好?

我:不好,太risky,可能有用户会抵制,从而导致用户流失。

接着follow-up:

哪些用户会抵制?哪些用户会不喜欢这个feature?

我:(叹了口气,感觉完全被自己带进沟里了,然后面试官也笑了,想了很久)就说了父母会抵制,会在生活中制止刷子女花很多时间刷ins

(接着就是陷入沉思,想想还有没有别的可能,想了很久没想到,这里欢迎大家补充)

我:(反问面试官)你觉得还有谁不喜欢?

他:people who don’t like changes。。。

(我都想掀桌了,这么显而易见的答案我居然没有先说出来)

接着最后一个问题:

如何判断time spent的增长不是因为这个new feature?

我:cohort analysis去filter out用这个feature的用户,然后dive further to see what’s going on.

接下来还有SQL题目

在最后的提问环节

我就问了FB DS最大的challenge是什么,他说new perspective,然后我就明白了为什么case部分要问的那么细节,所以地理的朋友们准备的时候一定要多想想面对某一个问题,导致这个问题的可能的所有原因,越细越好,越creative越好,最好是不是别人能想到的。

其实我感觉整个过程还比较chill,沟通也很smooth,但是能不能过只能看天了,能走到这步我已经很知足了。。

插话:elroyxiao同学刚读研,尽管回答不算完美,但是这场面试表现也算是挺好的了。在他这个阶段的很多同学,看到题目毫无思路,面完了可能都不记得问了啥、自己回答了啥。

1 Like

多谢楼主分享。以下是我的思路:

  1. 如何判断账户来自同一个user?
    分两个方向答。
  • 内部证据:来自同一个IP或Device。这种情况是最容易的,也是最精确的。若两个账号同时出现在一个device超过一定的阈值,就可以基本判断来自一个人。这个阈值可以通过历史数据找,在已经确认的里面看。这就牵扯到ROC相关的问题。若我们想要尽量包含大部分情况,就用低阈值;若我们要提高精度就用高阈值。取决于我们要用这个干什么,相关的cost和benefit是什么。跟Fraud和identify potential customer问题很像。
  • 外部证据:在内部证据不足的时候需要外部。最简单的是,找到已经label好的数据,run machine learning。Features分:Demo/Profile, Behavior, Interest, NLP, Picture Content, Followers, Following. ML的好处就是,你可以把一切可能相关的丢进去,模型会告诉你不同feature的weight是什么,不用认为假设。Label数据其实是比较容易获得的,从内部证据就可以得到很靠谱的label数据,然后用外部证据feature train模型就好了。这道题,问的人其实是想知道你会考虑哪些feature,无论是用ML还是用其他分析(Correlation,Guess),都离不开找到合理的feature。除了IP,device,location这种browsing behavior,就可以考虑Follwer/Following/NLP. 同一个账户Follower会有交集,交集的质量也是要考量的。加入交集部分大家都是朋友,就说明,你的朋友圈在follow你的两个account,所以很大概率是一个人。加入交集部分大家都基本不认识,说明他们只是对这两个account感兴趣,并不是你的朋友圈,这种情况只要是类似的两个account都会出现。比如两个舞蹈大V,一帮爱跳舞的都follow了,但是他们之间并不认识。至于Following,其实是不太准确的,因为很多人建两个account是打算做不一样的事情的,可能一个是私人账号,一个是公共账号,选择要follow的人会很不一样。NLP是很好的一个角度,同样的账号,名字可能是很像的,头像可能是一个人(我就是这种情况)。其实对于Network相关的Feature都可以这么考虑:1. Network都有谁;2. Network的质量如何(Network里面大家是不是都认识)。往往可以判断Fraud Account;3. NLP中找出证据。
  1. 有没有人不想Anonymous?
    比如一个是营销号。也比如分两个不同的朋友圈,不同的interest。两个不同的目的。如何判断?
  • 这也是想问你的Feature Sense。就是对产品的Feature的了解,和怎么用他们的第六感。这就是根据你上面的Hypothesis如何validate。同样,一切的问题皆可分为内部矛盾和外部矛盾。内部:用一样的名字啊,account没有设置隐私啊,互相promote啊之类的就都是用户自己搞出来的内部证据。外部:follower是不是有很大交集,Follower是不是比较多样化而不是仅局限于某一类,是不是经常在同样的圈子活跃点赞留言。
  1. 判断水军?
    这就是一个很典型的Fraud题型,非常万能常见。我的万能套路就是:
  • 建模。Label的数据直接上ML,没有label就是上Anomoly detection模型(SVM, Clustering, LOF)。Industry best practice是两个都上,这样既能抓住有前科的,也能抓住新的犯罪者。Label很好弄的,就是Spam Report啊。

  • Fraud就要考虑ROI。假如我们的目的就是Block这种水军,就要考虑模型的Recall和precision以及对应的cost and benefit。这个往往通过理论计算成本(建模看如果一个用户被冤枉,会怎么在短期长期影响他的活跃度),再通过AB testing来看实际的rate来判断。

  • 最后的方案Best Practice是分三层。高危-直接block;中间的-加进一步的validation比如发警告;低危直接放行。

  • 最后也就是最重要的有什么Feature可以帮助我们判断:同样这些feature可以放在任何模型里,weight可以再调,通过label数据或者,anomoly detection的结果的人为error analysis(就是随机看预测的结果,用肉眼看结果是不是合理。很多时候人为分析是最简单高效的。因为我们可以通过采样的方法,大家知道样本30就基本可以follow normal distribution了。而且往往30个全部对了,就基本不用再看confidence interval了。然后也可以用MDE来判断要多少采样合适)。

  • Demo/Profile信息:Age,Profile描述长度,意义度,头像的清晰度,是不是自己的original头像;

  • Network Feature: 朋友少,follow的也少,network质量不好;

  • Behavior:Post很少,Like Comment 很单一,Session time很短明显不像是正常人玩Inst,不看Inst story,不看inst recommendation内容,不怎么浏览inst news feed;

  • Membership信息:注册时长,是不是Premium用户,重度用户;

  • Browsing:IP突然换了,Device突然换了,Cookie都清零。

  • Fraud Account 常见Feature:IP老换,一个IP明显有很多account,操作很单一,或者操作很频繁超过常人,经常发SPAM信息,被人report过;

  • Hacked Account:突然Profile改了,改的跟原先很不一样,行为异常突然很多或者很少,关注以前完全不感兴趣内容,搜索不感兴趣的东西,某一项activity突然变化。

  1. AB testing相关问题
    这里面试官是想引出AB testing的话题的。所以套ab testing就好了。
  • 直接走你当然不好,很多我们不知道的影响,只有test才知道。
  • Test是有点难度的,因为是一个Social Network,假如我们想看用户活跃度,那么能switch这件事除了会影响使用者,还是会影响其他人,观看者。所以本身就比较难分离开AB组。最好的方法可能是尽量找到分离的两个市场,比如这两拨人很类似,但是彼此的network没有什么交集,这样的地方做ABtesting。
  1. 发布了一个feature,用户增长,但是总time spend一样:
    这其实是一道完全分开的题。test有没有错,这种一般不考虑,因为是问你一个metrics的变化,让你找原因。
  • 首先要搞清楚所谓time spend没有增长是什么意思?总时间?人均time spend?这就类似于分子分母看问题,先看是不是再找原因。如果人均一样,那总量增加了,是好事。如果人均变短,总时间不变,那我们可能要进一步看why了。万物皆可内部外部:
  • 内部原因:大化小,看是不是所有人都一样的反应,还是有不一样的反应互相抵消掉了。再分而治之(Cohort Analysis根据注册时间或者是否有第二账号)。是不是新增加的session time稀释掉了OG account session time。用户增长是不是大部分来自于spam从而影响了网络环境,损害了其他人的体验。真实的用户增长是多少?假如没变化,那么session time 没变化蛮正常,说明这个feature 并没有增加人均session time。产品有没有Bug(用户反馈)。
  • 外部原因:因为季节性,竞争对手,市场大环境的改变,大家没有那么engage。
  1. 谁可能不喜欢这个Feature
  • 内部不喜欢:假如我想匿名,这种switch的方法,我会担心被人track到。我并不想link我的两个account。可能会发错account(我自己经常这样)。比如我有一个account专门分组父母不可见,打算发内容,不小心发到另一个account,然后被父母看见了会很烦。说实话这种简化了某种事情的行为,其实大部分人都喜欢,几乎不存在面试官说的‘people who don’t like changes’。我不觉得这个回答make sense。就是本来你要花10分钟的事情,现在给你1分钟搞定,大部分人只是会有不安感,但不会有人说’哎呀 你简化了我的操作,我好不喜欢啊‘
  • 外部不喜欢:这个Feature带来很多人switch account很方便,就会复制粘贴内容,发好几遍,看得人会觉得烦。也有人不喜欢一个人有好几个account,要分开follow,觉得哎呀好虚伪什么的。
  1. Time Spend增长,不是因为这个New Features?
    内外两部分。万物皆可。
    内部:使用这个feature的用户和不适用这个feature的用户,其他条件类似的情况下,是不是一样增长。
    外部:Follow使用new feature的用户的用户和不follow的,同上

Thank you for sharing! 很详细 学习了

过了一年,再答,好多不一样的理解。

  1. Instagram为了使用户方便launch了可以迅速切换账号的button,以前想要切换必须退出当前账号再登陆,现在简化了这个步骤,点屏幕右下方就可直接切换,请问如何判断这些账户来自同一个user?
    Depends on Business Hypothesis & NSM
  • We want to identify same user and give them the ability to switch → Simplify → +Session: 这种就是要High Precision的方法。给一个错误的答案很危险。只有email 和手机号
  • We want to increase the adoption rate. Not many people know and use it now:这种就是可以要High Recall,和稍微low 一点都precision. Framework: Data & Features Brainstorming & Hypothesis of correlation => Statistical Analysis => AB Testing if needed. 主要回答Data:Profile Info (name, photo, bio direct link); Network overlap (especially close-friend); Behavior (same time & location login, tagged together, IP, device).
  1. 有没有人不想be anonmous的?OFC. Often time user put direct link in bio for the other account. For marketing, specific interest etc. Profile Info (using HD picture, good bio); Activity (tagging other people, Dm, follow more people); Network (follow back).

  2. 我们做完了test后,发布了这个feature,但是只看到了用户增长,没看到time spent的增长,为什么?Assuming the AB testing is valid, and we use the DAU as Driver Metrics, Time spend as Guardrails metrics. Both are significant. We need to see

  • Lift: If it’s big enough to cause problem. Looks like no lift. No significant time spend increase.
  • The goal is DAU. So if DAU increase significantly with good lift, then the test is passed and good to go. But we also need to confirm DAU is actually a good metrics to drive NSM. If you calculate DAU by number of accounts, these are coming from same person are not count as one. It might indicate session per real user didn’t change, activity didn’t change. We can investigate further by real user. It can be also not a bad thing, user might saving more time with new features, although same session time, but might be more engage. I will check # of post (story & post) as engagement metrics to see if it has a good lift and p-value (need to do p-value correction either FDR).
  1. 哪些用户会抵制?哪些用户会不喜欢这个feature?真的很容易发错account。甚至回复的时候,用错account,很尴尬的。而且还会follow错人。很容易混淆。这题应该是在考,product sense。看你对产品有多了解

  2. 如何判断time spent的增长不是因为这个new feature?一般来说AB testing是最容易得到答案。但是,这里他想问的应该是feature已经出来了,怎么看。就没办法AB了。Casual Inference: Cohort analysis, Propensity score matching, Regression discontinuity.

竟然忘了提一句Adoption Rate。还挺危险的。这个Feature只是一个optional feature。所以我们一定是要看AdoptionRate的。最后一题 如何判断time spent的增长不是因为这个new feature?也是要提这个metrics。要有明显的correlation才可以(类似用户,用和没用的区别 对 Goal Metrics 的影响)