作为一个经历过2019年招商银行信用卡中心秋招IT笔试(数据挖掘方向第三批)的人,我想把这场笔试的完整经历、题型分布、考察重点和备考思路沉淀下来。当时我在牛客网刷了不少面经,发现数据挖掘方向的信息少而零散,大多是"考了SQL""考了机器学习基础"这种模糊描述,真正把题目类型、考察深度和解题链路讲透的几乎没有。所以我写下这篇,给后面投递招行信用卡中心数据挖掘岗的同学一份尽量详细的参考。同时,银行类金融机构的数据挖掘岗笔试和互联网大厂有明显差异,我也会把这些差异点一并拆解清楚。
1. 笔试入口与整体基调:为什么说这场笔试"比想象中正统"
招行信用卡中心的秋招流程一般是网申、在线笔试、面试。数据挖掘方向的笔试属于IT序列,但和纯后端开发、算法工程师的笔试不完全一样。第三批笔试的时间大概在10月中下旬,形式是牛客网在线笔试,双机位监控,全程不允许切屏,切屏超过一定次数会被系统记录甚至判违规。
整体基调可以用一句话概括:考察面宽、深度适中、金融色彩浓。不像互联网大厂那样动辄Hard级别的算法题,也不是纯粹的选择题堆砌,而是"客观题 + 主观题 + 编程题"的组合,每个模块都在有意筛选具备金融业务理解能力的数据挖掘候选人。这一点在后面的具体题目分析中会反复体现。
笔试时长我记得是90分钟到120分钟这个区间,题量不算小,时间压力是存在的。我当时的策略是"先通览,后攻坚",拿到试卷后先花2分钟把所有题目扫一遍,大致判断哪些题是送分题、哪些题需要计算、哪些题需要写代码,然后按性价比排序作答。这个策略帮我避免了一个常见问题——在前面分值不高的客观题上纠结太久,导致后面的编程题时间不够。
需要特别提醒的是,招行信用卡中心的笔试系统对编程题的输入输出格式要求很严格,尤其是Python和SQL。SQL题不是让你写个大概,而是要求能在本地环境跑通、通过给定的测试用例。所以平时练习尽量不要只在草稿纸上写,要真刀真枪在编辑器里跑。
2. 客观题考点分布:机器学习、概率统计与业务理解的三角结构
客观题在这份试卷中占了相当大的比重,我记得大概有30道左右,包括单选、多选和判断。考点分布可以归纳为三个支柱:机器学习基础、概率统计、业务理解与常识。这个三角结构基本代表了银行系数据挖掘岗位的底层要求。
2.1 机器学习基础:重点不是模型调参,而是原理边界
机器学习相关的题目大约占了客观题的40%,考察的知识点包括:
- 逻辑回归的损失函数形式,以及为什么用交叉熵而不是均方误差
- 决策树的特征选择指标(信息增益、信息增益率、基尼指数)分别对应哪几种算法
- SVM的核函数选择,以及软间隔中惩罚参数C的作用方向
- 随机森林和GBDT的区别,重点是Bagging和Boosting的思想差异
- K-Means算法的收敛条件,以及K值选取的常用方法(肘部法则、轮廓系数)
- 过拟合的常见解决方案,L1正则和L2正则的区别
这里有一个值得展开的点:逻辑回归为什么用交叉熵而不用均方误差。我在笔试中遇到的不只是"记住结论",而是会问"如果用MSE训练逻辑回归,梯度下降会有什么问题"。答案是:逻辑回归的预测值是经过Sigmoid变换的,如果使用MSE,损失函数关于参数的梯度表达式中会出现Sigmoid的导数项,当预测值接近0或1时,Sigmoid的导数趋近于0,导致梯度消失,训练速度变得极慢。而交叉熵损失配合Sigmoid,梯度表达式中不会出现Sigmoid导数项,梯度更新更平稳。在备考时,我不建议死记结论,而是最好亲手推导一遍梯度表达式,很多类似的题目都能迎刃而解。
关于决策树的三个指标,笔试中常见的变形题是给一组数据,让你手工计算信息增益或基尼指数,并判断特征选择的顺序。这种题考察的不是"你知道有这三个指标",而是"你真的理解这三个指标的计算逻辑"。手工计算基尼指数时要注意加权平均的处理,即按特征取值划分后,以每个子集的样本占比为权重,对各子集的基尼系数进行加权求和,然后选择加权基尼系数最小的特征作为划分特征。
2.2 概率统计:贝叶斯公式和假设检验是高分关键
概率统计是银行系笔试的必考板块,考点非常集中:条件概率、贝叶斯公式、期望与方差的性质、常见分布(正态分布、二项分布、泊松分布)、假设检验的基本概念、置信区间的含义。我印象最深的是一道关于信用卡风控场景的贝叶斯题,大意是:某风控模型预测用户为坏客户的准确率是95%,误报率是5%,而实际坏客户占比只有2%,问如果模型预测某个用户是坏客户,那么这个用户真的是坏客户的概率是多少。
这道题本质上是贝叶斯公式的直接应用。设A为"用户真的是坏客户",B为"模型预测为坏客户",则:
P(A|B) = P(B|A) × P(A) / [P(B|A) × P(A) + P(B|¬A) × P(¬A)]
代入数据:0.95 × 0.02 / (0.95 × 0.02 + 0.05 × 0.98) ≈ 0.019 / (0.019 + 0.049) ≈ 0.279
也就是说,即使模型的准确率高达95%,由于坏客户占比只有2%,模型预测为坏客户的案例中,真正是坏客户的概率也只有约28%。这道题考察的不只是公式记忆,更是对"先验概率"和"后验概率"关系的直觉理解,这也直接关联金融风控场景中模型精确率(Precision)偏低这一常见现象的理解。在业务落地时,模型输出的概率分数往往不能直接作为最终决策依据,需要结合人工审核或策略规则做二次确认。
实话说,这类题如果在考场上一紧张,很容易算错。我的建议是考前把贝叶斯公式的推导过程、全概率公式的展开方式写一遍,尤其是把"误报率"和"假阳性率"这些术语和数学符号对应起来,不能在考场上现想。
假设检验的考点主要在第一类错误和第二类错误的含义,以及置信区间的解读。比如"95%置信区间"的正确理解是"如果重复采样100次并构造100个置信区间,大约有95个区间包含总体参数的真值",而不是"总体参数有95%的概率落在该区间内"。这种表述差异在判断题里经常出现,需要仔细辨别。
2.3 SQL与数据库:银行场景下的SQL考察远超预期
如果你觉得数据挖掘岗笔试的SQL只是"会基本查询就行",那这场笔试会改变你的认知。SQL题占了客观题的约30%,而且主观题里也有一道大题是SQL。考试范围包括:
- 多表连接(INNER JOIN、LEFT JOIN、RIGHT JOIN)的区别,以及NULL值的处理
- GROUP BY与HAVING的组合使用,以及聚合函数的执行顺序
- 子查询的写法,尤其是EXISTS和IN的区别
- 窗口函数(ROW_NUMBER、RANK、DENSE_RANK、SUM OVER)的基本用法
- 日期函数的处理(DATE_FORMAT、DATE_ADD、DATEDIFF)
- 去重与计数(DISTINCT和COUNT的组合)
银行信用卡业务中,最典型的需求就是"统计每个客户近三个月的消费总金额""筛选最近30天有多次还款逾期的客户""计算各账单日的应还款总额"等。这些需求本质上考察的都是GROUP BY + 窗口函数 + 日期函数的三件套组合。我在备考时把牛客网SQL题库的中等难度题目刷了一遍,基本覆盖了这些考点,进考场后看到SQL题心里就有底了。
窗口函数是笔试中的高频考点。有一道题我记得很清楚,给了一张交易流水表,要求"按客户ID分组,找出每个客户消费金额最高的前3条记录"。这道题最简单的做法就是用窗口函数:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY customer_id ORDER BY amount DESC) AS rn FROM transaction_record ) t WHERE t.rn <= 3如果不使用窗口函数,用自连接或关联子查询也能做,但写法会复杂很多,而且容易出错。备考时一定把窗口函数的语法熟练掌握,尤其是PARTITION BY和ORDER BY在窗口函数中的作用差异。
2.4 业务理解与金融常识:容易被忽视的隐形分水岭
招行信用卡中心的笔试中,还有一部分题目纯粹考察候选人对金融业务的理解,比如信用卡账单日与还款日的区别、最低还款额的计算逻辑、信用卡年费减免政策、征信报告的查询记录类型、以及常见的风控术语(多头借贷、共债风险、额度使用率等)。
这类题目对于有金融背景的候选人来说基本是送分题,但对于纯计算机背景、没接触过金融业务的候选人来说,可能就会感到意外。我当时备考时专门花了一个晚上看招行信用卡官网的产品介绍、费用说明和常见问题,还大致翻了一下《商业银行信用卡业务监督管理办法》中关于信息披露的条款,这些内容在笔试中确实有体现。其实不只是为了应付笔试,面试环节的业务问题也经常会围绕这些展开,提前了解金融机构和数据挖掘业务的结合点,对后续面试也有帮助。
我印象比较深的一道题是"信用卡最低还款额通常包含哪些组成部分",选项包括消费本金的10%、利息、费用、预借现金本金等。这道题的答案是"以上都是",看起来简单,但需要你真正理解信用卡的还款逻辑,而不是死记硬背。
3. 主观题与编程题:从特征工程到代码落地
主观题部分是这套试卷区分度最高的模块,大概有3到4道大题,包括1到2道简答题、1道SQL题、1道编程题。这一部分的答题质量基本决定了你是否能进入面试环节。
3.1 简答题:特征工程与风控模型的设计思路
简答题的典型问法是"如何评估一个信用卡申请反欺诈模型的效果"或者"如何从用户的历史消费数据中构造特征来预测用户流失"。这类题目没有标准答案,但考察的是你有没有完整的建模思路。
我当时的答法是按"业务理解 - 数据清洗 - 特征构造 - 模型选择 - 评估验证"的逻辑链展开。以"预测用户流失"为例,我列出的特征维度包括:
- 消费维度:近1个月消费金额、消费频次、消费金额的环比变化率、消费时间段的分布(工作日/节假日)
- 还款维度:还款是否及时、最低还款占比、分期使用频率
- 活跃度维度:APP登录频次、优惠券使用率、客服电话进线频次
- 交叉特征:消费频次与还款及时率的交互、额度使用率与分期行为的组合
回答这类问题时要特别注意"可解释性"。银行系的数据挖掘和互联网推荐系统不一样,模型的决策往往直接影响用户的信贷额度和资金安全,所以监管要求和业务方都希望模型能解释"为什么给出这个预测"。即使问题没有明确问可解释性,我也会在答法中加入一句"在模型选型时,会优先考虑逻辑回归或GBDT这类能输出特征重要度的模型,并结合SHAP值做事后解释",这会让答案更贴近金融场景的实际需求。
关于"如何评估反欺诈模型"这道题,我踩过一个坑,就是一开始只写了准确率(Accuracy)。实际上在欺诈场景中,正负样本比例可能严重失衡(欺诈样本往往远少于正常样本),准确率会失真。正确思路是关注精确率(Precision)、召回率(Recall)、F1-Score、AUC、KS值,以及在不同阈值下的混淆矩阵变化,还要考虑业务上更看重哪种错误——是更怕把好客户误判为欺诈(影响用户体验和投诉率),还是更怕漏掉真正的欺诈(造成资金损失)。这个权衡过程本身就是业务理解的一部分。
3.2 SQL大题:账单日与还款日的业务查询
SQL大题的场景是信用卡账单查询,表结构包括客户信息表(客户ID、姓名、账单日、还款日)、消费流水表(流水ID、客户ID、消费日期、消费金额、商户类型)、还款流水表(还款ID、客户ID、还款日期、还款金额)。
题目要求大概是:
- 统计每个客户2019年9月的消费总金额和消费笔数
- 找出2019年9月消费金额超过5000元的客户中,还款日期晚于到期还款日的人数
- 计算每个客户的额度使用率(近6个月消费总额 / 授信额度)
这些题目难度并不大,但很考验SQL基本功的熟练度,尤其是日期函数的处理。第2题我在考场上的写法是先用子查询筛选出9月消费超过5000元的客户,再关联还款流水表,用DATEDIFF判断还款日期和到期还款日的关系。这类题在牛客网的SQL题库里几乎都有类似的练习题,只要平时练过,考场上就不会卡壳。
3.3 编程题:在有限时间内完成一道可运行的代码题
编程题部分,招行信用卡中心的笔试并没有选择LeetCode那种Hard级别的算法题,而是更偏向工程实现和数据拟合类题目。我抽到的题目大意是:给定一个数据集(CSV格式),包含若干特征列和一个目标列,要求用Python实现一个简单的逻辑回归模型训练与预测,并输出验证集上的AUC值。
这道题的时间压力较大,因为需要在本地环境或牛客网在线环境里完成代码编写、调试和结果验证。我当时的解法是用numpy手写逻辑回归的梯度下降,矩阵运算的写法大概是:
import numpy as np def sigmoid(z): return 1.0 / (1.0 + np.exp(-z)) def train(X, y, lr=0.01, epochs=1000): m, n = X.shape theta = np.zeros(n) for _ in range(epochs): z = np.dot(X, theta) h = sigmoid(z) gradient = np.dot(X.T, h - y) / m theta -= lr * gradient return theta如果用sklearn的LogisticRegression直接训练,代码更少,但考试环境不一定预装了sklearn,所以平时养成用numpy实现基础算法的习惯非常有必要。就算考试环境允许第三方库,"手写一个简单版本"在面试官眼里也会是一个加分项,因为这代表你理解算法的底层逻辑,而不只是会调包。
这类编程题的核心考察点是"在有限时间内写出可运行、结果正确的代码"。我的踩坑经验是不要一上来就做复杂的数据预处理,先把核心训练和预测流程跑通,提交一个能出结果的基础版本,再在剩余时间里做优化。毕竟这类在线判题系统的评分依据是测试用例的输出,哪怕你代码写得再华丽,最终没有跑通任何用例,得分依然是零。
4. 时间分配与考场实战:三道必拿分的顺序优化
整场笔试的时间压力和题目间的分值权重,决定了你不能采用"从头做到尾"的线性策略。我在考场上实际执行的时间分配方案如下:
| 模块 | 题量参考 | 建议用时 | 策略说明 |
|---|---|---|---|
| 客观题(选择/判断) | 约30题 | 30~35分钟 | 快做,会的立刻选,不确定但能排除一个选项的标记后跳过 |
| 简答题 | 1~2题 | 15分钟 | 按条理答,尽量分点,不展开长篇大论 |
| SQL题 | 1~2题 | 20分钟 | 先写框架再补细节,确保每一条都能跑通 |
| 编程题 | 1题 | 20~25分钟 | 先跑通基础版本,再考虑优化 |
| 检查与补漏 | - | 5~10分钟 | 只检查标记过的题,不在难题上恋战 |
这个方案的逻辑很直接:客观题是性价比最高的模块,做得快还能建立信心;简答题按点给分,分点作答效率最高;SQL题和编程题是区分度最高的模块,也是面试官最关注的,要保证至少有一种能跑通的版本。
我在考场上的一个重要经验是:千万不要在一道选择题上纠结超过2分钟。我遇到过一道关于P值检验的选择题,选项设置得很绕,我花了好几分钟推演,最后还不确定。回头看完全没必要,这道题最多1分,但耽误的时间足以让后面分值更高的编程题变得仓促。遇到这种题,标记一下,用直觉选一个相对合理的选项,果断跳过。
另外,注意多选题的策略:多选、少选、错选通常都不得分,但如果题目明确说明"少选得部分分",那么拿不准的选项就不要选,保底拿部分分。银行类在线笔试中这种计分规则比较常见,做题前仔细看题干的说明。
还有一个细节:牛客网的系统支持本地IDE调试代码,但编程题的输入输出经常需要自己处理,尤其是输入格式可能有多行、多测试用例的情况。我有一个教训是有一次做题时没考虑多组测试用例的输入循环,只处理了一组数据就提交,结果只过了部分用例。所以在写任何在线编程题时,习惯性地用while True配合try...except处理输入,是一个保命的操作习惯。
5. 从笔试到面试:你需要在答题时预埋的"信号"
很多人以为笔试就是"做题-交卷-等结果",考完就抛在脑后了。但我在实际经历中发现,笔试的答题内容在面试环节往往会被翻出来追问。这种情况在招行信用卡中心的面试中相当常见,面试官手里很可能有你的笔试卷子(或至少看到了你的答题记录),然后根据你的回答往下挖。
因此,笔试答题时就要有"这份答案将来要能经得起追问"的意识。简答题中你写了"用SHAP值做特征解释",那面试前最好把SHAP的原理、优缺点、在决策树模型和线性模型中的不同表现搞清楚。SQL题你写了窗口函数,面试官可能会问"窗口函数和GROUP BY的区别是什么""如果数据量很大,窗口函数会不会性能差"。编程题你手写了梯度下降,那关于"学习率怎么调""特征要不要标准化""为什么逻辑回归要做特征标准化"这类问题也要能答得上来。
我在那次面试中就被问到一道笔试相关的问题:"你在笔试里写了评估反欺诈模型要看AUC和KS值,这两个指标有什么区别?各自在什么情况下更适用?"这个问题的完整答案是:AUC衡量模型对所有可能阈值下的整体排序能力,KS值衡量正负样本累积分布的最大差距,两者都是阈值无关指标,但AUC是全局性的,KS关注的是最大区分点。在实际风控应用中,KS值和AUC经常一起看,但KS对阈值的选择更有指导意义,而AUC更稳定。如果笔试时只是照搬常见答案而没有真正理解这些概念,面试中就容易卡壳。
还有一个在笔试中逐步建立起来的认识是,银行系数据挖掘岗的面试非常看重"概率思维"。他们对候选人的数学基础有执念,面试中很可能继续追问线性代数、概率论的基础知识,而不是只聊项目经历。所以从笔试备考阶段开始,就不要只看机器学习模型的调用方法,要把背后的数学逻辑一并梳理清楚。
6. 备考清单与方向建议:如果让我重新准备一次
结合我自己的笔试经历和后来的一些复盘,如果让我重新准备招行信用卡中心数据挖掘岗的笔试,我会按下面的时间线和任务清单来做:
基础阶段(考前3~4周)
- 把机器学习常用模型的原理推导过一遍,重点包括逻辑回归(损失函数、梯度推导、正则化)、决策树(三种特征选择指标的计算方式)、朴素贝叶斯(先验和后验的关系)、K-Means(收敛性和K值选择)
- 系统刷SQL题,重点覆盖聚合查询、多表连接、窗口函数、日期函数四类题型,保证中等难度题目不卡壳
- 复习概率统计基础,尤其是贝叶斯公式、期望方差性质、常见分布、置信区间和假设检验
强化阶段(考前2周)
- 每周至少完成一次限时整套模拟题,用牛客网的银行历年真题或相似难度的套题练习,训练时间分配能力
- 针对金融业务场景,主动收集信用卡相关的业务知识,包括账单日、还款日、最低还款额、循环利息、年费政策、征信报告内容等
- 把常用算法的numpy实现手写一遍(逻辑回归、K-Means、决策树),确保在没有第三方库的环境中也能快速写出可运行代码
冲刺阶段(考前3~5天)
- 不再做新题,只看错题笔记和公式卡片
- 把SQL窗口函数的各类用法和场景再过一遍,尤其是RANK、DENSE_RANK、ROW_NUMBER三个排序函数的差异
- 准备一道完整的"特征工程 + 模型评估"问答模板,能用自己的话讲清楚逻辑,而不是背模板
关于备考资料,我没有用太多高深的内容,主要就是三类:机器学习基础(李航的《统计学习方法》配合南瓜书补充推导)、牛客网的SQL题库和部分Python编程题、以及招行信用卡官网的业务介绍页面。把这三样吃透,对付这场笔试基本够用。
最后说一个贯穿整个备考过程的心态调整。秋招季的焦虑几乎是普遍存在的,但越焦虑越容易陷入"广撒网却每个都不深入"的低效备考。我当时给自己定了一个原则:每天只深度攻克一个核心知识点,比如今天把逻辑回归的推导和损失函数的性质彻底搞懂,明天专门刷窗口函数的10道题。这种"单点突破"的方式比每天泛泛地刷50道题更有效,因为在笔试中最容易拉开差距的恰恰是对核心概念的深层理解,而不是做题数量。
招行信用卡中心的数据挖掘笔试整体上是一场"广而不深"的考试,它不像互联网大厂那样追求极限的算法能力,而是更在意你是否具备扎实的数学基础、熟练的SQL能力、清晰的特征工程思路,以及基本的金融业务感知。如果你能把上述几个板块都准备到位,进面试的概率会相当大。希望这篇复盘能帮你少走一些弯路。