分类因子有效性的数学检验

举报
darkpard 发表于 2022/08/28 10:30:29 2022/08/28
【摘要】 上周,我们分享了《分类因子有效性的可视化》;这周,又分享了《分类因子有效性的可视化(续)》,本篇将对分类因子的有效性进行一些严格的数学检验。 T检验T检验一般用来检验一组样本的均值是否显著不同于某一个确定的值μ,其公式为:其中表示样本均值,S表示样本标准差,N表示样本数量。T检验也可以用来检验同方差的两组样本是否具有相同的均值。它的具体公式是:其中表示样本均值差的标准差。可以使用scipy中...

上周,我们分享了《分类因子有效性的可视化》;这周,又分享了《分类因子有效性的可视化(续)》,本篇将对分类因子的有效性进行一些严格的数学检验。


  1.  T检验

T检验一般用来检验一组样本的均值是否显著不同于某一个确定的值μ,其公式为:

其中表示样本均值,S表示样本标准差,N表示样本数量。

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说明可以拒绝原假设,各样本组之间不是互相独立的。

          【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
          • 点赞
          • 收藏
          • 关注作者

          评论(0

          0/1000
          抱歉,系统识别当前为高风险访问,暂不支持该操作

          全部回复

          上滑加载中

          设置昵称

          在此一键设置昵称,即可参与社区互动!

          *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

          *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。