排列特征重要性
功能介绍
支持用户传入一批数据样本,并据此计算各个特征的排列重要性(permutation importance)。
基本原理为,对输入的数据样本,首先完成一次推理,将评估指标作为baseline。将数据的某一特征在行数据之间随机混洗,评估预测效果,并计算指标的下降值,并以此评估特征的重要性。当混洗某一列特征,导致预测效果与baseline有较大下降时,则说明此列特征重要性较高。此处使用r2_score作为回归任务的评估指标。
注意:输入的数据需包含预测目标列的真值,且数量大于1000,以便更精确地计算预测效果指标。
另外,融合推荐回归预测大模型提供两种特征重要性,分别为模型权重特征重要性和排列特征重要性,对两种特征重要性的详细说明参见《用户指南》“使用API调用预测大模型 > 排列特征重要性”部分。
URL
POST /v1/{project_id}/infer-api/proxy/service/{deployment_id}/perm-feat-importance
获取URI方式请参见请求URI。
请求参数
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
X-Auth-Token |
是 |
String |
用户Token。 用于获取操作API的权限。获取Token接口响应消息头中X-Subject-Token的值即为Token。 |
Content-Type |
是 |
String |
发送的实体的MIME类型,参数值为“application/json”。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
X-Apig-AppCode |
是 |
String |
API Key值。 用于获取操作API的权限。API Key认证响应消息头中X-Apig-AppCode的值即为API Key。 |
Content-Type |
是 |
String |
发送的实体的MIME类型,参数值为“application/json”。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
data |
是 |
Array |
含义和表4中的data参数相同。注意,排列特征重要性接口除提供各特征名及特征值外,还需提供预测目标列的列名及其真值(即示例中的target项),且数据数量大于1000,以便准确计算预测效果指标。 |
fi_args |
是 |
Dict |
参数解释: 特征重要性的参数,包含num_shuffle_sets、sample_num字段。 约束限制: num_shuffle_sets,非必填,Integer类型,代表采样混洗次数,越大则结果越准确,但耗时更高。 sample_num,非必填,Integer类型,代表单次采样混洗数据量,越大则结果越准确,但耗时更高。 取值范围: num_shuffle_sets,要求>=1,建议>=5 sample_num,要求>=1000,建议>=3500 默认取值: num_shuffle_sets,默认值为1。 sample_num,默认值为1000,当用户不传入此参数,或大于data数量时,直接使用全部数据,不进行采样。 |
响应参数
状态码: 200
参数 |
参数类型 |
描述 |
---|---|---|
feature_importance |
Array |
降序排列的各特征重要性,每项为[特征名, 特征重要性分值]。 |
cost_time |
Long |
计算耗时。 |
状态码: 400
参数 |
参数类型 |
描述 |
---|---|---|
error_code |
String |
错误码。 |
error_msg |
String |
错误信息。 |
请求示例
{ "data": [ { "feature_1": xx, "feature_2": xx, ... "feature_n": xx, "target": 0, }, ... { "feature_1": xx, "feature_2": xx, ... "feature_n": xx, "target": 1 } ], "fi_args":{ "num_shuffle_sets": 1, "sample_num": 1000 } }
此处data列表的长度至少为1000,建议通过以下代码根据csv文件生成请求体(DATA_NUM为从csv文件中采样数据的数量):
import random import json import pandas as pd ENCODING_TYPE = "utf-8" DATA_NUM = 1200 data_path = "path/to/xxx.csv" df = pd.read_csv(data_path, encoding=ENCODING_TYPE) data_list = df.to_dict("records") data_list = random.sample(data_list, DATA_NUM) request_data = { "data": data_list, "fi_args": { "num_shuffle_sets": 1, "sample_num": 1000, } } request_str = json.dumps(request_data) print(request_str)
响应示例
{ "cost_time": 4.322, "feature_importance": [ ["feature_2", 0.15] ... ["feature_17",0.001] ] }
状态码
请参见状态码。
错误码
请参见错误码。