分类因子有效性的数学检验
上周,我们分享了《分类因子有效性的可视化》;这周,又分享了《分类因子有效性的可视化(续)》,本篇将对分类因子的有效性进行一些严格的数学检验。
-
T检验
T检验一般用来检验一组样本的均值是否显著不同于某一个确定的值μ,其公式为:
T检验也可以用来检验同方差的两组样本是否具有相同的均值。它的具体公式是:
其中表示样本均值差的标准差。
可以使用scipy中的ttest_ind来进行t检验。
from scipy.stats import ttest_ind
ttest_ind(trade_data2[trade_data2['buy_date_type']=='early']['r1'].to_list(), trade_data2[trade_data2['buy_date_type']=='late']['r1'].to_list())
p值约为0.5,因此不能拒绝原假设,early组和late组具有相同的均值,也就是说early组的r1均值与late组的r1均值并没有显著的差异。
trade_data2请参考《分类因子有效性的可视化》。
2. SMD检验
SMD,即标准均值差,SMD为1表示两组样本均值相差一个标准偏差,一般认为当SMD<0.1时,表示组间差异很小。其公式如下:
在python中,它可以用causalml库的match.create_table_one方法来实现:
from causalml.match import create_table_one
trade_data2['treatment'] = trade_data2['buy_date_type'] == 'very late'
create_table_one(trade_data2, 'treatment', ['r1', ])
可以看到very late组的1天收益率与总体并没有显著的差异。
3. Mann–Whitney U 检验
Mann-Whitney U检验的目标是检验两个总体的均值是否有显著的差别,它假设样本来自于这样两个总体,它们除了总体均值外完全相同。
它的具体步骤如下:
1)将样本混合,按从小到大排序,最小的等级为1,依次增加。若数据完全相等,则等级相等,为序号的均值;
2)求出样本1的等级和和样本2的等级和;
3)计算:
可以用scipy的mannwhitneyu函数来实现:
from scipy.stats import mannwhitneyu
mannwhitneyu(trade_data2[trade_data2['buy_date_type']=='early']['r1'].to_list(), trade_data2[trade_data2['buy_date_type']=='late']['r1'].to_list())
p值大于0.4,说明不能拒绝原假设,early组与late组没有显著差异。
4. Kolmogorov-Smirnov检验
Kolmogorov-Smirnov检验简称KS检验,是最流行的非参数检验之一。其思想是比较两组的累积分布,统计量是两个累积分布之间差值的绝对值的最大值,计算公式如下:
在scipy中,单变量与给定分布的累积分布之间的相似性可以用kstest函数来实现,而两个样本的比较则需要用ks_2sample来实现:
from scipy.stats import ks_2samp
ks_2samp(trade_data2[trade_data2['buy_date_type']=='early']['r1'].to_list(), trade_data2[trade_data2['buy_date_type']=='late']['r1'].to_list())
说明结果同样是不能拒绝early组与late组具有显著差异的原假设。
5. F检验
F检验用于比较各样本组之间的方差,其零假设是各样本组相互独立,其检验量是:
可以用scipy的f_oneway函数来实现:
from scipy.stats import f_oneway
r1_groups = [trade_data2.loc[trade_data2['buy_date_type']==buy_date_type, 'r1'].values for buy_date_type in trade_data2['buy_date_type'].dropna().unique()]
f_oneway(*r1_groups)
p值接近0说明可以拒绝原假设,各样本组之间不是互相独立的。
- 点赞
- 收藏
- 关注作者
评论(0)