机器学习实战1-四种算法对比对客户信用卡还款情况进行预测与模型评估

举报
微学AI 发表于 2025/10/30 10:31:41 2025/10/30
【摘要】 大家好,我是微学AI,今天给大家带来一个机器学习实战案例:利用机器学习的四种算法对比对客户信用卡还款情况进行分类。信用卡又叫贷记卡,是由商业银行或信用卡公司对信用合格的消费者发行的信用证明。现在的年轻人,特别是80后,90后甚至00后到喜欢超前消费,每个人名下多多少少都有至少一张信用卡,有些人由于过度超前消费,导致下个月无法还款导致的逾期,这样会对个人征信产生影响,今天我们就来分析分析具有哪些特性

大家好,我是微学AI,今天给大家带来一个机器学习实战案例:利用机器学习的四种算法对比对客户信用卡还款情况进行分类。信用卡又叫贷记卡,是由商业银行或信用卡公司对信用合格的消费者发行的信用证明。现在的年轻人,特别是80后,90后甚至00后到喜欢超前消费,每个人名下多多少少都有至少一张信用卡,有些人由于过度超前消费,导致下个月无法还款导致的逾期,这样会对个人征信产生影响,今天我们就来分析分析具有哪些特性的人会有信用卡逾期的可能。

一、前期工作

1. 导入库包

import pandas as pd
import numpy as np
from sklearn.model_selection import learning_curve, train_test_split,GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from matplotlib import pyplot as plt
import seaborn as sns

2.导入数据

# 数据加载
data = pd.read_csv('Credit_Card.csv')

print(data.shape) # 查看数据集大小
print(data.describe()) # 数据集概览

(30000, 25)

数据下载地址:Credit_Card.csv
链接: https://pan.baidu.com/s/1fInkqnsBZLbKK9JNMoB69A?pwd=qcit 提取码: qcit

                 ID       LIMIT_BAL  ...       PAY_AMT6  payment.next.month
count  30000.000000    30000.000000  ...   30000.000000        30000.000000
mean   15000.500000   167484.322667  ...    5215.502567            0.221200
std     8660.398374   129747.661567  ...   17777.465775            0.415062
min        1.000000    10000.000000  ...       0.000000            0.000000
25%     7500.750000    50000.000000  ...     117.750000            0.000000
50%    15000.500000   140000.000000  ...    1500.000000            0.000000
75%    22500.250000   240000.000000  ...    4000.000000            0.000000
max    30000.000000  1000000.000000  ...  528666.000000            1.000000

数据样例:
image.png

在机器学习中,数据预处理是一个至关重要的步骤。文章中提到的特征选择和数据分割是数据预处理的关键环节。特征选择通过去除无关或冗余的特征(如ID字段),可以提高模型的训练效率和预测准确性。数据分割则是为了评估模型的泛化能力,通过将数据集分为训练集和测试集,确保模型在未见过的数据上也能表现良好。

二、数据分析和可视化

1.查看年龄分布情况

# 查看年龄分布情况
age = data['AGE']
payment = data[data["payment.next.month"]==1]['AGE']
bins =[20,30,40,50,60,70,80]
seg = pd.cut(age,bins,right=False)
print(seg)
counts =pd.value_counts(seg,sort=False)
b = plt.bar(counts.index.astype(str),counts)
plt.bar_label(b,counts)
plt.show()

image.png

信用卡使用最多的年龄是在30-40岁之间,有11238人,其实是20-30岁的人,有9618人,80后90后是信用卡使用的大军。
信用卡有逾期的客户年龄分布:

#逾期的用户年龄分布
payment_seg = pd.cut(payment,bins,right=False)
counts1 =pd.value_counts(payment_seg,sort=False)
b2 = plt.bar(counts1.index.astype(str),counts1,color='r')
plt.bar_label(b2,counts1)
plt.show()

image.png

逾期率对比:
20-30岁:22.84%,
30-40岁:20.25%,
40-50岁:22.97,
50-60岁:24.86%,
70-80岁:28%
可以看出70-80岁逾期率最高,可能是他们年龄的原因忘记还款,或者子女未帮忙还款所致;

2.查看下一个月逾期率的情况

next_month = data['payment.next.month'].value_counts()
print(next_month)
df = pd.DataFrame({'payment.next.month': next_month.index,'values': next_month.values})
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.figure(figsize = (6,6))

plt.title('逾期率客户\n (还款:0,逾期:1)')
sns.set_color_codes("pastel")
sns.barplot(x = 'payment.next.month', y="values", data=df)
plt.show()

image.png

三、数据特征处理

# 特征选择,去掉ID字段、最后一个结果字段即可
data.drop(['ID'], inplace=True, axis =1) #ID这个字段没有用
target = data['payment.next.month'].values
columns = data.columns.tolist()
columns.remove('payment.next.month')
features = data[columns].values

# 70%作为训练集,30%作为测试集
train_x, test_x, train_y, test_y = train_test_split(features, target, test_size=0.30, stratify = target, random_state = 1)

四、机器学习算法分类器

下面我们采用四种机器学习算法进行分类预测,分别是支持向量机、决策树、随机森林、 K近邻算法,小伙伴是不是对这四类算法一下子有了熟悉的感觉。

# 构造各种分类器
classifiers = [
    SVC(random_state = 1, kernel = 'rbf'),     # 支持向量机分类
    DecisionTreeClassifier(random_state = 1, criterion = 'gini'),  # 决策树分类
    RandomForestClassifier(random_state = 1, criterion = 'gini'),  # 随机森林分类
    KNeighborsClassifier(metric = 'minkowski'),    # K近邻分类
]
# 分类器名称
classifier_names = [
            'svc',
            'decisiontreeclassifier',
            'randomforestclassifier',
            'kneighborsclassifier',
]
# 分类器参数
classifier_param_grid = [
            {'svc__C':[1], 'svc__gamma':[0.01]},
            {'decisiontreeclassifier__max_depth':[6,9,11]},
            {'randomforestclassifier__n_estimators':[3,5,6]} ,
            {'kneighborsclassifier__n_neighbors':[4,6,8]},
]

五、参数调优

# 对具体的分类器进行GridSearchCV参数调优
def GridSearchCV_work(pipeline, train_x, train_y, test_x, test_y, param_grid, score = 'accuracy'):
    response = {}
    gridsearch = GridSearchCV(estimator = pipeline, param_grid = param_grid, scoring = score)

    # 寻找最优的参数 和最优的准确率分数
    search = gridsearch.fit(train_x, train_y)
    print("GridSearch最优参数:", search.best_params_)
    print("GridSearch最优分数: %0.4lf" %search.best_score_)
    predict_y = gridsearch.predict(test_x)
    print("准确率 %0.4lf" %accuracy_score(test_y, predict_y))
    response['predict_y'] = predict_y
    response['accuracy_score'] = accuracy_score(test_y,predict_y)
    return response

参数调优是提升模型性能的关键步骤。文章中使用了GridSearchCV进行参数调优,通过网格搜索找到最优参数组合,从而提高模型的准确性。参数调优不仅能提升模型的性能,还能帮助我们更好地理解模型的行为和特性。

六、模型对比分析

for model, model_name, model_param_grid in zip(classifiers, classifier_names, classifier_param_grid):
    pipeline = Pipeline([
            ('scaler', StandardScaler()),
            (model_name, model)
    ])
    result = GridSearchCV_work(pipeline, train_x, train_y, test_x, test_y, model_param_grid , score = 'accuracy')

文章中使用了支持向量机、决策树、随机森林和K近邻算法进行分类预测。每种算法都有其独特的优缺点:
支持向量机(SVM):适合处理高维数据,能够有效处理非线性分类问题,但在大规模数据集上计算开销较大。
决策树:易于理解和解释,能够处理多种数据类型,但容易过拟合。
随机森林:通过集成多个决策树,提升了模型的稳定性和准确性,但训练时间较长。
K近邻算法(KNN):简单易用,适合小规模数据集,但在高维数据上表现不佳。
通过对比这些算法的准确率,支持向量机在本次实验中表现最佳。

Name: payment.next.month, dtype: int64
GridSearch最优参数: {'svc__C': 1, 'svc__gamma': 0.01}
GridSearch最优分数: 0.8186
准确率 0.8172
GridSearch最优参数: {'decisiontreeclassifier__max_depth': 6}
GridSearch最优分数: 0.8208
准确率 0.8113
GridSearch最优参数: {'randomforestclassifier__n_estimators': 6}
GridSearch最优分数: 0.8004
准确率 0.7994
GridSearch最优参数: {'kneighborsclassifier__n_neighbors': 8}
GridSearch最优分数: 0.8040
准确率 0.8036

我们可以看到运行结果:
支持向量机算法分类:准确率 0.8172
决策树算法分类:准确率 0.8113
随机森林分类:准确率 0.7994
K近邻分类:准确率 0.8036
这四种算法中,准确率都差不多,其中准确率最高的是支持向量机算法。

在模型评估中,准确率是一个重要的指标,但并不是唯一的指标。我们还可以考虑其他评估指标,如精确率、召回率和F1分数,以全面评估模型的性能。此外,模型的改进可以通过增加数据量、优化特征工程、尝试其他算法或集成多种算法来实现。

七、实际应用与挑战

在实际应用中,信用卡还款预测模型可以帮助银行和金融机构降低风险,优化信贷决策。然而,模型的实际应用也面临数据隐私、模型偏差和动态环境变化等挑战。为了应对这些挑战,我们需要不断更新模型,确保其在不同环境下的适用性和公平性。
通过以上几个方面的扩展分析,我们可以更深入地理解这篇文章的内容,并为实际应用提供更具指导性的建议。

数据集的获取,可以私信我,更多精彩的实战内容,后期将献给大家,谢谢。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。