正态性检验通过观测值判断总体是否服从正态分布,是统计判决中重要的一种特殊的拟合优度假设检验。本文为您介绍PAI-Designer(原PAI-Studio)提供的正态检验。

正态检验组件由Anderson-Darling TestKolmogorov-Smirnov TestQQ图检验方法组成,您可以选择一种或多种检验方法。
  • Anderson-Darling Test是将样本数据的经验累积分布函数与假设数据呈正态分布时期望的分布进行比较。如果实测差异足够大,该检验将否定总体呈正态分布的假设。
  • Kolmogorov-Smirnov是比较两个观测值分布的检验方法。
  • QQ图通过把测试样本数据的分位数与已知分布相比较,从而来检验数据的分布情况。在样本量>1000时,系统会采样进行计算并输出QQ图,因此图中的数据点不一定覆盖所有样本。

组件配置

您可以使用以下任意一种方式,配置正态检验组件参数。

方式一:可视化方式

在PAI-Designer(原PAI-Studio)工作流页面配置组件参数。
页签 参数 描述
字段设置 选择字段列
参数设置 Anderson-Darling检验 取值为:
默认值为是。
Kolmogorov-Smirnov检验 取值为:
默认值为是。
使用QQ图 取值为:
默认值为是。
执行调优 计算的核心数 计算的核心数,取值为正整数。
每个核心的内存(MB) 每个核心的内存。

方式二:PAI命令方式

使用PAI命令方式,配置该组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见SQL脚本
PAI -name normality_test
    -project algo_public
    -DinputTableName=test
    -DoutputTableName=test_out
    -DselectedColNames=col1,col2
    -Dlifecycle=1;
参数名称 是否必选 描述 默认值
inputTableName 输入表的名称。
outputTableName 输出表名称列表。
selectedColNames 输入表选择列名类型。支持选择多列,类型为DOUBLEBIGINT
inputTablePartitions 输入表分区名称。 ””
enableQQplot 使用QQ图检验。取值为truefalse true
enableADtest 使用Anderson-Darling检验。取值为truefalse true
enableKStest 使用Kolmogorov-Smirnov检验。取值为truefalse true
lifecycle 指定输出表的生命周期。取值为整数,且≥-1。当为默认值-1时,表示不设置生命周期。 -1
coreNum 与参数memSizePerCore配对使用,取值为正整数。当为默认值-1时,系统会根据输入数据量计算所起instance的数量。 -1
memSizePerCore 单个节点内存大小,单位MB。取值为正整数,范围为(100, 64*1024)。当为默认值-1时,系统会根据输入数据量计算所需内存大小。 -1

示例

  • 数据生成
        drop table if exists normality_test_input;
        create table normality_test_input as
        select
          *
        from
        (
          select 1 as x from dual
            union all
          select 2 as x from dual
            union all
          select 3 as x from dual
            union all
          select 4 as x from dual
            union all
          select 5 as x from dual
            union all
          select 6 as x from dual
            union all
          select 7 as x from dual
            union all
          select 8 as x from dual
            union all
          select 9 as x from dual
            union all
          select 10 as x from dual
        ) tmp;
  • PAI命令
    PAI -name normality_test
        -project algo_public
        -DinputTableName=normality_test_input
        -DoutputTableName=normality_test_output
        -DselectedColNames=x
        -Dlifecycle=1;
  • 输入说明

    输入格式:选择需要计算的列,支持选择多列。类型为DOUBLEBIGINT

  • 输出说明
    输出格式:图和结果表,结果表的字段如下。结果表有两个分区:
    • p=test的分区是Anderson-Darling检验或Kolmogorov-Smirnov检验的结果。当enableADtesttrueenableKStesttrue时会输出数据。
    • p=plot是QQ图的数据,当enableQQplottrue时会输出数据,并复用p=test的列。即当p=plot时,testvalue列记录原观测数据(QQ图的x轴),pvalue列记录如果服从正态分布的预期数据(QQ图的y轴)。
    列名 数据类型 含义
    colName STRING 列名
    testname STRING 检验名
    testvalue DOUBLE 检验值/QQ图x轴
    pvalue DOUBLE 检验的p值/QQ图y轴
    p DOUBLE 分区名
    输出表如下。
    +------------+------------+------------+------------+------------+
    | colname    | testname   | testvalue  | pvalue     | p          |
    +------------+------------+------------+------------+------------+
    | x          | NULL       | 1.0        | 0.8173291742279805 | plot       |
    | x          | NULL       | 2.0        | 2.470864450785345  | plot       |
    | x          | NULL       | 3.0        | 3.5156067948020056 | plot       |
    | x          | NULL       | 4.0        | 4.3632330349313095 | plot       |
    | x          | NULL       | 5.0        | 5.128868067945126  | plot       |
    | x          | NULL       | 6.0        | 5.871131932054874  | plot       |
    | x          | NULL       | 7.0        | 6.6367669650686905 | plot       |
    | x          | NULL       | 8.0        | 7.4843932051979944 | plot       |
    | x          | NULL       | 9.0        | 8.529135549214654  | plot       |
    | x          | NULL       | 10.0       | 10.182670825772018 | plot       |
    | x          | Anderson_Darling_Test | 0.1411092332197832   | 0.9566579606430077 | test       |
    | x          | Kolmogorov_Smirnov_Test | 0.09551932503797644 | 0.9999888659426232 | test       |
    +------------+------------+------------+------------+------------+