
这次我们来看一个经常被拿来讨论、但很少被真正讲透的话题Two Sigma 是如何用 AI 赋能投资的。如果你关注量化投资、机器学习在金融领域的落地或者正在思考“AI 到底能帮投研做什么”这篇文章可以直接收藏。Two Sigma 不是一家典型的对冲基金。它很少靠“明星基金经理”的判断来决策而是把几乎整条投研链路都建立在了数据、系统和模型之上。从公开资料和行业实践来看它的技术体系可以拆成五个核心模块数据工程、特征与因子研究、模型训练与验证、策略上线与执行、风险与合规控制。每一个环节里AI 的角色都不太一样但组合在一起就形成了一个非常典型的“AI 赋能投资”的工程化样本。本文不打算重复“AI 会取代人类交易员”这类话而是从工程落地角度把 Two Sigma 的做法拆解成可理解的模块并给出普通开发者或量化研究者能直接借鉴的工具链、验证流程和注意事项。你会看到AI 在投资中的核心价值不是预测得准而是把“假设-验证-执行-风控”这个过程规模化、系统化。1. 核心能力速览AI 在投资链路中的角色能力项说明核心定位以数据、模型和系统工程为核心的量化投资研究体系数据工程结构化行情、基本面数据与另类数据的采集、清洗、对齐因子研究用机器学习、遗传规划、NLP 等方式挖掘预测因子模型训练覆盖线性模型到深度模型强调验证体系的严谨性策略执行订单执行、交易成本模型、组合优化的自动化风险控制实时监控、限仓、压力测试、归因分析关键技术栈Python、分布式计算、机器学习平台、数据仓库、低延迟系统可借鉴场景个人量化研究、中小团队投研平台搭建、AI 工程化落地需要注意Two Sigma 不会公开自家实盘策略细节。我们能讨论的是它对外分享的技术理念、学术论文和工程实践中体现出的方法论。真正有价值的也正是这套方法论把 AI 融入投资而不是用 AI 替代人。2. AI 赋能投资的适用场景与使用边界AI 在投资领域不是万能的这一点需要先讲清楚。适合的场景有三类。第一类是“数据量大、噪音也大”的领域典型代表是另类数据。卫星图像、电商评论、支付流水、招聘信息这些数据没有整齐的财务报表结构必须靠自然语言处理、计算机视觉和时间序列模型来提取有效特征。第二类是“信号弱但可叠加”的场景比如中短周期价格预测单看某一个指标可能胜率不高但如果把成百上千个弱信号组合起来经过严格的风险调整就可能形成可交易的策略。第三类是“执行与风控的自动化”这部分和预测关系不大更多是优化问题例如在冲击成本、手续费和持仓限制下如何拆单执行。不适合的场景也很明确。第一小样本、低频、结构突变明显的领域不适合硬套深度学习。比如宏观事件驱动策略样本少、因果链条复杂模型很容易过拟合。第二缺乏可靠数据的地方不适合 AI如果数据质量本身有问题再强的模型也只是把错误放大。第三把 AI 当“黑盒预言机”不适合。投资决策必须可解释、可归因、可审计尤其是涉及大规模资金和合规要求时。合规和边界问题必须强调。如果你打算把类似方法用在自己的交易或产品中需要确保数据来源合法、模型行为可审计、交易行为符合所在地区的法律法规。AI 赋能投资的前提是“技术合规”和“数据合规”这一点没有灰色地带。3. 技术体系拆解从数据到决策的完整链路Two Sigma 等头部量化机构的共性做法是把投资研究当成一套软件工程体系来建设。下面是这条链路上的关键环节。3.1 数据工程AI 分析的燃料投资 AI 的第一步是“把原始数据变成可用数据”。这一层解决三个问题数据接入行情数据、财务报表、宏观经济数据、另类数据来源不同、格式不同、频率不同。数据清洗缺失值、异常值、复权因子、财报口径调整、时区对齐。数据存储与检索面向研究工作负载的列式存储、时序数据库、数据版本管理。这里面看似简单其实是最消耗工程资源的环节。很多团队投了大量人力在模型上最后发现效果差是因为数据没对齐。比如不同行情源的 OHLC 时间戳不一致、财报数据在不同版本之间发生回溯修正都会直接影响模型训练和回测结论。对普通研究者来说可以借鉴的做法是建立数据版本控制系统对每一次数据处理流程做记录原始数据不可变处理后的数据可追溯所有表征数据变化的数据集特征都要落地成文档。3.2 特征工程与因子研究AI 发挥价值的核心因子Factor是描述股票、期货或其他资产某一方面属性的数值化表达。传统因子来自财务指标、价格形态等而 Two Sigma 这类机构会把特征工程扩展到一个更大空间价格与交易量衍生特征动量、反转、波动率、流动性等。基本面特征盈利、成长、估值、杠杆等但要做标准化和行业中性化。另类数据特征新闻情绪、社交媒体热度、供应链关系、地理空间数据等。机器学习在这里的作用不是直接预测涨跌而是帮助完成“特征挖掘”和“特征组合”。比如用遗传规划自动搜索有意义的表达式或者用自编码器做非线性特征压缩。还有一个重要的方向是自然语言处理从新闻、公告、分析师报告中提取情绪和事件特征。这套方法的工程复杂度在于特征的数量可能是数千甚至数万需要统一管理。对于普通团队比较务实的第一步是用固定模板做特征存储、血缘管理和每日更新形成“特征库”的概念而不是每次研究都从原始数据重新算。3.3 模型训练与验证避免过拟合是关键在模型层面Two Sigma 被认为采用的是“多元模型组合”路线。也就是说不依赖单个模型而是同时运行大量模型再用组合层把它们的预测结果集成起来。从这个角度看AI 的投资建模可以分成三层基础预测层线性回归、树模型、神经网络等针对不同资产类别、不同时间周期分别建模。集成层把基础模型的预测进行加权组合权重可能是固定的也可能是由上层模型动态给出。组合优化层在考虑预期收益、风险、交易成本和约束条件的前提下决定实际持仓权重。这里最容易犯的错误是“回测过拟合”。一份回测曲线再漂亮如果训练数据和验证数据的划分不合理、超参数调优次数过多、幸存者偏差存在实盘效果都很可能大幅缩水。Two Sigma 这类机构的做法是极端强调验证流程样本外测试、时间序列交叉验证、成本敏感性测试、多市场多周期稳定性测试。3.4 策略上线与风控AI 的最后一道防线模型训练完成不等于上实盘。在实际系统中策略上线前还需要经过回测、模拟交易、试运行三个阶段。模拟交易用于验证订单执行和交易成本假设是否正确试运行阶段用小资金验证真实市场冲击和滑点。风控是模型执行过程中的独立模块。它不会完全交给模型自行判断而是包含硬性约束和实时监控仓位限制单一标的、单一行业、单一国家或地区的最大暴露。杠杆限制组合整体杠杆率上限。流动性限制不能持有可能卖不出去的仓位。实时监控盘中价格异常、模型输入异常、成交异常等都要触发告警或熔断。这一层是“AI 赋能投资”中最容易被低估的部分。很多个人研究者只关注模型收益忽略风险控制结果是收益曲线在一段时间内很漂亮但一次异常波动就回吐全部利润甚至爆仓。4. 投研环境搭建从零开始需要的工具链如果你看完 Two Sigma 的方法论想开始搭建自己的量化投研环境下面是一套比较通用的起步方案。这套方案不需要大规模基础设施一台普通服务器或性能较好的 PC 就可以开始。4.1 基础开发环境操作系统推荐 LinuxUbuntu 22.04 LTS 或更新版本Windows 可以配合 WSL 2 使用。Python 版本建议 3.10 或 3.11。推荐使用 Anaconda 或 Miniconda 管理 Python 环境避免系统依赖冲突。conda create -n quant python3.11 conda activate quant pip install pandas numpy scikit-learn statsmodels pip install matplotlib seaborn jupyterlab如果计划使用深度学习模型可以补充安装 PyTorch 或 TensorFlow。这里建议先装 CPU 版本跑通流程再根据实际需要安装 CUDA 版本。pip install torch --index-url https://download.pytorch.org/whl/cpu4.2 数据获取与处理数据是量化研究的基础。对于 A 股和美股研究常用的开源数据接口包括 akshare、yfinance、tushare 等。需要注意不同接口的数据覆盖范围、字段定义、更新频率和单位可能不同接入后要写数据清洗层统一口径。下面是一个简单的数据加载与清洗示例展示了最基本的“原始数据落地到统一结构”的过程import pandas as pd def load_price_data(path: str) - pd.DataFrame: df pd.read_csv(path, parse_dates[date]) df df.dropna(subset[open, high, low, close, volume]) df df[df[volume] 0] df df.sort_values(date).reset_index(dropTrue) # 统一列名 df.columns [c.lower().strip() for c in df.columns] return df df load_price_data(stock_daily.csv) print(df.head())这里不涉及具体数据源细节核心思路是先做最小清洗再冻结数据版本后续所有因子计算都从这份“标准数据表”开始。4.3 版本管理与任务调度研究过程中很容易出现“改了一版因子代码旧结果找不回来”的情况。建议从一开始就使用 Git 管理代码用 DVCData Version Control或类似工具管理数据集和特征集版本。git init dvc init dvc add data/raw/stock_daily.csv git add . git commit -m add raw data对于每日更新的数据流水线可以使用 cron 或 Apache Airflow。中小规模研究团队用 cron 加 Python 脚本就够如果涉及多个数据源、多个任务依赖再考虑引入 Airflow 或 Prefect。5. 核心实验因子分析与简单回测这一节用一个完整的小实验把“基于 AI 思想的量化研究流程”走一遍。这里不追求实盘效果重点是让你理解从数据到策略的完整流程。5.1 因子计算与检验假设我们想检验一个简单的“短期动量因子”过去 5 日收益率高的股票未来 5 日是否倾向于继续跑赢这个因子可以用下面的方式计算import pandas as pd import numpy as np def compute_momentum_factor(price_df: pd.DataFrame, lookback: int 5) - pd.DataFrame: df price_df.pivot(indexdate, columnssymbol, valuesclose) ret df.pct_change() momentum ret.rolling(lookback).mean() return momentum # price_df 需要包含 date, symbol, close 三列 momentum compute_momentum_factor(price_df)因子计算出来之后需要检验它的预测能力。经典做法是信息系数IC检验计算每个截面上因子值与未来收益的相关系数然后看 IC 的均值、标准差、IC 0 的占比。import scipy.stats as stats def ic_analysis(factor: pd.DataFrame, future_ret: pd.DataFrame) - pd.Series: ic_series {} for dt in factor.index: f factor.loc[dt].dropna() r future_ret.loc[dt].reindex(f.index) valid pd.concat([f, r], axis1).dropna() if len(valid) 10: ic, _ stats.spearmanr(valid.iloc[:, 0], valid.iloc[:, 1]) ic_series[dt] ic ic_s pd.Series(ic_series) return ic_s ic_s ic_analysis(momentum, future_ret_5d) print(IC mean:, ic_s.mean()) print(IC std:, ic_s.std()) print(ICIR:, ic_s.mean() / ic_s.std()) print(IC 0 ratio:, (ic_s 0).mean())这段代码的核心目的是展示“因子评价”的标准化流程。真实研究中IC 分析只是第一道筛选还需要做分层回测、换手率分析和分组单调性检验。5.2 分层回测验证因子的单调性一个有效因子理论上应该满足单调性因子值最大的组合未来收益也最高或最低取决于因子方向。分层回测就是把股票按因子值从小到大分成若干组观察每组的平均收益。def stratified_backtest(factor: pd.DataFrame, future_ret: pd.DataFrame, n_groups: int 5): daily_group_ret {} for dt in factor.index: f factor.loc[dt].dropna() r future_ret.loc[dt].reindex(f.index) valid pd.concat([f, r], axis1).dropna() if len(valid) n_groups * 5: continue valid[group] pd.qcut(valid.iloc[:, 0], n_groups, labelsFalse) group_ret valid.groupby(group)[valid.columns[1]].mean() daily_group_ret[dt] group_ret df_grp pd.DataFrame(daily_group_ret).T return df_grp group_returns stratified_backtest(momentum, future_ret_5d, n_groups5) cumulative_returns (1 group_returns).cumprod() cumulative_returns.plot()如果分组收益曲线呈现清晰的单调排列说明因子有较好的区分度如果曲线交叉混乱即使 IC 值尚可也要谨慎使用。5.3 简单交易策略回测因子研究之后还需要切换到“策略回测”的视角。一个最简单的做法是每个调仓日选因子值最高的 N 只股票等权持有按固定频率调仓。def simple_strategy(factor: pd.DataFrame, price_df: pd.DataFrame, top_n: int 10, rebalance_freq: int 5): # 每个调仓日选 top_n 只股票等权买入 positions {} dates factor.index[::rebalance_freq] for dt in dates: f factor.loc[dt].dropna().sort_values(ascendingFalse) pos f.index[:top_n].tolist() positions[dt] pos # 计算组合净值简单起见忽略交易成本 daily_ret price_df.pivot(indexdate, columnssymbol, valuesclose).pct_change() nav 1.0 curve [] current_pos [] for dt in daily_ret.index: if dt in positions: current_pos positions[dt] if current_pos: r daily_ret.loc[dt, current_pos].mean() nav * (1 r) curve.append(nav) return pd.Series(curve, indexdaily_ret.index) nav_curve simple_strategy(momentum, price_df, top_n10)注意这个示例忽略了交易成本、涨跌停、停牌和滑点结果只能用于研究对比不能代表实盘收益。真实策略回测必须加入完整的成本模型。6. 机器学习模型引入从因子到预测手工设计因子有上限机器学习可以自动发现非线性关系。但引入模型不等于“直接跑一个 XGBoost 就完事”。需要一套标准化的流程。6.1 特征与标签构建机器学习的输入是特征因子值输出是标签未来收益。标签的定义非常关键def make_label(close_df: pd.DataFrame, horizon: int 5) - pd.DataFrame: future_ret close_df.shift(-horizon) / close_df - 1 return future_ret训练时要注意时间顺序不能随机打乱样本。时间序列数据的标准做法是“按时间切分训练集和测试集”避免未来信息泄露。train_end 2022-12-31 valid_end 2023-12-31 X_train feature_df.loc[:train_end] y_train label_df.loc[:train_end] X_valid feature_df.loc[train_end:valid_end] y_valid label_df.loc[train_end:valid_end]6.2 轻量模型训练示例下面用 LightGBM 做一个简单的预测模型。LightGBM 是目前量化研究中常用的梯度提升树库训练快、可解释性相对好、对表格数据效果稳定。pip install lightgbmimport lightgbm as lgb model lgb.LGBMRegressor( n_estimators500, learning_rate0.05, num_leaves32, max_depth7, subsample0.8, colsample_bytree0.8 ) model.fit( X_train, y_train, eval_set[(X_valid, y_valid)], callbacks[lgb.early_stopping(50), lgb.log_evaluation(50)] )训练结束后先看验证集上的预测与真实收益的 IC而不是先看收益曲线。from scipy.stats import spearmanr pred_valid model.predict(X_valid) ic, p_value spearmanr(pred_valid, y_valid) print(fvalid IC: {ic:.4f}, p-value: {p_value:.4f})如果验证集 IC 不显著说明模型没有学到有效信息需要回到特征工程或标签设计重新迭代。6.3 模型风险与合规边界这里必须提醒一点预测模型的输出不能直接当成交易信号使用。还需要考虑强度阈值、方向过滤、行业中性化、风险因子暴露控制。比如一个模型在银行股和科技股上预测都很高但收益来源很可能只是行业因子而不是模型发现了阿尔法。所以在模型进入策略前要做风险归因看预测残差是否与已知风险因子正交。7. 算力开销与性能优化AI 赋能投资并不一定需要巨额算力。算力需求取决于你使用的模型复杂度和数据规模。特征工程阶段主要消耗 CPU特别是处理大量历史数据时建议用 pandas 向量化操作或 Polars 替代循环。传统机器学习LightGBM、XGBoost 在单机 CPU 上就能处理较大规模表格数据。深度学习与 NLP如果做新闻情绪分析、公告文本解析需要 GPU。从实际使用看单张消费级显卡如 RTX 4060 8GB 或更高显存可以训练中等规模的文本模型大规模预训练则对显存要求高得多。高频数据研究需要大内存和高 IO 磁盘建议使用 SSD 和足够的内存尽量把数据加载到内存中处理。观察资源占用的方法很简单训练时使用nvidia-smi查看 GPU 显存占用用htop查看 CPU 和内存。如果内存不足可以改用分块读取或使用 Polars 的惰性计算。实际占用需要以你本机的数据规模和模型参数为准不要参考别人的“固定显存数字”。更稳妥的方式是自己记录一次完整训练流程的资源峰值写进工程文档后续可以据此评估是否需要在代码层做批量上限控制。8. 常见问题与排查方法问题现象可能原因排查方式解决方案回测收益很高但实盘亏损回测存在数据泄露或成本低估检查训练集测试集是否时序切分、是否加入交易成本重建验证流程加入成本模型再做样本外测试验证集 IC 很接近 0标签定义不合理或特征无预测能力检查标签是否包含未来信息、特征是否标准化尝试不同预测周期补充有效特征模型在某个行业上极度集中模型学习到了行业暴露做因子暴露分析和行业归因加入行业中性化或把行业哑变量纳入模型数据版本混乱因子结果无法复现缺少数据版本控制检查历史数据是否被覆盖引入 DVC做好数据版本管理训练时内存溢出数据一次性加载过大或特征维度过高观察htop中内存占用使用分块读取、特征筛选或减小批量模拟盘和回测差距大滑点和流动性假设过于乐观检查是否处理了涨跌停、停牌用更保守的成交假设模拟盘运行更长时间因子在 A 股有效、在美股失效市场微观结构不同分市场验证不做跨市场直接迁移针对不同市场单独做因子适配这些问题不是“代码 bug”级别的而是“研究流程 bug”级别。绝大多数个人研究者的失败都出在这个层次。9. 最佳实践与工程建议结合 Two Sigma 这类机构的工程体系以下是普通人能立刻用起来的建议。9.1 第一版就用最小闭环不要一开始就搭建完整的分布式计算平台。先实现一个最小闭环一份数据、一个因子、一个回测、一个模拟盘。跑通之后再逐步增加数据源和模型复杂度。最小闭环的意义是让你尽早发现流程中的问题而不是把时间浪费在搭建完美系统上。9.2 数据和模型分开管理数据、特征、模型、策略应该分成不同的模块。数据层负责原始数据的获取和清洗特征层负责从数据生成因子模型层负责预测策略层负责仓位与执行。四者之间通过标准化的输入输出解耦。这样做的最大好处是任何一个环节更新了不影响其他环节。9.3 每一次实验都要可复现实验记录里至少保留代码版本、数据版本、特征版本、参数配置、随机种子、评估结果。建议使用配置文件统一管理实验参数避免在代码里写死参数。输出结果也需要自动计算并保存评估指标而不是只看图。9.4 用模拟盘验证交易假设回测中的收益曲线有很大部分依赖于成交假设。如果你把交易成本从万三改成千一结果可能完全不同。在上实盘之前至少运行 1 到 3 个月的模拟盘验证实际滑点、成交率和冲击成本是否与回测假设一致。9.5 合规与授权无论你是研究还是商用都要确保数据来源合法。使用第三方数据接口时仔细阅读服务条款。如果使用新闻、公告等内容做文本挖掘注意版权问题。如果策略涉及真实资金更要充分了解所在地区的监管要求。AI 赋能投资不是技术跑通就结束而是要在合规边界内落地。10. 总结与下一步Two Sigma 的“AI 赋能投资”本质上是把投资从一门“手艺”变成一套“系统工程”。数据工程解决信息获取问题特征与因子研究解决信息提取问题模型训练与验证解决信息预测问题策略执行与风控解决决策落地问题。这四个环节环环相扣任何一个环节短板都会拉低整体结果。对普通开发者来说最值得先验证的不是复杂的深度学习模型而是下面三件事能不能整理出一份干净、可复现的历史数据能不能写一个标准的因子评价流程用 IC 和分层回测判断因子是否有效能不能在回测中加入交易成本得到一个诚实的结果这三件事跑通之后再考虑引入机器学习模型。如果连基础数据流程和验证框架都没有直接上模型只会得到一个“看起来很美实盘就亏”的过拟合系统。从工程角度看后续可以扩展的方向包括引入另类数据新闻、公告、社交媒体、构建特征存储服务、用 Airflow 搭建每日更新流水线、研究更好的组合优化和风控方法。这些方向每一个都值得单独开一篇文章展开写。建议先收藏这份思路然后把最小闭环跑起来。理论可以讲得很复杂但真正让你进步的永远是那份跑得通、可复现、有过拟合检查的实验流程。