Appearance
智能信用评分Logistic回归模型开发与测试
1.导入库
python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pickle
from sklearn.metrics import classification_report
from imblearn.over_sampling import SMOTE- pandas : 数据处理库
- train_test_split : 数据集划分⼯具
- LogisticRegression : 逻辑回归模型
- pickle : Python 对象序列化模块
- classification_report : 分类评估报告⽣成器
- SMOTE : 过采样⽅法处理不平衡数据
2.数据加载与预览
python
data = pd.read_csv('finance数据集.csv')
print(data.head())pd.read_csv() : 读取 CSV ⽂件
- 参数:⽂件路径
head() : 显示前 5 行数据
功能:加载数据并初步检查
3.特征与目标分离
python
X = data.drop(['SeriousDlqin2yrs', 'Unnamed: 0'], axis=1)
y = data['SeriousDlqin2yrs']datdrop(): 移除指定列- axis=1 : 按列操作
- 移除目标列和无关索引列
功能:创建特征矩阵 X 和目标向量 y
4.数据集划分
python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)- train_test_split() : 划分训练 / 测试集
- test_size=0.2 : 测试集占比 20%
- random_state=42 : 随机种⼦(保证可重复性)
5.初始模型训练
python
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)LogisticRegression() : 创建逻辑回归模型
- max_iter=1000 : 最⼤迭代次数
fit() : 模型训练⽅法
- 参数:训练集特征和⽬标
6.模型保存
python
with open('2.2.1_model.pkl', 'wb') as file:
pickle.dump(model, file)pickle.dump(): 序列化保存模型'wb': 以⼆进制写入模式打开⽂件- 保存到
'2.2.1_model.pkl'
7.初始预测与评估
python
y_pred = model.predict(X_test)
pd.DataFrame(y_pred, columns=['预测结果']).to_csv('2.2.1_results.txt', index=False)
report = classification_report(y_test, y_pred, zero_division=1)
with open('2.2.1_report.txt', 'w') as file:
file.write(report)
accuracy = (y_test == y_pred).mean()
print(f"模型准确率: {accuracy:.2f}")- predict() : 生成预测结果
- classification_report() : ⽣成分类报告
- zero_division=1 : 处理除零警告
- 手动计算准确率
- 保存预测结果和评估报告
8.处理数据不平衡
python
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)- SMOTE() : 创建过采样器
- random_state=42 : 随机种⼦
- fit_resample() : ⽣成平衡数据
- 通过合成少数类样本来平衡数据
9.重新训练与评估
python
model.fit(X_resampled, y_resampled)
y_pred_resampled = model.predict(X_test)
pd.DataFrame(y_pred_resampled, columns=['预测结果']).to_csv('2.2.1_results_xg.txt',
index=False)
report_resampled = classification_report(y_test, y_pred_resampled, zero_division=1)
with open('2.2.1_report_xg.txt', 'w') as file:
file.write(report_resampled)
accuracy_resampled = (y_test == y_pred_resampled).mean()
print(f"重新采样后的模型准确率: {accuracy_resampled:.2f}")- 使⽤平衡数据重新训练模型
- ⽣成新的预测和评估报告
- ⽐较处理前后的准确率
10.错误分析
0(没有严重逾期):
准确率很高,召回率也很高,表明模型在这一类别上的性能非常好。
可能的错误主要来自于少数漏报情况,即极少数实际没有严重逾期的样本被错误预测为有严重逾期。
1(有严重逾期):
准确率较低,召回率也很低,F1-Score仅为0.22,表明模型在这一类别上的性能较差。
主要问题在于大量的漏报(真正有严重逾期的样本被预测为没有)和一定的误报(将没有严重逾期的样本预测为有)。
11.改进建议
1.数据处理策略调整
重采样技术:由于数据集存在明显的不平衡,可以考虑使用过采样(如SMOTE)或欠采样技术来平衡两个类别的数量。
2.特征工程优化
特征选择:仔细审查现有特征,去除冗余或不相关的特征,可能有助于提升模型性能。
特征构造:尝试创建新的、更具区分力的特征,如基于现有特征的交互项或衍生指标。