使用聚类分析 构建信用卡高风险客户识别模型

题目描述

在这里插入图片描述

导入数据并查看数据集

数据集地址

"""
import pandas as pd
import numpy as np
data=pd.read_csv("credit_card.csv")
#查看数据集情况:
data.info()
data.describe()

构建历史行为特征

###历史行为特征
#划分出历史行为特征数据
data_active=data.iloc[:,[2,3,4,6,7,8]]
#定义聚类特征数据
data_means=data.iloc[:,[0]]
#查看历史行为特征数据集情况:
data_active.describe()
data_active.info()
#计算评分 数值越低,评分越低
def GetScore(x):
    if x>=2:
        a =0
    else:
        a =1
    return a
score_1=data_active['瑕疵户'].apply(GetScore)
score_2=data_active['逾期'].apply(GetScore)
score_3=data_active['呆账'].apply(GetScore)
score_4=data_active['退票'].apply(GetScore)
score_5=data_active['拒往记录'].apply(GetScore)
score_6=data_active['强制停卡记录'].apply(GetScore)
#加权求和
data_means.loc[:,'history_credit_risk']=score_1+score_2*2+score_3*3+score_4*3+score_5*3+score_6

构建经济风险情况特征

###经济风险情况特征
#划分出经济风险情况特征数据
data_encomic=data.iloc[:,[5,18,19,21,22]]
#查看经济风险情况特征数据情况
data_encomic.describe()
data_encomic.info()
#借款额度分数
def GetScore_encomic(x):
    if x>=2:
        a =1
    else:
        a =0
    return a
score_yu=data_encomic['月刷卡额'].apply(GetScore_encomic)
#个人月收入情况分数

data_person=data_encomic['个人月收入']/data_encomic['个人月开销']
data_person_Scores=[]
for i in range(data_encomic.shape[0]):
    if data_person[i]<1:
        data_person_Scores.append(0)
    else:
        data_person_Scores.append(1)
#家庭月收入情况分数
data_mouth=data_encomic['家庭月收入']/data_encomic['月刷卡额']
data_mouth_Scores=[]
for i in range(data_encomic.shape[0]):
    if data_person[i]<1:
        data_mouth_Scores.append(0)
    else:
        data_mouth_Scores.append(1)
        
data_means['economic_risk']=np.array(data_mouth_Scores) + np.array(data_person_Scores)+np.array(score_yu)

构建收入风险情况特征

###收入风险情况特征
data_shouru=data.iloc[:,[14,17,20]]
#查看收入风险情况特征数据情况
data_shouru.describe()
data_shouru.info()
#住家评分
HouseScore = []
for i in range(data_shouru.shape[0]):
    if 3 <= data_shouru.loc[i, '住家'] <= 5:
        HouseScore.append(0)
    else:
        HouseScore.append(1)
#职业评分
JobScore = []
for i in range(data_shouru.shape[0]):
    if(data_shouru.loc[i, '职业'] <= 7) | (data_shouru.loc[i, '职业'] == 19) | (data_shouru.loc[i, '职业'] == 21):
        JobScore.append(2)
    if(data_shouru.loc[i, '职业'] >= 8) & (data_shouru.loc[i, '职业'] <= 11):
            JobScore.append(1)
    if(data_shouru.loc[i,  '职业']  <=  18)  &  (data_shouru.loc[i,  '职业']  >=  12)  |  (data_shouru.loc[i,  '职业']  ==  20)  | (data_shouru.loc[i, '职业'] == 22):
            JobScore.append(0)
#年龄评分
AgeScore = []
for i in range(data_shouru.shape[0]):
    if data_shouru.loc[i, '年龄'] <= 2:
        AgeScore.append(1)
    else:
        AgeScore.append(0)
data_means['income_risk'] = np.array(HouseScore) + np.array(JobScore) + np.array(AgeScore)

聚类分析

####聚类分析
#标准化构建的三个特征数据集
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
data_means_stander = sc_X.fit_transform(data_means.iloc[:,[1,2,3]])
#聚类训练
from sklearn.cluster import KMeans #导入kmeans算法
k = 5 ## 确定聚类中心数
#构建模型
kmeans_model = KMeans(n_clusters = k,n_jobs=4,random_state=123)
fit_kmeans = kmeans_model.fit(data_means_stander)   #模型训练
#客户特征分析排名
data_means['count']=data_means['income_risk']+data_means['economic_risk']+data_means.loc[:,'history_credit_risk']
sort_values=data_means.sort_values("count",inplace=False)

#查看聚类中心
kmeans_model.cluster_centers_ 


#保存客户的类别标签
data_means['lable']=kmeans_model.labels_ 

#统计不同类别样本的数目
r1 = pd.Series(kmeans_model.labels_).value_counts()


data_means.to_csv("mean.csv",index=False,sep=',', encoding="utf_8_sig")
  • 17
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值