机器学习 day7 kmeans 聚类算法

#准确的客户分类的结果是企业优化营销资源的重要依据,本文利用了航空公司的部分数据,利用Kmeans聚类方法,对航空公司的客户进行了分类,来识别出不同的客户群体,从来发现有用的客户,从而对不同价值的客户类别提供个性化服务,指定相应的营销策略。

# coding=utf-8
import pandas as pd
import numpy as np
#忽略报警
import warnings
warnings.filterwarnings("ignore")
#读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为ANSI编码)
data = pd.read_csv(r'air_data - utf8.csv')
#查看样本
explore = data.describe(percentiles = [], include = 'all').T 
data.head()
MEMBER_NOFFP_DATEFIRST_FLIGHT_DATEGENDERFFP_TIERWORK_CITYWORK_PROVINCEWORK_COUNTRYAGELOAD_TIME...ADD_Point_SUMEli_Add_Point_SumL1Y_ELi_Add_PointsPoints_SumL1Y_Points_SumRation_L1Y_Flight_CountRation_P1Y_Flight_CountRation_P1Y_BPSRation_L1Y_BPSPoint_NotFlight
0549932006/11/22008/12/246.北京CN31.02014/3/31...399921144521111006197603702110.5095240.4904760.4872210.51277750
1280652007/2/192007/8/36NaN北京CN42.02014/3/31...1200053288532884157682384100.5142860.4857140.4892890.51070833
2551062007/2/12007/8/306.北京CN40.02014/3/31...1549155202517114063612337980.5185190.4814810.4814670.51853026
3211892008/8/222008/8/235Los AngelesCAUS64.02014/3/31...034890348903722041861000.4347830.5652170.5517220.44827512
4395462009/4/102009/4/156贵阳贵州CN48.02014/3/31...2270464969649693388132103650.5328950.4671050.4690540.53094339

5 rows × 44 columns

explore
countuniquetopfreqmeanstdmin50%max
MEMBER_NO62988NaNNaNNaN31494.518183.2131494.562988
FFP_DATE6298830682011/1/13184NaNNaNNaNNaNNaN
FIRST_FLIGHT_DATE6298834062013/2/1696NaNNaNNaNNaNNaN
GENDER62985248134NaNNaNNaNNaNNaN
FFP_TIER62988NaNNaNNaN4.102160.373856446
WORK_CITY607193309广州9385NaNNaNNaNNaNNaN
WORK_PROVINCE597401183广东17507NaNNaNNaNNaNNaN
WORK_COUNTRY62962118CN57748NaNNaNNaNNaNNaN
AGE62568NaNNaNNaN42.47639.88591641110
LOAD_TIME6298812014/3/3162988NaNNaNNaNNaNNaN
FLIGHT_COUNT62988NaNNaNNaN11.839414.049527213
BP_SUM62988NaNNaNNaN10925.116339.505700505308
EP_SUM_YR_162988NaNNaNNaN00000
EP_SUM_YR_262988NaNNaNNaN265.691645.70074460
SUM_YR_162437NaNNaNNaN5355.388109.4502800239560
SUM_YR_262850NaNNaNNaN5604.038703.3602773234188
SEG_KM_SUM62988NaNNaNNaN17123.920960.83689994580717
WEIGHTED_SEG_KM62988NaNNaNNaN12777.217578.606978.26558440
LAST_FLIGHT_DATE629887312014/3/31959NaNNaNNaNNaNNaN
AVG_FLIGHT_COUNT62988NaNNaNNaN1.542151.7870.250.87526.625
AVG_BP_SUM62988NaNNaNNaN1421.442083.120752.37563163.5
BEGIN_TO_FIRST62988NaNNaNNaN120.145159.573050729
LAST_TO_END62988NaNNaNNaN176.12183.8221108731
AVG_INTERVAL62988NaNNaNNaN67.749877.5179044.6667728
MAX_INTERVAL62988NaNNaNNaN166.034123.3970143728
ADD_POINTS_SUM_YR_162988NaNNaNNaN540.3173956.0800600000
ADD_POINTS_SUM_YR_262988NaNNaNNaN814.6895121.800728282
EXCHANGE_COUNT62988NaNNaNNaN0.3197751.1360046
avg_discount62988NaNNaNNaN0.7215580.18542700.7118561.5
P1Y_Flight_Count62988NaNNaNNaN5.766267.2109203118
L1Y_Flight_Count62988NaNNaNNaN6.073168.1751303111
P1Y_BP_SUM62988NaNNaNNaN5366.728537.7702692246197
L1Y_BP_SUM62988NaNNaNNaN5558.369351.9602547259111
EP_SUM62988NaNNaNNaN265.691645.70074460
ADD_Point_SUM62988NaNNaNNaN1355.017868.4800984938
Eli_Add_Point_Sum62988NaNNaNNaN1620.78294.400984938
L1Y_ELi_Add_Points62988NaNNaNNaN1080.385639.8600728282
Points_Sum62988NaNNaNNaN12545.820507.806328.5985572
L1Y_Points_Sum62988NaNNaNNaN6638.7412601.802860.5728282
Ration_L1Y_Flight_Count62988NaNNaNNaN0.4864190.31910500.51
Ration_P1Y_Flight_Count62988NaNNaNNaN0.5135810.31910500.51
Ration_P1Y_BPS62988NaNNaNNaN0.5222930.33963200.5142520.999989
Ration_L1Y_BPS62988NaNNaNNaN0.4684220.33895600.4767470.999993
Point_NotFlight62988NaNNaNNaN2.728157.3641600140
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 62988 entries, 0 to 62987
Data columns (total 44 columns):
 #   Column                   Non-Null Count  Dtype  
---  ------                   --------------  -----  
 0   MEMBER_NO                62988 non-null  int64  
 1   FFP_DATE                 62988 non-null  object 
 2   FIRST_FLIGHT_DATE        62988 non-null  object 
 3   GENDER                   62985 non-null  object 
 4   FFP_TIER                 62988 non-null  int64  
 5   WORK_CITY                60719 non-null  object 
 6   WORK_PROVINCE            59740 non-null  object 
 7   WORK_COUNTRY             62962 non-null  object 
 8   AGE                      62568 non-null  float64
 9   LOAD_TIME                62988 non-null  object 
 10  FLIGHT_COUNT             62988 non-null  int64  
 11  BP_SUM                   62988 non-null  int64  
 12  EP_SUM_YR_1              62988 non-null  int64  
 13  EP_SUM_YR_2              62988 non-null  int64  
 14  SUM_YR_1                 62437 non-null  float64
 15  SUM_YR_2                 62850 non-null  float64
 16  SEG_KM_SUM               62988 non-null  int64  
 17  WEIGHTED_SEG_KM          62988 non-null  float64
 18  LAST_FLIGHT_DATE         62988 non-null  object 
 19  AVG_FLIGHT_COUNT         62988 non-null  float64
 20  AVG_BP_SUM               62988 non-null  float64
 21  BEGIN_TO_FIRST           62988 non-null  int64  
 22  LAST_TO_END              62988 non-null  int64  
 23  AVG_INTERVAL             62988 non-null  float64
 24  MAX_INTERVAL             62988 non-null  int64  
 25  ADD_POINTS_SUM_YR_1      62988 non-null  int64  
 26  ADD_POINTS_SUM_YR_2      62988 non-null  int64  
 27  EXCHANGE_COUNT           62988 non-null  int64  
 28  avg_discount             62988 non-null  float64
 29  P1Y_Flight_Count         62988 non-null  int64  
 30  L1Y_Flight_Count         62988 non-null  int64  
 31  P1Y_BP_SUM               62988 non-null  int64  
 32  L1Y_BP_SUM               62988 non-null  int64  
 33  EP_SUM                   62988 non-null  int64  
 34  ADD_Point_SUM            62988 non-null  int64  
 35  Eli_Add_Point_Sum        62988 non-null  int64  
 36  L1Y_ELi_Add_Points       62988 non-null  int64  
 37  Points_Sum               62988 non-null  int64  
 38  L1Y_Points_Sum           62988 non-null  int64  
 39  Ration_L1Y_Flight_Count  62988 non-null  float64
 40  Ration_P1Y_Flight_Count  62988 non-null  float64
 41  Ration_P1Y_BPS           62988 non-null  float64
 42  Ration_L1Y_BPS           62988 non-null  float64
 43  Point_NotFlight          62988 non-null  int64  
dtypes: float64(12), int64(24), object(8)
memory usage: 21.1+ MB
#去重
data.drop_duplicates(inplace=True)
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 62988 entries, 0 to 62987
Data columns (total 44 columns):
 #   Column                   Non-Null Count  Dtype  
---  ------                   --------------  -----  
 0   MEMBER_NO                62988 non-null  int64  
 1   FFP_DATE                 62988 non-null  object 
 2   FIRST_FLIGHT_DATE        62988 non-null  object 
 3   GENDER                   62985 non-null  object 
 4   FFP_TIER                 62988 non-null  int64  
 5   WORK_CITY                60719 non-null  object 
 6   WORK_PROVINCE            59740 non-null  object 
 7   WORK_COUNTRY             62962 non-null  object 
 8   AGE                      62568 non-null  float64
 9   LOAD_TIME                62988 non-null  object 
 10  FLIGHT_COUNT             62988 non-null  int64  
 11  BP_SUM                   62988 non-null  int64  
 12  EP_SUM_YR_1              62988 non-null  int64  
 13  EP_SUM_YR_2              62988 non-null  int64  
 14  SUM_YR_1                 62437 non-null  float64
 15  SUM_YR_2                 62850 non-null  float64
 16  SEG_KM_SUM               62988 non-null  int64  
 17  WEIGHTED_SEG_KM          62988 non-null  float64
 18  LAST_FLIGHT_DATE         62988 non-null  object 
 19  AVG_FLIGHT_COUNT         62988 non-null  float64
 20  AVG_BP_SUM               62988 non-null  float64
 21  BEGIN_TO_FIRST           62988 non-null  int64  
 22  LAST_TO_END              62988 non-null  int64  
 23  AVG_INTERVAL             62988 non-null  float64
 24  MAX_INTERVAL             62988 non-null  int64  
 25  ADD_POINTS_SUM_YR_1      62988 non-null  int64  
 26  ADD_POINTS_SUM_YR_2      62988 non-null  int64  
 27  EXCHANGE_COUNT           62988 non-null  int64  
 28  avg_discount             62988 non-null  float64
 29  P1Y_Flight_Count         62988 non-null  int64  
 30  L1Y_Flight_Count         62988 non-null  int64  
 31  P1Y_BP_SUM               62988 non-null  int64  
 32  L1Y_BP_SUM               62988 non-null  int64  
 33  EP_SUM                   62988 non-null  int64  
 34  ADD_Point_SUM            62988 non-null  int64  
 35  Eli_Add_Point_Sum        62988 non-null  int64  
 36  L1Y_ELi_Add_Points       62988 non-null  int64  
 37  Points_Sum               62988 non-null  int64  
 38  L1Y_Points_Sum           62988 non-null  int64  
 39  Ration_L1Y_Flight_Count  62988 non-null  float64
 40  Ration_P1Y_Flight_Count  62988 non-null  float64
 41  Ration_P1Y_BPS           62988 non-null  float64
 42  Ration_L1Y_BPS           62988 non-null  float64
 43  Point_NotFlight          62988 non-null  int64  
dtypes: float64(12), int64(24), object(8)
memory usage: 21.6+ MB


MEMBER_NO       会员卡号
FFP_DATE        入会时间
FIRST_FLIGHT_DATE  第一次飞行时间  
GENDER         性别      
FFP_TIER        会员卡级别     
WORK_CITY       城市    
WORK_PROVINCE    省份    
WORK_COUNTRY     国家  
AGE           年龄
LOAD_TIME       观测窗口结束时间
FLIGHT_COUNT     观测窗口内飞行次数
BP_SUM         总基本积分
EP_SUM_YR_1      
EP_SUM_YR_2            
SUM_YR_1        第一年总票价      
SUM_YR_2        第二年总票价     
SEG_KM_SUM       观测窗口的总飞行公里数  
WEIGHTED_SEG_KM        
LAST_FLIGHT_DATE      
AVG_FLIGHT_COUNT  平均飞次数    
AVG_BP_SUM            
BEGIN_TO_FIRST         
LAST_TO_END            
AVG_INTERVAL     平均时间间隔       
MAX_INTERVAL     最大时间间隔     
ADD_POINTS_SUM_YR_1     
ADD_POINTS_SUM_YR_2      
EXCHANGE_COUNT        
avg_discount      平均折扣率    
P1Y_Flight_Count     
L1Y_Flight_Count       
P1Y_BP_SUM            
L1Y_BP_SUM             
EP_SUM                    
ADD_Point_SUM             
Eli_Add_Point_Sum          
L1Y_ELi_Add_Points         
Points_Sum                 
L1Y_Points_Sum             
Ration_L1Y_Flight_Count  
Ration_P1Y_Flight_Count  
Ration_P1Y_BPS           
Ration_L1Y_BPS           
Point_NotFlight    非乘机的积分变动次数
data['GENDER'].value_counts()
男    48134
女    14851
Name: GENDER, dtype: int64
data['GENDER'].fillna('男')
0        男
1        男
2        男
3        男
4        男
        ..
62983    女
62984    男
62985    女
62986    女
62987    女
Name: GENDER, Length: 62988, dtype: object

“FFP_DATE”, “LOAD_TIME”, “FLIGHT_COUNT”, “SUM_YR_1”, “SUM_YR_2”, “SEG_KM_SUM”, “AVG_INTERVAL” , “MAX_INTERVAL”, “avg_discount”
FFP_DATE 入会时间
LOAD_TIME 观测窗口结束时间
FLIGHT_COUNT 观测窗口内飞行次数
SUM_YR_1 第一年总票价
SUM_YR_2 第二年总票价
AVG_INTERVAL 平均时间间隔
MAX_INTERVAL 最大时间间隔
avg_discount 平均折扣率

选取的特征是第一年总票价、第二年总票价、观测窗口总飞行公里数是要计算平均飞行每公里的票价,因为对于航空公司来说并不是票价越高,飞行公里数越长越能创造利润,相反而是那些近距离的高等舱的客户创造更大的利益。
当然总飞行公里数、飞行次数也都是评价一个客户价值的重要的指标
入会时间可以看出客户是不是老用户及忠诚度
通过平均乘机时间间隔、观察窗口内最大乘机间隔可以判断客户的乘机频率是不是固定
平均折扣率可以反映出客户给公里带来的利益,毕竟来说越是高价值的客户享用的折扣率越高

“入会时间”, “飞行次数”, “平均每公里票价”, “总里程”, “时间间隔差值”, “平均折扣率”

filter_data = data[[ "FFP_DATE", "LOAD_TIME", "FLIGHT_COUNT", "SUM_YR_1", "SUM_YR_2", "SEG_KM_SUM", "AVG_INTERVAL" , "MAX_INTERVAL", "avg_discount"]]
filter_data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 62988 entries, 0 to 62987
Data columns (total 9 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   FFP_DATE      62988 non-null  object 
 1   LOAD_TIME     62988 non-null  object 
 2   FLIGHT_COUNT  62988 non-null  int64  
 3   SUM_YR_1      62437 non-null  float64
 4   SUM_YR_2      62850 non-null  float64
 5   SEG_KM_SUM    62988 non-null  int64  
 6   AVG_INTERVAL  62988 non-null  float64
 7   MAX_INTERVAL  62988 non-null  int64  
 8   avg_discount  62988 non-null  float64
dtypes: float64(4), int64(3), object(2)
memory usage: 4.8+ MB
filter_data['SUM_YR_1'].fillna(filter_data['SUM_YR_1'].mean(),inplace=True)
filter_data['SUM_YR_2'].fillna(filter_data['SUM_YR_2'].mean(),inplace=True)
filter_data.describe([.02,.10,.25,.5,.75,.90,.99]).T
countmeanstdmin2%10%25%50%75%90%99%max
FLIGHT_COUNT62988.011.83941414.0494712.02.00002.0000003.0000007.00000015.00000027.0069.00213.0
SUM_YR_162988.05355.3760648073.9021610.00.00000.0000001020.0000002844.0000006524.25000012939.0037858.47239560.0
SUM_YR_262988.05604.0260148693.8247960.00.00000.000000785.0000002784.0000006826.25000014065.9041179.73234188.0
SEG_KM_SUM62988.017123.87869120960.844623368.01475.74002727.0000004747.0000009994.00000021271.25000039729.60100841.28580717.0
AVG_INTERVAL62988.067.74978877.5178660.02.00009.72973023.37037044.66666782.000000146.00412.00728.0
MAX_INTERVAL62988.0166.033895123.3971800.02.000018.00000079.000000143.000000228.000000339.00551.00728.0
avg_discount62988.00.7215580.1854270.00.37750.5089890.6119970.7118560.8094760.921.411.5
data["LOAD_TIME"] = pd.to_datetime(data["LOAD_TIME"])
data["FFP_DATE"] = pd.to_datetime(data["FFP_DATE"])
data["入会时间"] = data["LOAD_TIME"] - data["FFP_DATE"]
data["平均每公里票价"] = (data["SUM_YR_1"] + data["SUM_YR_2"]) / data["SEG_KM_SUM"]
data["时间间隔差值"] = data["MAX_INTERVAL"] - data["AVG_INTERVAL"]
deal_data = data.rename(
    columns = {"FLIGHT_COUNT" : "飞行次数", "SEG_KM_SUM" : "总里程", "avg_discount" : "平均折扣率"},
    inplace = False
)
filter_data = deal_data[["入会时间", "飞行次数", "平均每公里票价", "总里程", "时间间隔差值", "平均折扣率"]]
filter_data['平均每公里票价'] = filter_data['平均每公里票价'].fillna(value = 0)
filter_data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 62988 entries, 0 to 62987
Data columns (total 6 columns):
 #   Column   Non-Null Count  Dtype          
---  ------   --------------  -----          
 0   入会时间     62988 non-null  timedelta64[ns]
 1   飞行次数     62988 non-null  int64          
 2   平均每公里票价  62988 non-null  float64        
 3   总里程      62988 non-null  int64          
 4   时间间隔差值   62988 non-null  float64        
 5   平均折扣率    62988 non-null  float64        
dtypes: float64(3), int64(2), timedelta64[ns](1)
memory usage: 3.4 MB
filter_data['入会时间'].dt.days
0        2706
1        2597
2        2615
3        2047
4        1816
         ... 
62983    1046
62984    1484
62985    2923
62986     418
62987     407
Name: 入会时间, Length: 62988, dtype: int64
#filter_data['入会时间'] = filter_data['入会时间']/(60*60*24*10**9)
filter_data['入会时间']=filter_data['入会时间'].dt.days
from sklearn.preprocessing import StandardScaler
standard = StandardScaler()
standard.fit(filter_data)
StandardScaler()
S_data = pd.DataFrame(standard.transform(filter_data))
S_data.columns=["入会时间", "飞行次数", "平均每公里票价", "总里程", "时间间隔差值", "平均折扣率"]
S_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 62988 entries, 0 to 62987
Data columns (total 6 columns):
 #   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  
 0   入会时间     62988 non-null  float64
 1   飞行次数     62988 non-null  float64
 2   平均每公里票价  62988 non-null  float64
 3   总里程      62988 non-null  float64
 4   时间间隔差值   62988 non-null  float64
 5   平均折扣率    62988 non-null  float64
dtypes: float64(6)
memory usage: 2.9 MB
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
#返回所有轮廓系数的均值
from sklearn.metrics import silhouette_samples
#返回每个样本的自己的轮廓系数
inertia = []
silhouette = []
for i in range(2,10):

    cluster = KMeans(n_clusters=i,random_state=0,n_jobs=4).fit(S_data)
    
    inertia.append(cluster.inertia_)
    silhouette.append(silhouette_score(S_data,cluster.labels_))
print(inertia)
print(silhouette)
[300992.94143881754, 249961.1287967345, 212929.66150454507, 187429.24421259848, 170776.80489673465, 154981.14913712352, 145834.9083294653, 138235.00566447436]
[0.3592867371629582, 0.21454689862059148, 0.20674237627094663, 0.2213072501911795, 0.2103711574222313, 0.21673681639729542, 0.20137242231980962, 0.2065838067406841]
from matplotlib import pyplot as plt
#画图,通过观察SSE与k的取值尝试找出合适的k值
# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['font.size'] = 12.0
plt.rcParams['axes.unicode_minus'] = False
# 使用ggplot的绘图风格
plt.style.use('ggplot')

fig=plt.figure(figsize=(10, 8))
ax=fig.add_subplot(1,1,1)
ax.plot(range(2,10),inertia,marker="+")
ax.set_xlabel("n_clusters", fontsize=18)

fig.suptitle("KMeans", fontsize=20)
plt.show()


在这里插入图片描述

#画图,通过观察SSE与k的取值尝试找出合适的k值
# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['font.size'] = 12.0
plt.rcParams['axes.unicode_minus'] = False
# 使用ggplot的绘图风格
plt.style.use('ggplot')

fig=plt.figure(figsize=(10, 8))
ax=fig.add_subplot(1,1,1)
ax.plot(range(2,10),silhouette,marker="+")
ax.set_xlabel("n_clusters", fontsize=18)

fig.suptitle("KMeans", fontsize=20)
plt.show()


在这里插入图片描述

for i in range(4,9,2):
    kmodel = KMeans(n_clusters=i, n_jobs=4)
    kmodel.fit(S_data)
    # 简单打印结果
    r1 = pd.Series(kmodel.labels_).value_counts() #统计各个类别的数目
    r2 = pd.DataFrame(kmodel.cluster_centers_) #找出聚类中心
    # 所有簇中心坐标值中最大值和最小值
    max = r2.values.max()
    min = r2.values.min()
    r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向),得到聚类中心对应的类别下的数目
    r.columns = list(S_data.columns) + [u'类别数目'] #重命名表头

    # 绘图
    fig=plt.figure(figsize=(10, 8))
    ax = fig.add_subplot(111, polar=True)
    center_num = r.values
    feature = ["入会时间", "飞行次数", "平均每公里票价", "总里程", "时间间隔差值", "平均折扣率"]
    N =len(feature)
    for i, v in enumerate(center_num):
        # 设置雷达图的角度,用于平分切开一个圆面
        angles=np.linspace(0, 2*np.pi, N, endpoint=False)
        # 为了使雷达图一圈封闭起来,需要下面的步骤
        center = np.concatenate((v[:-1],[v[0]]))
        angles=np.concatenate((angles,[angles[0]]))
        # 绘制折线图
        ax.plot(angles, center, 'o-', linewidth=2, label = "第%d簇人群,%d人"% (i+1,v[-1]))
        # 填充颜色
        ax.fill(angles, center, alpha=0.25)
        # 添加每个特征的标签
        ax.set_thetagrids(angles[:-1] * 180/np.pi, feature, fontsize=15)
        # 设置雷达图的范围
        ax.set_ylim(min-0.1, max+0.1)
        # 添加标题
        plt.title('客户群特征分析图', fontsize=20)
        # 添加网格线
        ax.grid(True)
        # 设置图例
        plt.legend(loc='upper right', bbox_to_anchor=(1.3,1.0),ncol=1,fancybox=True,shadow=True)

    # 显示图形
    plt.show()


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一簇人群,9991人,最大的特点是时间间隔差值最大,分析可能是“季节型客户”,一年中在某个时间段需要多次乘坐飞机进行旅行,其他的时间则出行的不多,这类客户我们需要在保持的前提下,进行一定的发展;
第二簇人群,3157人,最大的特点就是平均每公里票价和平均折扣率都是最高的,应该是属于乘坐高等舱的商务人员,应该重点保持的对象,也是需要重点发展的对象,另外应该积极采取相关的优惠政策是他们的乘坐次数增加,有钱人;
第三簇人群,16245人,入会时间较短,每公里票价和平均折扣率属于较高的 属于新用户
第四簇人群,5221人, 总里程和飞行次数都是最多的,而且平均每公里票价也较高,是重点保持对象
第五簇人群,14357人,最大的特点就是入会的时间较长,属于老客户按理说平均折扣率应该较高才对,但是观察窗口的平均折扣率较低,而且总里程和总次数都不高,分析可能是流失的客户;
第六簇人群,14027人,各方面的数据都是比较低的,属于一般或低价值用户

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值