网易数据挖掘实习生笔试考点复盘:从概率统计到SQL与特征工程
1. 先说结论网易数据挖掘实习生笔试到底在考什么我当年投网易数据挖掘实习生岗位的时候犯过一个特别蠢的错误以为笔试会像期末考试一样按《数据挖掘导论》的章节顺序出题。结果打开试卷半小时就懵了——题不难但全是你平时觉得这也要考的东西。所以这篇东西不是给你背题库用的而是帮你把散落在各个角落的考点串成一张网顺带附上我踩过坑之后的复盘思路。先给个整体判断网易这场实习生笔试题整体难度在互联网大厂里属于中等偏上但它的偏不在数学深度而在覆盖面。你可以不会推导SVM的对偶问题但你不能不知道朴素贝叶斯为什么朴素你可以没调过XGBoost但你必须能徒手写出逻辑回归的损失函数和梯度更新。如果用一个词概括它的风格就是基础扎实、工程敏感、统计直觉。这篇文章适合三类人。第一类是正在备战大厂数据挖掘/算法实习生笔试的在校生第二类是刚转行数据挖掘、想系统补基础的在职人员第三类是纯粹好奇数据挖掘笔试到底考什么的路人。不管你是哪类我建议你准备一个笔记本因为中间不少内容尤其是SQL现场题和特征工程思路自己动手写一遍比看十遍都管用。2. 概率统计与机器学习笔试里最容易似懂非懂的部分2.1 条件概率和贝叶斯公式几乎年年出现的送分题陷阱先说一个我在多个大厂笔试里都见过的题型给你一个疾病检测的场景阳性率、误报率、患病率都给你让你算某人检测阳性的条件下真正患病的概率。这题考的就是贝叶斯公式公式本身三行就能写完但错误率常年居高不下因为很多人下意识会用检测准确率去代替后验概率。举个例子你就明白了。假设某种疾病的患病率是0.1%检测方法在患病者中检出阳性的概率是99%在未患病者中误报阳性的概率是2%。现在随机抽一个人检测结果阳性问他真实患病的概率是多少套贝叶斯公式P(患病|阳性) P(阳性|患病) × P(患病) / P(阳性)分母P(阳性) 0.99 × 0.001 0.02 × 0.999 ≈ 0.02097。所以分子是0.99 × 0.001 0.00099结果约0.0472也就是4.72%。这个数字反不反直觉非常反直觉。明明检测准确率高达98%可真阳性率连5%都不到。原因是患病率太低假阳性的人数基数远远大于真阳性。出题人就是想看你能不能绕过准确率这个直觉陷阱直接抓住先验概率对后验概率的压制作用。笔试里遇到这类题先冷静三秒把已知条件全部翻译成标准符号再动手算别急着代数字。2.2 最大似然估计和损失函数的关系背公式不如会推导网易的笔试题很少让你直接背一个公式它更愿意给你一个场景让你从原理出发推一遍。比如给出一组独立同分布的样本假设服从伯努利分布让你用最大似然估计求参数p。这时候如果你只是记得p的估计值是样本均值那题目稍微变个花样比如样本服从指数分布或者均匀分布你就傻了。我说一下通用的四步法。第一步写出单个样本的概率密度函数或概率质量函数第二步写出所有样本的联合似然函数因为是独立样本所以直接连乘第三步对似然函数取对数把连乘变成连加这一步主要是为了求导方便第四步对参数求导令其为零。解出来的那个参数表达式就是最大似然估计量。这里有一个特别容易忽略的细节取对数之后你求导的对象是对数似然函数但单调性不变所以最大值点和原始似然函数是同一个位置。笔试里如果时间充裕我建议你每一步都写清楚因为阅卷是按步骤给分的。而且你要注意有些题给的分布不是指数族分布求导之后方程没有解析解这时候你就得停下来说明需要借助数值优化方法比如梯度上升。能写出这一步通常比硬解出错误答案得分高。2.3 逻辑回归为什么是数据挖掘笔试的钉子户如果你把近五年各大厂数据挖掘实习生笔试的题目拉一个词频统计出现频率最高的算法八成是逻辑回归。原因很简单它既是线性模型里最接近业务语义的又是神经网络的基础构件而且它的推导过程能同时考察你对概率、损失函数、梯度下降三块内容的掌握程度。逻辑回归的核心思路是把线性回归的输出通过sigmoid函数压缩到(0,1)区间然后用交叉熵作为损失函数。这里有两个高频考点。第一为什么损失函数不用均方误差因为使用均方误差时sigmoid的导数会导致梯度消失收敛速度极慢而交叉熵配合sigmoid恰好能约掉导数的分母让梯度的形式变得非常干净。第二正则项的作用。L2正则化会让权重整体趋向于小值防止过拟合L1正则化则会让部分权重直接归零可以起到特征选择的效果。笔试里如果给你一个有几十个特征的场景问你哪些特征可能不重要你应该条件反射般想到L1正则化。我当时复习的时候自己在一个笔记本上反复默写逻辑回归的梯度推导不看书从损失函数开始一步步推到梯度表达式。这个过程看起来笨但效果奇好因为只有亲手推过一遍你才会理解为什么学习率太大容易震荡、太小收敛太慢也才能在面试环节被问到你调过学习率吗时给出有底气的回答。2.4 决策树、随机森林、GBDT的区别问法可以很含蓄有一种题不会直接问随机森林和GBDT有什么区别而是给你一个业务场景让你选择用什么模型并说明理由。这时候你要是只背区别条条框框很容易漏掉关键点。我给你一个实用的回答框架。先看数据的规模和维度。维度特别高、特征稀疏的时候线性模型通常比树模型更稳。再看特征之间有没有复杂的非线性交互比如年龄和收入同时影响购买意愿这时候树模型能自动捕捉交互而线性模型需要你手动构造交互特征。再看你对可解释性的要求决策树和浅层规则模型容易解释深度学习的黑盒特性就不适合强解释场景。最后看训练效率随机森林因为每棵树独立训练可以并行化GBDT因为每棵树依赖前一棵树的残差天生是串行的所以GBDT在小数据集上效果好但大数据量下训练成本高。笔试题里只要出现如何选择模型这类开放式问题记住一个原则不要只给结论要给在什么条件下选什么的对照分析。比如你可以说如果业务需要可解释性强的规则比如风控审核逻辑回归或浅层决策树更合适如果追求极致精度且不差训练时间GBDT或XGBoost可以一试。这种回答方式在人工阅卷和面试复盘中都很加分。3. SQL现场题不会写临时表就等着白卷交上去3.1 这类笔试的SQL到底长什么样网易数据挖掘实习生的笔试卷里SQL题几乎从不缺席。它不会考你复杂的窗口函数大杂烩但会让你处理一张用户行为表、一张订单表然后问每个用户最近一次下单的时间或者连续三天有购买行为的用户这类偏实际业务的问题。难度不大但很考验你组织SQL语句的条理性。我印象最深的一道题是给一张订单明细表字段包括user_id、order_date、order_amount让你统计每个用户每个自然月的下单总金额和下单次数。这个需求看着简单实际上一半的人会在这道题上翻车因为他们忘了同一个用户在同一个月可能有多笔订单直接在SELECT里就用user_id分组导致一个月多行被拆成多组。正确的做法是先做一个子查询把order_date格式化成年月字符串再用user_id和年月联合分组SUM(order_amount)和COUNT(*)作为聚合结果。看起来是不是平平无奇但这种脏数据清洗日期格式化分组聚合的组合恰好就是真实业务里跑数的最常见形态。3.2 窗口函数笔试里的必杀技和双刃剑窗口函数是近些年笔试的高频考点因为它一个函数能顶好几个子查询代码简洁逻辑清晰。常见的有ROW_NUMBER()、RANK()、DENSE_RANK()、LAG()、LEAD()、SUM() OVER(PARTITION BY ... ORDER BY ...) 这类分析聚合。我举一个典型的例子给你一张用户登录日志表字段是user_id和login_date问每个用户最近连续登录的天数是多少。这个题如果不了解窗口函数很多人会先想到自连接写着写着就乱了。更好的思路是先用ROW_NUMBER() 按用户分组、按日期排序得到一个序号然后用login_date减去这个序号得到一个辅助日期。连续登录的记录这个辅助日期是相同的因为日期每天递增1序号也每天递增1差值是常数。接下来只要按用户和辅助日期分组计数再取每个用户的最大连续天数即可。这套思路的每一步都有明确目的ROW_NUMBER() 是构造时间序列的等差标记日期减序号是识别连续性的经典技巧分组计数是统计连续块长度。笔试考的不是你会不会背函数语法而是你能不能想到用函数去表达业务逻辑。我建议你把这套日期减序号的套路记下来它的变体能覆盖连续签到、连续消费、连续活跃等一大批真实面试题。3.3 别让语法错误毁掉你的思路SQL题最冤的失分方式不是不会写而是思路全对、语法写错。笔试环境通常是网页上的在线编辑器没有数据库也没有自动提示你写完的每一个表名、字段名、关键字都必须自己检查。我的经验是写完一段SQL之后按下面这个顺序自查。第一步检查表名和字段名是否和题目给的完全一致大小写要不要区分别想当然地给字段加别名。第二步检查逻辑执行的先后顺序。SQL里FROM最先执行之后是WHERE然后是GROUP BY再是HAVING最后是SELECT和ORDER BY。如果你在SELECT里给某个字段起了别名却把这个别名用在WHERE里一定会报错因为WHERE执行时别名还不存在。第三步检查聚合函数和分组字段是否匹配凡是没有出现在GROUP BY里的字段除了聚合函数基本都有问题。第四步如果涉及窗口函数确认OVER里的PARTITION BY和ORDER BY是否写全。这套自检流程熟练之后你在笔试里写SQL的出错率会直线下降。4. 特征工程与业务思维比算法模型更容易拉开差距的部分4.1 给原始特征做翻译数据挖掘笔试里隐藏的场景题有一种题型看起来不像技术题但非常考验数据挖掘基本功给你一段业务描述比如电商平台要提高用户的复购率让你设计特征。很多人一上来就写用户年龄、性别、收入这就是典型的缺乏特征工程思维。我告诉你我当时总结出来的方法论本质上是把业务问题翻译成可量化的行为指标。当你面对复购率这个话题时你可以从三个维度拆特征。第一个维度是用户历史行为比如过去90天订单数、过去30天活跃天数、平均下单间隔、最大下单金额。第二个维度是商品或店铺维度比如用户购买商品的平均价格带、是否购买过爆款、品类集中度。第三个维度是时间维度比如上次购买距离今天的天数、是否有节假日效应、工作日和周末的下单比例。这些特征没有一个是直接抄原始表的它们都是对原始字段做加工、统计、组合后得到的衍生特征。笔试阅卷时评分标准往往不是看你的特征列得有多全而是看你能不能体现出从业务问题到特征设计的推导过程。会写用户月度消费金额的变异系数这种特征的人和只会写用户ID的人得分差距非常大。4.2 数据清洗和缺失值处理人人都说会一考就露馅有一类题是你拿到一张有缺失值、有异常值的表问你如何处理。这种题看着开放实际上考察你对数据分布的理解程度。我建议你回答时先分情况讨论而不是给一个一刀切的方案。对于缺失值的处理如果缺失比例很小比如低于5%你可以直接删除对应样本如果缺失比例较高但字段是数值型且分布接近正态可以用均值填充分布偏态严重时更适合用中位数填充如果字段是类别型可以把缺失单独作为一个类别或者用众数填充。需要特别注意填充本身会减小数据方差所以在建模时你可能还要引入一个是否缺失的指示特征让模型自己学习缺失带来的影响。对于异常值的处理最常用的方法包括基于3σ原则把超过均值±3倍标准差的值视为异常基于四分位距把超出Q1-1.5×IQR或Q31.5×IQR的值视为异常有时还要结合业务规则比如订单金额为负或者年龄超过120这种明显不合理的数据。笔试题如果偏向业务你最好补充一句需要先和业务方确认异常值的产生原因因为有些异常值其实是正常业务逻辑的结果比如退款订单金额为负。能写出这一步说明你不只是会用工具而是有数据敏感度。4.3 类别特征编码One-Hot不是唯一的答案很多人在笔试里一提到类别特征就写One-Hot编码这没问题但不够完整。真实的业务场景里类别特征有很多种编码方式各有各的适用场景。One-Hot的问题是当类别数量特别多时维度会爆炸比如城市这个特征有几百个取值One-Hot之后表格会变得极其稀疏。这时候你可以考虑目标编码即用类别对应的目标变量均值去替换原始类别但这种做法容易过拟合需要做交叉验证或平滑处理。如果类别本身有天然顺序比如用户等级、教育程度直接用整数编码是合理的。如果类别特征特别多但又都重要可以用哈希编码把类别映射到固定长度的向量减少维度。笔试里遇到如何对类别特征编码这种题最忌讳的就是只答一种方案。你要展现出根据特征基数、与目标的关系、数据量大小来选择编码方式的决策能力。比如你可以说类别少时用One-Hot类别多且和标签相关性强时考虑目标编码并加平滑类别有顺序时用有序整数编码。这种回答方式基本能覆盖面试官想听的要点。5. 常见失分点与复盘方法从看懂了到做对了还有多远5.1 最容易丢分的三个坑结合我自己和身边同学的经验网易数据挖掘实习生笔试题最典型的三个失分点我来逐一拆解。第一个是题目读完就动手没圈关键词。数据挖掘笔试题的题干通常比较长夹杂着业务背景和具体条件比如要求精度不低于90%、训练集和测试集按7比3划分、缺失值超过10%的特征需要删除。如果你没把这些条件圈出来很可能在后续计算里用错约束。我的习惯是动笔之前先用30秒把题目的条件用下划线标出尤其是数值、时间范围、评价指标这三类信息。第二个是公式记得住条件看不懂。最典型的就是把贝叶斯公式套错场景。比如题目给的P(A|B)和P(B|A)的实际含义很容易混淆条件概率的表达方式稍一变样很多人就开始乱。应试技巧是每看到条件概率先写标准符号再写在题干里对应的中文描述比如阳性条件下患病P(患病|阳性)患病条件下检出阳性P(阳性|患病)。符号对齐之后公式自然就会用了。第三个是心里会纸上乱。笔试不是面试你没法用口头表达去弥补书面表达的混乱。很多同学知道思路但步骤跳得厉害比如用最大似然估计时直接给出最终表达式没有中间推导。阅卷人很难给你的最终答案足够信任分。我的建议是哪怕式子再简单也把三到四步的推导过程写出来这样就算最后结果算错步骤分也能捞回不少。5.2 错题复盘不需要错题本需要考点地图我见过很多人备考时疯狂刷题但刷完之后不留痕第二次遇到同类题照样错。问题出在复盘方式上。我不推荐做传统意义上的错题本而是建议你做一张考点地图。具体做法是每做完一套题把题目按考点归类比如贝叶斯公式逻辑回归推导SQL窗口函数特征编码。然后在你自己的地图上给每个考点标注掌握程度用1到5打分。隔一周再做一套题如果同一个考点还是低于4分就说明你有系统性的盲区值得花专门时间去补基础。这个方法的本质是把你对知识的掌握可视化让你一眼看出应该把时间投在哪里。我当年就是这么练的。第一套题做下来我在SQL窗口函数这一栏只有2分因为每次遇到连续日期问题就卡壳。于是我用一周时间专门练习窗口函数把各类连续问题、排名问题、分组TopN问题都刷了一遍。到考前再做同类题基本能稳定拿到4分以上。推荐你也试试这个办法比盲目刷十套题有效得多。5.3 笔试只是第一步养成边说边写的解题习惯一个很实际的经验是大厂实习生的笔试往往和你后续的面试是联动考察的。你笔试卷上写的推导过程、SQL写法、特征设计方案面试官大概率会翻出来做追问。如果你笔试时只是草草地写了一个答案没有任何推导痕迹面试官就很难判断你的思考过程追问起来你会很难招架。所以我建议你在平时练习时养成边说边写的习惯。什么意思就是做题的时候假设有一个面试官坐在你旁边你需要用语言把每一步的判断依据说出来。比如这里我是为了降低假阳性所以选择提高阈值这里先用日期减序号是为了把连续登录转换成同一分组。这样做有两个好处一是强迫你梳理逻辑减少提笔就写的瞎蒙二是提前为面试的算法题和对答环节做准备。我自己在后来面试时被人问到一个特征工程的细节几乎就是靠笔试时养成的那套边说边写的习惯才回答得条理清楚。5.4 时间分配策略先抢容易分再啃硬骨头笔试题量大、时间紧时间分配不合理是另一个常见失分点。根据我的体验网易这套笔试题型分布大概可以分成三类选择题/填空题、简答题/推导题、SQL/代码题。我的经验比例是选择题每道题控制在2分钟以内不会的就先标记跳过去简答题和推导题每道题给10到15分钟写出核心步骤后就收尾不追求完美表述SQL题和代码题给足时间因为这类题分值高、步骤多宁可前面跳两道选择题也要留出足够时间把代码写完整。这里还有一个很多人不知道的小技巧如果你发现选择题里有两个选项实在拿不准优先检查题目条件里有没有不正确这类否定词因为越长的题干往往藏着越多干扰信息。平时练习时就要训练自己按这个时间节奏走否则考场上很容易陷入某道难题最后让后面的简单题也没时间写。6. 复习方向与资料搭配把有限的时间花在刀刃上6.1 基础教材不用贪多一本吃透胜于十本翻完很多同学准备数据挖掘笔试时第一反应是找一堆书比如《数据挖掘导论》《机器学习》西瓜书《统计学习方法》甚至还有深度学习的教材想把所有内容都啃透。但实习笔试题的深度没有到博士资格考试的程度你不需要每个算法的数学推导都滚瓜烂熟。我需要的是一个清晰的优先级。我的建议是《统计学习方法》前几章感知机、K近邻、朴素贝叶斯、决策树、逻辑回归、SVM必须至少掌握前三类的推导《机器学习》西瓜书的模型评估与选择、特征工程、聚类部分非常重要《数据挖掘导论》重点看数据预处理、相似度度量、关联规则。深度学习相关的内容笔试通常只考基本概念比如激活函数、梯度消失、损失函数选择不会让你手推反向传播。所以复习时要有取舍别把自己埋在公式堆里。6.2 刷题资料真题为主LeetCode为辅助笔试里的代码题通常不会太难没到LeetCode hard的级别但会结合具体业务场景。备考时我觉得最有效的组合是刷1到2套数据挖掘方向的真题卷感受题型和难度再用LeetCode的easy和medium题目保持代码手感。重点练的题目类型是数组处理、字符串处理、哈希表、排序、树的遍历。SQL部分可以单独用牛客网的SQL题库练习把窗口函数题刷一遍基本上就够用了。我要特别提醒一点不要花太多时间在竞赛级算法上比如复杂的动态规划优化、网络流等这些在实习生笔试题里出现概率极低属于性价比很低的投入。你真正需要的是把基础题做得快、做得稳用准确率去碾压难度。6.3 考前三天停止刷题建立查漏清单考前最后几天我的策略是停止大规模刷题转成整理一份查漏清单。这份清单不需要长但要覆盖你最容易忘记的公式和使用条件。我来列一个示例你可以按自己的情况调整。贝叶斯公式的适用场景已知先验和似然求后验。逻辑回归的损失函数表达式和梯度更新公式。SVM的核函数作用以及选择核函数的基本原则。决策树的三种典型算法ID3、C4.5、CART的划分依据。随机森林和GBDT的并行性差异、适用场景差异。窗口函数的四种经典应用排名、分组TopN、连续问题、同比环比。特征工程的完整流程数据清洗、缺失值处理、异常值处理、特征编码、特征选择。这份清单的价值在于考前你只需要扫一遍心里就有底了。我在考前一个晚上把清单过了一遍第二天笔试时遇到好几个熟悉的知识点心态完全不一样。7. 写在最后一条关于笔试思维的个人体会最后说点掏心窝的话。拿到网易数据挖掘实习生笔试题之后我最深的感受不是哪道题我不会而是我花了太多时间在读题和猜出题人意图上真正用在推导和验证的时间反而被压缩了。后来我总结出一个关键词叫结构化审题。不管题目多长都把它拆成三块已知条件、目标要求、约束条件然后直接对着这三块构建解法。数据挖掘这个岗位本质上是把业务问题转化成数据问题再把数据问题转化成模型问题。笔试考的所有内容无论是概率统计、机器学习、SQL还是特征工程其实都在验证你能不能完成这种转化。所以当你遇到一道看似复杂的笔试题时不妨先问自己一句这题背后的业务目标是什么我需要从数据里提取什么信息来支撑这个目标想清楚这个问题解题方向通常会变得非常明确。我在实际备考过程中还发现睡前花十分钟回想当天的错题比白天多做一套题还有用。因为人脑在睡眠时会对记忆进行整合你白天推过的公式、踩过的坑会在这个过程里被加工得更牢固。这个方法给不了你确切的名词解释但它能在真正面对试卷时帮你更快地想起我见过这个考点。说到底一份笔试题只能反映你在某个时间点的知识储备不能代表你全部的数据挖掘能力。过了笔试面试里还有更长的路要走。但如果你能把每一次笔试题里的错误都转化为下一次进步的空间那么这张卷子带给你的就不只是一个面试机会而是一张更完整的数据挖掘能力地图。希望这份复盘能让你在备考路上少走几步弯路。

相关新闻