特征处理
本页大部分模板共用三个入参:
- input_dataset_path:数据集来源,如
/mnt/admin/pipeline/example/feature-process/data-test1.csv - save_dataset_path:输出数据集保存路径,如
/mnt/admin/pipeline/example/feature-process/result.csv - params:特征工程参数配置,json 格式(具体字段见各小节示例)
通用约定:col_name 不写表示处理所有列;keep 为 1 时原数据加后缀 _origin 拼接在处理结果前面。
discretization
特征离散化,有等宽、等频、聚类几种可选。入参为上面的 input_dataset_path / save_dataset_path / params。
等宽离散化
[
{
"process_type":"width_dist",
"col_name":"age",
"col_map":{"age":"age1"},
"bins":5,
"keep":1
}
]
- process_type:width_dist 表示等宽离散化
- col_name:需要处理的列名,可多列,英文逗号分隔,不写表示处理所有列
- col_map:需要重命名的列名,比如 age 重命名为 age1
- bins:每个特征离散化到几个区间
- keep:是否保留原始数据,1 则原数据加后缀
_origin拼接在前面
等频离散化
按分位数来做离散化:
[
{
"process_type":"freq_dist",
"col_name":"age,duration",
"col_map":{"age":"age1"},
"bins":5,
"keep":1
}
]
- process_type:freq_dist 表示等频离散化
- 其余字段含义同等宽离散化
聚类离散化
通过 kmeans 聚类来做离散化:
[
{
"process_type":"kbinsdiscretizer",
"col_name":"",
"col_map":{},
"encode":"ordinal",
"strategy":"kmeans",
"n_bins":4,
"keep":1
}
]
- process_type:kbinsdiscretizer 表示 k 箱离散化,默认是 kmeans 聚类离散化
- encode:表示做离散化(编码方式,如 ordinal)
- strategy:表示通过 kmeans 做聚类离散化
- n_bins:每个特征离散化到几个区间
standardize-normalize
标准化及正则化,有最大绝对值归一化、最大最小归一化等等。入参为 input_dataset_path / save_dataset_path / params。各小节区别仅在 process_type。
maxabsscaler
最大绝对值归一化:
[
{
"process_type":"maxabsscaler",
"col_name":"",
"col_map":{},
"keep":0
}
]
minmaxscaler
最大最小值归一化:
[
{
"process_type":"minmaxscaler",
"col_name":"",
"col_map":{},
"keep":0
}
]
standardscaler
标准化:
[
{
"process_type":"standardscaler",
"col_name":"",
"col_map":{},
"keep":0
}
]
normalizer
正则化:
[
{
"process_type":"normalizer",
"col_name":"",
"col_map":{},
"keep":0
}
]
z_score
z-score 标准化:
[
{
"process_type":"z_score",
"col_name":"",
"col_map":{},
"keep":0
}
]
time_format
时间列格式化:
[
{
"process_type":"time_format",
"col_name":"time1,time2,time3",
"col_map":{}
}
]
- process_type:time_format 表示时间格式化
- col_name:需要处理的列名(时间列),可多列,英文逗号分隔
sample
采样,包括随机采样、分层采样、过采样、欠采样等等。入参为 input_dataset_path / save_dataset_path / params。
random_sample
随机采样:
[
{
"process_type":"random_sample",
"ratio":0.5,
"keep":0
}
]
- ratio:采样比例,比如 0.5 表示随机采样 50%
weight_sample
加权采样:
[
{
"process_type":"weight_sample",
"ratio":0.5,
"weights_path":"/mnt/admin/pipeline/example/feature-process/weight.csv",
"keep":0
}
]
- weights_path:样本权重文件
level_sample
分层采样:
[
{
"process_type":"level_sample",
"ratio":0.5,
"level_path":"/mnt/admin/pipeline/example/feature-process/level.csv",
"keep":0
}
]
- level_path:样本属于哪个分层的文件
over_under_sample
过采样及欠采样:
[
{
"process_type":"over_under_sample",
"col_y":"y",
"type":"over_SMOTE",
"keep":0
}
]
- col_y:目标列的名称
- type:过采样或欠采样类型,可选 over_random、over_SMOTE、over_ADASYN、over_BorderlineSMOTE、under_random、under_NearMiss、under_TomekLinks
dimension-reduction
降维,包括 pca 降维和卡方降维。入参为 input_dataset_path / save_dataset_path / params。
pca
pca 降维可以做主成分分析:
[
{
"process_type":"pca",
"col_name":"",
"n_components":3,
"col_map":{"age":"age1","duration":"duration2"},
"prefix":"pca_",
"keep":0
}
]
- n_components:选出几个主成分
- prefix:pca 之后的列名前缀
chi_
卡方降维:
[
{
"process_type":"chi_",
"col_name":"",
"col_y":"y",
"k":3
}
]
- col_y:目标列名称
- k:根据卡方值选出几列特征列
data-split
数据拆分,包括列内拆分、列间拆分、行间拆分、svd 奇异值分解。入参为 input_dataset_path / save_dataset_path / params。
split_column
列内拆分,拆分某列为 'a-b' 格式的列,拆为 'a' 和 'b' 两列:
[
{
"process_type":"split_column",
"split_map":{"a":",","b":"|"},
"prefix":""
}
]
- split_map:哪一列用哪个分隔符来拆分,可多列
- prefix:拆分后每列的前缀
split_data
列间或行间拆分:
[
{
"process_type":"split_data",
"col_split_map":{"r_a":"age,duration","r_b":"age,pdays"},
"row_split_map":{"c":"(0:100)","d":"(99:1002)"},
"split_outpath":"/mnt/{{creator}}/pipeline/example/feature-process/split_r/"
}
]
- col_split_map:拆分后哪几列属于哪个文件,
"r_a":"age,duration"表示 age、duration 列属于文件 r_a - row_split_map:拆分后哪几行属于哪个文件,
"c":"(0:100)"表示第 1 到 100 行属于文件 c,"c":"(0.8)"表示随机 80% 属于文件 c - split_outpath:拆分后的文件存到哪个文件夹下
svd
奇异值分解:
[
{
"process_type":"svd",
"col_name":"",
"svd_outpath":"svd/"
}
]
- svd_outpath:分解后的文件存到哪个文件夹下
data-transform
数据转换,包括 boxcox 转换、二值化、数据类型转换、根据函数转换等。入参为 input_dataset_path / save_dataset_path / params。
注:源文档此小节标题写作
data-tranform,按代码语义应为 data-transform(数据转换)。
boxcox
boxcox 转换,只针对非负连续变量进行:
[
{
"process_type":"boxcox",
"col_name":"age,duration",
"col_map":{"age":"age1","duration":"duration2"},
"keep":1
}
]
binarization
二值化,将特征转换为 0 或 1:
[
{
"process_type":"binarization",
"col_name":"age,duration",
"col_map":{"age":"age1","duration":"duration2"},
"threshold":0.4,
"keep":1
}
]
- threshold:转换门限,0.4 表示小于 0.4 为 0,大于 0.4 为 1
dct
dct 变换:
[
{
"process_type":"dct_transform",
"col_name":"age,duration",
"col_map":{"age":"age1","duration":"duration2"},
"keep":1
}
]
func_transfer
根据函数转换:
[
{
"process_type":"func_transfer",
"func_map":{"lambda x:x+1":"age,duration"}
}
]
- func_map:哪些列做什么转换,比如
{"lambda x:x+1":"age,duration"}表示 age、duration 列每个值加 1
ma
移动平均:
[
{
"process_type":"ma",
"col_map":{},
"time_col":"",
"col_name":"age,duration",
"window":3,
"keep":0
}
]
- time_col:时间列;若有时间列,依据时间列从前往后排序后再做移动平均,若无则直接做
- window:移动平均的窗口大小
type_transfer
数据类型转换:
[
{
"process_type":"type_transfer",
"col_trans_map":{"sex":"to_str","family":"str_to_bool","education":"eval"}
}
]
- col_trans_map:哪列做什么类型转换,可转换类型有 str_to_int、str_to_float、str_to_bool、to_str、eval(字符串变为列表、字典、集合)
polynomialfeatures
多项式展开:
[
{
"process_type":"polynomialfeatures",
"col_name":"",
"col_map":{},
"degree":2,
"prefix":"expand_",
"keep":0
}
]
- degree:展开的阶数
- prefix:展开后列名的前缀,默认 expand_
objective-process
非数值型变量的处理,包括 hash、根据统计量转换等。入参为 input_dataset_path / save_dataset_path / params。
featurehasher
对非数值型变量做 hash:
[
{
"process_type":"featurehasher",
"col_name":"",
"col_map":{},
"prefix":"hash_",
"n_features":3,
"keep":0
}
]
- prefix:hash 后列名的前缀,默认 hash_
- n_features:hash 的阶数
label_encoding
非数值型变量依据统计量或指定 map 做数值转换:
[
{
"process_type":"label_encoding",
"col_name":"sex",
"map":{"sex":{"f":1,"m":2}},
"type":"order"
}
]
- map:当 type 为 order 时指定映射,
{"sex":{"f":1,"m":2}}表示 sex 列 f→1、m→2;其余 type 不需指定 map - type:转换类别,random 表示随机映射,order 表示按指定 map 映射,counting 表示把每个类别出现次数映射为数值,target 表示二分类中每个类别映射为该类别 y=1 的个数
one-hot
非数值型变量进行 one-hot 展开:
[
{
"process_type":"one_hot",
"col_name":"age",
"col_map":{"age":"age1"},
"keep":0
}
]
index-process
索引处理,比如增加索引、索引转列、列索引重命名。入参为 input_dataset_path / save_dataset_path / params。
col_rename
列名重命名:
[
{
"process_type":"col_rename",
"col_map":{"age":"age1"},
"keep":1
}
]
index_to_col
将索引转换为列:
[
{
"process_type":"index_to_col",
"index_name":"order",
"to_str":"false"
}
]
- index_name:索引转换为列之后的列名
- to_str:转列后是否转为字符串型
add_index
增加行索引:
[
{
"process_type":"add_index",
"index_path":"/mnt/admin/pipeline/example/feature-process/level.csv",
"save_index_path":"save_index_path.csv"
}
]
- index_path:需要增加的行索引存放的位置
- save_index_path:保存索引数据结果的位置
sort
排序。入参为 input_dataset_path / save_dataset_path / params。
[
{
"process_type":"sort",
"col_name":"a,c",
"col_map":{},
"ascending":"False"
}
]
- col_name:根据哪几列来排序,多列间英文逗号分隔
- ascending:True 升序,False 降序
run-sql
在数据集上执行 sql 语句。入参为 input_dataset_path / save_dataset_path / params。
[
{
"process_type":"runsql",
"query":"select * from data where age>30"
}
]
- query:要执行的 sql 语句
union-join-data
合并数据集,union 或 join。
入参:
- data:数据集来源,可有多个表,表名用
|分隔,如/mnt/.../a.csv|/mnt/.../b.csv|/mnt/.../c.csv - merge_type:合并类型,row_union/column_union/left_join/right_join/inner_join/outer_join,分别表示行拼接、列拼接、按指定主键列做 left_join 等
- ignore_index:合并时是否忽略索引,如果是自增索引,忽略索引会从头开始,如
True - join_columns:如果是 join,需指定此参数,当作主键用于连接
- save_dataset_path:输出数据集保存路径
说明:源使用文档此处把取值写作
left_jon,已按代码改正为left_join。合法取值见job-template/job/feature-process/launcher-union-join-data.py:19-36:row_union/column_union/left_join/right_join/inner_join/outer_join,其中 join 类需配join_columns。
hadamard-multiply
hadamard 乘积。
入参:
- data1:数据来源 1
- data2:数据来源 2
- save_dataset_path:hadamard 乘积结果保存路径
feature-importance
通过随机森林、逻辑回归、xgboost 等模型计算特征重要性,还可以计算特征的 iv 值、互信息值、方差等。
入参:
- model_path:如果要用已有模型来评估特征重要性,则输入模型的路径
- method:logistic_regression | random_forest | xgb | iv | mutual_if | chi | variance,分别表示逻辑回归特征参数绝对值、随机森林特征重要性、xgboost 特征重要性、iv 值、互信息值、卡方值、方差(计算方差时先做了归一化)
- input_dataset_path:输入数据集的路径
- col_name:需要计算重要性的列名,英文逗号分隔,不输入默认计算全部
- target:目标变量列名,可多列,英文逗号分隔
- save_dataset_path:输出所有特征重要性等信息的保存路径
feature-combine
特征组合,用于衍生特征。
入参:
- params:特征衍生参数配置
- input_dataset_path:输入数据集文件路径
- save_dataset_path:输出数据集文件路径
params 示例:
{
"cross":"age,duration,campaign,emp_var_rate",
"polynomial":"age,duration,campaign,emp_var_rate",
"hashing":"age,duration,campaign,emp_var_rate",
"aggregation":"age,duration,campaign,emp_var_rate",
"statistics":"age,duration,campaign,emp_var_rate"
}
params 的 key 表示用什么方法做特征衍生(5 种可选):cross 表示特征相乘,polynomial 表示多项式特征,hashing 表示两列做 hash,aggregation 表示根据 A 列对 B 列做聚合后得到的统计量作为组合特征,statistics 表示两列均值做组合特征。
params 的 value 表示方法作用于哪些列,英文逗号分隔。
calculate-correlation
calculate-correlation 模板可以做特征向量间的相关性计算。
入参:
- input_dataset_path:需要处理的样本路径,如
data/fin_data.csv - result_path:处理之后结果保存的路径,如
data/fin_data_r.csv - corr_type:corr 表示计算特征之间的相关系数矩阵
- feature_columns:需要计算相关性的特征列,英文逗号分隔