双样本T检验基于统计学原理用来检验两个样本的均值是否有显著差异。本文为您介绍PAI-Designer(原PAI-Studio)提供的双样本T检验的参数配置和使用示例。

组件配置

您可以使用以下任意一种方式,配置双样本T检验组件参数。

方式一:可视化方式

在PAI-Designer(原PAI-Studio)工作流页面配置组件参数。
页签 参数 描述
字段设置 样本1所在列 进行检验的样本1所在列。
样本2所在列 进行检验的样本2所在列。
参数设置 T检验类型 T检验的类型,取值如下:
  • 独立性T检验:检验两个独立样本的均值是否有显著差异。检验的两个样本彼此相互独立且必须总体服从正态分布。
  • 配对性T检验:检验两个配对样本的均值是否有显著差异。
对立假设类型 对立假设的类型,取值如下:
  • two.sided:双侧检验。
  • less:左侧检验。
  • greater:右侧检验。
置信度 检验结果的置信度,取值包括:0.8、0.9、0.95、0.99、0.995、0.999。
假设均值大小 假设均值的大小,默认值为0。
两总体方差是否相等 两个总体值的方差是否相等,取值包括true和false。
节点个数 节点个数,与参数单个节点内存大小配对使用,正整数。范围为[1, 9999]
单个节点内存大小,单位MB 单个节点内存大小,单位MB,正整数。范围为[1024, 64*1024]

方式二:PAI命令方式

使用PAI命令方式,配置该组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见SQL脚本
pai -name t_test 
    -project algo_public 
    -DxTableName=pai_t_test_all_type
    -DxColName=col1_double
    -DxTablePartitions=ds=2010/dt=1
    -DyTableName=pai_t_test_all_type
    -DyColName=col1_double
    -DyTablePartitions=ds=2010/dt=1 
    -DoutputTableName=pai_t_test_out
    -Dalternative=less
    -Dmu=47
    -DconfidenceLevel=0.95
    -Dpaired=false
    -DvarEqual=true
参数名称 是否必选 描述 默认值
xTableName 输入表名称x。
xTablePartitions 输入表x中参与T检验的分区。系统支持以下格式:
  • Partition_name=value
  • name1=value1/name2=value2:多级分区
说明 指定多个分区时,分区之间使用英文逗号(,)分隔。
所有分区
xColName 输入表x中参与T检验的列,只能为DOUBLE或INT类型。
yTableName 输入表名称y。
yTablePartitions 输入表y中参与检验的分区。系统支持以下格式:
  • Partition_name=value
  • name1=value1/name2=value2:多级分区
说明 指定多个分区时,分区之间使用英文逗号(,)分隔。
所有分区
yColName 输入表y中参与T检验的列,只能为DOUBLE或INT类型。
paired
  • true:配对性T检验。
  • false:独立性T检验。
false
alternative 对立假设的类型,取值包括:two.sided、less、greater。 two.sided
mu 假设的均值,只能为DOUBLE类型。 0
varEqual 两个总体值的方差是否相等。可选true或false。 false
confidenceLevel 检测结果的置信度,取值包括:0.8、0.9、0.95、0.99、0.995、0.999。 0.95
coreNum 节点个数,与参数memSizePerCore配对使用,正整数。范围为[1, 9999] 自动计算
memSizePerCore 单个节点内存大小,单位MB,正整数。范围为[1024, 64*1024] 自动计算
lifecycle 指定输出表的生命周期。
如果输入表为普通表非分区表,不建议设置coreNummemSizePerCore,由算法自动计算。在资源有限的情况下,您可以使用如下代码计算:
def CalcCoreNumAndMem(row,centerCount,kOneCoreDataSize=1024):
    """计算节点个数和单个节点内存。           
       Args:
           row:输入表行数。
           col:输入表列数。
           kOneCoreDataSize:单个节点计算的数据量,单位M,正整数,默认1024。
       Return:
           coreNum,memSizePerCore                 
       Example:
           coreNum,memSizePerCore = CalcCoreNumAndMem(1000,99,100,kOneCoreDataSize=2048)

    """
    kMBytes = 1024.0 * 1024.0
    #按数量划分,计算节点个数。
    coreNum = max(1, int(row * 2 * 8 / kMBytes / kOneCoreDataSize))
    #单个节点内存 = 数据量大小。
    memSizePerCore = max(1024,int(kOneCoreDataSize * 2))
    return coreNum,memSizePerCore

使用示例

  • 测试数据
    create table pai_test_input as
    select * from
    (
      select 1 as f0,2 as f1 from dual
      union all
      select 1 as f0,3 as f1 from dual
      union all
      select 1 as f0,4 as f1 from dual
      union all
      select 0 as f0,3 as f1 from dual
      union all
      select 0 as f0,4 as f1 from dual
    )tmp;
  • PAI命令行
    pai -name t_test 
        -project algo_public 
        -DxTableName=pai_test_input
        -DxColName=f0
        -DyTableName=pai_test_input
        -DyColName=f1
        -DyTablePartitions=ds=2010/dt=1 
        -DoutputTableName=pai_t_test_out
        -Dalternative=less
        -Dmu=47
        -DconfidenceLevel=0.95
        -Dpaired=false
        -DvarEqual=true
  • 输出说明
    输出一个只有一行一列的JSON格式表。
    {
        "AlternativeHypthesis": "difference in means not equals to 0",
        "ConfidenceInterval": "(-2.5465, -0.4535)",
        "ConfidenceLevel": 0.95,
        "alpha": 0.05000000000000004,
        "df": 19,
        "mean of the differences": -1.5,
        "p": 0.008000000000000007,
        "t": -3
    }