数据下载链接:
链接:https://pan.baidu.com/s/1EFiYAceEkZsnBkVNjTlH_A
提取码:v164
1、客户价值分析:
客户价值分析就是一个客户分群问题,以客户为中心,从客户需求出发,搞清楚客户需要什么,他们有怎样的一个特征,需要什么样的产品,然后设计相应的产品满足客户的需求。进行客户价值分析,可以避免商家闭门造车以及主管臆断客户的需求。
项目背景为某电信运营商,该运营商需要以客户为中心,按照客户的需求,在对客户的特点了解上推出不同的资费套餐和营销手段,目的是争取更多新客户,降低客户流失率,降低服务成本,提高业务收入,增加ARPU值(average revenue per user每个用户的平均收益,一般以月为单位),精准的市场营销策略制定。
2、为什么使用聚类模型:
对于电信运营商而言根据过往运营经验,可以大概知道客户类型,但是随着数据量越来越大的时候必须要是用数据挖掘方法对数据做更精准的分析,并得到定量的分析结果。同时由于客户数量很多,且消费行为复杂,人工很难事先对客户打标签,得到训练数据。
3、项目需求:
本项目的目标客户是公众客户(分为公众客户、商业客户即公司、大客户),因而只对公众客户进行分群。初步的目标是中高端用户、中端用户、离网趋势用户、其他需求用户。但这是经验而言,最终结果需要看模型的运行结果,不能主观臆断。
4、项目的输出:
(1)通过聚类,将公众客户合理地分为多个类别。
(2)聚类完成后,分组观察每个类别的具体情况。分组对数据的各方面做一个观察,包括年龄,性别以及消费情况等等。
5、聚类模型方法步骤:
先用层次聚类逐步聚拢的方式筛选出距离最远的比较合适的k类别数(簇),用dendrogram(scipy.cluster.hierachy.linkage层次聚类,scipy.cluster.hierarchy.dendrogram画图)作图,子树的高度表示它两个后代相互之间的距离,确定k之后放入kmeans模型进行聚类。
6、代码实现:
(1)数据概况:脱敏数据。
custinfo(客户信息表):
CustomerID为用户表示,以及各个表之间的联系;
Gender 性别
Age 年龄
LOS用户一个月内上网时长
Tariff 用户使用套餐服务的代码
Handset 手机型号(脱敏)
custcall(客户打电话消费情况表):
CustomerID为用户表示,以及各个表之间的联系;
Peak_calls 高峰拨打频次,对应month的月份数
Peak_mins 高峰分钟数
OffPeak_calls 低峰期拨打频次
OffPeak_mins 低峰期拨打分钟
weekend_calls 周末拨打频次
weekend_mins 周末拨打分钟数
International_mins 国际童话分钟
Nat_call_cost 套餐额外费用
month 月份
tariff(资费套餐表):
话费类型
固定费用
免费时长
高峰时期单价
非高峰时期单价
周末单价
国际长途单价
***特征提取:
这个项目暂不考虑年龄,性别,通话套餐类型,手机品牌等因素。不相关的特征先去掉。
import pandas as pd
custinfo = pd.read_csv('./custinfo.csv')
custcall = pd.read_csv('./custcall.csv')
#时间跨度长可以考虑到消费者消费的稳定情况,
#根据每个用户id统计每个用户的数据平均值
#其中每个用户均有六条数据,在这里对这些数据做平均
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)
data.head()
Gender Age L_O_S Tariff Handset Peak_calls Peak_mins OffPeak_calls OffPeak_mins Weekend_calls Weekend_mins International_mins Nat_call_cost
Customer_ID
K100130 1 45 46.566667 CAT 50 SOP20 12.166667 10.558619 5.166667 4.467108 0.166667 0.507626 4.369472 0.0
K100150 1 30 26.900000 CAT 50 SOP20 9.000000 16.000000 1.500000 5.800000 2.333333 3.800000 8.114904 0.0
K100180 1 37 27.966667 CAT 50 SOP10 9.500000 6.986259 5.333333 3.637815 1.000000 1.998042 3.582837 0.0
K100270 1 44 29.833333 CAT 50 SOP20 4.166667 6.998276 3.500000 2.410889 0.166667 1.238929 1.578545 0.0
K100290 1 27 20.066667 CAT 50 SOP20 9.500000 15.000000 1.000000 7.600000 3.333333 6.416667 1.754841 0.0
用describe做统计.
import matplotlib.pyplot as plt
des = data.describe()
des
Gender Age L_O_S Peak_calls Peak_mins OffPeak_calls OffPeak_mins Weekend_calls Weekend_mins International_mins Nat_call_cost
count 18550.000000 18550.000000 18550.000000 18550.000000 18550.000000 18550.000000 18550.000000 18550.000000 18550.000000 18550.000000 18550.000000
mean 0.482102 31.506253 33.710032 39.756397 118.768764 17.356514 51.603952 2.790836 8.356949 28.292598 2.944807
std 0.499693