更新时间:2025-06-04 GMT+08:00
分享

排列特征重要性

功能介绍

支持用户传入一批数据样本,并据此计算各个特征的排列重要性(permutation importance)。

基本原理为,对输入的数据样本,首先完成一次推理,将评估指标作为baseline。将数据的某一特征在行数据之间随机混洗,评估预测效果,并计算指标的下降值,并以此评估特征的重要性。当混洗某一列特征,导致预测效果与baseline有较大下降时,则说明此列特征重要性较高。此处使用r2_score作为回归任务的评估指标。

注意:输入的数据需包含预测目标列的真值,且数量大于1000,以便更精确地计算预测效果指标。

另外,融合推荐回归预测大模型提供两种特征重要性,分别为模型权重特征重要性和排列特征重要性,对两种特征重要性的详细说明参见《用户指南》“使用API调用预测大模型 > 排列特征重要性”部分。

URL

POST /v1/{project_id}/infer-api/proxy/service/{deployment_id}/perm-feat-importance

获取URI方式请参见请求URI

表1 推理接口路径参数

参数

是否必选

参数类型

描述

project_id

String

项目ID,获取方法请参见获取项目ID

deployment_id

String

模型的部署ID,获取方法请参见获取模型部署ID

请求参数

使用Token认证方式的请求Header参数见表2

表2 请求Header参数(Token认证)

参数

是否必选

参数类型

描述

X-Auth-Token

String

用户Token。

用于获取操作API的权限。获取Token接口响应消息头中X-Subject-Token的值即为Token。

Content-Type

String

发送的实体的MIME类型,参数值为“application/json”。

使用API Key认证方式的请求Header参数见表3

表3 请求Header参数(API Key认证)

参数

是否必选

参数类型

描述

X-Apig-AppCode

String

API Key值。

用于获取操作API的权限。API Key认证响应消息头中X-Apig-AppCode的值即为API Key。

Content-Type

String

发送的实体的MIME类型,参数值为“application/json”。

表4 请求Body参数

参数

是否必选

参数类型

描述

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

表5 响应Body参数

参数

参数类型

描述

feature_importance

Array

降序排列的各特征重要性,每项为[特征名, 特征重要性分值]。

cost_time

Long

计算耗时。

状态码: 400

表6 响应Body参数

参数

参数类型

描述

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]
  ]
}

状态码

请参见状态码

错误码

请参见错误码

相关文档

    OSZAR »