核心概念

  1. 特征选择:识别对目标变量预测最有价值的特征
  2. 决策树算法
    • 通过递归划分数据构建树形结构
    • 使用基尼不纯度或信息增益选择最佳划分特征
    • 特征重要性 = 该特征减少的不纯度 × 覆盖样本比例
  3. 标签编码:将分类变量(如"Yes/No")转换为数值

解题思路

  1. 数据预处理
    • 对字符串特征进行标签编码
    • 分离特征矩阵和目标变量
  2. 决策树训练
    • 使用所有特征训练决策树分类器
  3. 特征重要性分析
    • 提取每个特征的重要性分数
    • 选择重要性最高的特征
  4. 结果输出:返回最重要特征的索引

代码解析

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import LabelEncoder

# 读取输入数据
data = eval(input().strip())

# 创建两个标签编码器
encoder1 = LabelEncoder()  # 用于倒数第二列(字符串特征)
encoder2 = LabelEncoder()  # 用于目标变量

# 编码字符串特征(倒数第二列)
str_feature_col = [row[-2] for row in data]  # 提取所有样本的字符串特征
encoded_str_feature = encoder1.fit_transform(str_feature_col)

# 编码目标变量(最后一列)
target_col = [row[-1] for row in data]  # 提取所有样本的目标变量
encoded_target = encoder2.fit_transform(target_col)

# 更新数据集:将原始字符串替换为编码值
for i in range(len(data)):
    data[i][-2] = encoded_str_feature[i]  # 更新字符串特征
    data[i][-1] = encoded_target[i]      # 更新目标变量

# 准备特征矩阵和标签向量
features = []
labels = []
for row in data:
    features.append(row[:-1])  # 所有列除了最后一列都是特征
    labels.append(row[-1])     # 最后一列是目标变量

# 转换为NumPy数组并确保数值类型
X = np.array(features).astype(float)
y = np.array(labels)

# 训练决策树模型
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X, y)

# 获取特征重要性并确定最重要特征
feature_importances = clf.feature_importances_
most_important_index = np.argmax(feature_importances)

# 输出结果
print(most_important_index)

关键步骤说明

  1. 数据预处理

    • 倒数第二列(字符串特征)使用 LabelEncoder 转换为数值
    • 目标变量("Good"/"Bad")使用另一个 LabelEncoder 转换
    • 示例转换:
      • "Yes" → 1, "No" → 0
      • "Good" → 1, "Bad" → 0
  2. 特征矩阵构建

    • 特征:所有列除最后一列
    • 目标:最后一列
    • 确保所有特征为数值类型(astype(float)
  3. 决策树训练

    • 使用默认参数的 DecisionTreeClassifier
    • random_state=42 确保结果可复现
    • 模型自动学习特征与信用评分的关联
  4. 特征重要性提取

    • feature_importances_ 属性返回各特征的重要性分数
    • 重要性分数总和为1,值越大表示特征越重要
    • np.argmax() 获取最高分特征的索引

应用场景

  • 信用评分模型优化
  • 客户流失预测
  • 欺诈检测
  • 营销响应预测

总结

本题实现了基于决策树的特征选择方法:

  1. 通过标签编码处理分类变量
  2. 训练决策树模型学习特征与信用的关联
  3. 提取特征重要性分数
  4. 确定最具预测力的特征

该方法能帮助银行识别影响信用评分的关键因素,优化信用卡审批流程,降低违约风险,同时提高模型的预测准确性。