American Express数据科学家面试真题与SQL编程2026
一句话总结
答得最好的人,往往第一个被筛掉。在American Express数据科学家岗位的面试中,技术能力只是入场券,真正的筛选发生在你如何定义问题、拆解业务影响以及能否在模糊中建立可执行逻辑。大多数候选人把SQL题当作纯编码挑战,但面试官真正考察的是你是否能从“查交易笔数”这种基础查询,推导出“欺诈模型在高端卡用户中是否存在系统性误判”的商业洞察。
不是你在LeetCode上刷了多少题,而是你能否用代码讲出一个让风控VP坐直身体的故事。不是你能否写出窗口函数,而是你能否说清楚为什么用RANK()而不是ROW_NUMBER()对高风险商户排序会直接影响调查资源的分配效率。不是你背了多少机器学习公式,而是你能否在Hiring Committee(HC)讨论中被描述为“那个看懂了Amex闭环生态的人”。
适合谁看
这篇内容专为三类人存在。第一类是正在北美求职、目标为Fintech或支付领域头部公司的数据科学家,尤其是已有1-5年经验、卡在面试终轮或HC审批阶段的人。你已经通过了LinkedIn的初筛,简历上写着“用XGBoost提升了反欺诈准确率12%”,但你在American Express的case study轮次被反馈“业务连接不足”,这说明你还在用互联网公司的解题逻辑打支付行业的仗。
第二类是转行者,比如从传统零售或咨询行业转向数据岗位,你以为SQL只是写JOIN和GROUP BY,但你在现场被问“如何用SQL量化‘客户生命周期价值在疫情后发生结构性偏移’”,你当场卡住——因为你没意识到Amex的LTV模型依赖的是跨产品线的交叉补贴逻辑。第三类是已经拿到offer但犹豫是否接受的人,你看到base $150K,以为这是对标Meta L4的水平,却不知道Amex的RSU发放周期是4年 cliffless vesting,每年兑现25%,且bonus与公司整体净推荐值(NPS)挂钩,这意味着你第二年的总包可能比第一年还高。你必须知道这些细节,才能判断这个offer到底是跳板,还是长期落点。
为什么Amex的SQL面试和其他公司不一样
大多数候选人在准备数据科学面试时,把SQL当作一种编程语言来刷题。他们每天在LeetCode上做“第二高薪水”、“连续登录天数”这类题目,以为只要能写出LAG()或ROLLING AVERAGE就万事大吉。但在American Express,SQL不是技术测试,而是思维探针。面试官不关心你能不能写子查询,他们关心的是你是否理解“交易流水”背后代表的是一个闭环金融生态。举个真实例子:2024年Q2的一场现场面试中,候选人被要求写一个查询:“找出过去90天内,在高端商户(如Saks Fifth Avenue)有3次以上大额消费(> $2,000),但信用卡利用率低于30%的白金卡用户。
”表面上这是个多表JOIN加HAVING条件的题目,但真正拉开差距的是后续追问:“为什么这些用户值得营销团队单独触达?”一个错误回答是:“因为他们消费能力强,可以推高客均收入。”这是典型的零售思维。正确答案是:“这类用户表现出‘高消费低负债’特征,说明他们可能将Amex作为首选卡但未完全激活积分兑换行为,存在高LTV潜力,且违约风险极低,适合推送高端旅行权益升级。”这个回答把SQL结果转化成了产品策略输入。
另一个关键差异是数据粒度。在互联网公司,你的数据可能是“用户点击流”,而在Amex,你面对的是“每笔交易的MCC码、收单行、清算路径、货币转换率、奖励积分抵扣比例”。这意味着你的SQL必须嵌入业务逻辑。
例如,在计算“月活卡数”时,不是简单COUNT(DISTINCT card_id),而是要排除测试卡、员工卡、以及MCC为“4829 - 金融交易处理”的内部转账。2025年一次debrief会议上,一位面试官明确指出:“候选人写出了完美的语法,但没有filter out test accounts,说明他根本不知道我们有1.2万张内部测试卡常年在跑模拟交易。”这种细节决定你是否被视为“懂行”。
更深层的问题在于时间窗口的设计。Amex的很多业务问题依赖“滚动12个月”而非“自然月”。比如评估“疫情后消费恢复率”,你不能用2023年1月 vs 2024年1月,而要用截至每个月末的TRAILING12MONTHSUM(transactionamount)。这要求你在SQL中使用WINDOW FUNCTION with RANGE BETWEEN INTERVAL '11' MONTH PRECEDING AND CURRENT ROW。
但大多数候选人只会用ROWS BETWEEN 11 PRECEDING AND CURRENT ROW,导致结果在月初/月末剧烈波动。这不是语法错误,而是对业务节奏的误判——Amex的季度财报和营销活动都是按滚动周期规划的。你能写出正确的WINDOW定义,才说明你理解公司的决策节奏。
如何破解Amex的业务建模题
业务建模是Amex数据科学面试的分水岭。技术轮次筛选掉不会写代码的人,而建模轮次淘汰掉“只会技术的人”。
2024年第四季度,Hiring Manager在一次HC会议上说:“我们收到了37份简历,其中30人能搞定SQL和AB测试,但只有2人能说清楚‘如何衡量一张新推出的商务卡对中小企业的渗透效果’。”这句话揭示了核心问题:Amex不想要分析师,他们要的是能定义指标的产品级数据科学家。
我们来看一个真实考题:“公司计划推出一张面向自由职业者的信用卡,年费$95,主打现金流管理和发票追踪功能。请设计一个模型来预测早期采用者。”大多数候选人的反应是立刻跳进特征工程:FICO分数、月收入波动性、职业类别……但这不是Amex想要的。正确路径是先回答三个问题:第一,什么叫“早期采用者”?在Amex语境下,不是“第一个月申请的人”,而是“在上市后60天内激活并完成3笔交易的人”。
第二,这个模型的输出要服务于谁?如果是市场团队,他们需要高召回率;如果是风控,他们需要高精度。第三,数据可用性如何?自由职业者缺乏稳定收入证明,传统征信数据不足,必须依赖替代数据源,如银行流水API(如Plaid)返回的“非工资性入账频率”。
在一次现场面试中,候选人被要求用SQL和伪代码结合的方式构建这个模型。一个BAD回答是:“SELECT userid, AVG(income) FROM bankstatements GROUP BY user_id”。这完全没有考虑数据延迟——Plaid数据通常有2-3天lag,而信用卡申请决策必须在分钟级完成。
GOOD回答是:“建立一个轻量级规则引擎作为fallback:若无Plaid连接,则用‘过去6个月Amex交易频次’和‘商户类别多样性’作为代理变量。SQL层面,用LASTVALUE(transactiondate) OVER(PARTITION BY cardid ORDER BY transactiondate ROWS BETWEEN 5 PRECEDING AND CURRENT ROW)判断活跃稳定性。”这个回答展示了对实时系统的理解。
更进一步,Amex特别看重“闭环反馈设计”。你的模型不能只做预测,还要能衡量自身效果。比如,在上述自由职业者模型上线后,你需要监控“预测为高概率采纳但实际未申请”的用户群,分析他们的共同特征,判断是模型偏差还是产品定位问题。
这要求你在初始设计时就埋点:在申请流程中记录“是否展示个性化推荐”,以及“推荐内容版本”。然后用SQL写出:SELECT recommendedversion, COUNT() as impressions, SUM(conversion) as conversions FROM applicationlog WHERE predictedscore > 0.8 GROUP BY recommendedversion。这种端到端的思维,才是Amex HC愿意投票通过的关键。
SQL编程真题解析:从语法到战略
现在我们进入具体真题解析。以下题目均来自2024-2025年Amex真实面试记录,经过脱敏处理。重点不是你会不会写,而是你写的每一行是否传递了业务判断。
真题1:找出“高潜力休眠卡用户”
“给定表transactions (cardid, transactiondate, amount), cards (cardid, cardtype, issue_date),找出发卡超过180天、过去90天无交易、但历史最大单笔交易超过$1,000的Platinum Card用户。”
BAD回答:
`sql
SELECT c.card_id
FROM cards c
JOIN transactions t ON c.cardid = t.cardid
WHERE c.card_type = 'Platinum'
AND DATEDIFF(CURRENTDATE, c.issuedate) > 180
AND t.transactiondate <= DATESUB(CURRENT_DATE, INTERVAL 90 DAY)
AND t.amount > 1000
GROUP BY c.card_id;
`
这个回答有三个致命错误。第一,WHERE条件中的t.transaction_date筛选会排除所有近期有交易的记录,但GROUP BY后仍可能返回用户——逻辑矛盾。
第二,没有定义“历史最大单笔交易”,而是用amount > 1000过滤每一行,导致结果包含大量小额交易用户。第三,完全忽略card_id可能在transactions表中无记录的情况(即从未交易),这种用户也会被JOIN排除。
GOOD回答:
`sql
SELECT c.card_id
FROM cards c
WHERE c.card_type = 'Platinum'
AND c.issuedate <= CURRENTDATE - INTERVAL 180 DAY
AND c.card_id NOT IN (
SELECT card_id FROM transactions
WHERE transactiondate > CURRENTDATE - INTERVAL 90 DAY
)
AND c.card_id IN (
SELECT card_id FROM transactions
GROUP BY card_id
HAVING MAX(amount) > 1000
);
`
这个版本用两个独立子查询分别处理“休眠”和“高消费”条件,逻辑清晰且覆盖边缘情况。更重要的是,它体现了“先过滤再关联”的工程思维——在大表上尽早减少数据量。在2025年一次HC讨论中,面试官特别提到:“这个候选人用了NOT IN而不是LEFT JOIN + IS NULL,虽然性能稍差,但可读性强,适合我们偏重维护性的代码文化。”
真题2:计算“商户欺诈率趋势”
“给定transactions和fraud_labels表,计算每个MCC码在过去6个月的月度欺诈率,并标记出连续3个月上升的MCC。”
这不是简单GROUP BY。关键在于“连续3个月上升”需要时间序列分析。BAD做法是用LAG()计算月环比,然后用CASE WHEN判断是否上升,最后手动检查连续性。这在SQL中极其冗长且易错。
GOOD做法是:
`sql
WITH monthly_fraud AS (
SELECT
mcc,
DATETRUNC('month', transactiondate) as month,
COUNT(CASE WHEN isfraud = 1 THEN 1 END) 1.0 / COUNT() as fraudrate
FROM transactions t
JOIN fraudlabels f ON t.txnid = f.txn_id
WHERE transactiondate >= CURRENTDATE - INTERVAL 6 MONTH
GROUP BY mcc, DATETRUNC('month', transactiondate)
),
ranked AS (
SELECT mcc, month, fraud_rate,
ROW_NUMBER() OVER(PARTITION BY mcc ORDER BY month) as rn,
fraudrate - LAG(fraudrate, 1) OVER(PARTITION BY mcc ORDER BY month) as diff
FROM monthly_fraud
)
SELECT DISTINCT mcc
FROM ranked
WHERE diff > 0
GROUP BY mcc, rn - SUM(CASE WHEN diff > 0 THEN 1 ELSE 0 END) OVER(PARTITION BY mcc ORDER BY rn)
HAVING COUNT() >= 3;
`
这里使用了“岛屿与间隙”(islands and gaps)的经典技术,通过rn - running_sum将连续上升段映射到同一组。这种写法在Amex内部审计系统中广泛使用,能处理数千个MCC的并行监控。面试官看到这个模式,会立刻认为你有大规模系统经验。
面试流程拆解:每一轮的生死线
Amex数据科学家面试共五轮,每轮60分钟,间隔7-10天。流程设计精密,每一环都在测试不同维度。
第一轮:电话筛选(Recruiter Screen)
重点不是技术,而是动机校准。 recruiter会问:“你为什么选择Amex而不是PayPal或Stripe?” BAD回答:“因为Amex品牌强,薪资高。
” GOOD回答:“因为Amex的闭环生态系统——从发卡、收单到商户服务——创造了独特的数据协同效应,比如可以用商务卡消费数据优化个人卡的信用额度模型,这是纯支付网关做不到的。” 这个回答展示了对商业模式的理解。本轮通过率约60%,失败者多因把Amex当成普通银行。
第二轮:技术编码(SQL + Python)
远程监考,使用CoderPad。SQL部分45分钟,Python部分15分钟。SQL题通常涉及多层嵌套和业务规则,如“计算剔除退货后的净销售额”。Python题多为数据清洗,如处理非标准日期格式。
2025年新增一道题:“用pandas模拟Amex的每日结算文件合并,处理文件缺失和字段漂移。” 本轮通过率约40%。关键不是速度,而是代码的可维护性。面试官会事后review你的变量命名和注释习惯。
第三轮:业务案例分析(Case Study)
最致命的一轮。给你一个PDF: “Amex发现Z世代用户对现金返还卡的兴趣下降,但对社交化金融产品(如Group Spending)的兴趣上升。请提出数据驱动的应对策略。” BAD做法是直接跳进AB测试设计。GOOD做法是先定义“兴趣”指标:APP内点击率?
邀请好友频率?还是实际创建群组数?然后分析现有用户分层,找出“高社交活跃但低信用卡使用的用户群”,再设计介入策略。本轮通过率仅30%。
第四轮:行为面试 + 模型深挖
由 Hiring Manager 主导。会深挖你简历中的项目。例如你说“优化了推荐系统CTR”,他会问:“如果发现高收入用户CTR下降,而低收入用户上升,你怎么排查?” 正确路径是先检查样本偏差,再分析推荐内容分布变化,最后验证是否因新用户涌入拉低整体FICO均值导致模型偏移。本轮强调因果推理,不是相关性描述。
第五轮:Hiring Committee 审批
你不再参与。三位面试官+HM+Recruiter召开30分钟会议。讨论焦点不是“他SQL写得好不好”,而是“他是否能独立领导一个跨团队数据项目”。2024年有一个案例:候选人技术优秀,但在debrie中被描述为“需要过多指导才能定义问题”,最终被拒。HC更倾向“能自己提出‘我们应该监控商户MCC迁移率’这种洞察的人”。
准备清单
- 精通时间窗口定义:必须能熟练使用RANGE BETWEEN INTERVAL 'n' MONTH PRECEDING AND CURRENT ROW,而不是简单ROWS。Amex的KPI几乎全是滚动周期计算,理解这一点才能写出符合生产环境标准的SQL。
- 掌握金融数据特殊性:包括MCC码分类、交易状态(授权、清算、退货)、货币转换、奖励积分抵扣。例如,在计算“月交易额”时,必须排除status = 'reversed'的记录,否则会虚增收入。
- 熟悉Amex产品矩阵:能说清楚Green Card、Gold Card、Platinum Card、Business Gold的区别,以及它们对应的用户画像和LTV模型。这直接影响你对“目标用户”的定义能力。
- 构建业务指标映射表:例如,“客户活跃度”在Amex可能是“过去30天有≥2笔非加油类交易”,而不是DAU。你需要提前准备这类定义,避免面试时临时编造。
- 模拟HC讨论视角:练习用两句话总结你的价值:“他不仅能写复杂SQL,还能主动识别数据缺口,比如提出监控商户MCC变更频率以预警套现风险。” 这种表述能提升你在HC的印象分。
- 系统性拆解面试结构(PM面试手册里有完整的[数据科学面试]实战复盘可以参考),包括如何应对“模糊需求”、“资源限制”、“跨部门冲突”等场景,这些在Amex的高阶岗位中极为常见。
- 准备三个“反向问题”:不要问“团队用什么技术栈”,而要问“最近一次因为数据洞察改变产品决策是什么?” 这个问题能引导面试官讲述真实案例,同时展示你的战略思维。
常见错误
错误1:把SQL当作孤立任务
场景:面试官要求“计算高端卡用户的季度消费增长率”。
BAD回答:直接写查询,用LAG()取出上季度值。
问题:没有定义“高端卡”(是Platinum以上?年费>$500?)和“消费”(是否含现金返还抵扣?是否剔除退货?)。
GOOD做法:先确认范围:“我假设高端卡指Platinum及以上卡型,消费为净交易额(剔除退货和积分抵扣),是否正确?” 这个提问展示了风险控制意识。在2024年一次debrie中,一位候选人因主动确认“是否包含商务卡的公司支付部分”而获得额外加分,因为这部分数据权限受限。
错误2:忽略数据延迟与一致性
场景:构建“实时欺诈评分”模型。
BAD回答:用最新30天交易数据训练模型。
问题:未考虑数据管道延迟。Amex的交易数据从授权到入库平均延迟47分钟,峰值时达2.3小时。直接用CURRENT_DATE可能漏掉大量未入账交易。
GOOD回答:在SQL中加入“数据新鲜度校验”步骤:
`sql
SELECT MAX(transactiontimestamp) FROM transactions WHERE DATE(transactiondate) = CURRENT_DATE;
-- 若返回时间早于 CURRENT_TIME - INTERVAL '2' HOUR,则触发告警并降级使用缓存模型
`
这种做法体现了生产级思维,是Amex工程师的日常实践。
错误3:混淆相关性与因果
场景:分析“用户参加积分兑换活动后消费提升”现象。
BAD回答:“活动导致消费上升,建议加大推广。”
问题:未控制选择偏差。参加活动的用户本就是高活跃用户。
GOOD回答:使用双重差分法(DID),将“活动前消费趋势相似但未参与的用户”作为对照组。SQL实现:
`sql
WITH treated AS (
SELECT userid, AVG(amount) as preavg, 'treated' as group_type
FROM transactions WHERE userid IN (select userid from campaign_participants)
AND transaction_date BETWEEN '2024-01-01' AND '2024-03-31'
GROUP BY user_id
),
control AS (
SELECT userid, AVG(amount) as preavg, 'control' as group_type
FROM transactions
WHERE userid NOT IN (select userid from campaign_participants)
AND transaction_date BETWEEN '2024-01-01' AND '2024-03-31'
GROUP BY user_id
HAVING ABS(preavg - (SELECT AVG(preavg) FROM treated)) < 0.1 * (SELECT AVG(pre_avg) FROM treated)
)
-- 后续分析两组在活动后的消费差异
`
这种方法在Amex的营销效果评估中是标准流程。
准备拿下PM Offer?
如果你正在准备产品经理面试,PM面试手册 提供了顶级科技公司PM使用的框架、模拟答案和内部策略。
FAQ
Q:Amex的薪资结构和总包竞争力如何?
Amex数据科学家L4级别,base $150K,RSU $120K/年(分4年发放,每年$30K),sign-on bonus $20K,target bonus 15%(约$22.5K),总包第一年约$212.5K,后续年度约$180K base + $30K RSU + $22.5K bonus = $232.5K。相比Meta L4 $200K base + $100K RSU/年,Amex base较低但RSU更稳定(不受股价短期波动影响)。更关键的是,Amex的bonus与公司整体NPS和净收入挂钩,2023年实际bonus支付率达到118% target,意味着你可能拿到$26.6K现金奖励。
此外,Amex提供“全球旅行权益”、“商务卡免费使用”、“子女教育储蓄匹配”等独特福利,这些在总价值上可额外增加$15K-20K/年,是纯科技公司不具备的。因此,如果你看重长期稳定和综合福利,Amex的总价值可能超过同级科技公司。
Q:没有金融背景能否通过面试?
能,但必须证明你能快速建立领域知识。2024年有一位候选人背景是医疗数据分析,他在面试中说:“我研究了Amex的10-K文件,发现‘服务费收入’占总收入38%,这说明商户端产品是关键利润来源。因此,我的建模思路会优先考虑如何通过数据提升商户留存率。” 这句话让Hiring Manager当场点头。他随后在SQL题中主动加入MCC分类逻辑,尽管写法不完美,但展现出学习意愿。
最终通过。反观另一位候选人,虽有银行经验,但把“chargeback”误认为“late payment”,直接被否。关键不是你有没有经验,而是你是否表现出“愿意且能够理解金融逻辑”的态度。建议准备时精读Amex近三年财报,重点关注“Net Spread”、“Discount Rate”、“Card Member Spending”等核心指标的定义和趋势。
Q:面试中是否允许提问?该问什么?
可以且必须提问,但问题质量决定你的最终评价。2025年一位候选人问:“团队目前最大的数据挑战是模型延迟还是数据质量?” 这个问题暴露了他对生产系统的无知——在Amex,数据质量是根基,模型延迟是优化项。正确提问应体现战略视角。例如:“在你们最近的客户分层模型中,是否遇到‘高消费但低互动’用户群的触达难题?我们是否尝试过用行为序列模式(如交易-兑换-查询的路径)来定义 engagement?
” 这种问题展示了你不仅懂技术,还关心业务落地。另一个高分问题是:“当数据洞察与业务直觉冲突时,团队通常如何决策?是否有过因为数据反对而取消产品的案例?” 这个问题引导面试官讲述组织决策机制,同时暗示你关注影响力而不仅是执行。避免问“你们用Snowflake还是Redshift”这类技术栈问题——这些信息官网上都有,问了只会显得准备不足。
准备好系统化备战PM面试了吗?
也可在 Gumroad 获取完整手册。