Data Scientist 面试题 2026:25 道 SQL、统计、A/B Test 与 ML 高频题
Data Scientist 面试题 2026 高频清单:25 道 SQL、统计学、A/B testing、机器学习、product sense 与业务分析题,附参考答案与追问方向。
顶级科技公司的数据科学面试考察四个核心领域:SQL、统计学、机器学习和产品思维。与编码面试不同,数据科学面试很少有一个”正确”答案——面试官评估的是你的思维过程、沟通能力以及将商业问题转化为分析框架的能力。
以下是 20 道最常问的题目,按类别分类,附带详细答案。
快速答案:Data Scientist 面试题怎么准备
如果你在准备 Data Scientist interview questions,不要只刷 SQL 或背机器学习概念。大厂 DS 面试通常会把 SQL、统计推断、A/B testing、product sense 和机器学习应用串起来,考察你能不能把一个模糊业务问题拆成指标、假设、数据、方法和行动建议。
| 高频模块 | 面试官想看什么 |
|---|---|
| SQL 面试题 | window function、join、聚合、留存/漏斗/收入指标计算 |
| 统计与 A/B Test | p-value、confidence interval、sample size、MDE、实验护栏指标 |
| 机器学习 | bias-variance、特征工程、不平衡数据、模型评估和上线风险 |
| Product Sense | 指标定义、异常诊断、用户分群、业务 trade-off 和沟通结构 |
如果时间有限,优先把 SQL + A/B testing + metric case 练到能现场解释推理过程,再补 ML 高频题。完整准备路线可以看 Data Scientist 面试准备完全指南。
SQL 题目
1. 从员工表中找出第二高的薪水
为什么问这个问题: 测试你是否能超越基础聚合操作。
-- Approach 1: Using LIMIT/OFFSET
SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 1 OFFSET 1;
-- Approach 2: Using a subquery
SELECT MAX(salary) FROM employees
WHERE salary < (SELECT MAX(salary) FROM employees);
-- Approach 3: Using window functions (most elegant)
SELECT salary FROM (
SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) as rnk
FROM employees
) ranked WHERE rnk = 2;
关键提示: 一定要问清楚”第二高”是否指不同值。当存在并列时,DENSE_RANK() 和 RANK() 有区别。
2. 编写查询找出每个类别收入最高的 3 个产品
WITH product_revenue AS (
SELECT
p.category_id,
p.product_id,
p.product_name,
SUM(oi.quantity * oi.price) as total_revenue
FROM products p
JOIN order_items oi ON p.product_id = oi.product_id
GROUP BY p.category_id, p.product_id, p.product_name
),
ranked AS (
SELECT *,
RANK() OVER (PARTITION BY category_id ORDER BY total_revenue DESC) as rnk
FROM product_revenue
)
SELECT category_id, product_name, total_revenue
FROM ranked WHERE rnk <= 3;
关键提示: 窗口函数是面试中最常考的。熟练掌握 RANK()、DENSE_RANK()、ROW_NUMBER() 以及它们各自的使用场景。
3. 计算日活跃用户数的环比变化
WITH daily_users AS (
SELECT
DATE(event_timestamp) as event_date,
COUNT(DISTINCT user_id) as active_users
FROM user_events
GROUP BY DATE(event_timestamp)
)
SELECT
event_date,
active_users,
LAG(active_users) OVER (ORDER BY event_date) as prev_day_users,
active_users - LAG(active_users) OVER (ORDER BY event_date) as dod_change
FROM daily_users;
统计学题目
4. 向非技术人员解释 p 值
优秀回答: “想象你在测试一个新的按钮颜色,看它是否能提高点击率。p 值告诉你的是:如果新颜色实际上没有任何效果,我们仅凭偶然运气就观察到这么大的差异的可能性有多大?p 值为 0.03 意味着这个结果纯属随机噪声的概率只有 3%。如果这个概率足够低(通常低于 5%),我们就得出结论:新颜色确实可能真的有区别。”
为什么重要: 这测试的是你解释统计学概念的能力——这是数据科学家每天的必备技能。
5. 第一类错误和第二类错误有什么区别?
- 第一类错误(假阳性): 拒绝了实际上为真的零假设。举例:得出药物有效的结论,但实际上无效。
- 第二类错误(假阴性): 未能拒绝实际上为假的零假设。举例:得出药物无效的结论,但实际上有效。
现实中的权衡: 在医学检测中,通常希望最小化第二类错误(不能漏诊)。在垃圾邮件检测中,希望最小化第一类错误(不要把正常邮件标记为垃圾邮件)。
6. 如何确定 A/B 测试的样本量?
你需要四个输入:
- 基准转化率(来自历史数据)
- 最小可检测效应(MDE)——你关心的最小变化幅度
- 统计显著性水平(α)——通常为 0.05
- 统计功效(1-β)——通常为 0.80
经验法则: 效应越小,需要的样本量越大。如果你的基准转化率是 10%,想检测 5% 的相对提升,大约需要每组 15,000 个用户。一定要在启动实验前计算这个值。
机器学习题目
7. 如何处理不平衡数据集?
多种策略,根据场景选择:
- 重采样: 过采样少数类(SMOTE)或欠采样多数类
- 类别权重: 让模型对少数类误分类施加更大的惩罚
- 阈值调整: 将分类阈值从 0.5 向少数类方向移动
- 异常检测框架: 将少数类视为异常点(隔离森林、单分类 SVM)
- 集成方法: 使用平衡子样本的 Bagging
面试官想听到的: 你理解在不平衡数据上使用准确率是一个具有误导性的指标。应该使用精确率、召回率、F1 分数或 ROC-AUC。
8. 解释偏差-方差权衡
- 高偏差(欠拟合): 模型太简单,无法捕捉训练数据中的模式。解决方法:使用更复杂的模型、增加特征。
- 高方差(过拟合): 模型太复杂,记住了训练数据但在新数据上表现不佳。解决方法:正则化、增加数据、特征选择、交叉验证。
类比: 想象准备考试。高偏差 = 你学习不够。高方差 = 你背下了练习题但不会做新题。
9. 什么时候用分类,什么时候用回归?
- 分类: 输出是类别(垃圾邮件/正常邮件、流失/不流失、疾病/健康)
- 回归: 输出是连续数值(房价、温度、薪水)
灰色地带: 如果你预测”流失概率”作为一个概率值,这从技术上讲是回归(逻辑回归输出概率),但用于分类。准备好讨论这个细微差别。
产品思维题目
10. YouTube 昨天观看时长下降了 10%,你会如何调查?
框架:细分 → 隔离 → 诊断 → 建议
- 验证: 测量是否正确?检查数据管道是否有 bug。
- 按以下维度细分:
- 地理位置(是特定国家吗?)
- 设备(移动端 vs 桌面端?)
- 内容类型(短视频 vs 长视频?)
- 用户群体(新用户 vs 老用户?)
- 检查近期变更: 新发布?A/B 测试?基础设施变更?
- 外部因素: 竞争对手发布、节假日、网络问题
- 建议: 根据根本原因,提出修复方案并衡量其影响
关键: 没有”正确”答案。面试官评估的是你系统性思考和缩小可能性范围的能力。
11. 你会如何衡量一个新功能的成功?
使用 HEART 框架(Google 的方法):
- Happiness(满意度):用户满意度(调查、NPS)
- Engagement(参与度):使用的频率和深度
- Adoption(采用率):尝试该功能的新用户
- Retention(留存率):回访用户
- Task success(任务完成度):用户能否达成目标?
选择 1-2 个核心指标和 3-5 个护栏指标,确保你不会为了优化一个方面而破坏另一个方面。
更多常问问题
12. 什么是交叉验证,为什么使用它?
K 折交叉验证将数据分成 K 个子集,在 K-1 个折上训练,在剩余的折上验证。重复 K 次。这比单次训练/测试划分给出了更可靠的模型性能估计,尤其在数据有限的情况下。
面试加分点: 提到分层交叉验证(Stratified K-Fold)——确保每一折的类别比例与原始数据一致,对分类问题尤其重要。对于时间序列数据,要用前向验证(Forward Validation)而不是随机划分,因为未来数据不能用于训练。
13. 如何处理缺失数据?
- 如果缺失少于 5% 且随机(MCAR),删除行/列
- 数值/分类变量使用均值/中位数/众数填充
- 使用基于模型的填充(KNN、MICE)
- 创建”缺失”指示变量(有时缺失本身就有信息量)
进阶技巧: 区分三种缺失机制——MCAR(完全随机)、MAR(条件随机,如男性更可能报告收入)、MNAR(非随机,如高收入者更不愿意报告收入)。不同机制需要不同的处理策略。MNAR 是最难处理的,通常需要领域知识或专门模型。
14. 什么是特征工程?
从原始数据创建新特征以提升模型性能。举例:从时间戳中提取星期几、创建交互项、对连续变量分箱、从原始文本生成文本嵌入。
实战案例: 在电商推荐场景中,用户浏览时长、加购次数、收藏行为的组合特征比单一特征预测转化率高出 30%。特征工程的核心是理解业务——你需要知道哪些用户行为真正反映了购买意向。
15. 如何评估推荐系统?
- 离线评估: Precision@K、Recall@K、NDCG、MAP
- 在线评估: 点击率、转化率、推荐多样性
- A/B 测试: 与基线对比(基于流行度的推荐)
常见陷阱: 离线评估高不代表在线效果好。离线评估只看模型预测准确性,但用户可能点击推荐不是因为推荐准确,而是因为标题吸引人或位置靠上。一定要同时监控多样性指标——如果推荐全是同类内容,用户会疲劳。
16. 梯度下降是如何工作的?
梯度下降通过迭代更新参数来最小化损失函数。每次更新沿着损失函数梯度的反方向移动,步长由学习率控制。
面试官常追问:
- 学习率太高: 震荡不收敛
- 学习率太低: 收敛极慢
- 动量(Momentum): 加速收敛,避免局部极小值
- Adam 优化器: 自适应学习率 + 动量,是目前最常用的优化器
17. 解释正则化(L1 vs L2)
正则化通过给损失函数添加惩罚项来防止过拟合:
- L1(Lasso): 添加权重绝对值之和。倾向于产生稀疏解(很多权重变为 0),具有特征选择的效果。
- L2(Ridge): 添加权重平方之和。倾向于让权重变小但不为 0,压缩所有特征的影响。
如何选择: 如果特征维度高且你怀疑很多特征是冗余的,选 L1。如果所有特征都可能有贡献但需要控制幅度,选 L2。Elastic Net 同时使用两者,兼顾两种优点。
18. 什么是过采样和欠采样?各有什么优缺点?
处理不平衡数据的基本技术:
- 过采样(Over-sampling): 复制少数类样本或使用 SMOTE(在少数类样本间插值生成新样本)。优点是保留所有多数类信息,缺点是可能过拟合。
- 欠采样(Under-sampling): 随机删除多数类样本。优点是训练速度快,缺点是丢弃了大量有价值的数据。
最佳实践: 通常结合两种方法——先欠采样减少多数类,再过采样增加少数类,使比例接近 1:1 或 1:2。
19. 解释 ROC 曲线和 AUC
- ROC 曲线: 横轴是假阳性率(FPR),纵轴是真正性率(TPR),不同分类阈值下的 TPR/FPR 组合绘制成曲线。
- AUC: ROC 曲线下面积。AUC = 1 表示完美分类器,AUC = 0.5 相当于随机猜测。
什么时候不用 AUC: 在极度不平衡的数据集上(如欺诈检测,正样本占比 0.1%),AUC 可能给出虚假的乐观结果。此时用 Precision-Recall 曲线更合适。
20. 如何设计一个用户流失预测模型?
完整的回答框架(面试官想看这个):
- 定义问题: 什么是”流失”?(7 天不登录?30 天?取消订阅?)定义直接影响数据标注。
- 特征工程: 用户行为(登录频率、使用时长、功能使用广度)、账户信息(注册时间、付费状态)、交互数据(客服工单数、投诉次数)。
- 模型选择: 逻辑回归(可解释性强)作为基线,XGBoost/LightGBM 作为主力模型。
- 评估指标: 在流失场景下,召回率比精确率更重要——宁可多预警也不要漏掉真正要流失的用户。
- 部署与迭代: 模型上线后监控漂移(概念漂移和数据漂移),定期重新训练。
进阶高频题
21. SQL:计算 7 日留存率
考察点: cohort 分析、self join 与日期窗口处理,DS 岗 SQL 轮的高频压轴题。
参考答案:
WITH first_seen AS (
SELECT user_id, MIN(event_date) AS first_date
FROM user_events
GROUP BY user_id
),
returning AS (
SELECT f.user_id, f.first_date, MIN(e.event_date) AS return_date
FROM first_seen f
JOIN user_events e
ON f.user_id = e.user_id
AND e.event_date > f.first_date
AND e.event_date <= f.first_date + INTERVAL '7 day'
GROUP BY f.user_id, f.first_date
)
SELECT f.first_date,
COUNT(DISTINCT f.user_id) AS cohort_size,
COUNT(DISTINCT r.user_id) AS retained_users,
ROUND(COUNT(DISTINCT r.user_id) * 1.0 / COUNT(DISTINCT f.user_id), 4) AS retention_rate
FROM first_seen f
LEFT JOIN returning r ON f.user_id = r.user_id
GROUP BY f.first_date
ORDER BY f.first_date;
追问方向:
- 留存口径:7 日内任意一天回访(N-day return)还是第 7 天当天回访(Nth-day retention)?
- 时区处理:event_date 用 UTC 还是用户本地时区切分 cohort
- 表很大时怎么优化:按天分区、预聚合物化 cohort 表
22. 置信区间和 p 值有什么区别?
考察点: 统计推断的实用理解,而不是背定义。
参考答案:
- p 值回答”如果原假设为真,观察到当前或更极端结果的概率”——它不直接告诉你效应有多大。
- 置信区间回答”效应量大概率落在哪个范围”——95% CI 不包含 0 等价于双尾 α=0.05 显著。
- 更好的回答方式是同时报告效应量 + CI:“转化率提升 0.4 个百分点(95% CI [0.1, 0.7])“,比单说 p=0.03 信息量大得多,也避免被质疑 p-hacking。
追问方向:
- CI 宽度受什么影响(样本量、方差、置信水平)
- 为什么越来越多公司要求实验报告 CI 而不是只看显著性
23. A/B 测试同时看多个指标会出什么问题?
考察点: 多重比较(multiplicity)与实验设计的严谨性。
参考答案:
- 同时检验 k 个指标,至少出现一个假阳性的概率随 k 上升,只看”显著”的那个会系统性高估效果。
- 常见处理:预先指定一个主指标(primary metric)+ 若干 guardrail metrics,次要指标只做描述性观察,或用 Bonferroni / FDR 校正。
- 还要提 peeking:提前看结果并停止实验会显著抬高假阳性率,需要 sequential testing 或 always-valid p-value。
追问方向:
- 主指标不显著但次要指标显著提升,上线吗?
- guardrail 指标的阈值怎么定
24. 模型上线后怎么监控效果?
考察点: ML 落地意识——DS 岗区分”会调包”和”能做生产模型”的关键题。
参考答案:
- 三层监控:数据层(特征分布、缺失率、label 延迟)、模型层(预测分布、PSI/KS 漂移)、业务层(线上 AUC、转化率等业务指标)。
- 区分数据漂移(输入分布变了)和概念漂移(输入-输出关系变了),两者的处置不同。
- 实操:设告警阈值 + 定期 retrain 策略 + shadow model 对比新旧模型预测。
追问方向:
- 线上 AUC 和离线 AUC 不一致,怎么排查(数据管道 bug、特征穿越、样本选择偏差)
- 冷启动用户没有历史特征怎么办
25. 不能做 A/B 测试时,怎么评估策略的因果效应?
考察点: 因果推断基础,近两年 DS 面试明显变热的方向。
参考答案:
- 先说清楚为什么不能随机化(成本、伦理、已经全量 rollout)。
- 常用方法:DID(双重差分,依赖平行趋势假设)、propensity score matching(匹配后对比,检查协变量平衡)、synthetic control(适合单一处理单元)。
- 关键是把假设讲明白:DID 要检验平行趋势,PSM 要检验匹配后的 covariate balance。
- 加分点:主动说明”这些都是 A/B 的降级方案,结论强度更弱,需要敏感性分析”。
追问方向:
- 平行趋势假设不满足怎么办
- 处理组和对照组本身增长趋势不同(比如只对成熟用户开放功能),怎么控制
数据科学面试准备:时间线
第 1-2 周: SQL 练习(在 LeetCode/DataLemur 上完成 20+ 题目) 第 3-4 周: 统计学基础 + 概率问题 第 5-6 周: 机器学习理论——注重直觉,而非数学证明 第 7-8 周: 产品思维案例 + 指标定义 第 9 周及以后: 模拟面试(完整的 45 分钟模拟)
资源推荐
- SQL: DataLemur、StrataScratch、LeetCode 数据库题目
- 统计学: Charles Wheelan 的《Naked Statistics》、Khan Academy
- 机器学习: Aurélien Géron 的《Hands-On Machine Learning》
- 产品思维: Kohavi 的《Trustworthy Online Controlled Experiments》
总结
数据科学面试同等看重沟通能力和技术能力。练习大声解释你的推理过程——不仅仅是写出答案。最优秀的候选人是那些能一步步带领面试官走过他们思维过程的人。
Data Scientist 面试题 FAQ
Data Scientist 面试最应该先准备什么?
如果目标是美国科技公司,优先级通常是 SQL、A/B testing、统计推断和 product sense。ML 理论也重要,但很多 DS 岗位会先用 SQL 和业务分析题判断基本面。
SQL 面试题要刷到什么程度?
至少要熟练 window function、CTE、self join、去重、留存、漏斗、top N、rolling metric 和 cohort analysis。面试时不只要写对查询,也要说明边界条件,例如并列排名、时区、重复事件和 NULL。
A/B Test 面试题常见追问有哪些?
常见追问包括样本量怎么估、实验多久跑、指标下降但主指标上升怎么办、如何处理 novelty effect、guardrail metric 怎么设,以及结果不显著时下一步怎么做。
Product Sense 题怎么回答才不散?
用“目标 - 指标 - 分群 - 假设 - 验证 - 行动”的结构回答。不要直接给结论,先澄清业务目标和数据口径,再用分层分析缩小原因。
数据科学面试和数据分析师面试有什么区别?
核心模块相同(SQL、统计、实验、product sense),但 DS 岗对统计推断、实验设计深度和 ML 基础的要求更高,会追问假设检验的细节和模型选择逻辑。分析师岗更偏取数、报表和业务描述性分析。两类岗位同时投的话,按 DS 标准准备,分析师岗位自然覆盖。
DS 面试的机器学习需要学到什么深度?
能说清常见算法(线性/逻辑回归、树模型、SVM、基础神经网络)的原理、适用场景和优缺点即可,不需要推导公式或手写实现。更重要的是能回答“这个场景为什么选这个算法、怎么评估、上线后怎么迭代”。
只有 2 周准备时间,优先级怎么排?
第 1 周:SQL window function + 实验设计(样本量、显著性、guardrail metrics)。第 2 周:product sense + 统计基础(p 值、CI、多重比较)。SQL 和 A/B 各做一次完整 45 分钟 mock。深度 ML 理论不要花时间,性价比最低。
推荐阅读
- 2026 年你必须掌握的 20 道数据工程面试题 — 数据工程与数据科学技能重叠,了解数据管道和 Spark 对数据分析岗位同样重要
- 如何准备软件工程面试:2026 完整指南 — 通用技术面试准备策略,适合数据科学入门
DS 面试全流程系列
想要深入了解目标公司的 DS 面试风格?我们整理了以下公司的详细面经:
- Data Scientist 面试准备完全指南 — DS 面试的四大核心模块解析
- Google Data Scientist 面试面经 — SQL + 统计推断 + 实验设计
- Netflix Data Scientist 面试面经 — 实验设计和统计严谨性
- ZipRecruiter Data Scientist 面试面经 — 数据分析 + 业务洞察
- DoorDash Data Scientist 面试面经 — A/B 测试 + 产品分析
- Wealthfront Data Scientist 面试面经 — 风险管理 + 商业建模
相关面试辅导
如果你正在准备类似面试,可以直接从下面的专项辅导开始。