本文为您介绍PAI-Studio提供的金融板块组件,包括分箱、数据转换模块、评分卡训练、评分卡预测及样本稳定指数(PSI)。

分箱

通过分箱组件可以进行特征离散化,即将连续的数据进行分段,使其变为多个离散化区间。分箱组件支持等频分箱、等宽分箱及自动分箱。PAI-Studio支持通过可视化或PAI命令方式,配置分箱组件的参数:
  • 可视化方式
    页签 参数 描述
    字段设置 特征列 支持STRING、BIGINT及DOUBLE类型。
    标签列 仅支持二分类。
    正例值 仅当标签列存在时才生效。
    选择分箱的参数来源 参数来源支持“参数设置”中的参数手动分箱或自定义Json
    是否保留没有在“特征列”中选择的字段 使用自定义分箱时,如果该参数选择,则未在特征列中选择的字段会原样保留,否则会删除未选择的字段。
    上传分箱和约束Json 选择分箱的参数来源取值为手动分箱或自定义Json时,该参数生效。
    追加分箱文件 如果此文件含有新的Feature,将会追加到原来的分箱结果中。如果是一样的Feature,将会以此文件中的为准。
    参数设置 分箱个数 配置为10,表示将连续特征离散化至10个区间中。
    自定义列分箱个数

    可以指定单个或多个字段的分箱数,会覆写总的分箱个数。如果自定义的列不在字段选择中,则多出的列也会进行计算。例如,字段选择为col0col1, 自定义分箱为col0:3,col2:5,当nDivide为10时,那么按照col0:3,col1:10,col2:5进行计算。

    取值格式为:字段名1:分箱个数, 字段名2:分箱个数

    自定义离散值个数阈值 格式为col0:3
    区间选择 支持左开右闭左闭右开区间。
    分箱方式 支持等频等宽自动分箱
    离散值个数阈值 如果小于该值,则分到“其它”分箱。
    执行调优 核心数 默认系统自动分配。
    每个核分配的内存数 默认系统自动分配。
  • PAI命令方式
    PAI -name binning
        -project algo_public
        -DinputTableName=input
        -DoutputTableName=output
    参数 描述 是否必选 默认值
    inputTableName 输入表的名称。
    outputTableName 输出表的名称。
    selectedColNames 输入表选择分箱的列。 除Label外的其他列,如果无Label,则选择全部。
    labelColumn Label所在的列。
    validTableName 表示binningMethod为auto时输入的验证表名。在auto模式下,该参数为必选。
    validTablePartitions 验证表选择的分区。 全表
    inputTablePartitions 输入表选择的分区。 全表
    inputBinTableName 输入的分箱表。
    selectedBinColNames 分箱表选择的列。
    positiveLabel 输出正样本的分类。 1
    nDivide 分箱的个数,取值为正整数。 10
    colsNDivide 自定义列的分箱个数,例如col0:3,col2:5。如果colsNDivide中选中的列不在selectedColNames中,则多出的列也会进行计算。例如,selectedColNamescol0,col1colsNDividecol0:3,col2:5nDivide为10时,则按照col0:3,col1:10,col2:5进行计算。
    isLeftOpen 选择区间为左开右闭或左闭右开,取值包括为:
    • {true}:左开右闭。
    • {false}:左闭右开。
    true
    stringThreshold 离散值为其他分箱的阈值。
    colsStringThreshold 自定义列的阈值,同colsNDivide
    binningMethod 分箱类型,取值包括:
    • quantile:等频分箱。
    • bucket:等宽分箱。
    • auto:当在quantile模式时,自动选择单调性的分箱。
    quantile
    lifecycle 输出表的生命周期,取值为正整数。
    coreNum 核心数,取值为正整数。 系统自动计算
    memSizePerCore 内存数,取值为正整数。 系统自动计算
分箱约束功能需要与评分卡训练组件配合使用。在评分卡训练过程中通过分箱进行特征工程,将特征离散化生成Dummy变量,并对训练过程中的每个Dummy变量的权重增加一定约束。各个约束项的含义如下:
  • 顺序升序约束:该特征的各个Dummy变量按照Index从小到大添加权重上升的约束,即Index越大,权重越大。
  • 顺序降序约束:该特征的各个Dummy变量按照Index从小到大添加权重下降的约束,即Index越大,权重越小。
  • 相等权重值:该特征两个Dummy变量的权重值相等的约束。
  • 权重值为0:该特征某个Dummy变量的权重值为0的约束。
  • 等于固定权重值:该特征某个Dummy变量的权重值等于固定浮点数值的约束。
  • WOE值顺序约束:该特征各个Dummy变量按照WOE值从小到大添加权重上升的约束,即WOE值越大,权重值越大。

数据转换模块

通过数据转换模块可以对数据进行归一化、离散化、Index化或WOE转换。PAI-Studio支持通过可视化或PAI命令方式,配置数据转换模块组件的参数:
  • 可视化方式
    页签 参数 描述
    字段设置 输入表选择的特征列 输入的特征列,默认选择全表。
    不进行转换的数据列 选中的列会原样输出,可以在此指定Label。
    数据转换的类型 支持的转换类型包括归一化离散化转换为WOE值Index
    默认WOE值

    仅当数据转换的类型取值为转换为WOE值时,该参数生效。

    如果配置了该参数,当样本值落入无WOE值的分箱时,使用该值进行替换。如果未配置该参数,则当样本值落入无WOE值的分箱时,算法报错。

    执行调优 核心数 使用的CPU Core数量,默认系统自动分配。
    每个核内存数 每个CPU Core所使用的内存大小,默认系统自动分配。
  • PAI命令方式
    PAI -name data_transform
    -project algo_public
    -DinputFeatureTableName=feature_table
    -DinputBinTableName=bin_table
    -DoutputTableName=output_table
    -DmetaColNames=label
    -DfeatureColNames=feaname1,feaname2
    参数 描述 是否必选 默认值
    inputFeatureTableName 输入特征数据表。
    inputBinTableName 输入分箱结果表。
    inputFeatureTablePartitions 输入特征表选择的分区。 全表
    outputTableName 输出表。
    featureColNames 输入表选择的特征列。 所有列
    metaColNames 不进行转换的数据列,选中的列会原样输出。可以在此列中指定Label及sample_id等。
    transformType 数据转换的类型,取值包括:
    • normalize:归一化。
    • dummy:离散化。
    • woe:转换为WOE值。
    dummy
    itemDelimiter 特征分隔符,仅在进行离散化时有效。 英文逗号(,)
    kvDelimiter KV分隔符,仅在进行离散化时有效。 英文冒号(:)
    lifecycle 输出表的生命周期。
    coreNum 使用的CPU Core数量。 系统自动计算
    memSizePerCore 每个CPU Core所使用的内存大小,单位为MB。 系统自动计算
归一化是指根据输入的分箱信息,将变量值转换为0~1之间,缺失值填充为0。具体的算法如下。
if feature_raw_value == null or feature_raw_value == 0 then
    feature_norm_value = 0.0
else
    bin_index = FindBin(bin_table, feature_raw_value)
    bin_width = round(1.0 / bin_count * 1000) / 1000.0
    feature_norm_value = 1.0 - (bin_count - bin_index - 1) * bin_width
通过数据转换模块进行不同类型的数据转换,其输出格式不同:
  • 归一化和WOE转换的输出为普通表。
  • 离散化将数据转换成Dummy变量时,输出为KV格式的表,生成的变量格式为${feaname}]\_bin\_${bin_id}。以sns变量为例,生成的变量如下:
    • 如果sns落入第二个桶中,则生成的变量为[sns]_bin_2
    • 如果sns为空,则落入空桶,生成的变量为[sns]_bin_null
    • 如果sns不为空,且未落入任何一个已经定义的桶中,则落入else桶,生成的变量为[sns]_bin_else

评分卡训练

评分卡是信用风险评估领域常用的建模工具,其原理是通过分箱输入将原始变量离散化后再使用线性模型(逻辑回归或线性回归等)进行模型训练,其中包含特征选择及分数转换等功能。同时也支持在训练过程中为变量添加约束条件。
说明 如果未指定分箱输入,则评分卡训练过程完全等价于一般的逻辑回归或线性回归。
以下介绍评分卡训练过程中的相关概念:
  • 特征工程
    评分卡与普通线性模型的最大区别在于进行线性模型训练之前会对数据进行一定的特征工程处理。本文中,评分卡提供了如下两种特征工程方法:
    • 先通过分箱组件将特征离散化,再将每个变量根据分箱结果进行One-Hot编码,分别生成N个Dummy变量(N为变量的分箱数量)。
      说明 使用Dummy变量变换时,每个原始变量的Dummy变量之间可以设置相关的约束,详情请参见。
    • 先通过分箱组件将特征离散化,再进行WOE转换,即使用变量落入的分箱所对应的WOE值替换变量的原始值。
  • 分数转换
    评分卡的信用评分等场景中,需要通过线性变换将预测得到的样本odds转换成分数,通常通过如下的线性变换实现。线性变换公式您可以通过如下三个参数指定线性变换关系:
    • scaledValue:给出一个分数的基准点。
    • odds:在给定的分数基准点处的odds值。
    • pdo(Point Double Odds):表示分数增长多少分时,odds值增长到双倍。
    例如,scaledValue=800,odds=50,pdo=25,则表示指定了直线中的如下两点。
    log(50)=a×800+b
    log(100)=a×825+b
    解出a和b,对模型中的分数进行线性变换即可得到变换后的变量分。
    Scaling信息由参数-Dscale指定,格式为JSON,示例如下。
    {"scaledValue":800,"odds":50,"pdo":25}
    -Dscale参数不为空时,需要同时配置scaledValueoddspdo的值。
  • 训练过程中增加约束
    评分卡训练过程支持对变量添加约束。例如指定某个bin所对应的分数为固定值,两个bin的分数满足一定比例,对bin之间的分数进行大小限制,或设置bin的分数按照bin的WOE值排序等。约束的实现依赖于底层带约束的优化算法,可以在分箱组件中通过可视化方式设置约束,设置完成后分箱组件会生成一个JSON格式的约束条件,并将其自动传递给下游连接的训练组件,详情请参见如下演示操作。设置约束系统支持如下六种JSON约束:
    • “<”:变量权重按照顺序满足升序的约束。
    • “>”:变量权重按照顺序满足降序的约束。
    • “=”:变量权重等于固定值。
    • “%”:变量之间的权重符定一定的比例关系。
    • “UP”:变量的权重约束上限。
    • “LO”:变量的权重约束下限。
    JSON约束以字符串的形式存储在单行单列(字符串类型)的表中,存储的JSON字符串示例如下。
    {
        "name": "feature0",
        "<": [
            [0,1,2,3]
        ],
        ">": [
            [4,5,6]
        ],
        "=": [
            "3:0","4:0.25"
        ],
        "%": [
            ["6:1.0","7:1.0"]
        ]
    }
  • 内置约束

    每个原始变量都有一个隐含约束,无需用户指定,即单个变量人群的分数平均值为0。通过该约束,模型截距项的scaled_weight即为整个人群的平均分。

  • 优化算法
    在高级选项中可以配置训练过程中使用的优化算法,系统支持如下四种优化算法:
    • L-BFGS:是一阶的优化算法,支持较大规模的特征数据级。该算法属于无约束的优化算法,会自动忽略约束条件。
    • Newton’s Method:牛顿法是经典的二阶算法,收敛速度快,准确度高。但是由于需要计算二阶Hessian Matrix,因此不适用于较大特征规模。该算法属于无约束的优化算法,会自动忽略约束条件。
    • Barrier Method:二阶的优化算法,在没有约束条件的情况下完全等价于牛顿法。该算法的计算性能和准确性与SQP差别不大,通常建议选择SQP。
    • SQP

      二阶的优化算法,在没有约束条件的情况下完全等价于牛顿法。该算法的计算性能和准确性与Barrier Method差别不大,通常建议选择SQP。

    说明
    • L-BFGS和Newton’s Method均属于无约束的优化算法,Barrier Method和SQP属于带约束的优化算法。
    • 如果不了解优化算法,建议将优化算法配置为”自动选择“,系统会自动根据用户任务的数据规模和约束情况选择最合适的优化算法。
  • 特征选择
    训练模块支持Stepwise特征选择功能。Stepwise是一种前向选择和后向选择的融合,即每次进行前向特征选择将一个新变量加入模型后,需要对已经进入模型的变量进行一次后向选择,以移除显著性不满足需求的变量。由于同时支持多种目标函数和多种特征变换方法,因此Stepwise特征选择过程支持如下多种选择标准:
    • 边缘贡献(Marginal Contribution):适用于所有目标函数和特征工程方法。

      模型A中不包含变量X,模型B包含所有A的变量,且包含变量X。两个训练模型最终收敛时所对应目标函数的差值,即为变量X在模型B中所有变量之间的边缘贡献度。在特征工程为Dummy变换的场景中,原始变量的X边缘贡献度定义为两个模型分别包含和不包含该变量的所有Dummy变量的目标函数之差。因此,使用边缘贡献度进行特征选择支持所有的特征工程方法。

      该方法的优点是比较灵活,不局限于某一种模型,直接选择使得目标函数更优的变量进入模型。缺点是边缘贡献度不同于统计显著性,统计显著性通常选择0.05为阈值,而边缘贡献度新用户没有一个绝对的概念阈值,建议将其设置为10E-5。

    • 评分检验(Score Test):仅支持WOE转换或无特征工程的逻辑回归选择。

      前向选择过程中,首先训练一个仅有截距项的模型,在之后的每一步迭代中,分别对未进入模型的变量计算其评分卡方统计量(Score Chi-Square),然后将评分卡方统计量最大的变量选入模型。同时,根据卡方分布计算该统计量所对应的显著性P Value。如果评分卡方统计量最大的变量其P Value大于用户指定的进入模型的最大显著性阈值(slentry),则不会将该变量纳入模型,并停止选择过程。

      完成一轮前向选择后,将对已经选中进入模型的变量进行一轮后向选择。后向选择过程中,对于已经进入模型中的变量分别计算其对应的沃尔德卡方统计量(Wald Chi-Square),并计算其对应的显著性P Value。如果P Value大于用户指定的移除模型的最大显著性阈值(slstay),则从模型中移除该变量,并继续进行下一轮迭代选择。

    • F检验(F Test):仅支持WOE转换或无特征工程的线性回归选择。

      前向选择过程中,首先训练一个仅有截距项的变量,在之后的每一步迭代中,分别对未进入模型的变量计算其F Value。F Value的计算与边缘贡献度的计算类似,需要训练两个模型以计算一个变量的F Value。F Value符合F分布,可以根据其F分布的概率密度函数求得其对应的显著性P Value。如果P Value大于用户指定的进入模型的最大显著性阈值(slentry),则不会将变量纳入模型,并停止选择过程。

      后向选择过程也是使用F Value计算显著性,其过程与评分检验类似。

  • 强制选择加入模型的变量
    进行特征选择之前,可以设置强制进入模型的变量,被选中的变量不参与前向和后向的特征选择过程。无论选中的变量其显著性取值如何,都会直接进入模型。您可以在命令行中通过-Dselected参数指定迭代次数和显著性阈值,格式为JSON,示例如下。
    {"max_step":2, "slentry": 0.0001, "slstay": 0.0001}
    如果-Dselected参数为空或max_step为0,则表示正常的训练流程,不进行特征选择。
PAI-Studio支持通过可视化(详见评分卡训练示例)或PAI命令的方式配置评分卡训练组件的参数,使用PAI命令的方式如下。
pai -name=linear_model -project=algo_public
    -DinputTableName=input_data_table
    -DinputBinTableName=input_bin_table
    -DinputConstraintTableName=input_constraint_table
    -DoutputTableName=output_model_table
    -DlabelColName=label
    -DfeatureColNames=feaname1,feaname2
    -Doptimization=barrier_method
    -Dloss=logistic_regression
    -Dlifecycle=8
参数 描述 是否必选 默认值
inputTableName 输入特征数据表。
inputTablePartitions 输入特征表选择的分区。 全表
inputBinTableName 输入分箱结果表。如果该表指定,则先自动根据该表的分箱规则对原始特征进行离散化,再进行训练。
featureColNames 输入表选择的特征列。 选择全部,自动排除Label列。
labelColName 目标列。
outputTableName 输出模型表。
inputConstraintTableName 输入的JSON格式约束条件,存储在表的一个单元中。
optimization 优化类型,支持的类型包括:
  • lbfgs
  • newton
  • barrier_method
  • sqp
  • auto
sqpbarrier_method支持约束,auto即为根据用户数据和相关参数自动选择合适的优化算法。如果您对优化算法不太了解,建议使用auto
auto
loss Loss类型,支持logistic_regressionleast_square类型。 logistic_regression
iterations 优化的最大迭代次数。 100
l1Weight L1正则的参数权重,仅lbfgs优化算法支持L1 Weight。 0
l2Weight L2正则的参数权重。 0
m lbfgs优化过程中的历史长度,仅对lbfgs优化算法有效。 10
scale 评分卡对Weight进行Scale的信息。
selected 评分卡特征选择功能。
convergenceTolerance 收敛条件。 1e-6
positiveLabel 正样本的分类。 1
lifecycle 输出表的生命周期。
coreNum 核心数。 系统自动计算
memSizePerCore 内存数,单位为MB。 系统自动计算
评分卡模型的输出为一个Model Report,其中包含了变量的分箱信息、分箱的约束信息、WOE及Marginal Contribution等基本的统计指标。PAI Web端展示的评分卡模型评估报告的相关列描述如下所示。
列名 列类型 描述
feaname STRING 特征名称。
binid BIGINT 分箱ID。
bin STRING 分箱描述,用于表明该分箱的值域。
constraint STRING 训练时增加到该分箱的约束条件。
weight DOUBLE 训练完成后所对应的分箱变量权重,或未指定分箱输入的非评分卡模型,该项直接对应模型变量权重。
scaled_weight DOUBLE 评分卡模型训练过程中指定分数转换信息后,将分箱变量权重经过线性变换得到的分数值。
woe DOUBLE 统计指标:训练集上该分箱的WOE值。
contribution DOUBLE 统计指标:训练集上该分箱的Marginal Contribution值。
total BIGINT 统计指标:训练集上该分箱的总样本数。
positive BIGINT 统计指标:训练集上该分箱的正样本数。
negative BIGINT 统计指标:训练集上该分箱的负样本数。
percentage_pos DOUBLE 统计指标:训练集上该分箱的正样本数占总正样本的比例。
percentage_neg DOUBLE 统计指标:训练集上该分箱的负样本数占总负样本的比例。
test_woe DOUBLE 统计指标:测试集上该分箱的WOE值。
test_contribution DOUBLE 统计指标:测试集上该分箱的Marginal Contribution值。
test_total BIGINT 统计指标:测试集上该分箱的总样本数。
test_positive BIGINT 统计指标:测试集上该分箱的正样本数。
test_negative BIGINT 统计指标:测试集上该分箱的负样本数。
test_percentage_pos DOUBLE 统计指标:测试集上该分箱的正样本数占总正样本的比例。
test_percentage_neg DOUBLE 统计指标:测试集上该分箱的负样本数占总负样本的比例。

评分卡训练示例

推荐通过PAI Web(可视化方式)使用评分卡训练组件,如下是一个简单的评分卡Stepwise特征选择、特征WOE变换及逻辑回归Stepwise特征选择的对比演示。Stepwise特征选择、特征WOE变换及逻辑回归Stepwise特征选择的对比如下是一个简单的评分卡训练、特征WOE变换及逻辑回归的对比演示。评分卡训练、特征WOE变换及逻辑回归的对比如果输入训练组件中连接测试集,则输出的模型报告中会同时输出模型在测试集上的统计指标,例如WOE及MC等。如下是一个简单的带测试集的训练演示。带测试集的训练演示

评分卡预测

评分卡预测组件对原始数据根据评分卡训练组件产出的模型结果进行预测打分,PAI-Studio支持通过可视化或PAI命令配置评分卡预测组件的参数:
  • 可视化方式
    页签 参数 描述
    字段设置 特征列 选择用于预测的原始特征列,默认选择全部。
    原样添加到结果表 选择不进行任何处理,直接附加到预测结果表中的列。例如ID列和目标列等。
    输出变量分 是否输出每个特征变量所对应的分数,最终的预测总得分为截距项的得分加所有的变量分。
    执行调优 核数目 使用的CPU Core数量,默认系统自动分配。
    每个核的内存大小 每个CPU Core所用的内存大小,默认系统自动分配。
  • PAI命令方式
    pai -name=lm_predict
        -project=algo_public
        -DinputFeatureTableName=input_data_table
        -DinputModelTableName=input_model_table
        -DmetaColNames=sample_key,label
        -DfeatureColNames=fea1,fea2
        -DoutputTableName=output_score_table
    参数 描述 是否必选 默认值
    inputFeatureTableName 输入特征数据表。
    inputFeatureTablePartitions 输入特征表选择的分区。 全表
    inputModelTableName 输入的模型表。
    featureColNames 输入表选择的特征列。 所有列
    metaColNames 不进行转换的数据列,选中的列会原样输出。可以在此指定Lable和sample_id等。
    outputFeatureScore 预测结果中是否输出变量分,取值包括:
    • true:输出变量分。
    • false:不输出变量分。
    false
    outputTableName 输出预测结果表。
    lifecycle 输出表的生命周期。
    coreNum 核心数。 默认自动计算
    memSizePerCore 内存大小,单位为MB。 默认自动计算
评分卡预测组件输出的打分表示例如下。打分表示例其中churn列为用户选择的原样添加到结果表中的列,与预测结果无关。其它三列为预测结果列,其含义如下表所示。
列名 列类型 列描述
prediction_score DOUBLE 预测分数列。线性模型中特征值和模型权重值直接相乘相加的结果,对应到评分卡模型中,如果模型进行了分数转换,则该分数输出转换后的得分。
prediction_prob DOUBLE 二分类场景中预测得到的正例概率值,原始得分(未经分数转换)经过Sigmoid变换后得到该值。
prediction_detail STRING 用JSON格式描述的各类别概率值,其中0表示负类,1表示正类。例如{“0”:0.1813110520,”1”:0.8186889480}

样本稳定指数(PSI)

样本稳定指数(PSI)是衡量样本变化所产生的偏移量的一种重要指标,通常用于衡量样本的稳定程度。例如样本在两个月份之间的变化是否稳定,如果变量的PSI值小于0.1,则表示变化不太显著。如果PSI值在0.1到0.25之间,则表示有比较显著的变化。如果PSI值大于0.25,则表示变量变化比较剧烈,需要特殊关注。

通过画图的方法可以衡量样本在不同时刻的稳定性,即将待比较的变量离散化成N个分箱,然后计算样本分别在各个分箱中的数量及比例,并以柱状图的形式呈现出来,如下图所示。柱状图该方法可以直观地查看某个变量在两批样本上是否有剧烈的变化,但是无法量化,从而无法实现对样本稳定性的自动监控。因此PSI就显得尤为重要,PSI的计算公式如下。PSI计算公式
PAI-Studio支持通过可视化或PAI命令方式,配置样本稳定指数(PSI)组件的参数:
  • 可视化方式
    页签 参数 描述
    字段设置 要计算PSI指标的特征 需要进行PSI指标计算的特征列。
    执行调优 核心数 使用的CPU Core数量,默认系统自动分配。
    内存数 每个CPU Core使用的内存大小,默认系统自动分配。
  • PAI命令方式
    PAI -name psi
    -project algo_public
    -DinputBaseTableName=psi_base_table
    -DinputTestTableName=psi_test_table
    -DoutputTableName=psi_bin_table
    -DinputBinTableName=pai_index_table
    -DfeatureColNames=fea1,fea2,fea3
    -Dlifecycle=7
    参数 描述 是否必选 默认值
    inputBaseTableName 输入基础表表名,计算测试表在基础表的基础上产生的偏移量。
    inputBaseTablePartitions 输入基础表分区。 全表
    inputTestTableName 输入测试表的名称,计算测试表在基础表的基础上产生的偏移量。
    inputTestTablePartitions 输入测试表分区。 全表
    inputBinTableName 输入分箱结果表的名称。
    featureColNames 需要计算PSI指标的特征列。 全表
    outputTableName 输出的指标表。
    lifecycle 输出表的生命周期。
    coreNum 使用的CPU Core数量。 系统自动分配
    memSizePerCore 每个CPU Core使用的内存大小,单位为MB。 系统自动分配

样本稳定指数(PSI)示例

使用PSI之前需要对特征数据进行分箱,因此需要一个分箱组件。如下图使用的示例,PSI组件分别连接待比较的两个样本数据集,再连接一个分箱组件。只需要配置要计算PSI指标的特征,即可进行PSI计算。PSI示例PSI计算的结果如下图所示。PSI结果