使用kmeans聚类对银行支付渠道客户分群

-- coding: utf-8 --

“”"
@author: CDA教研组
申明:CDA版权所有
官网:http://edu.cda.cn

“”"

第一步:手动测试主成分数量

#1、导入数据 (CDA版权所有)

import pandas as pd
model_data = pd.read_csv(“profile_bank.csv”)
data = model_data.loc[ :,‘CNT_TBM’:‘CNT_CSC’]
data.head()
在这里插入图片描述

#- 2、查看相关系数矩阵,判定做变量降维的必要性(非必须)

corr_matrix = data.corr(method=‘pearson’)
#corr_matrix = corr_matrix.abs()
corr_matrix
在这里插入图片描述

#- 3、做主成分之前,进行中心标准化
from sklearn import preprocessing
data = preprocessing.scale(data)

#- 4、使用sklearn的主成分分析,用于判断保留主成分的数量
from sklearn.decomposition import PCA
‘’‘说明:1、第一次的n_comp…
说明:2、观察explained_variance_rat…
完整代码和更多课程详见http://edu.cdn.cn敏捷算法
‘’’
pca=PCA(n_components=3)
newData=pca.fit(data)
print(pca.explained_variance_)
print(pca.explained_variance_ratio_)

[1.60786876 1.00252275 0.7339482 ]
[0.40196317 0.25062818 0.18348521]

‘’‘通过主成分在每个变量上的权重的绝对值大小,确定每个主成分的代表性
‘’’
pd.DataFrame(pca.components_).T
在这里插入图片描述

第二步:根据主成分分析确定需要保留的主成分数量,进行因子分析
#- 1、导入包,并对输入的数据进行主成分提取。为保险起见,data需要进行中心标准化
from fa_kit import FactorAnalysis
from fa_kit import plotting as fa_plotting
fa = FactorAnalysis.load_data_samples(
data,
preproc_demean=True,
preproc_scale=True
)
fa.extract_components()

#- 2、设定提取主成分的方式。默认为“broken_stick”方法,建议使用“top_n”法
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法

array([0, 1, 2], dtype=int64)

#- 3、通过最大方差法进行因子旋转
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
在这里插入图片描述
在这里插入图片描述

#- 说明:可以通过第三张图观看每个因子在每个变量上的权重,权重越高,代表性越强

#- 4、获取因子得分
pd.DataFrame(fa.comps[“rot”])
在这里插入图片描述

import numpy as np
fas = pd.DataFrame(fa.comps[“rot”])
data = pd.DataFrame(data)
score = pd.DataFrame(np.dot(data, fas))

第三步:根据因子得分进行数据分析
fa_scores=score.rename(columns={0: “ATM_POS”, 1: “TBM”, 2: “CSC”})
fa_scores.head()
在这里插入图片描述

第四步:使用因子得分进行k-means聚类
####4.1 k-means聚类的第一种方式:不进行变量分布的正态转换–用于寻找异常值

#- 1、查看变量的偏度
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法

TBM 51.881233
CSC 6.093417
ATM_POS 2.097633
dtype: float64

#- 2、进行k-means聚类
from sklearn.cluster import KMeans
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
#MiniBatchKMeans()分批处理
#kmeans = cluster.KMeans(n_clusters=3, init=‘random’, n_init=1)
result=kmeans.fit(fa_scores)
#print(result)

#- 3、对分类结果进行解读

model_data_l=model_data.join(pd.DataFrame(result.labels_))
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
model_data_l.head()

在这里插入图片描述

import matplotlib
get_ipython().magic(‘matplotlib inline’)
model_data_l.clustor.value_counts().plot(kind = ‘pie’)

AxesSubplot:ylabel=‘clustor’
在这里插入图片描述

####4.2 k-means聚类的第二种方式:进行变量分布的正态转换–用于客户细分

#- 1、进行变量分布的正态转换
import numpy as np
from sklearn import preprocessing
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
fa_scores_trans.head()
在这里插入图片描述

#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
skew
在这里插入图片描述

CSC 0.000540
TBM 0.000086
ATM_POS 0.000023
dtype: float64

#- 2、进行k-means聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3) #MiniBatchKMeans()分批处理
#kmeans = cluster.KMeans(n_clusters=3, init=‘random’, n_init=1)
result=kmeans.fit(fa_scores_trans)
#print(result)

#- 3、对分类结果进行解读
#完整代码和更多课程详见http://edu.cdn.cn敏捷算法

import matplotlib
get_ipython().magic(‘matplotlib inline’)
model_data_l.clustor.value_counts().plot(kind = ‘pie’)

AxesSubplot:ylabel=‘clustor’

在这里插入图片描述

from sklearn import tree

#完整代码和更多课程详见http://edu.cdn.cn敏捷算法
#当前支持计算信息增益和GINI
clf.fit(model_data, result.labels_)

DecisionTreeClassifier(max_depth=3, min_samples_leaf=100, min_samples_split=100,
random_state=12345)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值