Python机器学习贷款审批预测结果错误,如何排查代码与数据集问题
问题原因排查及解决方法
1 优先排查数据集问题
- 首先检查标注准确性:确认所有同时满足「业务经验>7、成立年份晚于2015、无历史/存续贷款」的样本,
OUTPUT列是否都标注为1,其余样本都标注为0。自制数据集最常见的问题就是标注规则不一致,只要存在少量标注错误,就可能导致模型学习方向偏移。 - 检查样本分布:统计
OUTPUT列的取值占比,如果标注为1的正样本占比极低(比如低于10%),模型会倾向于预测占比更高的负类,即使输入符合规则也会输出0。
2 其次排查代码及特征处理问题
你当前的代码存在两个明显的可优化点:
2.1 特征尺度未做统一
逻辑回归是线性模型,对特征尺度非常敏感:你使用的「业务经验」是个位数量级、「成立年份」是四位数量级,模型训练时会被数值更大的年份特征主导,无法正确学习三个特征的权重规则。
2.2 测试数据输入格式不规范
sklearn 1.0及以上版本中,训练时传入带特征名的DataFrame,预测时传入无特征名的numpy数组,会触发特征名匹配警告,极端情况下会导致预测逻辑出错。
修正后的参考代码
from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler import pandas as pd import numpy as np # 读取数据 data = pd.read_csv("test2.csv") # 特征预处理:将年份转换为成立年限,缩小特征尺度差异 data["years_since_founded"] = 2024 - data["Year of Founded"] X = data[["Business Exp", "years_since_founded", "Previous/Current Loan"]] Y = data["OUTPUT"] # 特征标准化,统一尺度 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 训练模型 clf = LogisticRegression() clf.fit(X_scaled, Y) # 测试数据做相同的预处理 test_x2_raw = np.array([[9, 2024-2017, 0]]) test_x2_scaled = scaler.transform(test_x2_raw) Y_pred = clf.predict(test_x2_scaled) print(Y_pred)
验证方法
运行修正代码后如果输出仍然为0,可以打印模型参数确认学习结果:
print("特征权重:", clf.coef_) print("截距:", clf.intercept_)
按照你的规则,正常学习后的参数应该满足:业务经验权重为正、成立年限权重为正、贷款状态权重为负。如果参数符号不符合预期,就可以确定是数据集标注错误。
内容的提问来源于stack exchange,提问作者S Andrew
相关产品推荐
相关产品推荐

