在FMZ平台搭建多因子模型(三):Alphalens包的应用

Author: ianzeng123, Created: 2023-12-08 18:47:25, Updated: 2024-02-28 21:48:11

img

引言

在量化金融领域,Alpha因子是衡量资产相对于市场表现的关键指标。为了更好地理解和利用Alpha因子,Quantopian开发了一款强大的开源工具——Alphalens。本文将介绍Alphalens的基本概念,并深入探讨其在商品期货多因子模型中的应用。

Alphalens简介

Alphalens是一款用于分析和评估Alpha因子预测能力的Python库。它由Quantopian开发,为研究者提供了一种快速而强大的方式,以可视化和定量的方式分析其开发的Alpha因子。Alphalens不仅适用于因子投资者,还可以帮助任何交易者更好地理解市场行为,无论其策略是多空、市场中性还是其他形式的交易。

Alphalens在商品期货多因子模型中的应用

商品期货市场的特殊性要求投资者更深入地了解不同因子对价格变动的影响。Alphalens通过自身强大的分析功能,为商品期货多因子模型的构建提供了便捷而高效的解决方案。

Alphalens的因子分析

Alphalens的强大之处在于其能够将构建的因子数据传递给Alphalens进行进一步分析。在商品期货多因子模型中,通过指定期望的持有时间和分位数,Alphalens可以生成有关不同因子表现的详细统计信息。

这里使用我们在多因子模型中收集的因子数据,一共包括8个品种的三年的10个特征。

Unnamed: 0	Instrument	InstrumentId	Time	Close	RollOver	Std	Skew	Kurt	PriceMom	VolumeMom	SpotPrice	ContractPrice	Receipt	ReceiptCng
0	0	rb2105	RB	20210104	4388.0	0.055752	0.006320	0.407650	4.054475	0.022224	-0.123163	4429.00	4306.0	31557.0	0.0
1	1	sp2105	SP	20210104	5806.0	-0.053171	0.005690	1.261384	6.570636	0.028630	0.196017	5412.50	5698.0	50679.0	1000.0
2	2	FG105	FG	20210104	1859.0	0.008226	0.004523	0.049817	0.840979	-0.004072	0.001885	2216.00	1844.0	20.0	0.0
3	3	MA105	MA	20210104	2397.0	0.078193	0.004403	0.421037	1.092644	0.005453	-0.187034	2310.00	2375.0	2091.0	-30.0
4	4	SA105	SA	20210104	1611.0	-0.217355	0.005384	0.335676	1.503609	-0.002230	-0.130353	1583.33	1605.0	4229.0	-2494.0
...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...
5644	1991	MA405	MA	20231204	2487.0	0.021907	0.002104	2.092965	12.082583	0.017178	0.224465	2505.00	2486.0	2000.0	0.0
5645	1992	SA405	SA	20231204	2066.0	0.240932	0.006189	1.027442	1.814925	0.050010	0.251893	2770.00	2460.0	0.0	0.0
5646	1993	TA405	TA	20231204	5692.0	0.017817	0.002271	-1.381153	7.931694	-0.002803	0.205041	5675.00	5708.0	15837.0	0.0
5647	1994	eg2405	EG	20231204	4244.0	-0.064321	0.001494	-0.149546	-0.177383	0.004545	0.390738	4133.33	4112.0	10745.0	0.0
5648	1995	pp2405	PP	20231204	7461.0	-0.026321	0.001243	-0.534657	0.291448	0.002068	0.483977	7650.00	7445.0	2730.0	-54.0

因为alphalens需要对数据的结构有固定的要求,所以首先我们需要对因子数据和收盘价的数据结构进行一下处理。

因子数据处理

import pandas as pd
from alphalens.utils import get_clean_factor_and_forward_returns
from alphalens.tears import create_full_tear_sheet

data = pd.read_csv('收集完成数据.csv')

# 因子数据处理
factors = data.iloc[:,[2,3,5]]

factors['Time'] = pd.to_datetime(factors['Time'], format='%Y%m%d')

factors = factors.set_index([factors.Time, factors.InstrumentId], drop=True)

factordf = pd.DataFrame(factors['RollOver'])

收盘价数据处理

# 收盘价数据处理
price = data.iloc[:,[2,3,4]]

price['Time'] = pd.to_datetime(price['Time'], format='%Y%m%d')

price = price.pivot_table(values='Close', index='Time', columns='InstrumentId', aggfunc='first')

price.index.name = 'trade_date'

price = price.reindex(sorted(price.columns), axis=1)

结果分析与优化

Alphalens生成的tear sheet中包含了大量有关因子表现的信息,如因子分布、相对累积回报、因子权重回报等。通过仔细分析这些信息,我们可以优化其因子选择,调整持有时间,并根据市场环境灵活地调整因子权重。

from alphalens.utils import get_clean_factor_and_forward_returns
from alphalens.tears import create_full_tear_sheet
 
# 我们是使用pct_chg因子数据预测收盘价,因此需要偏移1天,但是这里有8只合约,所以是shift(8)
ret = get_clean_factor_and_forward_returns(factordf[['RollOver']].shift(8), price)
create_full_tear_sheet(ret, long_short=False)

根据文档,alphalens主要返回以下结果:

因子分析(Factor Analysis)
  • 因子分位数(Factor Quantiles): 根据因子值将股票分为不同分位数。
  • 因子收益率(Factor Returns): 不同分位数的平均超额收益率。
  • 因子自相关性(Factor Autocorrelation): 因子值的自相关性。
持续分析(Period Analysis)
  • 分位数收益(Quantile Returns): 每个分位数的平均超额收益率。
  • 分位数换手率(Quantile Turnover): 每个分位数之间的换手率。
  • 分位数标准差(Quantile Standard Deviations): 每个分位数的收益率标准差。
持续收益分析(Period Wise Returns Analysis)
  • 分期分位数收益(Period Wise Quant Returns): 每个分位数在不同时间期间的收益。
  • 平均分期分位数收益(Mean Period Wise Returns): 不同时间期间的平均收益。
风险分析(Risk Analysis)
  • 分位数累积收益(Quantile Cumulative Returns): 每个分位数的累积超额收益。
  • 日收益(Daily Returns): 每日的超额收益。
  • 累积收益(Cumulative Returns): 累积的超额收益。

这些结果提供了对因子在时间和分位数维度上表现的详细分析,帮助量化分析人员评估因子的有效性和稳定性。我们具体看下呈现结果,包括统计分析的图表,分层统计,收益分析,信息分析和Turnover的分析:

Quantiles Statistics
min	max	mean	std	count	count %
factor_quantile						
1	-0.353640	0.076396	-0.083938	0.062084	1392	25.031469
2	-0.096898	0.115637	-0.014851	0.037620	697	12.533717
3	-0.071190	0.190496	0.029333	0.035042	1385	24.905593
4	-0.005355	0.433061	0.079908	0.052828	697	12.533717
5	0.011002	0.936618	0.208833	0.140788	1390	24.995504

Returns Analysis
1D	5D	10D
Ann. alpha	-0.249	-0.278	-0.292
beta	0.653	0.574	0.582
Mean Period Wise Return Top Quantile (bps)	-4.680	-4.122	-4.535
Mean Period Wise Return Bottom Quantile (bps)	12.684	12.568	13.630
Mean Period Wise Spread (bps)	-17.363	-17.223	-18.966

Information Analysis
1D	5D	10D
IC Mean	-0.007	-0.066	-0.118
IC Std.	0.414	0.442	0.451
Risk-Adjusted IC	-0.016	-0.148	-0.262
t-stat(IC)	-0.429	-3.911	-6.913
p-value(IC)	0.668	0.000	0.000
IC Skew	-0.085	0.006	0.214
IC Kurtosis	-0.650	-0.842	-0.842

Turnover Analysis
1D	5D	10D
Quantile 1 Mean Turnover	0.111	0.175	0.231
Quantile 2 Mean Turnover	0.369	0.553	0.677
Quantile 3 Mean Turnover	0.232	0.362	0.449
Quantile 4 Mean Turnover	0.307	0.499	0.584
Quantile 5 Mean Turnover	0.096	0.181	0.266
1D	5D	10D
Mean Factor Rank Autocorrelation	0.932	0.873	0.804

还有数据的可视化呈现:

image

image

Alphalens的未来展望

Alphalens的开源性质使得其不断受到社区的关注和贡献。未来,我们可以期待Alphalens的功能进一步扩展,以适应不断变化的金融市场需求。可能的发展方向包括更多定制化的图表、对非股票类资产的更好支持以及更先进的分析技术的整合。

Alphalens作为一款强大的Alpha因子分析工具,在量化金融领域发挥着不可替代的作用。特别是在商品期货多因子模型中,其灵活性和高效性使得投资者能够更深入地理解市场,并优化其投资策略。Alphalens的应用不仅仅局限于因子投资者,任何对市场行为感兴趣的交易者都能从中受益匪浅。

代码报错修正办法

  • IndexError: invalid index to scalar variable

修正alphalens.utils.py里第319行的代码改为:

delta_days = period_len.components.days - mode(days_diffs, keepdims=True).mode[0] 

  • AttributeError: ‘Index’ object has no attribute ‘get_values’

修正tears.py中的get_values()函数改为to_numpy()

本系列课程旨在为大家介绍多因子模型在商品期货量化交易中的应用,其他相关文章请点击下面链接:


更多内容