特征工程

转自:

https://www.alibabacloud.com/help/zh/doc-detail/69558.htm#%E7%89%B9%E5%BE%81%E5%BC%82%E5%B8%B8%E5%B9%B3%E6%BB%91

特征工程

更新时间: 2018-05-02

目录

主成分分析

  • 主成分分析算法(PCA)利用主成分分析方法,实现降维和降噪的功能,PCA算法原理见wiki
  • 目前支持稠密数据格式。

PAI 命令

 
  1. PAI -name PrinCompAnalysis
  2. -project algo_public
  3. -DinputTableName=bank_data
  4. -DeigOutputTableName=pai_temp_2032_17900_2
  5. -DprincompOutputTableName=pai_temp_2032_17900_1
  6. -DselectedColNames=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed
  7. -DtransType=Simple
  8. -DcalcuType=CORR
  9. -DcontriRate=0.9;

参数说明

参数名称 参数描述 参数值可选项 默认值
inputTableName 必选,进行主成分分析的输入表 NA NA
eigOutputTableName 必选,特征向量与特征值的输出表 NA NA
princompOutputTableName 必选,进行主成分降维降噪后的结果输出表 NA NA
selectedColNames 必选,参与主成分分析运算的特征列 NA NA
transType 可选,原表转换为主成分表的方式 支持Simple、Sub-Mean、Normalization Simple
calcuType 可选,对原表进行特征分解的方式 支持CORR、COVAR_SAMP、COVAR_POP CORR
contriRate 可选,降维后数据信息保留的百分比 (0,1) 0.9
remainColumns 可选,降维表保留原表的字段 NA NA

输出示例

  • 降维后的数据表,如下图所示。
    特征工程

  • 特征值和特征向量表,如下图所示。
    特征工程

特征尺度变换

  • 支持常见的尺度变化函数包括log2、log10、ln、abs、sqrt。
  • 支持稠密或稀疏数据格式。

PAI 命令

 
  1. PAI -name fe_scale_runner -project algo_public
  2. -Dlifecycle=28
  3. -DscaleMethod=log2
  4. -DscaleCols=nr_employed
  5. -DinputTable=pai_dense_10_1
  6. -DoutputTable=pai_temp_2262_20380_1;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 NA NA
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2。如果指定多个分区,中间用“,”分开 NA 输入表的所有partition
outputTable 必选,尺度缩放后结果表 NA NA
scaleCols 必选,勾选需要缩放的特征,稀疏特征自动化筛选,只能勾选数值类特征 NA NA
labelCol 可选,标签字段。如果设置了该参数,可视化特征到目标变量的x-y分布直方图 NA NA
categoryCols 可选,将勾选的字段视作枚举特征处理,不支持缩放 NA NA
scaleMethod 可选,缩放方法 支持log2、log10、ln、abs、sqrt log2
scaleTopN 当scaleCols没有勾选时,自动挑选的TopN个需要缩放特征特征,默认10 正整数 10
isSparse 是否是k:v的稀疏特征,可选,默认稠密数据 ture/false false
itemSpliter 稀疏特征item分隔符,可选,默认逗号 字符 “,”
kvSpliter 稀疏特征item分隔符,可选,默认冒号 字符 “:”
lifecycle 结果表生命周期,可选,默认7 正整数 7

实例

输入数据

 
  1. create table if not exists pai_dense_10_1 as
  2. select
  3. nr_employed
  4. from bank_data limit 10;

参数配置

尺度变化特征选择nr_employed,只支持数值类特征。
尺度变化函数选择log2,如下图所示。
特征工程

运行结果

nr_employed
12.352071021075528
12.34313018339218
12.285286613666395
12.316026916036957
12.309533196497519
12.352071021075528
12.316026916036957
12.316026916036957
12.309533196497519
12.316026916036957

特征离散

  • 支持等距离散、等频离散、基于Gini增益离散、基于熵增益离散,默认为等距离散。
  • 支持稠密或稀疏数据格式。

PAI 命令

 
  1. PAI -name fe_discrete_runner -project algo_public
  2. -DdiscreteMethod=Isofrequecy Discretization
  3. -Dlifecycle=28
  4. -DmaxBins=5
  5. -DinputTable=pai_dense_10_1
  6. -DdiscreteCols=nr_employed
  7. -DoutputTable=pai_temp_2262_20382_1;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 NA NA
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开 NA 输入表的所有partition
outputTable 必选,离散后结果表 NA NA
discreteCols 必选,勾选需要离散的特征,如果是稀疏特征会自动化筛选 NA “”
labelCol 可选,标签字段,如果设置了该标签列,可视化特征到目标变量的x-y分布直方图 NA NA
categoryCols 可选,将勾选的字段视作枚举特征处理,不支持离散 NA 默认为空
discreteMethod 可选,离散方法 目前支持Isometric Discretization(等距离散)、Isofrequecy Discretization(等频离散)、Gini-gain-based Discretization(基于Gini增益离散)、Entropy-gain-based Discretization(基于熵增益离散) Isometric Discretization
discreteTopN 当discreteCols没有勾选时,自动挑选的TopN个需要离散特征特征,默认10 正整数 10
maxBins 离散区间大小,默认100 大于1的正整数 100
isSparse 是否是k:v的稀疏特征,可选,默认稠密数据 true/false false
itemSpliter 稀疏特征item分隔符,可选,默认逗号 字符 “,”
kvSpliter 稀疏特征item分隔符,可选,默认冒号 字符 “:”
lifecycle 结果表生命周期,可选,默认7 正整数 7

实例

输入数据

 
  1. create table if not exists pai_dense_10_1 as
  2. select
  3. nr_employed
  4. from bank_data limit 10;

参数配置

输入数据为pai_dense_10_1。
离散的特征选择nr_employed离散方法选择等距离散离散区间5,如下图所示。
特征工程

运行结果

nr_employed
4.0
3.0
1.0
3.0
2.0
4.0
3.0
3.0
2.0
3.0

特征异常平滑

该组件可以将输入特征中含有异常的数据平滑到一定区间,支持稀疏和稠密数据格式。
说明:特征平滑组件只是将异常取值的特征值修正成正常值,本身不过滤或删除任何记录,输入数据维度和条数都不变。

平滑方法包括Zscore平滑、百分位平滑和阈值平滑,功能如下:

  • Zscore平滑:如果特征分布遵循正态分布,那么噪音一般集中在-3×alpha和3×alpha之外,ZScore是将该范围的数据平滑到[-3×alpha,3×alpha]之间。
    例如某个特征遵循正态分布,均值为0,标准差为3,因此-10的特征值会被识别为异常而修正为-3×3+0,即为-9。同理10会被修正为3×3+0,即为9,如下图所示。
    特征工程

  • 百分位平滑: 将分布在[minPer, maxPer]分位之外的数据平滑到minPer和maxPer这两个分位点。
    例如age特征取值0~200,设置minPer为0,maxPer为50%,那么在0~100之外的特征取值都会被修正成0或100。

  • 阈值平滑: 将分布在[minThresh, maxThresh]之外的数据平滑到minThresh和maxThresh这两个数据点。
    例如age特征取值0~200,设置minThresh为10,maxThresh为80,那么在0~80之外的特征取值都会被修正成0或80。

PAI 命令

 
  1. PAI -name fe_soften_runner -project algo_public
  2. -DminThresh=5000
  3. -Dlifecycle=28
  4. -DsoftenMethod=min-max-thresh
  5. -DsoftenCols=nr_employed
  6. -DmaxThresh=6000
  7. -DinputTable=pai_dense_10_1
  8. -DoutputTable=pai_temp_2262_20381_1;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 NA NA
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开 NA 输入表的所有partition
outputTable 必选,平滑后结果表 NA NA
labelCol 可选,标签字段,如果设置了该标签列,可视化特征到目标变量的x-y分布直方图 NA 默认为空
categoryCols 可选,将勾选的字段视作枚举特征处理 NA 默认为空
softenCols 必选,勾选需要平滑的特征,但特征是稀疏特征时会自动化筛选 NA NA
softenMethod 可选,平滑方法 支持ZScore平滑、min-max-thresh(阈值平滑)、min-max-per(百分位平滑) ZScore
softenTopN 当softenCols没有勾选时,自动挑选TopN个需要平滑的特征 正整数 10
cl 置信水平,当平滑方法是ZScore时生效 NA 10
minPer 最低百分位,当平滑方法是min-max-per时生效 NA 0.0
maxPer 最高百分位,当平滑方法是min-max-per时生效 NA 1.0
minThresh 阈值最小值,默认-9999,表示不设置,当平滑方法是min-max-thresh时生效 NA -9999
maxThresh 阈值最大值,默认-9999,表示不设置,当平滑方法是min-max-thresh时生效 NA -9999
isSparse 是否是k:v的稀疏特征,可选,默认稠密数据 true/false false
itemSpliter 稀疏特征item分隔符,可选,默认逗号 字符 “,”
kvSpliter 稀疏特征item分隔符,可选,默认冒号 字符 “:”
lifecycle 结果表生命周期,可选,默认7 正整数 7

实例

输入数据

 
  1. create table if not exists pai_dense_10_1 as
  2. select
  3. nr_employed
  4. from bank_data limit 10;
nr_employed
5228.1
5195.8
4991.6
5099.1
5076.2
5228.1
5099.1
5099.1
5076.2
5099.1

参数配置

平滑特征列选择nr_employed,参数设置中平滑方法选择阈值平滑阈值下限为5000,阈值上限为6000,如下图所示。
特征工程

运行结果

nr_employed
5228.1
5195.8
5000.0
5099.1
5076.2
5228.1
5099.1
5099.1
5076.2
5099.1

随机森林特征重要性

使用原始数据和随机森林模型,计算特征重要性。

PAI 命令

 
  1. pai -name feature_importance -project algo_public
  2. -DinputTableName=pai_dense_10_10
  3. -DmodelName=xlab_m_random_forests_1_20318_v0
  4. -DoutputTableName=erkang_test_dev.pai_temp_2252_20319_1
  5. -DlabelColName=y
  6. - DfeatureColNames="pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign,poutcome"
  7. -Dlifecycle=28 ;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTableName 必选,输入表 NA NA
outputTableName 必选,输出表 NA NA
labelColName 必选,label所在的列 NA NA
modelName 必选,输入的模型名 NA NA
featureColNames 可选,输入表选择的特征 NA 默认除label外的其他列
inputTablePartitions 可选,输入表选择的分区 NA 默认选择全表
lifecycle 可选,输出表的生命周期 正整数 默认不设置
coreNum 可选,核心数 正整数 默认自动计算
memSizePerCore 可选,内存数 正整数 默认自动计算

实例

输入数据

 
  1. drop table if exists pai_dense_10_10;
  2. creat table if not exists pai_dense_10_10 as
  3. select
  4. age,campaign,pdays, previous, poutcome, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  5. from bank_data limit 10;

参数配置

实验流程图如下图所示,数据源为pai_dense_10_10。y为随机森林的标签列,其他列为特征列。强制转换列选择agecampaign,表示将这两列作为枚举特征处理,其他采用默认参数。
特征工程

运行结果

colname gini entropy
age 0.06625000000000003 0.13978726292803723
campaign 0.0017500000000000003 0.004348515545596772
cons_conf_idx 0.013999999999999999 0.02908409497018851
cons_price_idx 0.002 0.0049804499913461255
emp_var_rate 0.014700000000000003 0.026786360680260933
euribor3m 0.06300000000000003 0.1321936348846039
nr_employed 0.10499999999999998 0.2203227248076733
pdays 0.0845 0.17750329234397513
poutcome 0.03360000000000001 0.07050327193845542
previous 0.017700000000000004 0.03810381005801592

运行完成后,在随机森林特征重要性组件上右键单击,选择查看分析报告,结果如下图所示。

特征工程

GBDT特征重要性

计算梯度渐进决策树(GBDT)特征重要性。

PAI 命令

 
  1. pai -name gbdt_importance -project algo_public
  2. -DmodelName=xlab_m_GBDT_LR_1_20307_v0
  3. -Dlifecycle=28
  4. -DoutputTableName=pai_temp_2252_20308_1
  5. -DlabelColName=y
  6. -DfeatureColNames=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign
  7. -DinputTableName=pai_dense_10_9;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTableName 必选,输入表 NA NA
outputTableName 必选,输出表 NA NA
labelColName 必选,label所在的列 NA NA
modelName 必选,输入的模型名 NA NA
featureColNames 可选,输入表选择的特征 NA 默认除label外的其他列
inputTablePartitions 可选,输入表选择的分区 NA 默认选择全表
lifecycle 可选,输出表的生命周期 正整数 默认不设置
coreNum 可选,核心数 正整数 默认自动计算
memSizePerCore 可选,内存数 正整数 默认自动计算

实例

输入数据

 
  1. drop table if exists pai_dense_10_9;
  2. create table if not exists pai_dense_10_9 as
  3. select
  4. age,campaign,pdays, previous, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  5. from bank_data limit 10;

参数配置

实验流程图如下图所示,输入数据为pai_dense_10_9。y为GBDT二分类组件的标签列,其他字段作为特征列,组件参数配置中叶节点最小样本数配置为1

特征工程

运行结果

colname feature_importance
age 0.004667214954427797
campaign 0.001962038566773853
cons_conf_idx 0.04857761873887033
cons_price_idx 0.01925292649801252
emp_var_rate 0.044881269590771274
euribor3m 0.025034606434306696
nr_employed 0.036085457464908766
pdays 0.639121250405536
previous 0.18041761734639272

运行完成后,在GBDT特征重要性组件上右键单击,选择查看分析报告,结果如下图所示。

特征工程

线性模型特征重要性

计算线性模型的特征重要性,包括线性回归和二分类逻辑回归,支持稀疏和稠密数据格式。

PAI 命令

 
  1. PAI -name regression_feature_importance -project algo_public
  2. -DmodelName=xlab_m_logisticregressi_20317_v0
  3. -DoutputTableName=pai_temp_2252_20321_1
  4. -DlabelColName=y
  5. -DfeatureColNames=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign
  6. -DenableSparse=false -DinputTableName=pai_dense_10_9;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTableName 必选,输入表 NA NA
outputTableName 必选,输出表 NA NA
modelName 必选,输入的模型名 NA NA
labelColName 必选,label所在列 NA NA
feaureColNames 可选,输入表选择的特征 NA 默认除label外的其他列
inputTablePartitions 可选,输入表选择的分区 NA 默认选全表
enableSparse 可选,输入表数据是否为稀疏格式 true/false false
itemDelimiter 可选,当输入表数据为稀疏格式时,kv间的分割符 字符 空格
kvDelimiter 可选,当输入表数据为稀疏格式时,key和value的分割符 字符 冒号
lifecycle 可选,输出表的生命周期 正整数 默认不设置
coreNum 可选,核心数 正整数 默认自动计算
memSizePerCore 可选,内存数 正整数 默认自动计算

实例

输入数据

 
  1. create table if not exists pai_dense_10_9 as
  2. select
  3. age,campaign,pdays, previous, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  4. from bank_data limit 10;

参数配置

实验流程图如下图所示,y为逻辑回归多分类组件的标签列,剩余字段为特征列。其他参数采用默认值。

特征工程

运行结果

colname weight importance
pdays 0.033942600256583334 16.31387797440866
previous 0.00004248130342485344 0.000030038817725357177
emp_var_rate 0.00006720242617694611 0.00010554561260753949
cons_price_idx 0.00012311047229142307 0.00006581255124425219
cons_conf_idx 0.00017227965471819213 0.0008918770542818432
euribor3m 0.00006113758212679113 0.00010427128177450988
nr_employed 0.0034541377310490697 0.26048098230126043
age 0.00009618162708080744 0.0009267659744232966
campaign 0.000019142551785274455 0.000041793353660529855

指标计算公式

列名 公式
weight abs(w_)
importance abs(w_j) * STD(f_i)

运行完成后,在线性模型特征重要性组件上右键单击,选择查看分析报告,结果如下图所示。

特征工程

偏好计算

给定用户明细行为特征数据,自动计算用户对特征值的偏好得分。

  • 输入表包含用户id和用户明细行为特征输入。假设在口碑到店场景,某用户2088xxx1在3个月内吃了两次川菜,一次西式快餐,那么输入表形式如下:

    user_id cate
    2088xxx1 川菜
    2088xxx1 川菜
    2088xxx1 西式快餐
  • 输出表为用户对川菜和西式快餐的偏好得分,形式如下:

    user_id cate
    2088xxx1 川菜:0.0544694,西式快餐:0.0272347

PAI 命令

 
  1. pai -name=preference
  2. -project=algo_public
  3. -DInputTableName=preference_input_table
  4. -DIdColumnName=user_id
  5. -DFeatureColNames=cate
  6. -DOutputTableName=preference_output_table
  7. -DmapInstanceNum=2
  8. -DreduceInstanceNum=1;

算法参数

参数key名称 参数描述 必/选填 默认值
InputTableName 输入表名 必填 NA
IdColumnName 用户id列 必填 NA
FeatureColNames 用户特征列 必填 NA
OutputTableName 输出表名 必填 NA
OutputTablePartitions 输出表分区 选填 NA
mapInstanceNum mapper数量 选填 2
reduceInstanceNum reducer数量 选填 1

实例

测试数据

新建数据SQL

 
  1. drop table if exists preference_input_table;
  2. create table preference_input_table as
  3. select
  4. *
  5. from
  6. (
  7. select '2088xxx1' as user_id, '川菜' as cate from alipaydw.dual
  8. union all
  9. select '2088xxx1' as user_id, '川菜' as cate from alipaydw.dual
  10. union all
  11. select '2088xxx1' as user_id, '西式快餐' cate from alipaydw.dual
  12. union all
  13. select '2088xxx3' as user_id, '川菜' as cate from alipaydw.dual
  14. union all
  15. select '2088xxx3' as user_id, '川菜' as cate from alipaydw.dual
  16. union all
  17. select '2088xxx3' as user_id, '西式快餐' as cate from alipaydw.dual
  18. ) tmp;

运行结果

 
  1. +------------+------------+
  2. | user_id | cate |
  3. +------------+------------+
  4. | 2088xxx1 | 川菜:0.0544694,西式快餐:0.0272347 |
  5. | 2088xxx3 | 川菜:0.0544694,西式快餐:0.0272347 |
  6. +------------+------------+

过滤式特征选择

根据用户不同的特征选择方法,选择并过滤出TopN的特征数据,同时保存所有特征的重要性表(右输出)。支持稀疏和稠密数据格式。

PAI 命令

 
  1. PAI -name fe_select_runner -project algo_public
  2. -DfeatImportanceTable=pai_temp_2260_22603_2
  3. -DselectMethod=iv
  4. -DselectedCols=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign
  5. -DtopN=5
  6. -DlabelCol=y
  7. -DmaxBins=100
  8. -DinputTable=pai_dense_10_9
  9. -DoutputTable=pai_temp_2260_22603_1;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 NA NA
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开 NA 输入表的所有partition
outputTable 必选,过滤后的特征结果表 NA NA
featImportanceTable 必选,存放所有输入特征的重要性权重值 NA NA
selectedCols 必选,特征列 NA NA
labelCol 必选,标签列/目标列 NA NA
categoryCols Int或者Double字符的枚举特征,可选 NA 默认为空
maxBins 连续类特征划分最大区间数,可选 大于1的正整数 100
selectMethod 特征选择方法,可选 目前支持IV(Information Value),Gini增益,信息增益,Lasso IV
topN 挑选的TopN个特征,如果TopN大于输入特征数,则输出所有特征,可选 正整数 10
isSparse 是否是k:v的稀疏特征,可选,默认稠密数据 true/false false
itemSpliter 稀疏特征item分隔符,可选,默认逗号 字符 “,”
kvSpliter 稀疏特征item分隔符,可选,默认冒号 字符 “:”
lifecycle 结果表生命周期,可选,默认7 正整数 7

实例

输入数据

 
  1. create table if not exists pai_dense_10_9 as
  2. select
  3. age,campaign,pdays, previous, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  4. from bank_data limit 10;

参数配置

y为过滤式特征选择的标签列,其他字段为特征列。特征选择方法IV挑选TopN特征5,表示过滤top5的特征,如下图所示。

特征工程特征工程

运行结果

左输出是过滤后的数据,如下表所示。

pdays nr_employed emp_var_rate cons_conf_idx cons_price_idx y
999.0 5228.1 1.4 -36.1 93.444 0.0
999.0 5195.8 -0.1 -42.0 93.2 0.0
6.0 4991.6 -1.7 -39.8 94.055 1.0
999.0 5099.1 -1.8 -47.1 93.075 0.0
3.0 5076.2 -2.9 -31.4 92.201 1.0
999.0 5228.1 1.4 -42.7 93.918 0.0
999.0 5099.1 -1.8 -46.2 92.893 0.0
999.0 5099.1 -1.8 -46.2 92.893 0.0
3.0 5076.2 -2.9 -40.8 92.963 1.0
999.0 5099.1 -1.8 -47.1 93.075 0.0

右输出是特征重要性表,字段结构如下表所示。featureName表示特征名称,weight表示特征选择方法计算出来的权重。

featureName weight
pdays 30.675544191232486
nr_employed 29.08332850085075
emp_var_rate 29.08332850085075
cons_conf_idx 28.02710269740324
cons_price_idx 28.02710269740324
euribor3m 27.829058450563718
age 27.829058450563714
previous 14.319325030742775
campaign 10.658129656314467

weight计算公式如下:

选择方法 weight含有
IV 信息价值
GiniGain Gini增益
InfoGain 信息熵增益
Lasso 线性模型权重绝对值

窗口变量统计

给定时间窗口,计算用户在相应时间窗内的行为次数和金额。例如时间窗口为“1,7,30,90,180”,计算用户相应天数内的行为次数和金额。

PAI 命令

 
  1. pai -name=rfm
  2. -project=algo_public
  3. -DinputTableName=window_input_table
  4. -DuserName=user_id
  5. -DdtName=dt
  6. -DcntName=cnt
  7. -DamtName=amt
  8. -Dwindow=1,7,30,90
  9. -DoutputTableName=window_output_table
  10. -DmapInstanceNum=2
  11. -DreduceInstanceNum=2;

算法参数

参数key名称 参数描述 必/选填 默认值
inputTableName 输入表名 必填 NA
userName 用户id列 必填 NA
dtName 时间列(格式“20160101”) 必填 NA
cntName 次数列 必填 NA
amtName 金额列 必填 NA
window 时间窗口(格式为“1,7,30,90…”) 必填 NA
outputTableName 输出表名 必填 NA
outputTablePartitions 输出表分区 选填 NA
mapInstanceNum mapper数量 选填 2
reduceInstanceNum reducer数量 选填 2

实例

输入数据

 
  1. drop table if exists window_input_table;
  2. create table window_input_table as
  3. select
  4. *
  5. from
  6. (
  7. select 'a' as user_id, '20151201' as dt, 2 as cnt, 32.0 as amt from dual
  8. union all
  9. select 'a' as user_id, '20160201' as dt, 3 as cnt, 37.0 as amt from dual
  10. union all
  11. select 'a' as user_id, '20160223' as dt, 1 as cnt, 22.0 as amt from dual
  12. union all
  13. select 'b' as user_id, '20151212' as dt, 1 as cnt, 12.0 as amt from dual
  14. union all
  15. select 'b' as user_id, '20160110' as dt, 2 as cnt, 30.0 as amt from dual
  16. union all
  17. select 'c' as user_id, '20151001' as dt, 3 as cnt, 60.0 as amt from dual
  18. union all
  19. select 'c' as user_id, '20151201' as dt, 2 as cnt, 39.0 as amt from dual
  20. ) tmp;

运行结果

 
  1. +------------+------------+------------+------------+------------+-------------+-------------+-------------+-------------+
  2. | user_id | cnt_1d_sum | amt_1d_sum | cnt_7d_sum | amt_7d_sum | cnt_30d_sum | amt_30d_sum | cnt_90d_sum | amt_90d_sum |
  3. +------------+------------+------------+------------+------------+-------------+-------------+-------------+-------------+
  4. | a | 1 | 22.0 | 1 | 22.0 | 4 | 59.0 | 6 | 91.0 |
  5. | c | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 2 | 39.0 |
  6. | b | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 3 | 42.0 |
  7. +------------+------------+------------+------------+------------+-------------+-------------+-------------+-------------+

特征编码

由决策树和Ensemble算法挖掘新特征的一种策略。特征来自一个或多个特征组成的决策树分支。比如下图左边树的分支“节点1->节点2->节点4”形成一个特征。该编码策略可以有效的将非线性特征转换为线性特征。

特征工程

PAI 命令

 
  1. PAI -name fe_encode_runner -project algo_public
  2. -DinputTable="pai_temp_2159_19087_1"
  3. -DencodeModel="xlab_m_GBDT_LR_1_19064"
  4. -DselectedCols="pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign"
  5. -DlabelCol="y"
  6. -DoutputTable="pai_temp_2159_19061_1";

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 NA NA
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开 NA 输入表的所有partition
encodeModel 必选,编码输入的GBDT二分类模型 NA NA
outputTable 必选,尺度缩放后结果表 NA NA
selectedCols 必选,勾选GBDT参与编码的特征,一般是GBDT组件的训练特征 NA NA
labelCol 必选,标签字段 NA NA
lifecycle 可选,结果表生命周期 正整数 7

实例

输入数据

 
  1. create table if not exists pai_dense_10_9 as
  2. select
  3. age,campaign,pdays, previous, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  4. from bank_data limit 10;

参数说明

建模流程如下图所示,一般与GBDT二分类组件配合使用。

特征工程

设置GBDT二分类组件参数,树的数目5树最大深度3y字段为标签列,其他字段为特征列,运行结果如下。

运行结果

kv y
2:1,5:1,8:1,8:1,12:1,15:1,18:1,18:1,28:1,34:1,34:1,41:1,50:1,53:1,53:1,63:1,72:1,72:1 0.0
2:1,5:1,6:1,6:1,12:1,15:1,16:1,16:1,28:1,34:1,34:1,41:1,50:1,51:1,51:1,63:1,72:1,72:1 0.0
2:1,3:1,3:1,12:1,13:1,13:1,28:1,34:1,34:1,36:1,39:1,39:1,55:1,61:1,61:1 1.0
2:1,3:1,3:1,12:1,13:1,13:1,20:1,21:1,22:1,22:1,41:1,42:1,43:1,46:1,46:1,63:1,64:1,67:1,68:1,68:1 0.0
0:1,0:1,10:1,10:1,28:1,29:1,32:1,32:1,36:1,37:1,37:1,55:1,56:1,59:1,59:1 1.0
2:1,5:1,8:1,8:1,12:1,15:1,18:1,18:1,20:1,26:1,26:1,41:1,42:1,48:1,48:1,63:1,64:1,67:1,70:1,70:1 0.0
2:1,3:1,3:1,12:1,13:1,13:1,20:1,21:1,24:1,24:1,41:1,42:1,43:1,44:1,44:1,63:1,64:1,65:1,65:1 0.0
2:1,3:1,3:1,12:1,13:1,13:1,20:1,21:1,24:1,24:1,41:1,42:1,43:1,44:1,44:1,63:1,64:1,65:1,65:1 0.0
0:1,0:1,10:1,10:1,28:1,29:1,30:1,30:1,36:1,37:1,37:1,55:1,56:1,57:1,57:1 1.0
2:1,3:1,3:1,12:1,13:1,13:1,20:1,21:1,22:1,22:1,41:1,42:1,43:1,46:1,46:1,63:1,64:1,67:1,68:1,68:1 0.0

one-hot编码

one-hot编码,也称独热编码。对于每一个特征,如果它有m个可能值,经过独热编码后,就变成了m个二元特征。并且这些特征互斥,每次只有一个**,因此数据会变成稀疏格式,输出结果也是kv的稀疏结构。

PAI 命令

 
  1. PAI -name fe_binary_runner -project algo_public
  2. -DinputTable=one_hot
  3. -DbinaryCols=edu_num
  4. -DlabelCol=income
  5. -DbinaryReserve=false
  6. -DbinStrategy=noDealStrategy
  7. -DbinaryIndexTable=pai_temp_2458_23436_3
  8. -DmodelTable=pai_temp_2458_23436_2
  9. -DoutputTable=pai_temp_2458_23436_1
  10. -Dlifecycle=28;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 NA NA
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开 NA 输入表的所有partition
binaryCols 必选,one-hot编码字段,必须是枚举类特征,字段类型可以是任意类型   NA
binStrategy 必选,编码策略,本组件提供两种编码策略,分类标签必须设置 简单二值化(noDealStrategy),自动二值化(autoStrategy) 简单二值化(noDealStrategy)
labelCol 分类标签类,按纯度二值化策略下必选,其他策略下可选 NA NA
impurityMergeThresh 可选,按纯度二值化策略中,前后二值化特征合并,纯度提升后的阈值 NA 0.1
densityMergeThresh 可选,按密度二值化策略中,二值化特征密度(占比)合并的阈值 NA 0.1
binaryReserve 可选,是否输出表中保留原独热编码特征 true/false false
outputTable 必选,one-hot后的结果表,编码结果保存在kv字段里 NA NA
binaryIndexTable 必选,k:v序列化表,编码特征名与kv中key的映射关系 NA NA
modelTable 必选,one-hot编码的映射逻辑,Json格式存放 NA NA
lifecycle 结果表生命周期,可选,默认7 正整数 7

编码策略说明:

  • noDealStrategy:简单二值化。比如sex特征取值Female、Male、Unknowed,那么二值化后的特征是sex_female, sex_male和sex_Unknowed。
  • autoStrategy:自动二值化。在简单二值化的基础上,利用逻辑回归算法计算每个one-hot特征,将one-hot特征权重为0的特征合并成独立一项,命名为other。

实例

输入数据

edu_num income
13 <=50K
13 <=50K
9 <=50K
7 <=50K
13 <=50K
14 <=50K
5 <=50K
9 >50K
14 >50K
13 >50K

参数配置

选择edu_num为二值化特征列,其他全部采用默认参数,即简单二值化策略。

运行结果

编码结果(outputTable)如下所示:

income kv
<=50K 0:1
<=50K 0:1
<=50K 4:1
<=50K 3:1
<=50K 0:1
<=50K 1:1
<=50K 2:1
>50K 4:1
>50K 1:1
>50K 0:1

kv的序列列表(binaryIndexTable)如下所示:

featname featindex
edu_num 0
13 0
14 1
5 2
7 3
9 4

异常检测

  • 针对连续值特征:按照箱线图最大值和最小值检测异常特征,如下图所示。
    特征工程

  • 针对枚举值特征:按照枚举特征的取值频率,根据阈值过滤异常特征。

PAI 命令

 
  1. PAI -name fe_detect_runner -project algo_public
  2. -DselectedCols="emp_var_rate,cons_price_rate,cons_conf_idx,euribor3m,nr_employed" \
  3. -Dlifecycle="28"
  4. -DdetectStrategy="boxPlot"
  5. -DmodelTable="pai_temp_2458_23565_2"
  6. -DinputTable="pai_bank_data"
  7. -DoutputTable="pai_temp_2458_23565_1";

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入表的表名 NA NA
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开 NA 输入表的所有partition
selectedCols 必选 输入特征,字段类型可以是任意类型 NA NA
detectStrategy 必选,支持boxPlot和avf选项,boxPlot是针对连续特征做检测,avf针对枚举类特征做检测 boxPlot/avf boxPlot
outputTable 必选,过滤检测到的异常特征数据集 NA NA
modelTable 必选,异常检测模型 NA NA
lifecycle 结果表生命周期,可选,默认7 正整数 7

特征重要性过滤

该组件为线性特征重要性、GBDT特征重要性、随机森林特征重要性等重要性评估组件提供过滤功能,支持过滤TopN的特征。

PAI 命令

 
  1. PAI -name fe_filter_runner -project algo_public
  2. -DselectedCols=pdays,previous,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed,age,campaign,poutcome
  3. -DinputTable=pai_dense_10_10
  4. -DweightTable=pai_temp_2252_20319_1
  5. -DtopN=5
  6. -DmodelTable=pai_temp_2252_20320_2
  7. -DoutputTable=pai_temp_2252_20320_1;

算法参数

参数名称 参数描述 参数值可选项 默认值
inputTable 必选,输入原始数据表 NA NA
inputTablePartitions 可选,输入表中指定哪些分区参与训练,格式为partition_name=value。如果是多级,格式为name1=value1/name2=value2,如果指定多个分区,中间用“,”分开 NA 输入表的所有partition
weightTable 必选,特征重要性的权重表(即线性特征重要性、GBDT特征重要性、随机森林特征重要性的输出表) NA NA
outputTable 必选,过滤出TopN个特征的输出表 NA NA
modelTable 必选,特征过滤产出的模型文件 NA NA
selectedCols 可选,默认输入表的所有字段 NA NA
topN 挑选的TopN个特征,默认10 正整数 10
lifecycle 输出表生命周期,可选,默认7 正整数 7

实例

输入数据

特征重要性过滤组件左边输入数据是原始数据表,右边是特征重要性表。

 
  1. creat table if not exists pai_dense_10_10 as
  2. select
  3. age,campaign,pdays, previous, poutcome, emp_var_rate, cons_price_idx, cons_conf_idx, euribor3m, nr_employed, y
  4. from bank_data limit 10;

特征重要性表为随机森林特征重要性组件的输出表。

参数配置

建模流程图如下图所示。

特征工程

输入数据为pai_dense_10_10。勾选随机森林和随机森林重要性组件,选择y字段为标签列,其他字段为特征列。
设置特征重要性过滤组件TopN 特征5,表示只过滤top5的特征,如下图所示。

特征工程

运行结果

特征重要性过滤组件的输出结果是过滤后的TopN特征数据。

特征重要性表有一定格式要求。第一字段存储特征名称,第二字段存储该特征对应的权重值,一般为double类型。如下图为随机森林特征重要性的输出表。

Field Type Label Comment
colname string    
gini double    
entropy double    

左输出数据结果:

nr_employed pdays age euribor3m poutcome
5228.1 999.0 44 4.963 nonexistent
5195.8 999.0 53 4.021 nonexistent
4991.6 6.0 28 0.729 success
5099.1 999.0 39 1.405 nonexistent
5076.2 3.0 55 0.869 success
5228.1 999.0 30 4.961 nonexistent
5099.1 999.0 37 1.327 nonexistent
5099.1 999.0 39 1.313 nonexistent
5076.2 3.0 36 1.266 success
5099.1 999.0 27 1.41 failure

右输出数据为过滤模型,暂无数据。