This page is for pre-processing step of factor analysis.
Edit me

factor_analysis是一款基于Python的单因子测试框架,为寻找能有效区分和预测股票收益的因子提供标准化的工作流程和实现工具。该框架主要包括数据清洗与因子测试两部分。其中,数据清洗将实现对原始因子数据中异常值和缺失值的处理,以及因子标准化,从而保证后续检验模型的稳健性;因子测试提供三类因子测试模型,帮助投资者从实证角度验证因子有效性,分别为回归检验、投资组合排序法以及信息系数评估。

本页主要介绍使用框架前的数据准备、fa类的使用与结构,以及数据清洗的具体内容。

数据准备

首先,导入factor_analysis模块。

from quantools.factor_analysis import factor_analysis as fa

在使用factor_analysis之前,需要准备好因子数据与收益率数据。其中因子数据需要处理成 pandas.DataFrame 格式,且其二维索引必须为交易日期(trade_date)和股票代码(stock_code);收益率数据同样需要处理成 pandas.DataFrame 格式,其二维索引必须为交易月份(trade_month)和股票代码(stock_code)。

因子数据

使用样例:

                            factor
trade_date stock_code
2009-12-31 000001     7.567942e+07
           000002     1.046436e+08
           000005     5.504288e+06
           000006     5.746386e+06
           000009     1.197644e+07
...                            ...
2021-10-29 688779     4.516272e+07
           688798     3.552566e+07
           688819     3.961308e+07
           688981     1.066930e+08
           689009     4.510006e+06

收益率数据

使用样例:

                     returns
trade_month ts_code          
2010-01     000001    13.930
            000002    13.120
            000005    17.350
            000006     6.500
            000007    14.460
...                      ...
2021-11     900948     0.867
            900952     0.239
            900953     0.341
            900955     0.126
            900957     0.635

FA类应用

模块factor_analysis提供factor_analysis()类,其中包含factor_datareturns_datafactor_return_data等多个属性,以及factor_ts_regr_cmpt()factor_fm_regr_cmpt()quantile_returns_cmpt()等多种单因子测试方法。factor_analysis()类接口调用命令如下:

fa.factor_analysis(
    factors,
    returns,
    quantiles=10,
    outlier_method='winsorize',
    norm_method='zscore',
    industry_neutral=False,
    mkt_cap_neutral=False
)

输入参数:

名称 必选 类型 描述
factor Y DataFrame 因子数据,其中二维索引分别为交易日期 trade_date(level 0)与股票代码 stock_code(level 1),并包含一个名称为 factor的列,其值为对应交易日期、股票代码的因子值
returns Y DataFrame 收益率数据,其中二维索引分别为交易月份 trade_month(level 0)与股票代码 stock_code(level 1),并包含一个名称为 returns的列,其值为对应交易月份、股票代码的月收益率
quantile N int 投资组合数量,默认为10
outlier_method N str 异常值处理方法,默认’winsorize’,即缩尾法;可选’mad’,即绝对中位差法
norm_method N str 标准化方法,默认’zscore’,即为z-score标准化;可选’rank’,即为基于秩的标准化方法
industry_neutral N bool 按因子值排序分组时,是否行业中性化处理,默认为False,即对因子进行行业中性化处理;可选True,即不进行行业中性化处理
mkt_cap_neutral N bool 按因子值排序分组时,是否市值中性化处理,默认False,即对因子进行市值中性化处理;可选True,即不进行市值中性化处理

输出参数:

属性列表:

名称 初始 类型 描述
factor_data Y DataFrame 因子数据,其中二维索引分别为交易日期 trade_date(level 0)与股票代码 stock_code(level 1),并包含一个名称为 factor的列,其值为对应交易日期、股票代码的原始因子值
returns_data Y DataFrame 收益率数据,其中二维索引分别为交易月份 trade_month(level 0)与股票代码 stock_code(level 1),并包含一个名称为 returns的列,其值为对应交易月份、股票代码的月收益率
factor_return_data Y DataFrame 进行预处理后的因子与收益率合并数据,其中二维索引分别为交易月份 trade_month(level 0)与股票代码stock_code(level 1),并包含名称分别为 factorreturnsindustryquantilescirc_mc_log 的列,其值分别为对应交易月份、股票代码的因子值(处理后)、月收益率、所属行业、排序组别、流动市值对数

方法列表:

名称 描述
factor_ts_regr_summ 回归法检验定价因子是否能在时间序列维度上解释潜在异象因子
factor_fm_regr_summ 回归法检验潜在异象因子是否能在已知定价模型的基础上,为解释不同股票的收益率差异提供增量信息
factor_barra_regr_cmpt Barra回归计算回测期内每个月的因子收益率与t值
factor_barra_regr_summ Barra回归计算回测期内每个月的因子收益率与t值,并在时间序列的维度上计算因子收益率与t值的相关统计指标
factor_ic_cmpt 信息系数计算回测期内每个月因子与未来收益率的相关性,检验潜在异象因子是否能预测股票的未来收益率
factor_ic_summ 信息系数计算回测期内每个月因子与未来收益率的相关性,并在时间序列的维度计算可预测性的相关统计指标
quantile_returns_cmpt 投资组合排序法计算不同因子值大小构建的投资组合在回测期内每个月的收益率
quantile_returns_summ 投资组合排序法计算不同因子值大小构建的投资组合在回测期内每个月的收益率,并计算描述投资组合回测期内表现的统计指标(如t值、夏普比率、年化收益率、累计收益率等)
quantile_returns_plot 投资组合排序法计算不同因子值大小构建的投资组合在回测期内每个月的收益率,并绘制投资组合回测内的累计收益率曲线

数据预处理

在测试前,为保证后续检验模型的稳健性,factor_analysis将对原始因子数据与收益率数据进行预处理,其中包括以下步骤:

  • 剔除高风险股票与不可交易股,包括换仓日前一天的风险警示股、次新股以及停牌股等;

  • 缺失值处理,剔除因子值缺失的股票(主要包括过去一段时间交易天数不足的股票,与上市时间不满一年而无法计算TTM指标或去年同比变化指标的股票);

  • 异常值检测,采用固定比率修正法/缩尾法,或MAD检验并修正因子的异常值;

  • 数据标准化,采用Z-Score标准化,或基于轶的标准化方法对因子数据进行标准化处理;

  • 数据合并,将第$T-1$期末的因子数据与第$T$期的收益率数据进行左连接;

  • 补充信息,包括股票行业、流通市值以及根据因子值分位数排序并分组后的结果;

经过预处理后的数据将保存在名称为factor_return_data且格式为MultiIndex DataFrame的属性中,其二维索引分别为交易月份 trade_month(level 0)_与股票代码 _stock_code(level 1),列包含交易日期 trade_date、因子值 factor、个股月收益率 returns、2012版证监会行业分类 industry、个股流通市值 circ_mc 以及因子分位数组别 quantiles。当根据因子值排序构建分位数投资组合时,若考虑进行行业中性化或市值中性化处理,则将行业和(或)市值作为解释变量,以因子值作为被解释变量做回归,所得残差即为中性化后的因子值。

数据样例:

fa.factor_return_data
                        trade_date    factor   returns                    industry       circ_mc quantiles  
trade_month stock_code                                                     
2010-01     000001      2009-12-31  2.202307 -0.109561            货币金融服务        7.126066e+07  group 10 
            000002      2009-12-31  2.540593 -0.135985              房地产业         1.043824e+08  group 10  
            000005      2009-12-31 -0.533783 -0.104651        生态保护和环境治理业     5.500733e+06   group 4  
            000006      2009-12-31 -0.488849 -0.120918              房地产业         5.589346e+06   group 4  
            000009      2009-12-31  0.277774 -0.050091                综合          1.084956e+07   group 8  
...                            ...       ...       ...               ...   
2021-11     688699      2021-10-29  0.112618  0.031083        软件和信息技术服务业     3.744605e+06   group 7  
            688777      2021-10-29  1.060265  0.021838        软件和信息技术服务业     3.616792e+06   group 9  
            688788      2021-10-29 -0.332742  0.105668  计算机、通信和其他电子设备制造业  6.079314e+06   group 5  
            688819      2021-10-29  0.997068  0.187730        电气机械及器材制造业     4.328712e+06   group 9  
            688981      2021-10-29  1.948281 -0.014172  计算机、通信和其他电子设备制造业  1.029819e+08  group 10 

[193210 rows x 6 columns]