正态检验

正态检验是一种用于判断观测数据是否来自正态分布总体的统计方法,是拟合优度检验中的一种重要形式。常用的正态性检验方法包括Anderson-Darling检验、Kolmogorov-Smirnov检验和QQ图检验等。通过这些检验,可以评估数据集的分布特性,从而为后续的统计分析和建模提供依据。

算法说明

正态检验组件由Anderson-Darling Test、Kolmogorov-Smirnov TestQQ图检验方法组成,您可以选择一种或多种检验方法。

  • Anderson-Darling检验:Anderson-Darling检验是一个增强的拟合优度检验方法,专注于分布尾部的差异,通过加权累积分布函数的平方差异来评估样本数据与特定理论分布的一致性。

  • Kolmogorov-Smirnov检验:Kolmogorov-Smirnov检验是一种非参数统计方法,用于比较样本分布与参考分布或两个样本分布之间的差异,通过计算最大累积分布差异来评估分布的拟合优度。

  • QQ图检验:QQ图检验是一种图形化诊断工具,用于直观地比较样本分布与理论分布或两个样本分布之间的相似性,通过分位数的对比来揭示分布偏差。

配置组件

方式一:可视化方式

Designer工作流页面添加正态检验组件,并在界面右侧配置相关参数:

参数类型

参数

描述

字段设置

选择字段列

选择用于执行正态性检验的字段列。

参数设置

Anderson-Darling检验

是否进行Anderson-Darling检验。

Kolmogorov-Smirnov检验

是否进行Kolmogorov-Smirnov检验。

使用QQ

是否进行QQ图检验。

执行调优

计算的核心数

计算的核心数,取值为正整数。

每个核心的内存(MB)

每个核心的内存。

方式二:PAI命令方式

使用PAI命令配置正态检验组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见场景4:在SQL脚本组件中执行PAI命令

PAI -name normality_test
    -project algo_public
    -DinputTableName=test
    -DoutputTableName=test_out
    -DselectedColNames=col1,col2
    -Dlifecycle=1;

参数

是否必选

默认值

描述

inputTableName

输入表的名称。

outputTableName

输出表名称列表。

selectedColNames

输入表选择列名类型。支持选择多列,类型为DOUBLEBIGINT

inputTablePartitions

””

输入表分区名称。

enableQQplot

true

是否进行QQ图检验。

enableADtest

true

是否进行Anderson-Darling检验。

enableKStest

true

是否进行Kolmogorov-Smirnov检验。

lifecycle

-1

指定输出表的生命周期。取值为整数,且≥-1。当为默认值-1时,表示不设置生命周期。

coreNum

-1

与参数memSizePerCore配对使用,取值为正整数。当为默认值-1时,系统会根据输入数据量计算所取instance的数量。

memSizePerCore

-1

单个节点内存大小,单位MB。取值为正整数,范围为(100, 64*1024)。当为默认值-1时,系统会根据输入数据量计算所需内存大小。

使用示例

  1. 添加SQL脚本组件,去勾选使用Script模式是否由系统添加Create Table语句,并在SQL脚本中输入以下SQL语句。

        drop table if exists normality_test_input;
        create table normality_test_input as
        select
          *
        from
        (
          select 1 as x
            union all
          select 2 as x
            union all
          select 3 as x
            union all
          select 4 as x
            union all
          select 5 as x
            union all
          select 6 as x
            union all
          select 7 as x
            union all
          select 8 as x
            union all
          select 9 as x
            union all
          select 10 as x
        ) tmp;
  2. 添加SQL脚本组件,去勾选使用Script模式是否由系统添加Create Table语句,在SQL脚本中输入以下PAI命令,并将步骤 1和步骤 2的组件进行连线。

    drop table if exists ${o1};
    PAI -name normality_test
        -project algo_public
        -DinputTableName=normality_test_input
        -DoutputTableName=${o1}
        -DselectedColNames=x
        -Dlifecycle=1;
  3. 单击左上角image,运行工作流。

  4. 待运行结束,右键单击步骤 2的组件,选择查看数据 > SQL脚本的输出,查看训练结果。

    | colname | testname                | testvalue           | pvalue             |
    | ------- | ----------------------- | ------------------- | ------------------ |
    | x       |                         | 1.0                 | 0.8173291742279805 |
    | x       |                         | 2.0                 | 2.470864450785345  |
    | x       |                         | 3.0                 | 3.5156067948020056 |
    | x       |                         | 4.0                 | 4.3632330349313095 |
    | x       |                         | 5.0                 | 5.128868067945126  |
    | x       |                         | 6.0                 | 5.871131932054874  |
    | x       |                         | 7.0                 | 6.6367669650686905 |
    | x       |                         | 8.0                 | 7.4843932051979944 |
    | x       |                         | 9.0                 | 8.529135549214654  |
    | x       |                         | 10.0                | 10.182670825772018 |
    | x       | Anderson_Darling_Test   | 0.1411092332197832  | 0.9566579606430077 |
    | x       | Kolmogorov_Smirnov_Test | 0.09551932503797644 | 0.9999888659426232 |