python數據分析:客戶價值分析案例實戰


簡介:本案例以電信運營商客戶信息為數據,通過層次聚類和K-
means聚類,對用戶划分成不同的群體,然后可以根據用戶群體的不同特征提供個性化的策略,從而達到提高ARPU的效果。

1.商業理解

根據客戶的日常消費行為,我們可以把客戶划分為不同的群體,根據不同群體的消費行為特征,我們可以作出針對性的營銷策略。從而達到發展新業務、減少客戶流失率,爭取新用戶,提高ARPU的目標

對運營商用戶的分類,一般可以分為:
公眾用戶
企業用戶
大客戶

本次針對公眾用戶進行划分,目標將“公眾用戶”分類為:
高端用戶
中端用戶
離網趨勢用戶
其他用戶

2.展示數據

本次采用的數據有:
客戶的個人信息
客戶的通話信息
各資費套餐的詳情

![這里寫圖片描述](https://img-
blog.csdn.net/20180824095356365?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjAwMDUyNg/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA/dissolve/70)

3.數據預處理

    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    import scipy.cluster.hierarchy#聚類、層次
    #讀入數據
    custinfo=pd.read_csv("custinfo.csv")
    custcall=pd.read_csv("custcall.csv")
    
    #數據聚合
    custcall_average=custcall.groupby(custcall["Customer_ID"]).mean()
    del custcall_average["month"]
    
    #數據合並
    data = pd.merge(custinfo,custcall_average,left_on='Customer_ID',right_index=True)#使用右邊dataframe的索引值作為連接鍵
    data.index=data["Customer_ID"]
    del data["Customer_ID"]
[/code]

##  4.數據觀察

```code
    des=data.describe()
    #查看取值離散變量的分布
    pd.value_counts(data["Gender"]) #查看性別分布
    pd.value_counts(data['Tariff'])#套餐
    pd.value_counts(data['Handset'])#手機品牌
    
    for i in data.columns:
        if i not in ['Gender','Tariff','Handset']:
            plt.figure()
            sns.distplot(data[i],bins=10,hist_kws=dict(edgecolor='k'),kde=False)
     plt.show()

![這里寫圖片描述](https://img-
blog.csdn.net/20180824102031494?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjAwMDUyNg/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA/dissolve/70)

5.模型建立

    #模型建立
    #數據整理
    xunibinaliang=data[["Gender",'Tariff','Handset']]
    dummies=pd.get_dummies(xunibinaliang)   #將類別變量轉為虛擬變量,gender為二值型,get_dummies處理后還是一列
    data_zs=pd.DataFrame
    i=data.columns.difference([u'Age',u'Gender',u'Tariff',u'Handset']) #一維數組做差
    data_zs=(data[i]-data[i].mean())/data[i].std()
[/code]

```code
    #確定聚類數目
    from scipy.cluster.hierarchy import linkage,dendrogram
    #進行層次聚類
    Z = linkage(data_zs, method = 'ward', metric = 'euclidean') 
    P = dendrogram(Z, 0) #將層級聚類結果以樹狀圖表示出來 dendrogram-樹圖
    plt.show()#觀察樹圖,認為分成4類比較合適

![這里寫圖片描述](https://img-
blog.csdn.net/20180824104743494?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjAwMDUyNg/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA/dissolve/70)

    #K-means聚類
    #參數初始化
    k = 4 #聚類的類別
    iteration = 500 #聚類最大循環次數,即迭代次數
    
    #構建k-means模型
    from sklearn.cluster import KMeans 
    model = KMeans(n_clusters = k, n_jobs = 4,max_iter=iteration) #構造聚類器,分為k類,並發數4
    model.fit(data_zs) #開始聚類
[/code]

##  6.數據展示

```code
    #簡單打印結果
    r1 = pd.Series(model.labels_).value_counts() #label_:每個樣本對應的簇類別標簽,統計各個類別的數目
    r3=model.labels_
    r2 = pd.DataFrame(model.cluster_centers_) #行為每一類的聚類中心,每一列的意義是按照data_zs
    r4=model.cluster_centers_
    r = pd.concat([r2, r1], axis = 1) #橫向連接(0是縱向),得到聚類中心對應的類別下的數目
    r.columns = list(data_zs.columns)+ [u'class'] #重命名表頭#這里傳入的列表名必須list
    print(r)
    
    #類中心比較
    r[i].plot(figsize=(10,10))
    plt.show()
    
    #每個類別各屬性的概率密度圖
[/code]

![這里寫圖片描述](https://img-
blog.csdn.net/20180824105543552?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjAwMDUyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

分群的注意點:  
1)群間差異是否明顯  
2)群內特征是否相似  
3)分群對業務是否有指導意義


![在這里插入圖片描述](https://img-blog.csdnimg.cn/20210608151750993.gif)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM