基于聚类(Kmeans)算法实现客户价值分析系统(电信运营商) |
您所在的位置:网站首页 › 网店的目标客户群根据年龄可划分为哪几类 › 基于聚类(Kmeans)算法实现客户价值分析系统(电信运营商) |
文章目录
一、电信运营商--客户价值分析二、使用聚类模型—分析项目需求三、聚类模型的原理和方法四、代码:4.1 数据感知4.2 数据预处理4.3 模型建立4.4 概率密度图
开发环境 jupyter notebook
数据集下载地址:https://download.csdn.net/download/wsp_1138886114/10616250 一、电信运营商–客户价值分析从客户需求出发,了解客户需要什么,他们有怎么样的特征, 电信运营商为客户设置不同的优惠套餐 争取更多的用户:推出不同的优惠套餐 降低客户流失率 提高收入 增加 ARPU 值(average revenue per user 每个用户平均收益) 精准的市场营销策略定制 二、使用聚类模型—分析项目需求 由于客户多,消费行为复杂,很难人工对客户打标签,这种情况下: 采用无监督学习的聚类算法更恰当 通过对客户的特征,日常消费行为进行分析,了解其偏好, 为降低客户流失率和争取新用户提供个性化营销依据 目标客户: 公众客户 商业客户 大客户 初步目标 中高端用户 中端用户 离网趋势用户 其它需求用户 通过聚类,将公众客户分为多个类别 聚类完成后,对分组数据的各方面做一个观察,年龄、性别、消费情况 三、聚类模型的原理和方法 3.1 聚类(物以类聚,人以群分)聚类(无监督) 分类(有监督,已经知道事务类别) 3.2 聚类效果评价标准(聚成几个类比较合适)层次聚类(hierarchical clustering) 是一种很直观的算法,一层一层地进行,把小的cluster 逐步聚拢(agglomerative clustering)),也可以将大的cluster逐步分割(divisive cluster)。逐步聚拢用的多 层次聚类的 dendrogram 树(亲缘关系树状图解) scipy.cluster.hierarchy.linkage进行层次聚类的时候,可以使用 scipy.cluster.hierarchy.dendrogram画图,画出一棵二叉树,高度表示两个后代相互之间的距离 如何切割 dendrogram 树 四、代码: 4.1 数据感知 import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans from scipy.cluster.hierarchy import linkage,dendrogram custinfo = pd.read_csv(r'.\\data\\custinfo.csv') custcall = pd.read_csv(r'.\\data\\custcall.csv') custcall.head() ~ Customer_IDPeak_callsPeak_minsOffPeak_callsOffPeak_minsWeekend_callsWeekend_minsInternational_minsNat_call_costmonth0K1001301210.58746554.47931200.0000004.381410041K1001301411.53007674.87810913.0457564.771490062K100130109.10947043.85400700.0000003.769771013K1001301210.53095654.45540400.0000004.358024034K100130119.50731944.02232700.0000003.93441302 4.2 数据预处理 # 数据聚合:--对整个DataFrame数值求平均值,删除最后一列【month】 custcall2 = custcall.groupby(custcall['Customer_ID']).mean() custcall3 = custcall2.drop('month', 1) # 数据合并 data = pd.merge(custinfo,custcall3,left_on='Customer_ID',right_index=True) data.index = data['Customer_ID'] data = data.drop('Customer_ID',1) # 数据探索:(mean,std,min,max,25%,50%,75%) desc = data.describe() print(desc) gender_cnt = pd.value_counts(data['Gender']) print(gender_cnt) tariff_cnt = pd.value_counts(data['Tariff']) print(tariff_cnt) handset_cnt = pd.value_counts(data['Handset']) print(handset_cnt) for col in data.columns: if not col in [u'Gender',u'Tariff',u'Handset']: fig = plt.figure() ax=fig.add_subplot(1,1,1) data[col].hist(bins=20) ax.set_title(col) fig.show() |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |