Two Sigma OA 偏 quant 风格,和去年的题型方向差不多,BCG 等公司也有类似复用。三题都有一定的实现量和数据感,不是纯刷 LC 能对付的——你得对插值、回归、在线统计这些量化日常操作有真实的理解。进去之前我知道 Two Sigma 不考纯算法套路,但没想到 T2 的数据分析题问的那么细,五个小问加后续,pandas 和 sklearn 要非常熟练才能控住时间。

T1:Linear Interpolator(分段线性插值 + 外推)

题意
给定 n 个二维结点 (x_knots, y_knots),按 x 排序后用折线连成分段线性函数 L(x)。
区间内做插值,区间外用最近两端点所在直线外推。特殊情况:若多个点共享同一 x,x_input ≤ x 时取其中最小的 y,x_input > x 时取最大的 y。
思路
第一步:按 x 排序,处理同 x 的结点合并——根据题面规则保留 min y 或 max y,不是简单取第一个。
第二步:对每个查询 x_input 做二分搜索,找到它落在哪两个相邻结点之间。
第三步:用两点式直线方程计算 y:
y = y₀ + (y₁ – y₀) × (x – x₀) / (x₁ – x₀)
如果 x_input 在最左端点左侧,用最左两个点的直线外推;在最右端点右侧,用最右两个点的直线外推。
边界要盯住:分母 x₁ – x₀ = 0 的情况(竖直线,两个结点 x 相同但 y 不同),要根据题面规则处理而不是直接除零报错。外推方向判断不要搞混。
T2:Daily Temperature By Town(多问数据分析)

题意
P 个城镇加 NYC 共 N 天的气温数据。题目分 Part One(前 10 个测例)和 Part Two(后续追加问题),连续作答。
搜集到的常见考察点:
Q1:日温标准差最大的地点(城镇或 NYC),找波动最大的那个。
Q2:Town2 气温在 [90, 100] 区间内的那些天,NYC 对应日温的中位数(四舍五入到整数)。
Q3:每个城镇对 NYC 做带截距一元线性回归,所有城镇的 slope 取绝对值求和,四舍五入。
Q4:对 NYC 预测 MSE 最小的城镇——哪个城镇的气温最能预测 NYC 气温。
Part Two 后续通常是:组合多个城镇做多元回归、贪心选择城镇降低 MSE、时间序列特征工程等。
思路
数据载入之后用 pandas 处理:
Q1 直接 .std() 按列计算再取 argmax。
Q2 先用布尔索引筛出 Town2 气温在 [90,100] 的行,再对这些行的 NYC 列取 .median(),用 round() 四舍五入——注意 Python 的 round() 是银行家舍入,如果题面要求标准四舍五入要用 Decimal 或手写。
Q3 和 Q4 用 sklearn 的 LinearRegression 或者手写最小二乘——手写更快控制细节,带截距的公式是 β = (XᵀX)⁻¹Xᵀy,MSE 用预测值和真实值的差平方均值。
多城镇组合降 MSE:如果穷举所有组合会指数爆炸,用贪心——每轮从剩余城镇里选一个加入当前集合后使 MSE 下降最多的,重复固定次数。这不是全局最优但能过大部分测例。
注意缺失值:气温数据可能有 NaN,pandas 的统计函数默认跳过 NaN,但回归前要对齐 dropna,否则维度不匹配报错。
T3:Efficient Regression V5(无截距 OLS + 在线更新)

题意
Part One:对多对资产收益 (xᵢ, yᵢ) 做无截距一元线性回归,求 β。
无截距 OLS 公式:β = Σ(xᵢyᵢ) / Σ(xᵢ²)
Part Two:数据分批到达,每批新数据来了之后在线更新当前的 β,不能重新从头算。
思路
Part One:对每对列用 numpy 计算 np.sum(x * y) / np.sum(x ** 2)。注意分母全零的情况(x 列全为 0 时无法回归,要按题面说明处理,通常是返回 0 或 NaN)。
Part Two:维护两个累加量 sum_xy 和 sum_x2。每来一批新数据,把这批数据的 Σxy 和 Σx² 加到累加量上,再相除得到最新的 β。
这样每批更新是 O(batch_size),不需要存历史数据,内存 O(1)。这是在线算法的标准思路,Two Sigma 很喜欢考这类”数据流式到达、如何高效维护统计量”的题型。
备考建议
Two Sigma 的 OA 考的是量化工程师的日常工具,不是刷题型。几个关键点:
pandas 和 numpy 要非常熟:不是会用就行,是要能快速写出正确的向量化操作。条件筛选、groupby、merge、rolling window 都要能闭眼写。
统计公式别死记,要理解:OLS 无截距和有截距的区别、为什么 β = Σxy/Σx²、MSE 怎么算——理解之后才能应对题面变形。
在线算法思维:Two Sigma 很在意”如果数据流式到来怎么高效更新”,T3 就是典型。维护足够的 sufficient statistics(充分统计量),新数据来了只更新这几个累加量,而不是重新跑全量计算。
四舍五入方式一定对着题面确认:Python 的 round() 是银行家舍入,题面如果要求标准四舍五入要手写或用 Decimal 模块,这个坑每年都有人踩。
FAQ
Two Sigma OA 用什么平台,多长时间?
HackerRank,通常 90 分钟,三道题。T2 的多问数据分析题时间最长,建议先扫一遍题目分配好节奏。
T2 数据分析题可以用 sklearn 吗?
可以,HackerRank 的环境支持 sklearn 和 pandas。但有时候手写最小二乘反而更快,因为不需要 fit/predict 的 API overhead,直接 numpy 矩阵运算。
无截距 OLS 和有截距 OLS 有什么实际区别?
有截距的模型假设 y = ax + b,b 允许不为零;无截距的模型强制 y = ax,假设 x=0 时 y 也为 0。在量化里,无截距回归常用于对资产超额收益做 beta 估计,因为理论上 alpha(截距)为 0。
贪心选特征能过所有测例吗?
不能保证全过,贪心是近似算法,不是最优解。但 Two Sigma 的后续问题通常数据量很大,穷举不可行,贪心是他们预期的解法,能过大部分测例。
这套 OA 和去年有什么变化?
题型方向很稳定(插值、回归、在线更新),但实现细节每年会调整——同 x 的处理规则、四舍五入方式、Part Two 的后续问法。不能完全靠背去年的解法,要真的理解原理。
Two Sigma OA 通过之后流程是什么?
通常是 Super Day,一天内多轮:数学/概率题、coding 题、系统设计(偏量化系统)、BQ。和 Jane Street 类似,数学和概率的权重很高。
没有 quant 背景可以面 Two Sigma SWE 岗吗?
Two Sigma 有纯 SWE 岗(Software Engineer,不是 Quant)也有 quant 方向,纯 SWE 岗不强制要求金融背景,但 OA 的题型依然偏量化工程风格,pandas/numpy 的熟练度是基本要求。
有在准备 Two Sigma 或其他量化公司 OA 的同学,可以来找我们聊聊。InterviewShow 长期跟进 Two Sigma、Jane Street、DE Shaw 这类公司的 OA 题型,插值、OLS 回归、在线统计量这几块都有专门覆盖,有需要的来聊。