[代码]数据挖掘与商务智能期末报告——构建客户信用评分模型

本文介绍了数据挖掘与商务智能课程的期末报告,内容包括构建客户信用评分模型的过程。首先进行了数据探索,通过描述性统计和可视化分析数据。接着进行了数据预处理,包括数据标准化、降维、变量选择等。然后,使用多种机器学习模型(如逻辑回归、SVM、决策树、集成模型、神经网络等)进行建模,并通过分类效果评估(如准确率、AUC-ROC曲线等)比较模型性能。最后,进行了模型优化,包括网格搜索参数调优。

数据挖掘与商务智能期末报告——构建客户信用评分模型-CSDN博客文章浏览阅读186次。本文尝试构建客户信用评分模型。数据探索:数据描述统计和数据可视化数据预处理:数据标准化、数据降维、变量选择、变量转换、缺失值填充等(具体处理步骤根据需要选择,说明选择理由)建模:采用logistic回归、支持向量机、决策树、集成模型、贝叶斯模型、神经网络等。分类效果评估(明确评估指标和方法)https://blog.csdn.net/qq_54976575/article/details/139437268?spm=1001.2014.3001.5502是这篇博客的代码。

附录:实验代码

# 导入库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
from imblearn.over_sampling import SMOTE
from sklearn.preprocessing import StandardScaler
from scipy.stats import chi2_contingency
from statsmodels.stats.outliers_influence import variance_inflation_factor
from imblearn.over_sampling import RandomOverSampler
from sklearn.utils import resample
from sklearn.metrics import accuracy_score, classification_report
from sklearn.model_selection import KFold, cross_val_score
from sklearn.metrics import roc_curve, roc_auc_score
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import classification_report
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split, StratifiedShuffleSplit
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
import torch
import torch.nn as nn
import torch.optim as optim

# 数据探索
# 加载数据

dt = pd.read_csv('D:/Testcode/Test/data mining/train_public.csv')

# 查看数据基本信息
print(dt.shape)
print(dt.head())
print(dt.columns)
print(dt.info())
print(dt.describe()) 
# 描述性统计

# 检查数据平衡性

print(len(dt[dt['isDefault'] == 1]), len(dt[dt['isDefault'] == 0]))

# 数据可视化
# 根据数据特征,可以把work_year转换为数值型数据。同时,class为贷款等级,彼此之间具有顺序关系,故而转化为非连续数值型变量,用1-7代替A-G。

dt['work_year'] = dt['work_year'].replace(
    {
'10+ years': 10, '9 years': 9, '8 years': 8, '7 years': 7, '6 years': 6, '5 years': 5, '4 years': 4, '3 years': 3,
    
'2 years': 2, '1 year': 1, '< 1 year': 0})
class_mapping = {
'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6}
dt[
'class'] = dt['class'].map(class_mapping)
# 大体分个类,绘制直方图
loan_info = list(dt.columns[2:7]) + list(dt.columns[13:17]) + list(dt.columns[25:27])
client_info = list(dt.columns[
9:12]) + list(dt.columns[28:35])
repay_info = list(dt.columns[
17:25]) + list(dt.columns[35:38])


def draw_histograms(dt, variables, n_rows, n_cols, bin_size):
    fig = plt.figure(figsize=(
10, 10))
   
for i, var_name in enumerate(variables):
        ax = fig.add_subplot(n_rows, n_cols, i +
1)
        dt[dt[
"isDefault"] == 1][var_name].plot.hist(color='violet', label='Default', alpha=0.7, density=True, ax=ax,
                                                     bins=bin_size)
        dt[dt[
"isDefault"] == 0][var_name].plot.hist(color='aqua', label='Not Default', alpha=0.7, density=True, ax=ax,
                                                     bins=bin_size)
        ax.set_title(var_name)
        ax.set_ylabel(
'Probability')
    fig.tight_layout()

    fig.legend([
'Default', 'Not Default'], loc='upper right', bbox_to_anchor=(1.3, 1.1))
    plt.show()


draw_histograms(dt, loan_info,
4, 3, 10)
draw_histograms(dt, client_info,
4, 3, 10)
draw_histograms(dt, repay_info,
4, 3, 10)

# 查看非数值数据
# 查看日期分布:转化成时间格式  issueDateDT特征表示数据日期离数据集中日期最早的日期(2007-10-01)的天数

dt['issue_date'] = pd.to_datetime(dt['issue_date'], format='%Y-%m-%d')
startdate = datetime.strptime(
'2007-10-01', '%Y-%m-%d')
dt[
'issueDateDT'] = dt['issue_date'].apply(lambda x: x - startdate).dt.days
colors = [
'aqua', 'violet']
for default_value in [0, 1]:
    plt.hist(dt[
'issueDateDT'][dt['isDefault'] == default_value],
             label=
f'isDefault={ default_value}',
             color=colors[default_value],
             alpha=
0.5,
             bins=
30,
             density=
True)
plt.legend()
plt.title(
'issue_date Distribution by isDefault')
plt.xlabel(
'Days from Start Date')
plt.ylabel(
'Probability')
plt.show()



# 查看日期分布:earlies_credit_mon
# 统一日期格式

def parse_date(date_string):
   
try:
       
return datetime.strptime(date_string, '%d-%b')
   
except:
       
return datetime.strptime(date_string, '%b-%y')


dt[
'earlies_credit_mon'] = dt['earlies_credit_mon'].apply(parse_date)

# 计算各月份的百分比
dt['Month'] = dt['earlies_credit_mon'].dt.month
total_counts = dt[
'Month'].value_counts().sort_index()
default_0_counts = dt[dt[
'isDefault'] == 0]['Month'].value_counts().sort_index()
default_1_counts = dt[dt[
'isDefault'] == 1]['Month'].value_counts().sort_index()

total_percentage = total_counts / total_counts.sum() *
100
default_0_percentage = default_0_counts / default_0_counts.sum() * 100
default_1_percentage = default_1_counts / default_1_counts.sum() * 100

plt.figure(figsize=(10, 6))
plt.bar(default_0_counts.index, default_0_percentage, color=
'violet', label='isDefault=0', alpha=0.5)
plt.bar(default_1_counts.index, default_1_percentage, color=
'aqua', label='isDefault=1', alpha=0.5)
plt.xlabel(
'Month')
plt.ylabel(
'Probability')
plt.title(
'earlies_credit_mon')
plt.legend()
plt.show()


# industry&employer_type
dt['industry'].value_counts()
dt[
'industry'] = dt['industry'].replace({
   
'金融业': 'FINANCE',
   
'电力、热力生产供应业': 'ENERGY',
   
'公共服务、社会组织': 'PUBLIC_SERVICE',
   
'住宿和餐饮业': 'HOSPITALITY',
   
'信息传输、软件和信息技术服务业': 'IT',
   
'文化和体育业': 'CULTURE',
   
'建筑业': 'CONSTRUCTION',
   
'房地产业': 'REAL_ESTATE',
   
'采矿业':

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值