摘要:
合集:AI案例-ML-泛金融业
AI问题:聚类问题
数据集:UniversalBank客户财务状况数据集
数据集价值:用于客户细分、贷款违约预测、营销分析等任务。
解决方案:聚类分析
一、问题描述
UniversalBank.csv
数据集常用于教学和数据分析任务,尤其是在银行或金融领域的客户分析中。该数据集通常包含关于银行客户的信息,列出多种与客户背景和行为相关的变量。用于预测基于年龄、经验、收入、地点、家庭、教育、现有抵押贷款、信用等因素的个人贷款批准情况。这类数据通常用于客户细分、贷款违约预测、营销分析等任务。
二、数据集内容
数据结构
UniversalBank.csv的字段包括:
1. ID: 客户的唯一标识符(整数类型)。
2. Age: 客户的年龄(整数类型)。
3. Experience: 客户的工作经验(以年计,整数类型)。
4. Income: 客户的年收入(以美元为单位,整数类型)。
5. ZIP Code: 客户的邮政编码(整数类型)。
6. Family: 客户的家庭成员数量(整数类型)。
7. CCAvg: 客户每月信用卡消费的平均金额(浮点类型)。
8. Education: 客户的最高学历,分为三个等级(整数类型:1-本科,2-硕士,3-博士)。
9. Mortgage: 客户的房贷金额(整数类型)。
10. Personal Loan: 二进制变量,表示银行是否对个人进行贷款授信(1表示授信,0表示没有)。
11. Securities Account: 二进制变量,表示客户是否持有证券账户(1表示持有,0表示没有)。
12. CD Account: 二进制变量,表示客户是否持有定期存款账户(1表示持有,0表示没有)。
13. Online: 二进制变量,表示客户是否使用网上银行(1表示使用,0表示没有使用)。
14. CreditCard: 二进制变量,表示客户是否持有银行的信用卡(1表示持有,0表示没有)。
数据样例
ID | Age | Experience | Income | ZIP Code | Family | CCAvg | Education | Mortgage | Personal Loan | Securities Account | CD Account | Online | CreditCard |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 25 | 1 | 49 | 91107 | 4 | 1.6 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
2 | 45 | 19 | 34 | 90089 | 3 | 1.5 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
3 | 39 | 15 | 11 | 94720 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
4 | 35 | 9 | 100 | 94112 | 1 | 2.7 | 2 | 0 | 0 | 0 | 0 | 0 | 0 |
5 | 35 | 8 | 45 | 91330 | 4 | 1 | 2 | 0 | 0 | 0 | 0 | 0 | 1 |
6 | 37 | 13 | 29 | 92121 | 4 | 0.4 | 2 | 155 | 0 | 0 | 0 | 1 | 0 |
三、K近邻分类算法
K近邻(K-Nearest Neighbors,简称KNN)算法是一种基于实例的学习方法,其核心思想是如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中,大多数属于某一个类别,则该样本也属于这个类别。
K近邻算法的关键在于k值的选取,以及合适的度量函数。
需要指出的是,KNN在做预测时的计算量和训练集规模相关,因为待测试数据需要和训练集中的每个数据对象计算距离。如果训练集很大,则做分类决策时计算量将非常大。
源码解析
- 导入必要的库
import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier
- 建立数据集,数据预处理
- 使用
pd.read_csv
读取数据集。 - 将目标变量
Personal Loan
分离出来,作为y
。 - 去掉无关特征
ID
和ZIP Code
,剩下的特征作为X
。 - 使用
train_test_split
将数据集划分为训练集和测试集,测试集占比30%。
df = pd.read_csv('UniversalBank.csv') # 读取CSV文件 y = df['Personal Loan'] # 目标变量。银行是否对个人进行贷款授信。 X = df.drop(['ID', 'ZIP Code', 'Personal Loan'], axis=1) # 特征变量,去掉ID和ZIP Code列 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # 数据集划分
- 使用
- 采用两种weights参数建立KNN模型,并评估
- 使用
for
循环遍历两种不同的weights
参数:uniform
和distance
。 - 对于每种
weights
参数,创建一个KNeighborsClassifier
实例,并使用训练数据进行训练。 - 使用
score
方法计算模型在测试集上的准确度,并输出结果。
n_neighbors = 5 # K值 for weights in ['uniform', 'distance']: knn = KNeighborsClassifier(n_neighbors, weights=weights) # 创建KNN分类器 knn.fit(X_train, y_train) # 训练模型 acc = knn.score(X_test, y_test) # 评估模型 print('%s 准确度: %s' % (weights, acc)) # 输出准确度
- 使用
安装
conda create -n datamining python=3.10
conda activate datamining
conda install pandas numpy scikit-learn
主要开发包版本号
scikit-learn 1.5.2 py310hf2a6c47_1 conda-forge
执行
python knn.py distance 准确度: 0.9173333333333333