
用 Python 揭秘均值回归策略:你的收益从何而来?
2026年重磅升级已全面落地!欢迎加入专注财经数据与量化投研的【数据科学实战】知识星球!您将获取持续更新的《财经数据宝典》与《量化投研宝典》,双典协同提供系统化指引;星球内含 450 篇以上独有高质量文章,深度覆盖策略开发、因子分析、风险管理等核心领域,内容基本每日更新;同步推出的「量化因子专题教程」系列(含完整可运行代码与实战案例),系统详解因子构建、回测与优化全流程,并实现日更迭代。我们持续扩充独家内容资源,全方位赋能您的投研效率与专业成长。无论您是量化新手还是资深研究者,这里都是助您少走弯路、事半功倍的理想伙伴,携手共探数据驱动的投资未来!
你是否想过,除了传统的财务报表和 K 线图,还有哪些数据能帮助投资者在市场中获得优势?
最近,一篇来自 Ignatius Wang 的深度研究文章系统性地探讨了**另类数据(Alternative Data)**在量化金融中的应用。所谓另类数据,是指传统金融数据之外的非传统数据源——包括卫星图像、自然语言处理(NLP)提取的文本信息,以及社交媒体情绪分析等。
这篇文章长达 68 分钟的阅读量,引用了超过 70 篇学术论文。本文将为你提炼其中的精华,并结合 Python 代码示例,让你亲手体验另类数据的魅力。
另类数据是指任何非传统数据源,它能提供超越常规财务报表、价格数据和宏观经济指标的洞察。根据原文的分类,另类数据主要包括三大类:
原文指出,另类数据市场在 2020 年价值约 17 亿美元,预计到 2027 年将超过 170 亿美元,年复合增长率超过 40%。
原文从三个经典理论框架解释了另类数据的价值:
1. 有效市场假说(EMH)的局限性
Fama(1970)提出的有效市场假说认为资产价格已经反映了所有信息。但在半强式有效市场中,如果某些信息尚未被广泛传播或处理,投资者就有可能利用这种信息不对称获得超额收益。
2. Grossman-Stiglitz 不可能定理
如果市场完全有效,就没有人愿意花成本去获取信息——这在逻辑上是矛盾的。因此,市场中总存在通过获取和处理信息来赚取回报的空间。
3. 行为金融学
Kahneman 和 Tversky(1979)的前景理论揭示了投资者存在系统性偏差(如损失厌恶、过度自信)。情绪分析正是通过捕捉这些偏差来发现可利用的定价错误。
通过卫星拍摄零售商停车场的车辆数量,可以在财报发布之前预测该公司的销售情况。Katona 等人(2018)的研究发现,基于卫星停车场数据的交易策略在扣除交易成本前,每季度能产生约 4%–5% 的异常收益。
以下示例展示如何用 Python 模拟卫星数据与股价的关系分析:
import numpy as np
import pandas as pd
from scipy import stats
# 设置随机种子,确保结果可复现
np.random.seed(42)
# 模拟 100 个季度的数据
n_quarters = 100
# 模拟卫星观测到的停车场车辆变化率(同比)
parking_lot_change = np.random.normal(loc=0.02, scale=0.05, size=n_quarters)
# 模拟实际盈利惊喜(与停车场数据正相关 + 噪声)
earnings_surprise = 0.6 * parking_lot_change + np.random.normal(0, 0.03, n_quarters)
# 计算相关性
correlation, p_value = stats.pearsonr(parking_lot_change, earnings_surprise)
print(f"停车场车辆变化与盈利惊喜的相关系数:{correlation:.4f}")
print(f"P 值:{p_value:.6f}")
# 构建简单的交易信号
df = pd.DataFrame({
'停车场变化率': parking_lot_change,
'盈利惊喜': earnings_surprise
})
# 当停车场车辆增长超过中位数时,做多
df['交易信号'] = np.where(df['停车场变化率'] > df['停车场变化率'].median(), '做多', '做空')
# 计算策略收益
df['策略收益'] = np.where(
df['交易信号'] == '做多',
df['盈利惊喜'],
-df['盈利惊喜']
)
print(f"\n策略平均季度收益:{df['策略收益'].mean():.4f}")
print(f"策略夏普比率(年化):{df['策略收益'].mean() / df['策略收益'].std() * np.sqrt(4):.4f}")原文详细梳理了金融 NLP 的三个发展阶段:
# 安装依赖:pip install transformers torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# 加载 FinBERT 模型和分词器
model_name = "ProsusAI/finbert"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
def analyze_sentiment(text):
"""
对金融文本进行情感分析。
返回正面、负面、中性的概率。
"""
# 对输入文本进行编码
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512)
# 进行推理(不需要计算梯度)
with torch.no_grad():
outputs = model(**inputs)
# 将 logits 转换为概率
probabilities = torch.nn.functional.softmax(outputs.logits, dim=-1)
# FinBERT 的标签顺序:positive、negative、neutral
labels = ['正面', '负面', '中性']
scores = probabilities[0].tolist()
return dict(zip(labels, scores))
# 测试几段财报电话会议的典型表述
test_sentences = [
"We are very pleased with our strong revenue growth this quarter.", # 正面表述
"The company faces significant headwinds from rising costs.", # 负面表述
"Revenue was in line with expectations at $2.3 billion.", # 中性表述
"Despite challenges, we remain cautiously optimistic about next year." # 混合表述
]
for sentence in test_sentences:
result = analyze_sentiment(sentence)
# 找到概率最高的情感标签
dominant = max(result, key=result.get)
print(f"文本:{sentence}")
print(f"情感判断:{dominant}(置信度:{result[dominant]:.2%})")
print(f"详细分布:{result}")
print("-" * 60)原文引用了几项经典研究:
import re
from collections import Counter
# 简易的金融情感词典(基于 Loughran-McDonald 词表的简化版)
POSITIVE_WORDS = {
'strong', 'growth', 'profit', 'gain', 'bull', 'bullish',
'up', 'surge', 'rally', 'beat', 'exceed', 'optimistic',
'breakthrough', 'record', 'upgrade', 'outperform'
}
NEGATIVE_WORDS = {
'loss', 'decline', 'risk', 'bear', 'bearish', 'down',
'crash', 'plunge', 'miss', 'weak', 'debt', 'default',
'fraud', 'lawsuit', 'downgrade', 'underperform'
}
def compute_sentiment_score(text):
"""
计算文本的情感得分。
得分 > 0 为正面情绪,得分 < 0 为负面情绪。
"""
# 将文本转为小写并分词
words = re.findall(r'\b[a-z]+\b', text.lower())
total = len(words)
if total == 0:
return 0.0
# 统计正面词和负面词的数量
pos_count = sum(1 for w in words if w in POSITIVE_WORDS)
neg_count = sum(1 for w in words if w in NEGATIVE_WORDS)
# 计算标准化情感得分
score = (pos_count - neg_count) / total
return score
# 模拟一批社交媒体帖子
posts = [
"TSLA is going to surge! Bull market is here, strong growth ahead!",
"Market crash incoming. Bear market, massive losses expected.",
"Revenue beat expectations, record profits this quarter!",
"Debt default risk is rising, lawsuit filed against the company.",
"Stock price is stable today, nothing much happening.",
]
print("=" * 60)
print("社交媒体情绪分析结果")
print("=" * 60)
scores = []
for i, post in enumerate(posts, 1):
score = compute_sentiment_score(post)
scores.append(score)
sentiment = "正面 📈" if score > 0 else ("负面 📉" if score < 0 else "中性 ➡️")
print(f"\n帖子 {i}:{post}")
print(f"情感得分:{score:.4f}({sentiment})")
# 计算整体市场情绪
avg_score = sum(scores) / len(scores)
print(f"\n{'=' * 60}")
print(f"整体市场情绪指数:{avg_score:.4f}")
print(f"信号建议:{'偏乐观,考虑做多' if avg_score > 0 else '偏悲观,考虑防御'}")原文特别强调了使用另类数据时需要警惕的几个问题:
1. 过拟合风险
另类数据的历史较短、维度较高,极易出现在历史数据上表现优异但实盘失效的"假信号"。Harvey 等人(2016)发现学术界已提出超过 300 个因子,其中许多可能只是数据挖掘的产物。
2. 信号衰减
McLean 和 Pontiff(2016)发现,已发表的因子策略在论文发表后收益平均下降约 32%。随着越来越多的投资者使用相同的另类数据,超额收益会逐步消失。
3. 合规与隐私
另类数据的使用涉及内幕交易界定、GDPR/CCPA 等隐私法规,以及社交媒体操纵等伦理问题。
4. 实施成本高昂
一个机构级的另类数据平台,年度总成本从数十万到数千万美元不等,涵盖数据许可费、基础设施和人才费用。
原文提出了将另类数据融入投资流程的五阶段价值链:
原文特别指出,另类数据在 ESG(环境、社会与治理)投资中的应用正在快速增长:
这篇论文为我们描绘了另类数据在量化金融中的全景图。以下是核心要点:
对于 Python 学习者来说,另类数据领域是一个将编程技能与金融知识深度融合的绝佳方向。掌握 NLP、计算机视觉和机器学习的基础,你就拥有了进入这个快速增长领域的入场券。
2026年全面升级已落地!【数据科学实战】知识星球核心权益如下:
星球已沉淀丰富内容生态——涵盖量化文章专题教程库、因子日更系列、高频数据集、PyBroker实战课程、专家深度分享与实时答疑服务。无论您是初探量化的学习者,还是深耕领域的从业者,这里都是助您少走弯路、高效成长的理想平台。诚邀加入,共探数据驱动的投资未来!
好文推荐
1. 用 Python 打造股票预测系统:Transformer 模型教程(一)
2. 用 Python 打造股票预测系统:Transformer 模型教程(二)
3. 用 Python 打造股票预测系统:Transformer 模型教程(三)
4. 用 Python 打造股票预测系统:Transformer 模型教程(完结)
6. YOLO 也能预测股市涨跌?计算机视觉在股票市场预测中的应用
9. Python 量化投资利器:Ridge、Lasso 和 Elastic Net 回归详解
好书推荐