ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PayPal数据科学实习笔试面试全复盘:从贝叶斯到A/B测试

PayPal数据科学实习笔试面试全复盘:从贝叶斯到A/B测试 2019年那会儿我正在准备暑期实习的申请投了一圈大厂之后收到了PayPal的数据科学实习生笔试邀请。说实话当时挺意外的因为PayPal在国内的校招体量一直不大数据科学岗位更是少而精。整场笔试做下来最大的感受是这份卷子不考“背题”考的是你在真实业务里能不能用统计和机器学习的方法解决问题。后来我顺利拿到了面试机会也把这套题反反复复复盘了很多遍。今天把它整理出来结合我当时的答题思路和后来的工作体会给打算投数据科学方向的朋友做个参考。这套卷子整体考察的内容集中在概率统计、SQL、机器学习基础、案例分析四块题型上既有计算题也有开放式设计题还有一道编程题。和国内很多公司偏重机器学习八股文的风格不同PayPal的题目更偏向支付场景下的实际应用尤其重视你对“不确定性”和“业务约束”的理解。这可能和PayPal本身的业务属性有关——支付公司每天面对的是真实资金流、欺诈风险和用户体验的平衡数据科学家的核心价值是用数据帮助公司做决策而不是单纯地调参跑模型。1. 复盘2019年PayPal数据科学实习生招聘的完整链路1.1 简历关PayPal数据科学岗到底筛什么样的人先说说简历筛选。我当时的背景是985高校统计专业硕士在读有一段电商公司数据挖掘实习经历会Python和SQL机器学习项目主要是课程设计和一个小型的用户流失预测。坦白说这份简历在一众有顶会论文、大厂实习的同学面前并不算突出但最后还是拿到了笔试机会。后来我分析了一下能被筛中可能有三点原因第一我的实习经历和支付场景有交集做过交易风控相关的特征分析第二技能栈匹配度高PayPal数据科学岗的JD里明确写了需要Python、SQL和统计基础这三样我都在简历上给出了具体的落地场景不是简单写“熟练掌握”第三我在简历里写了一小段关于“辛普森悖论在用户分层分析中的应用”的思考可能引起了面试官的注意。这里给后来者一个建议投递数据科学岗的简历不要只堆工具名。PayPal这类公司的数据团队很看重业务理解力你写的每一个项目最好都能说清楚“业务问题是什么、我用了什么方法、结果带来了什么改变”。哪怕是一个小的课程项目只要你能把分析逻辑讲圆就比罗列一堆“精通TensorFlow”“熟悉Spark”更有说服力。1.2 笔试与面试的整体节奏PayPal校招的流程是网申 → 线上笔试 → 两轮技术面 → 一轮HR面。笔试是在一个在线平台上完成的限时90分钟题量不大但每道题都需要认真思考。我当时做下来的感觉是时间不算紧张但如果你对某个知识点不熟很容易在一道题上卡住后面就来不及。从题目风格来看这份卷子和国内互联网公司的数据科学笔试题有明显差异。国内很多公司喜欢出“大而全”的选择题考察机器学习理论细节比如SVM核函数的选择、XGBoost的参数意义。PayPal的题目则更加“应用题导向”很多问题会给你一段业务背景然后让你用统计或机器学习的方法给出解决方案。这意味着你不仅要懂原理还要知道在什么场景下用什么方法最合适。另外PayPal的面试环节也很特别几乎没有让你手撕红黑树之类的问题重点考察的是你如何定义问题、如何处理脏数据、如何评估模型效果、如何向非技术同事解释你的结论。这种风格贯穿了笔试和面试所以准备时需要有意识地训练自己的业务分析思维而不只是刷题。2. 笔试真题还原与核心解题思路2.1 第一题贝叶斯更新——信用卡盗刷检测里的条件概率这道题的背景是某支付平台上一笔交易被系统标记为“可疑”的概率是5%。在所有真实交易中正常交易被误标记为可疑的概率是2%盗刷交易被正确标记为可疑的概率是95%。假设平台的盗刷比例是0.1%问一笔交易被标记为可疑它确实被盗刷的概率是多少。这是一道非常经典的贝叶斯题直接套公式即可。设D为“交易是盗刷”F为“交易被标记为可疑”要求P(D|F)。先算出P(F) P(F|D) × P(D) P(F|非D) × P(非D) 0.95 × 0.001 0.02 × 0.999 ≈ 0.02093然后P(D|F) 0.95 × 0.001 / 0.02093 ≈ 4.5%。我当时做这道题的时候第一反应不是直接算而是先想了想PayPal为什么要出这道题。对于支付公司来说欺诈检测模型的precision直接决定了风控团队的工作效率——如果precision太低意味着风控人员要处理大量误报既浪费时间又影响用户体验。所以这道题表面在考贝叶斯公式实际在考察你对“先验概率如何影响后验结论”的理解。这里有一个值得展开的点很多人在计算时会忽略盗刷比例这个先验。如果没有0.1%这个数据单看“误标记率2%、正确标记率95%”会觉得被标记后大概率是盗刷但实际上由于盗刷本身极其罕见即使被标记了真正被盗刷的概率也只有4.5%左右。这就是贝叶斯思维的核心——先验概率对判断的影响。在回答时如果能补充一句“这说明在欺诈检测中模型precision低不一定是模型太差也可能是因为先验事件太少”会显得你理解得比较深入。2.2 第二题A/B测试的样本量与显著性判断题目背景PayPal想测试一个新的支付按钮样式是否能提高支付成功率。数据团队准备进行A/B测试当前支付成功率约为60%希望检测出2个百分点的提升即提升到62%显著性水平取0.05统计功效取0.8。问每组至少需要多少样本量。这个题考的是A/B测试最基础的样本量计算公式。在双样本比例检验的假设下每组样本量n的近似公式是n (Z_(1-α/2) Z_β)² × (p1(1-p1) p2(1-p2)) / (p1-p2)²其中α0.05双侧Z对应1.96β0.2功效0.8Z对应0.84。p10.60p20.62。代入计算p1(1-p1)0.24p2(1-p2)0.2356和是0.4756p1-p20.02平方是0.0004。分子(1.960.84)²7.84整体算下来大概是9321组。这道题的坑在哪里我见过不少人会直接用0.60和0.62的均值当作p去算得到的值差不多但公式的意义就不对了。两个比例的方差应该分开算尤其是当p1和p2接近时差距不大但p1、p2相距较远时就不能这么简化。此外还需要注意这里是双样本比例检验不是单样本。更有意思的是PayPal在后半问还加了一个开放性问题如果实测结果显示提升不显著你认为可能的原因有哪些如何排查。我当时列举了几点样本量不足特别是用户分组不均匀导致有效样本缩小、实验周期太短未覆盖到足够多的周中周末用户、存在干扰因素比如同时上线的其他推荐策略、指标选择不敏感支付成功率可能不是最能反映变化的指标等等。这类开放题没有标准答案但能看出你的实验思维是否完整。2.3 第三题SQL窗口函数——用户交易序列分析题干大致如下有一张交易表transactions包含字段user_id、trans_time交易时间、amount交易金额、channel交易渠道如web/mobile/app。要求查询每个用户的最近三次交易记录输出user_id、trans_time、amount、channel并按用户、时间排序。这道题考察的是窗口函数最直接的做法是使用ROW_NUMBER()SELECT user_id, trans_time, amount, channel FROM ( SELECT user_id, trans_time, amount, channel, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY trans_time DESC) AS rn FROM transactions ) t WHERE rn 3 ORDER BY user_id, trans_time DESC;这一问本身不难但PayPal在后面追加了一个进阶条件如果交易表中存在同一用户在同一秒内产生多笔交易比如批量支付的场景如何保证“最近三次交易”的排序是稳定且合理的。这个问题考的是窗口排序的稳定性。如果trans_time精确到秒同一秒内多笔交易无法用时间字段唯一确定顺序此时需要额外的排序键来打破平局。常见做法是加上一个自增的sequence字段或者使用金额作为次级排序条件。我在回答时建议加一个transaction_id作为最后的排序键因为自增ID能反映真实入库顺序用金额排序反而可能扭曲业务含义。这里有一个容易被忽略的SQL陷阱有些窗户函数写法里PARTITION BY的字段如果存在NULL值排序结果可能会和你预期不一样。实际工作中处理交易流水时一定要先确认时间字段的粒度是否足够必要时先用DATE_TRUNC或CAST处理时间格式。这道题的价值在于提醒大家数据科学岗位的SQL考察绝不是单纯的语法测试而是希望你在数据异常、字段存在歧义时能给出合理的处理策略。PayPal的交易数据量巨大时间戳冲突是家常便饭能提前想到这一点说明你有真实的大数据处理经验。2.4 第四题特征工程与模型评估——机器学习题题干大意平台要建立一个模型预测用户在未来7天内是否会发起退款。给出的特征包括历史退款次数、平均交易金额、交易频次、用户注册时长、客服工单数等。问(1) 你会如何构造标签(2) 如何评估模型(3) 预测正例的阈值如何选择。这道题没有标准答案但考察的知识点很密集。关于标签构造关键在于“观察时间窗口”和“预测时间窗口”的划分。我的思路是对每个用户取某个时间点T用T之前90天的特征数据做输入预测T到T7天是否发生退款。注意要避免数据泄漏比如不能用T7天之后的信息来构造特征也不能把和退款直接同期的交易金额当作历史特征。这在简历里写着“用户流失预测”项目时尤其容易忽略面试官追问两三轮就会露馅。关于模型评估由于退款用户占比通常较低可能只有1%左右准确率没有参考价值应该看AUC、PrecisionK或者召回率。具体选哪个指标取决于业务场景——如果退款预测是为了提前干预那么召回率很重要因为漏掉一个退款用户可能带来资损如果是为了触发风控审核那么precision更重要因为误报会消耗客服资源。关于阈值选择这题的精髓在于“threshold不是拍脑袋定的而是要结合成本收益”。为了建立“误报成本”和“漏报成本”的概念我当时假设每次误报需要客服人工审核成本是20元每次漏报导致退款平均损失是200元。在这样的设定下阈值应该偏向降低漏报即选择召回率较高的低阈值。同时可以按预测概率P的下发阈值来调节成本结构实际上做得更细一点可以按分段概率区间来评估期望收益而不只是定一个硬阈值。PayPal这种出题风格的背后逻辑是数据科学家不仅仅要会跑模型还要会计算“这个模型值不值得用”。这种业务成本思维是校招生最稀缺的能力也是面试官最容易拉开差距的考察点。2.5 编程题Python实现一个简单的逻辑回归训练循环笔试的最后一道题是手写一个逻辑回归的训练循环要求用梯度下降法不能用现成库比如sklearn。题目会提供一个二维的numpy数组X和一个标签向量y要求返回训练后的权重w和偏置b。我的答案是先写出sigmoid函数和损失函数然后循环若干轮每次计算梯度并更新参数。代码大致如下import numpy as np def sigmoid(z): return 1 / (1 np.exp(-z)) def train_logistic_regression(X, y, lr0.01, num_iters1000): m, n X.shape w np.zeros((n, 1)) b 0.0 for i in range(num_iters): z np.dot(X, w) b a sigmoid(z) dw np.dot(X.T, (a - y.reshape(-1, 1))) / m db np.sum(a - y.reshape(-1, 1)) / m w - lr * dw b - lr * db return w, b这里有几个细节需要注意。第一梯度表达式是X dot (a-y)/m很多人在推导时符号搞反导致梯度上升而不是下降。第二特征需要先做标准化否则梯度下降收敛很慢——我当时在答案里补充了一句“如果数据量纲差异大应提前用StandardScaler处理”这个细节加分会很明显。第三可以直接用for循环迭代但最好在答案里说明“实际工作中会用向量化实现避免显式循环”因为PayPal的数据量级是不可能用纯Python循环跑的。这道题的变形还可能是“在线学习场景下如何更新模型”或者“增加L2正则项后梯度如何变化”。如果时间允许准备时最好把逻辑回归从推导、实现到扩展全部过一遍。3. 面试轮次里的业务题与技术题拆解3.1 业务场景题如何设计一个实时欺诈交易拦截系统笔试通过的两周后我收到了面试邀请。第一轮技术面是视频面面试官是数据科学团队的资深成员开场聊了十来分钟简历之后抛出了一个场景题如果PayPal要设计一个实时欺诈交易拦截系统你会如何设计数据特征和模型策略。这个问题在国内互联网公司面试中也算常见但PayPal问得更细更关注系统的时效性和成本约束。我当时的回答框架是先明确问题定义判断“当前这笔交易是否可疑”需要在几百毫秒内给出结果。这不是一个离线批量预测任务而是一个实时打分任务。特征层面从用户历史行为、设备信息、交易上下文三个维度抽取特征。重点提了“交易频率突变”“多设备登录”“IP地理位置的合理性”这几个高强度信号。模型层面由于实时性要求高可以考虑梯度提升树或逻辑回归这类模型推理延迟低深度学习模型效果可能更好但需要权衡延迟和解释性。后置策略得分高的直接拒绝中风险的转入人工审核低风险的放行。这里我特意强调了一个关键点——在支付场景里“拒绝”是有成本的可能损失一笔真实交易所以需要设置动态阈值根据用户的历史可信度和交易时段等因素调整。面试官听后点了点头又问了一个跟进问题如果模型误判率很高你如何定位原因并快速修复。这里我给出的排查思路是先看是不是特征分布发生了漂移比如双11大促期间的交易特征和日常差异很大再看是不是训练数据和实时数据分布不一致最后考虑是否需要增加新的特征。这种“先找分布、再找特征、最后调模型”的排查顺序面试官反馈很认可。3.2 简历深挖怎么给自己挖坑又怎么填平第二轮技术面主要围绕简历项目展开。面试官会盯住一个项目连续追问直到确认你是真的做过、理解透彻而不是包装出来的。我当时被问最多的项目是“用户流失预测”大概经历了以下几个回合“你的正负样本怎么定义的”我说90天内没有再次下单视为流失观察起点是用户上一次活跃日期。面试官追问“为什么选90天而不是30天”我回答从业务角度看这个产品的购买周期是月付制30天太短容易把正常沉默用户误判为流失90天能覆盖两个完整购买周期是我通过分析用户下单间隔分布后确定的。“你做了哪些特征哪些最重要”我说特征包括用户活跃度、最近一次参与活动的时间、投诉次数、消费金额变化。最重要的特征是“最近一次参与活动的时间”因为流失大概率发生在用户互动停止后的一个周期内。“你的模型上线了吗效果怎么样”我如实说没有上线只是个课程项目。但我紧接着补充了如果上线需要做哪几步线上特征计算、模型监控、A/B测试设计。面试官认可了我对“模型上线”这件事的理解而不是只停留在调参。这里可以分享一个经验简历里写的每个项目都要提前想好“面试官可能追问的5个问题”包括样本定义、特征来源、评估指标、业务落地可能性、已知缺陷。尤其是缺陷主动承认会显得真实可靠比硬撑要好得多。3.3 行为面PayPal文化下的答题策略HR面没有技术问题但有几个问题是需要提前准备的比如“为什么选择PayPal”“你如何看待数据科学家的职责”“如果你发现你的分析结论和领导的想法相反你会怎么做”。我当时在回答“为什么选择PayPal”时提到了“数据科学在支付领域直接关联到真金白银的决策这样的场景能让人快速成长”同时也很坦诚地说“希望在国际化的平台积累跨境支付的经验”。后来想想PayPal作为外企比较看重候选人的沟通能力和跨文化协作意识回答时最好能体现自己可以清晰表达观点同时尊重不同时区、不同文化背景的合作者。另外一道题是“你未来5年的职业规划”。这个题看似套路但在外企面试里很重要因为他们想知道你是否能把个人发展和公司发展结合起来。我当时说前两年想成为一名能独立完成从数据分析到模型落地的数据科学家之后想往技术专家或者带小团队的方向发展但无论如何都不希望脱离业务现场。这个回答给了HR一个明确信号我是一个既想长期成长又愿意落地干活的人。4. 从这场面试看数据科学的能力栈与就业方向4.1 数据科学与大数据技术的就业方向很多人问数据科学和大数据技术到底有什么区别。以我后来的体会来划分大数据技术偏重数据工程比如搭建数据管道、维护数据仓库、保证数据质量和产出时效数据科学偏重从数据中提取价值比如做分析、建模、实验设计、辅助决策。从就业方向来看数据科学相关岗位大致有三个方向算法工程师/机器学习工程师侧重模型训练和部署通常需要扎实的编程能力和工程化能力工作内容偏向特征工程、模型迭代、性能优化。数据分析师/业务数据科学家侧重分析思维和业务洞察工作内容是做报表、分析异动原因、搭A/B测试、支持业务决策。PayPal的数据科学实习生岗位就更接近这个方向它不要求你发明新的模型但要求你懂统计、懂业务、能清晰沟通结论。研究型数据科学家一般要求博士学历做探索性研究和前沿算法在公司里更多以“创新探索”为导向。判断自己适合哪个方向可以问两个问题你是喜欢“把模型的准确率从90%提升到91%”还是“把业务的转化率从10%提升到12%”你更享受调试代码的过程还是更享受从数据中发现规律的过程这两个问题的答案通常能帮你定位。4.2 SEM数据科学工作流给我的启发点击归因到预算优化闭环这几年SEM搜索引擎营销领域的数据科学实践越来越成熟我看到一个比较完整的“点击归因-预算优化”的闭环流程和PayPal笔试中“成本收益分析”的思路很相似。SEM数据科学工作的第一步是点击归因。用户可能在多个渠道、多次点击后才最终转化如何把转化合理归属到某个关键词或广告组需要分配模型。简单做法是“最后一次点击归因”但误差很大进阶做法是“时间衰减归因”或“基于Shapley值的多触点归因”。这和PayPal面试中的“如何定义收益”本质上是同一个问题——你选用的归因方法直接决定了后面预算分配的优化方向。第二步是效果评估也就是在给定广告花费下评估每个关键词或人群带来的边际收益。数据科学家会把预算看成一种资源把每个渠道的转化成本曲线拟合出来然后通过最优化的方式分配预算。这和我在笔试里做的“阈值选择”逻辑完全一致——你先得知道增加一个单位资源能带来多少额外回报才能决定资源往哪里倾斜。第三步是反馈闭环。SEM投放不是一次性的每周都会有新的点击和转化数据回流。数据科学家的任务是把这些数据重新喂入模型更新归因权重和成本曲线然后输出新一轮的预算建议。这个过程要求模型具备快速迭代的能力也要求数据科学家和数据工程师密切配合。这个案例给所有准备面试人的启示是面试时不要只盯着“机器学习模型怎么调参”要多想想“模型结果会如何影响业务决策”。这正是PayPal这类业务导向的数据科学团队最看重的思维方式。4.3 数据科学职业核心能力我后来总结的模型从2019年到现在我自己也在不断复盘数据科学这个岗位真正需要的核心能力是什么。如果必须用一个简单的框架总结我会用“三力一性”业务理解力、量化分析力、工程执行力、沟通表达性。业务理解力你能不能把一个业务问题翻译成一个数据问题。比如“为什么这个渠道的新用户少了”要翻译成“该渠道的曝光量、点击率、注册转化率环比变化是否显著”。这个能力在面试里表现为你对业务场景的敏感度也是PayPal笔试里反复出现的考察点。量化分析力能不能选择合适的统计方法和机器学习模型能不能正确解读指标的显著性。A/B测试、因果推断、时间序列这些是数据科学家的看家本领。工程执行力能不能把分析结果变成可复现的代码、可监控的模型、可解释的报告。这方面的考察点包括代码规范、版本管理、模型上线后的监控机制。沟通表达性能不能把复杂的分析结果告诉一个完全不懂数据的同事并且让他愿意按你的建议行动。这个能力在外企尤其重要因为要跨时区、跨团队沟通写文档和开会都考验表达效率。我的体会是这四个能力并不是等权重的。初级数据科学家更需要工程执行力和量化分析力能独立完成任务到了资深阶段业务理解力和沟通表达性的权重会越来越高。这个认知也直接影响了我后来学习的方向——不再只刷算法题而是刻意训练自己“把业务问题转成数学问题”的能力。5. 常见问题与避坑经验5.1 投递与准备阶段的坑不要等到截止日期前才投递。PayPal这种岗位数量少基本是滚动筛选先到先得。我当时是开放后第三天投的能进笔试可能也有这个因素。准备简历时不要套用互联网大厂的模板。外企数据团队更看重“你做成了什么”而不是“你会什么”。每个项目写一小段背景、动作、结果比列表堆工具名有说服力得多。英文能力不要临时抱佛脚。面试中可能会有英文自我介绍或英文问答环节提前把你的项目经历翻译成英文并朗读几遍。我当时准备了一份英文自我介绍在HR面派上了用场。5.2 笔试阶段的坑时间分配上不要卡在一道计算题上太久。概率计算和统计推导题如果超过10分钟没思路先跳过最后有时间再回来。编程题要注意边界条件。比如逻辑回归这道题如果y的shape没处理好numpy会报广播错误这些细节在实际面试中直接暴露代码功底。提前在本地把环境调好多练几道numpy的数组操作。SQL题很有可能需要处理“时间重复”和“空值”不要只看题目表面就写简单查询。PayPal的这个陷阱我在前面已经详细说过这里再强调一次如果窗口函数排序的字段有重复值一定追问一句“业务上以什么为准”。5.3 面试阶段的坑被问到不熟悉的知识点时不要硬编。更好的做法是“这块我没有实际落地经验但我的理解是……如果在项目中遇到我会先查资料/找同事讨论解决。”诚实但积极的态度比强行给错误答案好得多。一定要提前准备一个问题问面试官。不问问题会给面试官留下“你对我们团队不感兴趣”的印象。可以问“团队目前在数据科学方面最大的挑战是什么”这类既显专业又体现主动性的话题。外企面试时注意文化细节视频面试要提前测好网络和摄像头回答问题时尽量条理清晰用“首先、其次、最后”的结构即使紧张也要尽量微笑语速放慢。5.4 常见问题速查表问题参考答案要点常见错误贝叶斯公式计算P(DF)先算全概率P(F)再套公式样本量公式用双样本比例检验公式区分p1和p2的方差混淆双侧与单侧z值SQL取最近N条用ROW_NUMBER窗口函数注意排序稳定性忘了处理时间重复标签构造避免泄漏特征窗口和标签窗口分离用了未来信息做特征阈值怎么选结合误报/漏报成本做成本收益分析直接取0.5数据科学家和算法工程师区别前者偏向业务分析和决策后者侧重模型工程混为一谈面试结尾提问问团队挑战、工作流、未来方向说“没有问题”这五个常见问题基本覆盖了PayPal数据科学笔面试中最容易踩坑的环节。表格里列的“常见错误”我面试前也犯过至少一半所以整理出来提醒大家注意。回头看2019年这份卷子它给我最大的收获不是拿到了暑期实习的offer而是让我想清楚了一个问题数据科学的本质不是模型有多炫而是你能不能在一个具体的业务场景里用数据帮助团队做出更好的决策。PayPal的题目从不问你“Transformer的attention是怎么实现的”它只关心你是否理解“一个模型上线后precision和recall之间的取舍在业务上意味着什么”。这种务实的态度到现在依然影响着我怎么在工作中选择分析工具、怎么写结论、怎么和业务方沟通。如果你准备投递数据科学相关的岗位不妨也带着这个视角去审视自己的每一次练习你会发现准备面试的过程本身就是一次数据科学家职业素养的修炼。
返回列表