← 返回全部分类数据分析面试题(10道)
数据分析 · 中等"解释SQL窗口函数并举例说明何时使用。"
窗口函数在与当前行相关的行上执行计算,不像GROUP BY那样折叠行。关键区别:GROUP BY每组返回一行;窗口函数保留所有行并添加计算列。ROW_NUMBER() OVER(PARTITION BY dept ORDER BY salary DESC)在每个部门内分配序号——适合"每组Top N"查询。LAG/LEAD访问前一行/后一行——计算环比增长。SUM() OVER(ORDER BY date)创建累计汇总。我每天使用:ROW_NUMBER做队列分析找每用户首次购买,LAG做流失检测比较活跃周期,SUM做累计收入追踪。
💡 提示:练习写窗口函数查询——面试官经常要求现场写。;理解OVER子句中PARTITION BY和ORDER BY的区别。;了解ROWS BETWEEN自定义窗口框架。
数据分析 · 中等"请讲一下你如何设计和分析一个A/B测试。"
A/B测试是通过随机对照实验比较两个版本的效果,以数据驱动产品决策。完整流程如下:首先明确实验假设和核心指标。比如要测试新的推荐算法是否提升用户留存,H0是新旧算法留存无差异,H1是新算法留存更高。核心指标选次日留存率,护栏指标包括人均使用时长和崩溃率(确保不伤害用户体验)。然后计算所需样本量。假设baseline留存率40%,MDE是相对提升2%(即从40%提到40.8%),alpha=0.05,power=0.80,通过功效分析计算出每组需要约25万用户。按日活估算实验需要运行多少天,建议至少覆盖一个完整周期(7天以上)以排除周末效应。实验设计上,以用户ID为随机化单元,通过hash分桶确保同一用户始终看到相同版本。分流前做AA测试验证分流系统无偏差。关键是实验上线后不要提前偷看结果(peeking problem),因为在样本量不足时多次检验会严重膨胀假阳性率。到达预定样本量和时间后,用双样本z检验(比例指标)或t检验(连续指标)分析结果。如果p<0.05,拒绝原假设,但还要看效应量是否有业务价值——统计显著但只提升0.01%可能不值得上线。最后做分层分析:按平台(iOS/Android)、地区、新老用户等维度切分,检查是否存在辛普森悖论或异质性效应。如果新用户显著提升但老用户显著下降,整体可能看起来无效但实际需要分人群策略。
💡 提示:一定要强调统计显著性和业务显著性的区别——面试官想看你的业务判断力,而不只是会算p值。;了解peeking问题及解决方案(固定样本量、序贯检验、贝叶斯方法),这是常见追问。;准备好无法做A/B测试时的替代方案:DID(双重差分)、PSM(倾向得分匹配)、断点回归。;面试中如果忘了样本量公式,即答侠可以实时提供计算方法。
数据分析 · 中等"你会如何构建一个评估业务表现的指标框架?"
我遵循四步框架。第一,理解业务:这些数据会指导什么决策?对电商公司,核心问题可能是"我们增长可持续吗?"第二,定义指标树:主KPI是月GMV。辅助指标分支到流量(会话、转化率)、客单价(AOV、每单商品数)和留存(复购率、队列留存)。第三,添加诊断指标:GMV下降是流量、转化还是客单价问题?第四,构建每日自动更新的仪表盘和偏离基线2个标准差的告警。还定义数据质量检查确保指标可信。
💡 提示:展示你分层思考指标——KPI由诊断指标支撑。;提到数据质量——不可靠的指标比没有指标更糟。;讨论框架如何驱动行动而非只是报告。
数据分析 · 中等"双11期间你在监控实时看板,某地区交易量突然下降30%,描述你的排查过程。"
首先验证数据:30%的下降是真实的还是报表延迟?检查数据管道延迟看板,对比原始事件流计数和聚合指标。如果确认真实,界定范围:是全品类还是特定品类?只影响下单还是支付也受影响?交叉验证三个数据源:(1)支付网关成功率——支付失败激增说明支付服务有问题;(2)该地区CDN和应用服务器错误率——5xx错误指向基础设施问题;(3)用户会话数据——如果会话活跃但转化下降,可能是UX问题如结算按钮故障。同时检查外部因素:竞品大促时间、地区运营商报告。根据发现快速升级,一句话总结:"X地区订单下降由[根因]导致,每小时影响约¥Y万,建议[行动]。"同时为后续活动设置更严格阈值的自动告警。
💡 提示:一定先验证数据——高流量期间管道延迟导致的误报很常见。;展示结构化思维:界定范围→提出假设→排查验证→沟通→行动。;量化业务影响来推动紧迫性——"下降30%"是技术描述,"每小时损失500万"才能推动行动。
数据分析 · 中等"UX团队想把淘宝的结算流程从3步简化为1步,请设计一个A/B测试来评估这个改动。你会追踪哪些指标?需要注意哪些陷阱?"
假设:1步结算将使购物车到下单的转化率提升至少3%,同时不增加退货率或客服工单。主指标:结算完成率(下单数/发起结算数)。护栏指标:7天内退货率、48小时内客服联系量、客单价、支付失败率。实验设计:按用户级别随机(非会话级别),避免同一用户看到不同体验。基于淘宝约65%的基线转化率、3%的最小可检测效应、80%统计功效和5%显著性水平,计算每组约需35000用户。测试运行2整周覆盖工作日/周末周期。关键陷阱:(1)新奇效应——新UI可能因为"新"而临时提升转化,如果早期结果异常强要延长到3周。(2)分层分析——1步流程可能帮助移动端但伤害PC端需要复核的用户,预注册按设备、用户年限和客单价分层切分。(3)1步流程可能增加冲动购买后的退货——所以设置了7天退货率护栏。
💡 提示:一定要定义护栏指标——面试官要看你考虑非预期后果的能力。;预注册分析计划和分层切分,避免被质疑p-hacking。;提到实际考虑:测试是否与正在进行的促销或其他实验冲突?
数据分析 · 中等新功能的留存你怎么分析?
队列定义:首次用这个功能的用户——某周W做过X的。然后测W+1、W+2...W+12周回归比例。健康曲线走平——比如D30留存25%持平。垂死曲线几期内归零。跨周队列比较:新队列比老队列留存好就是产品对新用户在改善。全部一样就是原地踏步。最有用的一层是分层——按获客渠道看留存几乎总有巨大方差,"平均值"掩盖了究竟哪个渠道真有效。上新功能我还会盯W+1——第2周降50%正常;降90%就是功能没兑现期望。
💡 提示:队列内一定分核心用户和轻度用户——偏态分布下平均值骗人。;留存是滞后指标,配engagement(每用户事件数)做快速信号。;即答侠给了SQL模板+每种曲线形状的解读清单。
数据分析 · 中等A/B测试最常见的坑有哪些?怎么发现?
拿到A/B结果我第一步查SRM——分流实际是不是按配置落地。对事件计数卡方;p<0.001我就不信这个实验,要么漏桶要么错桶。接着查偷看:看样本量决策是否预注册,如果有人偷看早停、我把结果当探索性的。新奇效应按时间分层:第二周提升是第一周的一半说明"新鲜感"贡献大部分。多重比较用Benjamini-Hochberg——比Bonferroni更有力。外部效度:至少一整周,周中周末组成重要。见过最惨的真实灾难:有人庆祝5%提升,两个月后归零——经典新奇+均值回归。
💡 提示:一定定义guardrail指标(营收、时延、错误率)防"功能有效但拖坏别的"。;发版前做功效分析——N=(Z_α+Z_β)²×2p(1-p)/δ²,p是基线率、δ是最小可探测效应。;即答侠每个坑都给了侦测recipe——面试官能看出系统化思维。
数据分析 · 中等用 SQL 找出连续 7 天每天都登录的用户。表 login_log(user_id, login_date)。
经典'连续问题'解法:用行号差(row_number - day)归类。同一用户的连续登录日期,date - row_number 是常数,这样把同一段连续日期归到同一组。
```sql
WITH dedup AS (
SELECT DISTINCT user_id, login_date FROM login_log
),
grouped AS (
SELECT
user_id,
login_date,
DATE_SUB(login_date, INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) DAY) AS grp
FROM dedup
)
SELECT DISTINCT user_id
FROM grouped
GROUP BY user_id, grp
HAVING COUNT(*) >= 7;
```
步骤解释:1) 先 DISTINCT 去掉同日多次登录;2) ROW_NUMBER() 按日期排序给每行编号;3) login_date - 行号 = 同组常数(因为连续日期减连续行号永远是固定差);4) 按 (user_id, grp) 分组,count >= 7 即为连续 7 天。
替代解法:LAG/LEAD 看相邻日期差,但要处理多段连续比较麻烦。或者用 INTERVAL 关联表自连接,但 7 天连接 7 次性能差。
阿里数据岗常考变种:连续 N 天有交易/连续 N 周活跃/连续打卡等,本质一样。
💡 提示:row_number 差是连续问题通用解,必背;DISTINCT 别忘了,同日多次登录会算多次;提替代解法(LAG/自连接)展示对优劣的理解
数据分析 · 中等做 A/B 测试评估新推荐算法,实验组 CTR 4.8%,对照组 4.5%,样本各 10 万。这个提升显著吗?如何判断是否上线?
三步走。第一,显著性检验。CTR 是比例,用 Z 检验。p_t = 0.048, p_c = 0.045, n = 100000。pooled p = (4800 + 4500) / 200000 = 0.0465。标准误 SE = sqrt(p*(1-p)*(1/n + 1/n)) = sqrt(0.0465*0.9535*2/100000) ≈ 0.000942。Z = (0.048 - 0.045) / 0.000942 ≈ 3.18。查表 Z>1.96 即 p<0.05 显著,这里 p<0.002,高度显著。提升 6.7% 相对值。
第二,统计显著 ≠ 业务显著。要看:a) effect size 是否够大(0.3pp 的绝对提升,业务上是否值得做产品换);b) 多目标分析:CTR 涨了,但留存、停留时长、电商 GMV 有没有跌(可能 CTR 涨是因为标题党);c) 分群效应:对新老用户、不同地区、不同设备是否一致(可能整体涨是因为新用户大涨抵消老用户跌);d) 长期效应:实验跑了多久?CTR 涨可能是新鲜感(novelty effect),要看 7-14 天趋势。
第三,上线决策框架:核心指标显著 + 护栏指标无大跌 + 长期趋势稳定 + 工程成本可接受 → 全量;若有 trade-off 则灰度扩到 50% 再观察 1 周。
坑:实验组别污染(用户切换组)、样本不均、节假日干扰(实验时段要避开),阿里有专门的 A/B 平台处理这些。
💡 提示:Z 检验公式要会现场算,展示统计基本功;护栏指标 + 长期效应是阿里数据岗高分点;novelty effect 是 A/B 测试常见坑,体现实战经验
数据分析 · 中等淘宝某品类商品 GMV 月环比下降 15%,你是数据分析师怎么排查?
**1. 第一步:确认数据真实性 (避免乌龙)**
- 数据源是否正确? 是不是 ETL 出问题?
- 时间窗口是否对齐? 月度 vs 30 天滚动 vs 自然月可能差别大
- 排除一次性事件 (上月有 618 大促,今月没有 → 自然环比下降合理)
- 跟其他口径交叉验证 (Hive vs 实时大盘 vs BI 报表)
确认数据真实后,才进入分析。
**2. 第二步:GMV 公式拆解**
GMV = UV × CVR × 客单价
或更细:
GMV = UV × CTR × CVR × 客单价
或最细:
GMV = 流量入口曝光 × 流量入口 CTR × 落地页 CTR × 加购率 × 下单率 × 支付率 × 客单价
看哪个环节下降。
**3. 第三步:维度下钻 (找到下降的具体原因)**
**a) 时间维度**:
- 是某几天异常,还是全月渐进? 突发 vs 趋势性下滑根因不同
- 周末 vs 工作日? 大促前 vs 大促后?
**b) 用户维度**:
- 新客 vs 老客 哪个降?
- 高消费用户 vs 低消费用户?
- 渠道分: 首页推荐 / 搜索 / 直播 / 短视频 哪个来源降?
- 地域: 一线 vs 下沉?
**c) 商品维度**:
- 头部商品 (Top 100) vs 长尾,哪个降?
- 子品类细分 (服装下又分男装/女装/童装,谁降?)
- 价格段: 高价 vs 中低价?
- 品牌: 大品牌 vs 白牌?
**d) 设备维度**:
- 手淘 APP vs PC vs H5?
- iOS vs Android (是否某次版本 bug?)
**e) 行为漏斗**:
- 浏览 / 加购 / 下单 / 支付 哪步降?
**4. 第四步:建立假设并验证**
基于下钻发现的异常点,提出多个候选假设,逐个验证。
**假设示例**:
**假设 A: 大促错峰**
- 上月有 618 拉高基数,今月自然降
- 验证: 看历年同期同类品类 GMV,是否每年都有类似环比降
- 如果是,正常情况,无需特别行动
**假设 B: 流量来源问题**
- 假设是 '推荐位流量下降'
- 验证: 看推荐位曝光 / 点击 / 转化曲线
- 如果曝光降,可能是算法策略调整 / 资源位被其他品类抢
- 找推荐团队沟通
**假设 C: 商品供给问题**
- 假设是 '头部商品下架 / 缺货'
- 验证: 头部商品库存 / 上下架日志
- 如果是, business 方需要补货 / 引入新爆品
**假设 D: 价格竞争力**
- 假设是 '竞品 (拼多多) 同款更便宜'
- 验证: 抓取竞品同款商品价格 (公司有爬虫系统),做价格对比
- 如果是,商家需调价或者促销
**假设 E: 季节性**
- 假设是 '夏装到秋装过渡期'
- 验证: 同
💡 提示:先确认数据真实性 是数据分析师 vs 普通人差别;GMV 公式拆解 是套路必须熟;多假设并行验证比单线深挖效率高;结论必须 actionable + 量化