十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

量化私募笔试真题解析:概率统计、编程与机器学习考点全梳理

量化私募笔试真题解析:概率统计、编程与机器学习考点全梳理 简介诚奇、概率投资、海悦、天演、衍复、佳期、平方和、集微、九坤、凯读十家量化私募的笔试真题被集中整理覆盖概率统计、算法设计、数学推导与编程实现等方向面向量化研究员、量化开发及策略实习生等岗位求职者便于快速对标各公司出题风格和难度层级。压缩包共75个文件约48.4MB以25张题目截图、9个Jupyter Notebook运行示例和8个txt问题描述为主另有csv数据、Python脚本、PDF解析与Word文档等覆盖读题、推演、编码到复盘完整流程。目前已有222人学习下载适合用于笔试前的针对性训练与查漏补缺。每个公司题目均配有手写或截图版原题部分附带Python参考解答、HTML答案解析及Notebook运行示例多张2023年2月中旬的面试现场截屏还涉及策略项目、数据处理逻辑与基础模型思路。材料按公司归类存放目录结构清晰可按需查阅方便按机构针对性复习。 秋招季前后总有朋友来找我要“量化私募笔试真题”这十家的合集我整理了整整一个多季度从概率题到机器学习从SQL到Python代码实现基本上把能踩的坑都踩了一遍。今天把整理好的内容里最有价值的部分拆出来配合参考答案和代码实现给正在准备量化岗位笔试的朋友一份可以直接参考的资料。这篇东西适合谁一是准备投递量化研究员、量化开发岗的应届生二是想从传统开发转量化领域的技术人三是已经在行业内但想跳槽的从业者。不管你是哪个阶段刷真题的价值不在于背答案而在于理解出题人的脑回路他们要的不是你“知道”而是你能在有限时间内把思路变成代码、把代码跑出结果。1. 整体设计与选题思路拆解1.1 为什么真题比刷LeetCode更有参考价值量化私募的笔试和互联网大厂完全是两套逻辑。大厂考算法题看的是逻辑和代码功底量化私募考的是你在“带噪声的环境下做决策”的能力。这批真题我按公司类型做了归类有做中低频股票多头的有做高频T0的还有偏机器学习驱动的。各家的题目侧重点差异很直观高频团队重视C和低延迟股票多因子团队重视统计检验和pandas处理效率机器学习团队则直接上模型推导和特征工程。所以你刷题之前先想清楚自己投的是哪条线别拿高频的题目练手去面基本面量化方向不对努力白费。1.2 十家笔试中反复出现的三个能力维度整理完这批题目我发现不管哪家都在考察三个维度数学概率40%左右、编程实现35%左右、机器学习与策略思维25%左右。这个比例不是精确统计但从题量分布来看基本稳定。数学概率类题目以抛硬币、掷骰子、随机游走为外壳内核是期望计算、条件概率、鞅和停时编程实现类题目不会让你写红黑树这类复杂数据结构而是考察pandas用的熟不熟、能不能处理带有缺失值和异常值的真实数据机器学习类题目主要围绕过拟合、因子有效性、模型选择展开特别爱考“你怎么知道这个因子是有效的”这类开放性问题。后面几节我会按这三个维度逐一拆解。2. 核心细节解析与高频考点2.1 概率统计题外壳是游戏内核是期望与随机过程这批真题里概率统计的出镜率最高基本是笔试第一题。经典的外壳包括反复抛一枚硬币直到连续出现两次正面就停止问期望需要抛多少次。这类题的背后是马尔可夫链的状态转移和期望方程。解法是这样的设 E0 表示已经连续0次正面时还需要的期望次数E1 表示已经连续1次正面时还需要的期望次数。列方程E0 1 0.5 * E0 0.5 * E1E1 1 0.5 * E0 0.5 * 0第一个式子表示抛一次有一半概率还是0次正面继续从 E0 算另一半概率进入 E1。第二个式子表示抛一次有一半概率回到 E0出现反面另一半概率连续两次正面达成目标停时结束。解得 E0 6也就是说平均需要抛 6 次。这类题要拿满分光知道答案不够你必须写出方程和每一步的推导逻辑面试官会看你的思考过程是否严密。随机过程方向有几家公司考了布朗运动相关的基础题比如求 E[W(t)^2] 这类本质是伊藤等距公式的简单应用。还有一道题出了随机游走首次回归原点的概率这背后是反射原理。如果时间不充裕优先把离散鞅和停时定理搞懂连续时间随机过程笔试很少深入面试才可能问。2.2 时间序列与因子检验你以为是金融其实是统计另一类高频概率题是时间序列相关的统计检验。某家公司的题目是给你两个时间序列怎么判断它们有没有协整关系这个题目考察的不只是跑一个 ADF 检验而是检验之后如何处理滞后阶数、如何处理残差序列的自相关。很多人在这一步翻车因为调包太顺手根本不看检验的前提条件和滞后阶数选择。另外一道经典题是因子 IC 均值 0.03IR信息比率0.5样本量 500这个因子显著吗这题考的是 IC 的标准误计算。IC 的标准误近似等于 1/sqrt(N)N 是样本期数。所以这里的 t 值 0.03 / (0.5 / sqrt(500)) ≈ 1.34不显著。这道题几乎每年都有变体必须掌握。2.3 编程题基本功之外还要有数据直觉编程题部分十家公司的题目高度一致围绕 pandas 做数据处理和因子计算。常见的有给一堆日线行情计算过去20日收益率序列的滚动均值、滚动标准差、滚动夏普给一个因子值和未来的收益计算 Rank IC 和分组收益用 SQL 实现 T1 日收益的匹配这类题目用 Python 写核心在于向量化。我见过太多人在笔试时用 for 循环遍历每一行结果数据量一大直接超时。量化数据处理的标准做法是用 pandas 的 shift、rolling、groupby、rank 来操作。有一道让我印象深刻的编程题给一个 DataFrame包含几百只股票的日收益率要求计算每只股票过去250个交易日的波动率并筛选出波动率位于全市场后20%的股票。这题如果写 for 循环逐股处理几行代码能跑完但效率极低正确做法是用 groupby 加 rolling 一次性算完。3. 实操过程与核心环节实现3.1 用蒙特卡洛验证概率题答案概率题手算容易错但你可以用代码验证。例如上面说的“连续两次正面停止”用蒙特卡洛模拟一千万次期望值会收敛到6.0左右。作为笔试时的自查手段这个方法极其有效。代码如下import random import numpy as np def simulate_once(): steps 0 consecutive 0 while True: steps 1 if random.random() 0.5: consecutive 1 if consecutive 2: return steps else: consecutive 0 N 1_000_000 results [simulate_once() for _ in range(N)] print(f模拟期望: {np.mean(results):.4f})模拟一次游戏的平均值大约在6.0附近和你手算的方程解完全对得上。笔试时如果时间富余写一段这样的模拟来验证手算结果是个很好的策略。但注意不要过度依赖因为每次模拟的时间开销不小一旦数据量过大反而影响你后面的答题。3.2 因子 Rank IC 的计算一行代码讲清楚Rank IC 是量化研究面试必问的概念它衡量的是因子值与未来收益之间的秩相关性。笔试里经常要求手写计算逻辑。最直接的方法是import pandas as pd from scipy.stats import spearmanr # df 长表结构: date, stock, factor, forward_return df pd.DataFrame({ date: [2024-01-01]*3 [2024-01-02]*3, stock: [A,B,C]*2, factor: [0.5, 0.8, 0.2, 0.7, 0.4, 0.9], forward_return: [0.01, 0.03, -0.01, 0.02, -0.02, 0.04] }) def calc_rank_ic(sub_df): return spearmanr(sub_df[factor], sub_df[forward_return]).statistic rank_ic_by_day df.groupby(date).apply(calc_rank_ic) print(rank_ic_by_day.mean())这段代码的逻辑是按日期分组每个截面算一次因子值和未来收益的秩相关再把所有截面的 Rank IC 取均值。注意点在于 spearmanr 的 statistic 属性老版本 scipy 是 correlation新版本改名叫 statistic这里我踩过一次坑笔试时如果用的是在线环境建议先跑一下确认属性名。另外真实数据里经常有 NaN 因子值和涨跌停导致的无收益样本spearmanr 默认会剔除 NaN但你要在答题前说明你的处理方式这能看出你有没有真实处理过数据。3.3 最小回测框架用向量化实现策略回测有一家公司的编程题是用一天的时间内写一个简单的均线策略回测框架。均线策略的逻辑很常见当短期均线向上穿越长期均线时买入反之卖出。这个题目用纯 pandas 向量化处理很快import pandas as pd import numpy as np # 模拟价格数据 np.random.seed(42) dates pd.date_range(2024-01-01, periods500, freqD) price pd.Series(np.cumprod(1 np.random.normal(0.0003, 0.01, len(dates))), indexdates) short_ma price.rolling(5).mean() long_ma price.rolling(20).mean() position pd.Series(0, indexprice.index) position[short_ma long_ma] 1 # 策略收益 持仓 * 当日收益率 ret price.pct_change().fillna(0) strategy_ret position.shift(1) * ret # 用昨天的持仓信号避免未来函数 cum_ret (1 strategy_ret).cumprod() - 1 print(f策略累计收益: {cum_ret.iloc[-1]:.4f})这个题目的关键考点在 position.shift(1)。很多新手直接拿 position 乘以当日收益这相当于用了当天收盘信号买当天收益是典型的未来函数。笔试时如果出现这部分面试官基本一眼就能看出你有没有真做过回测。shift(1) 的本质是假设你用当天收盘后的信号在次日开盘或收盘时执行交易。另外一个隐藏考点是 NaN 处理rolling(20) 的前19个值是 NaN这些位置的持仓信号默认是0也就是空仓。判断这个做法是否符合实际情况需要你在答题里说明白。3.4 过拟合的识别与正则化机器学习题的参考答案机器学习题里出镜率最高的是给定一个因子数据集你发现训练集上IC很高但样本外IC几乎为0请列举可能的原因和解决方案。答这道题需要结构化的思路。原因方面要分点展开第一数据泄漏比如用了未来信息做特征如果你构建因子时不小心用了全样本的均值做标准化就是一种泄漏第二多重比较问题你尝试了几百个因子总有几个碰巧在训练集显著第三模型容量过大直接导致过拟合噪声第四市场状态变化训练集和市场样本外所处的市场环境不同比如一边是大盘上涨一边是震荡下行。解决方案建议按顺序说先用严格的时序切分做样本外验证再看特征构建里有没有引入未来函数然后缩减特征数量、提高正则化强度最后用组合维度检验也就是多个因子共同回测后的衰减情况。这题没有标准答案但结构清晰的回答能拿到大部分分数。我在整理真题时发现回答得好的求职者通常会在结尾补充一句“我还会检查因子在极端行情下的表现尤其是2015年和2024年年初流动性危机期间因子是否失效。”这句话能让面试官觉得你真的在市场上摸爬滚打过。4. 常见问题与排查技巧实录4.1 常见的失分点不是你不会而是你不够仔细整理这批真题答案的过程中我统计了十几个朋友反馈的失分情况多数集中在三个位置。第一个失分点是概率题只给答案不给过程。很多题目答案只是一个数字比如6次、1/3、0.382但笔试评审通常要求过程分。你写清楚方程、列出每一步推导即使最后计算错了一个数字也能拿70%分数。第二个失分点是编程题忽略输入数据的边界情况。真实数据不是教科书数据会有停牌造成的NaN、极端值、重复索引。如果你写的代码假定输入绝对干净在数据预处理环节没有做缺失值处理面试官会追问。第三个失分点是时间分配不当。有不少人在第一道编程题上花了一小时导致后面机器学习开放题只能写三行字。量化笔试总共大概两小时我的建议是概率题每题控制在15分钟内编程题每题25分钟开放题留足30分钟。4.2 环境准备清单别让IDE拖你后腿在线笔试平台这两年用的越来越多环境跟本地差别很大。我自己的经验是提前做三件事。第一熟悉常见库的版本差异pandas 的 groupby.apply 行为在1.x和2.x之间有过调整scipy 的 spearmanr 返回值也变过属性名这些影响不大但一碰上就麻烦。第二测试一个最小数据集确认平台支持 scipy、statsmodels 这些库有的平台环境比较精简要用 importlib.metadata 或 pip list 提前确认。第三提前准备代码片段库滚动均值、去极值、标准化、Rank IC 这些常用函数可以提前写好笔试时直接复制粘贴修改。这不算是作弊因为真正的核心思路还要你自己在考场上理清。4.3 不同公司的出题风格差异整理十家公司真题时我发现风格差异比想象中大。中低频股票多头团队特别爱出统计检验题和因子分析题比如 ADF 检验、IC 衰减、分组收益整体偏研究风格高频团队爱出 C 和低延迟系统相关的题比如无锁队列、内存池、缓存局部性Python 占比少机器学习驱动型团队爱出模型细节推导题比如你解释一下 GBDT 的负梯度为什么能拟合残差、XGBoost 和 LightGBM 在直方图算法上的差异。所以投递前先研究目标公司特点用错风格的笔试题准备方向很吃亏。5. 真题背后的核心技能从应对笔试到胜任工作5.1 一次笔试中的综合题演练这里分享一道综合题来自某家中低频量化公司的真题改编给出一份日频数据包含 open/high/low/close/volume 五列要求构建一个日内均值回归因子并检验该因子的单调性。解题路径可以这样展开先用 close 除以日内均价VWAP 的简化版得到一个偏离度因子然后按日计算该因子的 Rank IC最后看多空组合的累计收益曲线。这个过程中涉及 pivot_table、rolling、rank、corr 等全套操作。这道题的核心不是因子本身而是你有没有一套完整的“构建—检验—可视化”闭环能力。现实中量化研究就是这个闭环在几千个因子上反复迭代。5.2 学会用调试信息辅助答题笔试时如果代码跑出来结果不对调试信息是救命稻草。我整理真题答案时经常用的一招是在关键计算步骤后打印 shape、head、dtype。比如你计算完 Rank IC 发现全是 NaN先检查结果数据的前几行看是不是 merge 时 key 有重复或者 rolling 窗口越界。打印法是排查问题最高效的方法比反复看代码快得多。另一个技巧是用 assert 检查关键约束条件比如 assert df[‘date’].is_monotonic_increasing 确保时间序列有序。这在实际工作中同样是加分项。6. 最后的实操建议真题刷完一遍不叫完要按“限时模拟—对照复盘—二次模拟”的顺序反复做。第一遍模拟时最好严格计时手机扔旁边模拟真实考场。复盘时重点记录哪些题卡住了、为什么卡住是知识盲区还是思路不清晰。第二遍只做错题和卡壳题。这个方法被我这几年辅导过的求职者验证过效果比盲目刷十遍新题好得多。还有一个小技巧整理一份自己的“量化笔试速查卡”把常用统计量公式、pandas 操作模式、机器学习模型要点写在一起考前翻一遍能有效稳定心态。毕竟笔试考的不只是知识还有你在压力下组织思路的能力。本文还有配套的精品资源点击获取
返回列表