全部产品
Search
文档中心

人工智能平台 PAI:MaxCompute PS-SMART二分类最佳实践

更新时间:Mar 28, 2024

本文为您介绍如何通过提交一个使用MaxCompute计算资源的超参数调优实验,来运行PS-SMART二分类、预测和评估组件,以获取PS-SMART组件算法的较优超参数组合。

前提条件

步骤一:准备数据

本方案使用经过特征工程处理过的银行客户认购产品预测数据集,参考以下操作步骤准备训练数据集和测试数据集:

  1. 通过MaxCompute客户端执行以下SQL命令,分别创建表bank_train_data和bank_test_data。关于MaxCompute客户端的安装和配置,请参见使用本地客户端(odpscmd)连接

    create table bank_train_data(
    id bigint ,age double ,job double ,marital double ,education double ,default double ,housing double ,loan double ,contact double ,
    month double ,day_of_week double ,duration double ,campaign double ,pdays double ,previous double ,poutcome double ,emp_var_rate double ,
    cons_price_index double ,cons_conf_index double ,lending_rate3m double ,nr_employed double ,subscribe bigint
    );
    create table bank_test_data(
    id bigint ,age double ,job double ,marital double ,education double ,default double ,housing double ,loan double ,contact double ,
    month double ,day_of_week double ,duration double ,campaign double ,pdays double ,previous double ,poutcome double ,emp_var_rate double ,
    cons_price_index double ,cons_conf_index double ,lending_rate3m double ,nr_employed double ,subscribe bigint
    );
  2. 通过MaxCompute客户端的Tunnel命令,分别将以下训练数据集和测试数据集上传到表bank_train_data和bank_test_data中。关于Tunnel命令的使用方法,请参见Tunnel命令

    -- 将训练数据集上传到表bank_train_data中。其中xx/train_data.csv需要替换为train_data.csv所在的路径。
    tunnel upload  xx/train_data.csv bank_train_data;
    -- 将测试数据集上传到表bank_test_data中。其中xx/test_data.csv需要替换为test_data.csv所在的路径。
    tunnel upload  xx/test_data.csv bank_test_data;

步骤二:新建实验

进入新建实验页面,并按照以下操作步骤配置关键参数,其他参数配置详情,请参见新建实验。参数配置完成后,单击提交

  1. 设置执行配置。

    参数

    描述

    任务类型

    选择MaxCompute

    命令

    配置以下五个命令,按照顺序依次排列,后续会按顺序执行命令。

    • cmd1:使用准备好的测试数据,运行PS-SMART二分类训练,构建二分类模型。各个参数的配置说明,请参见PS-SMART二分类训练

      PAI -name ps_smart
          -project algo_public
          -DinputTableName='bank_train_data'
          -DmodelName='bi_ps_${exp_id}_${trial_id}'
          -DoutputTableName='bi_model_output_${exp_id}_${trial_id}'
          -DoutputImportanceTableName='bi_imp_${exp_id}_${trial_id}'
          -DlabelColName='subscribe'
          -DfeatureColNames='age,job,marital,education,default,housing,loan,contact,month,day_of_week,duration,campaign,pdays,previous,poutcome,emp_var_rate,cons_price_index,cons_conf_index,lending_rate3m,nr_employed'
          -DenableSparse='false'
          -Dobjective='binary:logistic'
          -Dmetric='error'
          -DfeatureImportanceType='gain'
          -DtreeCount='${tree_count}'
          -DmaxDepth='${max_depth}'
          -Dshrinkage="0.3"
          -Dl2="1.0"
          -Dl1="0"
          -Dlifecycle="3"
          -DsketchEps="0.03"
          -DsampleRatio="1.0"
          -DfeatureRatio="1.0"
          -DbaseScore="0.5"
          -DminSplitLoss="0"
    • cmd2:删除预测结果表。

      drop table if exists bi_output_${exp_id}_${trial_id};
    • cmd3:基于cmd1生成的分类模型,运行预测组件,来预测输入数据。各个参数的配置说明,请参见预测

      PAI -name prediction
          -project algo_public
          -DinputTableName='bank_test_data'
          -DmodelName='bi_ps_${exp_id}_${trial_id}'
          -DoutputTableName='bi_output_${exp_id}_${trial_id}'
          -DfeatureColNames='age,job,marital,education,default,housing,loan,contact,month,day_of_week,duration,campaign,pdays,previous,poutcome,emp_var_rate,cons_price_index,cons_conf_index,lending_rate3m,nr_employed'
          -DappendColNames='subscribe,age,job,marital,education,default,housing,loan,contact,month,day_of_week,duration,campaign,pdays,previous,poutcome,emp_var_rate,cons_price_index,cons_conf_index,lending_rate3m,nr_employed'
          -DenableSparse='false'
          -Dlifecycle='3';
    • cmd4:基于cmd3生成的预测结果,运行二分类评估组件,来评估二分类模型的优劣性。各个参数的配置说明,请参见二分类评估

      PAI -name evaluate -project algo_public
          -DoutputDetailTableName='bi_0804_${exp_id}_${trial_id}_outputDetailTable'
          -DoutputMetricTableName='bi_0804_${exp_id}_${trial_id}_outputMetricTable'
          -DlabelColName='subscribe'
          -DscoreColName='prediction_score'
          -DpositiveLabel='1'
          -DbinCount='1000'
          -DdetailColName='prediction_detail'
          -DlabelMatch='true'
          -DinputTableName='bi_output_${exp_id}_${trial_id}';
    • cmd5:从cmd4的评估结果表里,获取评估指标。

      INSERT OVERWRITE TABLE ps_smart_classification_metrics PARTITION(pt='${exp_id}_${trial_id}')
          SELECT /*+MAPJOIN(b,c,d)*/ REGEXP_EXTRACT(a.data_range, '\\\((.*?),') as threshold,
          a.recall, a.precision, a.f1_score, c.value as auc, d.value as ks
          FROM (SELECT recall, precision, f1_score, data_range, 'AUC' auc, 'KS' ks from bi_0804_${exp_id}_${trial_id}_outputDetailTable) a
          JOIN bi_0804_${exp_id}_${trial_id}_outputMetricTable b
          on b.name='F1 Score' AND a.f1_score=b.value
          JOIN bi_0804_${exp_id}_${trial_id}_outputMetricTable c
          ON c.name=a.auc
          JOIN bi_0804_${exp_id}_${trial_id}_outputMetricTable d
          ON d.name=a.ks;

    超参数

    每个超参数对应的约束类型和搜索空间配置如下:

    • tree_count:

      • 约束类型:choice。

      • 搜索空间:单击image.png,增加3个枚举值,分别为50、100和150。

    • max_depth:

      • 约束类型:choice。

      • 搜索空间:单击image.png,增加3个枚举值,分别为6、8和10。

    使用上述配置可以生成9种超参数组合,后续实验会分别为每种超参数组合创建一个Trial,在每个Trial中使用一组超参数组合来运行PS-SMART二分类组件和二分类评估组件。

  2. 设置Trial配置。

    参数

    描述

    指标类型

    选择table

    计算方式

    选择best

    指标权重

    配置以下指标权重:

    • key:recall、value:0.5

    • key:precision、value:0.25

    • key:auc、value:0.25

    指标来源

    配置为select * from ps_smart_classification_metrics where pt='${exp_id}_${trial_id}';

    优化方向

    选择越大越好

    模型名称

    配置为bi_ps_${exp_id}_${trial_id}

  3. 设置搜索配置。

    参数

    描述

    搜索算法

    选择TPE

    最大搜索次数

    配置为5。

    最大并发量

    配置为2。

步骤三:查看实验详情和运行结果

  1. 实验列表页面,单击实验名称,进入实验详情页面。image在该页面,您可以查看Trial的执行进度和状态统计,实验根据配置的搜索算法和最大搜索次数自动创建5个Trial。

  2. 单击Trial列表,您可以在该页面查看该实验自动生成的所有Trial列表,以及每个Trial的执行状态、最终指标和超参数组合。image根据配置的优化方向(越大越好),从上图可以看出,最终指标为0.688894对应的超参组合(tree_count:50;max_depth:8)较优。