本文将结合你实际使用的 pe_ratio 因子与 Alphalens 工具链,讲解如何系统评估一个因子的有效性。
📦 一、数据结构与准备
你使用的数据文件为 factors_df.csv,其包含以下字段:
date: 日期
code: 股票代码
pe_ratio: 作为因子值的市盈率
close: 用于收益计算的收盘价
🔧 数据读取与标准格式化
import pandas as pd
# 读取因子文件
df = pd.read_csv('../factors_df.csv', index_col=0, parse_dates=['date'])
# Alphalens 要求字段名为 asset(表示证券代码)
df['asset'] = df['code']
df['date'] = pd.to_datetime(df['date'], utc=True)
# 设置索引为 (date, asset)
df.set_index(['date', 'asset'], inplace=True)
🎯 二、定义因子值与价格数据
从原始数据中拆出你要测试的因子(这里是 pe_ratio)和价格字段:
# 拆出单因子
factors = df['pe_ratio']
# 拆出价格数据,并转换为 wide 格式
prices = df[['close']].reset_index()
prices = prices.pivot(index='date', columns='asset', values='close')
prices.index = pd.to_datetime(prices.index, utc=True)
prices.rename_axis('date', inplace=True)
🧽 三、因子清洗与收益计算
使用 get_clean_factor_and_forward_returns() 将因子与未来收益率对齐,便于后续分析。
from alphalens.utils import get_clean_factor_and_forward_returns
factor_data = get_clean_factor_and_forward_returns(
factor_values=factors,
prices=prices,
bins=None, # 不手动分组
quantiles=10 # 自动分为10组用于分层回测
)
这个函数将返回一个标准结构的 DataFrame,包含:
factor: 原始因子值
quantile: 所属分组
1D, 5D, 10D: 未来 1/5/10 日的收益率
forward_returns: 各期未来收益
📈 四、执行单因子检验
✅ 核心:生成完整分析报告
import alphalens
alphalens.tears.create_full_tear_sheet(factor_data, long_short=False)
该报告会输出:
分析项 意义
IC 值走势 因子与未来收益的相关性
分组收益 & 多空收益 是否具备收益差异识别能力
收益分布/标准差 稳定性分析
每组股票换手率 换仓频率分析
因子值分布图 是否有极端值、偏态性
📌 五、如何判断因子是否有效?
指标 判断标准 你观察到的结果(可
本贴含有隐藏内容,付费后可阅(股票量化投资课程学员可免费阅读)
点击下方按钮购买
成为学员