本文为您介绍PAI-Studio提供的评估算法,包括二分类评估、回归模型评估、聚类模型评估、混淆矩阵及多分类评估。

二分类评估

二分类评估通过计算AUC、KS及F1 Score指标,输出KS曲线、PR曲线、ROC曲线、LIFT Chart及Gain Chart。

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    参数 描述
    原始标签列列名 目标列的名称。
    分数列列名 预测分数列,通常为prediction_score列。
    正样本的标签值 正样本的分类。
    计算KS、PR等指标时按等频分成多少个桶 将数据按照等频划分为桶的数量。
    分组列列名 分组ID列。对各分组的数据分别计算评估指标,适用于分组评估场景。
    高级选项 如果选中高级选项复选框,则预测结果详细列预测目标与评估目标是否一致保存性能指标参数生效。
    预测结果详细列 预测结果详细列的名称。
    预测目标与评估目标是否一致 例如,在金融场景中,训练程序预测坏人的概率,其值越大,表示样本越坏,相关指标(例如LIFT)评估的是抓坏率,此时预测目标与评估目标一致。在信用评分场景中,训练程序预测好人的概率,其值越大,表示样本越好,而相关指标评估的是抓坏率,此时预测目标与评估目标不一致。
    保存性能指标 保存性能指标的开关。
  • PAI命令方式
    PAI -name=evaluate -project=algo_public
        -DoutputMetricTableName=output_metric_table
        -DoutputDetailTableName=output_detail_table
        -DinputTableName=input_data_table
        -DlabelColName=label
        -DscoreColName=score
    参数 是否必选 参数描述 默认值
    inputTableName 输入表的名称。
    inputTablePartitions 输入表的分区。 全表
    labelColName 目标列的名称。
    scoreColName 分数列的名称。
    groupColName 分组列的名称,用于分组评估场景。
    binCount 计算KS及PR等指标时,按照等频将数据分成的桶数量。 1000
    outputMetricTableName 输出的指标表,包括AUC、KS及F1 Score指标。
    outputDetailTableName 用于画图的详细数据表。
    positiveLabel 正样本的分类。 1
    lifecycle 输出表的生命周期。
    coreNum 核心数量。 系统自动计算
    memSizePerCore 每个核心的内存。 系统自动计算

回归模型评估

回归模型评估是指基于预测结果和原始结果,评估回归算法模型的优劣性,从而输出评估指标及残差直方图。

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 原回归值 支持数值类型。
    预测回归值 支持数值类型。
    执行调优 节点个数 与参数单个节点内存大小搭配使用,取值范围为1~9999。
    单个节点内存大小 取值范围为1024 MB~64*1024 MB。
  • PAI命令方式
    PAI -name regression_evaluation -project algo_public
        -DinputTableName=input_table
        -DyColName=y_col
        -DpredictionColName=prediction_col
        -DindexOutputTableName=index_output_table
        -DresidualOutputTableName=residual_output_table;
    参数 是否必选 参数描述 默认值
    inputTableName 输入表的名称。
    inputTablePartitions 输入表中,参与计算的分区。 全表
    yColName 输入表中,原始因变量的列名,支持数值类型。
    predictionColName 预测结果中,因变量的列名,支持数值类型。
    indexOutputTableName 回归指标输出表的名称。
    residualOutputTableName 残差直方图输出表的名称。
    intervalNum 直方图区间数量。 100
    lifecycle 输出表的生命周期,取值范围为正整数。
    coreNum Instance数量,取值范围为1~9999。 系统自动设置
    memSizePerCore 每个核心的内存,取值范围为1024 MB~64*1024 MB。 系统自动设置

回归模型评估的输出结果

回归指标输出表的输出结果为JSON格式,包括以下参数。
参数 描述
SST 总平方和
SSE 误差平方和
SSR 回归平方和
R2 判定系数
R 多重相关系数
MSE 均方误差
RMSE 均方根误差
MAE 平均绝对误差
MAD 平均误差
MAPE 平均绝对百分误差
count 行数
yMean 原始因变量的均值
predictionMean 预测结果的均值

聚类模型评估

基于原始数据和聚类结果,评估聚类模型的优劣性,从而输出评估指标。

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 参与评估列 参与评估的列名,该参数必须与模型存储的特征列保持一致。
    输入为稀疏格式 使用KV格式表示稀疏数据。
    kv键间分隔符 默认为英文逗号(,)。
    kv键内分隔符 默认为英文冒号(:)。
    执行调优 核心数 与参数每个核的内存大小搭配使用,取值范围为正整数。
    每个核的内存大小 与参数核心数搭配使用,单位为MB。
  • PAI命令方式
    PAI -name cluster_evaluation
        -project algo_public
        -DinputTableName=pai_cluster_evaluation_test_input
        -DselectedColNames=f0,f3
        -DmodelName=pai_kmeans_test_model
        -DoutputTableName=pai_ft_cluster_evaluation_out;
    参数 是否必选 描述 默认值
    inputTableName 输入表的名称。
    selectedColNames 输入表中,参与评估的列名,多个列以英文逗号(,)分隔。该参数必须与模型存储的特征列保持一致。 所有列
    inputTablePartitions 输入表中,参与训练的分区。支持以下格式:
    • Partition_name=value
    • name1=value1/name2=value2:多级格式
    说明 如果指定多个分区,则使用英文逗号(,)分隔。
    全表
    enableSparse 输入数据是否为稀疏格式,取值范围为{true,false} false
    itemDelimiter 稀疏格式KV对之间的分隔符。 英文逗号(,)
    kvDelimiter 稀疏格式keyvalue之间的分隔符。 英文冒号(;)
    modelName 输入的聚类模型。
    outputTableName 输出表。
    lifecycle 输出表的生命周期。
评估指标Calinski-Harabasz又称VRC(Variance Ratio Criterion),其计算公式如下。VRC公式
参数 描述
SSB 聚类之间的方差,定义如下。SSB其中:
  • k:聚类中心点的数量。
  • mi:聚类的中心点。
  • m:输入数据的均值。
SSW 聚类内的方差,定义如下。SSW其中:
  • k:聚类中心点的数量。
  • x:数据点。
  • ci:第i个聚类。
  • mi:聚类的中心点。
N 记录的总数量。
k 聚类中心点的数量。

聚类模型评估示例

  1. 使用SQL语句,生成测试数据。
    create table if not exists pai_cluster_evaluation_test_input as
    select * from
    (
      select 1 as id, 1 as f0,2 as f3 from dual
      union all
      select 2 as id, 1 as f0,3 as f3 from dual
      union all
      select 3 as id, 1 as f0,4 as f3 from dual
      union all
      select 4 as id, 0 as f0,3 as f3 from dual
      union all
      select 5 as id, 0 as f0,4 as f3 from dual
    )tmp;
  2. 使用PAI命令,构建聚类模型(以K均值聚类为例)。
    PAI -name kmeans
        -project algo_public
        -DinputTableName=pai_cluster_evaluation_test_input
        -DselectedColNames=f0,f3
        -DcenterCount=3
        -Dloop=10
        -Daccuracy=0.00001
        -DdistanceType=euclidean
        -DinitCenterMethod=random
        -Dseed=1
        -DmodelName=pai_kmeans_test_model
        -DidxTableName=pai_kmeans_test_idx
  3. 使用PAI命令,提交聚类模型评估组件的参数。
    PAI -name cluster_evaluation
        -project algo_public
        -DinputTableName=pai_cluster_evaluation_test_input
        -DselectedColNames=f0,f3
        -DmodelName=pai_kmeans_test_model
        -DoutputTableName=pai_ft_cluster_evaluation_out;
  4. 查看评估输出表pai_ft_cluster_evaluation_out,其可视化报告如下图所示。聚类模型评估可视化结果该图表与pai_ft_cluster_evaluation_out表中字段对应关系如下。
    表字段 可视化图表
    count 总记录数
    centerCount 聚类中心数
    calinhara Calinski Harabasz指标
    clusterCounts 各聚类包含的点数目

混淆矩阵

混淆矩阵(Confusion Matrix)适用于监督学习,与无监督学习中的匹配矩阵对应。在精度评价中,混淆矩阵主要用于比较分类结果和实际测量值,可以将分类结果的精度显示在一个矩阵中。

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    参数 描述
    原数据的标签列列名 支持数值类型。
    预测结果的标签列列名 如果未配置阈值,则该参数必选。
    阈值 大于该参数值的样本为正样本。
    预测结果的详细列列名 预测结果的标签列列名不能共存。如果已配置阈值,则该参数必选。
    正样本的标签值 如果已配置阈值,则该参数必选。
  • PAI命令方式
    • 未指定阈值
      pai -name confusionmatrix -project algo_public
          -DinputTableName=wpbc_pred
          -DoutputTableName=wpbc_confu
          -DlabelColName=label
          -DpredictionColName=prediction_result;
    • 指定阈值
      pai -name confusionmatrix -project algo_public
          -DinputTableName=wpbc_pred
          -DoutputTableName=wpbc_confu
          -DlabelColName=label
          -DpredictionDetailColName=prediction_detail
          -Dthreshold=0.8
          -DgoodValue=N;
    参数 是否必选 描述 默认值
    inputTableName 输入表的名称,即预测输出表。
    inputTablePartition 输入表的分区。 全表
    outputTableName 输出表的名称,用于存储混淆矩阵。
    labelColName 原始标签列的名称。
    predictionColName 预测结果列的名称。如果未配置threshold,则该参数必选。
    predictionDetailColName 预测结果详细列的名称。如果已配置threshold,则该参数必选。
    threshold 划分正样本的阈值。 0.5
    goodValue 二分类时,指定训练系数对应的标签值。如果已配置threshold,则该参数必选。
    coreNum 计算的核心数量。 系统自动分配
    memSizePerCore 每个核心的内存,单位为MB。 系统自动分配
    lifecycle 输出表的生命周期。

混淆矩阵示例

  1. 导入如下测试数据。
    id label prediction_result
    0 A A
    1 A B
    2 A A
    3 A A
    4 B B
    5 B B
    6 B A
    7 B B
    8 B A
    9 A A
  2. 构建如下实验,详情请参见算法建模混淆矩阵实验
  3. 配置混淆矩阵的参数(配置如下表格中的参数,其余参数使用默认值)。
    参数 描述
    原数据的标签列列名 选择label列。
    预测结果的标签列列名 选择prediction_result列。
  4. 运行实验,查看混淆矩阵组件的输出结果:
    • 单击混淆矩阵页签,查看输出的混淆矩阵。混淆矩阵示例输出
    • 单击比例矩阵页签,查看比例矩阵。
    • 单击统计信息页签,查看模型统计信息。混淆矩阵示例统计信息

多分类评估

多分类评估是指基于分类模型的预测结果和原始结果,评估多分类算法模型的优劣性,从而输出评估指标(例如Accuracy、Kappa及F1-Score)。

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 原分类结果列 可以选择原始标签列,分类数量不能大于1000。
    预测分类结果列 预测分类列,通常为prediction_result列。
    高级选项 如果选中高级选项复选框,则预测结果概率列参数生效。
    预测结果概率列 用于计算模型的Logloss,通常为prediction_detail列,且仅对随机森林模型有效。如果对其他模型设置该参数,则系统可能报错。
    执行调优 核心数 核内存分配搭配使用,默认为系统自动分配。
    核内存分配 每个核心的内存,单位为MB,默认为系统自动分配。
  • PAI命令方式
    PAI -name MultiClassEvaluation -project algo_public \
        –DinputTableName="test_input" \
        -DoutputTableName="test_output" \
        -DlabelColName="label" \
        -DpredictionColName="prediction_result" \
        -Dlifecycle=30;
    参数 是否必选 参数描述 默认值
    inputTableName 输入表的名称。
    inputTablePartitions 输入表的分区。 全表
    outputTableName 输出表的名称。
    labelColName 输入表原始标签列名。
    predictionColName 预测结果的标签列名。
    predictionDetailColName 预测结果的概率列,例如{“A”:0.2,“B”:0.3,“C”: 0.5}。
    lifecycle 输出表的生命周期。
    coreNum 核心数量。 系统自动计算
    memSizePerCore 每个核心的内存。 系统自动计算

多分类评估的输出说明

多分类评估组件输出的评估报告包括:
  • 总览
    汇总指标,其中MacroAveraged为每个标签指标的平均值。总览信息
  • 混淆矩阵多分类评估输出混淆矩阵
  • 比例矩阵
  • 统计信息
    按照One-VS-All的方式,计算每个标签的指标。多分类评估输出统计信息
多分类评估组件输出结果表的JSON格式如下。
{
    "LabelNumber": 3,
    "LabelList": ["A", "B", "C"],
    "ConfusionMatrix": [ // 混淆矩阵[actual][predict]。
        [100, 10, 20],
        [30, 50, 9],
        [7, 40, 90] ],
    "ProportionMatrix": [ // 比例矩阵(按行占比)[actual][predict]。
        [0.6, 0.2, 0.2],
        [0.3, 0.6, 0.1],
        [0.1, 0.4, 0.5] ],
    "ActualLabelFrequencyList": [ // 每个标签的真实数量。
        200, 300, 600],
    "ActualLabelProportionList": [ // 每个标签的真实占比。
        0.1, 0.2, 0.7],
    "PredictedLabelFrequencyList": [ // 预测的每个标签数量。
        300, 400, 400],
    "PredictedLabelProportionList": [ // 预测的每个标签占比。
        0.2, 0.1, 0.7],
    "OverallMeasures": {        // 汇总指标。
        "Accuracy": 0.70,
        "Kappa" : 0.3,
        "MacroList": {       // 每个标签的指标平均值。
            "Sensitivity": 0.4,
            "Specificity": 0.3,
        },
        "MicroList": {      // 根据每个标签的TP、TN、FP及FN之和,计算该指标。
            "Sensitivity": 0.4,
            "Specificity": 0.3,
        },
        "LabelFrequencyBasedMicro": { // 按照频率,计算每个标签指标的加权平均值。
            "Sensitivity": 0.4,
            "Specificity": 0.3,
        },
    },
    "LabelMeasuresList": [      // 每个标签的指标。
        {
            "Accuracy": 0.6,
            "Sensitivity": 0.4,
            "Specificity": 0.3,
            "Kappa": 0.3
        },
        {
            "Accuracy": 0.6,
            "Sensitivity": 0.4,
            "Specificity": 0.3,
            "Kappa": 0.3
        },
    ]
}

多分类评估示例

  1. 导入如下测试数据。
    id label prediction detail
    0 A A {“A”: 0.6, “B”: 0.4}
    1 A B {“A”: 0.45, “B”: 0.55}
    2 A A {“A”: 0.7, “B”: 0.3}
    3 A A {“A”: 0.9, “B”: 0.1}
    4 B B {“A”: 0.2, “B”: 0.8}
    5 B B {“A”: 0.1, “B”: 0.9}
    6 B A {“A”: 0.52, “B”: 0.48}
    7 B B {“A”: 0.4, “B”: 0.6}
    8 B A {“A”: 0.6, “B”: 0.4}
    9 A A {“A”: 0.75, “B”: 0.25}
  2. 构建实验,详情请参见算法建模多分类评估实验
  3. 配置多分类组件的参数(配置如下表格中的参数,其余参数使用默认值)。
    页签 参数 描述
    字段设置 原分类结果列 选择label列。
    预测分类结果列 输入prediction
    高级选项 选中高级选项复选框。
    预测结果概率列 输入detail
  4. 运行实验,查看多分类评估组件输出的评估报告:
    • 单击总览页签,查看总览信息。多分类评估示例输出总览
    • 单击混淆矩阵页签,查看混淆矩阵。
    • 单击比例矩阵页签,查看比例矩阵。
    • 单击统计信息页签,查看模型统计信息。多分类评估示例输出统计信息
    该评估报告对应的JSON文件如下。
    {
        "ActualLabelFrequencyList": [5,
            5],
        "ActualLabelProportionList": [0.5,
            0.5],
        "ConfusionMatrix": [[4,
                1],
            [2,
                3]],
        "LabelList": ["A",
            "B"],
        "LabelMeasureList": [{
                "Accuracy": 0.7,
                "Auc": 0.9,
                "F1": 0.7272727272727273,
                "FalseDiscoveryRate": 0.3333333333333333,
                "FalseNegative": 1,
                "FalseNegativeRate": 0.2,
                "FalsePositive": 2,
                "FalsePositiveRate": 0.4,
                "Kappa": 0.3999999999999999,
                "NegativePredictiveValue": 0.75,
                "Precision": 0.6666666666666666,
                "Sensitivity": 0.8,
                "Specificity": 0.6,
                "TrueNegative": 3,
                "TruePositive": 4},
            {
                "Accuracy": 0.7,
                "Auc": 0.9,
                "F1": 0.6666666666666666,
                "FalseDiscoveryRate": 0.25,
                "FalseNegative": 2,
                "FalseNegativeRate": 0.4,
                "FalsePositive": 1,
                "FalsePositiveRate": 0.2,
                "Kappa": 0.3999999999999999,
                "NegativePredictiveValue": 0.6666666666666666,
                "Precision": 0.75,
                "Sensitivity": 0.6,
                "Specificity": 0.8,
                "TrueNegative": 4,
                "TruePositive": 3}],
        "LabelNumber": 2,
        "OverallMeasures": {
            "Accuracy": 0.7,
            "Kappa": 0.3999999999999999,
            "LabelFrequencyBasedMicro": {
                "Accuracy": 0.7,
                "F1": 0.696969696969697,
                "FalseDiscoveryRate": 0.2916666666666666,
                "FalseNegative": 1.5,
                "FalseNegativeRate": 0.3,
                "FalsePositive": 1.5,
                "FalsePositiveRate": 0.3,
                "Kappa": 0.3999999999999999,
                "NegativePredictiveValue": 0.7083333333333333,
                "Precision": 0.7083333333333333,
                "Sensitivity": 0.7,
                "Specificity": 0.7,
                "TrueNegative": 3.5,
                "TruePositive": 3.5},
            "LogLoss": 0.4548640449724484,
            "MacroAveraged": {
                "Accuracy": 0.7,
                "F1": 0.696969696969697,
                "FalseDiscoveryRate": 0.2916666666666666,
                "FalseNegative": 1.5,
                "FalseNegativeRate": 0.3,
                "FalsePositive": 1.5,
                "FalsePositiveRate": 0.3,
                "Kappa": 0.3999999999999999,
                "NegativePredictiveValue": 0.7083333333333333,
                "Precision": 0.7083333333333333,
                "Sensitivity": 0.7,
                "Specificity": 0.7,
                "TrueNegative": 3.5,
                "TruePositive": 3.5},
            "MicroAveraged": {
                "Accuracy": 0.7,
                "F1": 0.7,
                "FalseDiscoveryRate": 0.3,
                "FalseNegative": 3,
                "FalseNegativeRate": 0.3,
                "FalsePositive": 3,
                "FalsePositiveRate": 0.3,
                "Kappa": 0.3999999999999999,
                "NegativePredictiveValue": 0.7,
                "Precision": 0.7,
                "Sensitivity": 0.7,
                "Specificity": 0.7,
                "TrueNegative": 7,
                "TruePositive": 7}},
        "PredictedLabelFrequencyList": [6,
            4],
        "PredictedLabelProportionList": [0.6,
            0.4],
        "ProportionMatrix": [[0.8,
                0.2],
            [0.4,
                0.6]]}