色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎么利用Kmeans算法實現用戶分類

汽車電子技術 ? 來源:Python數據分析之旅 ? 作者:cauwfq ? 2023-02-24 16:19 ? 次閱讀

poYBAGP4cmWAQ1FRAAC8QTMl7iY806.png

一.項目背景

為了建立客戶信息資源管理及運營模式,某公司希望通過客戶的基本消費信息進行分析,
衡量客戶價值和客戶創利能力,優化客戶資源,提高營銷效率,避免不必要的資源

二.實現步驟

1.導包讀入數據,篩選所需數據

# 導入所需庫
import numpy as np
import pandas as pd
import datetime
import matplotlib.pyplot as plt
import time
import matplotlib.gridspec as gridspec
#import pyecharts

# 解決 matplotlib 顯示中文、負號問題
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False 

#獲取數據
def get_data(file_path):
    #讀取數據
    df1= pd.read_excel(file_path)
    # 提取 RFM 模型所需特征列:'訂單編號','買家會員名','買家實際支付貨款','訂單付款時間','寶貝總數量'
    df2 = df1[['訂單編號','買家會員名','買家實際支付金額','訂單付款時間','寶貝總數量']]
    #返回數據
    return df2
2.數據重復值缺失值處理

#處理數據
def process_data(df):
    #判斷有沒有重復值
    if df.duplicated().sum()==0:
        print('無重復數據')
    else:
        #刪除重復值
        df=df.drop_duplicates(inplace=True)
    #判斷有沒有缺失值
    if df.isnull().any().sum()==0:
        print('無缺失值')
    else:
        #刪除缺失值
        df=df.dropna(inplace=True)
    #返回數據
    return df
3.獲取RFMP各項值

#獲取R值
def get_R(df):
    # 計算時間差
    time_minus =  datetime.datetime.now()- df['訂單付款時間'] 
    # 將時間差轉換成數字格式
    df['prior_R'] = time_minus.astype(str).str.findall('d+.*d*').map(lambda x: int(x[0]) + (int(x[1]) / 24) + 
                                                   (int(x[2]) / (24 * 60)) + (float(x[3]) / (24 * 3600)))
    # 按會員進行分組,確定每個會員最近一次購買離現在的時間間隔
    R = df.groupby('買家會員名')['prior_R'].min()
    return R


#獲取FMP值,P值表示買家購買數量
def get_F_M_P(df):
    # 按會員進行分組,確定每個會員的訂單數量
    F = df.groupby('買家會員名')['訂單編號'].count()
    # 按會員進行分組,確定每個會員的實際支付金額
    M = df.groupby('買家會員名')['買家實際支付金額'].sum() 
    # 按會員進行分組,確定每個會員的寶貝總數量
    P = df.groupby('買家會員名')['寶貝總數量'].sum() 
    return (F,M,P)


#將RFMP數據合成DataFrame
def get_data(R,F,M,P):
    #列名稱
    col_list = list('RFMP') 
    #創建DataFrame
    model_data = pd.DataFrame([], index=R.index) 
    #添加數據
    for col_names, values in zip(col_list, [R, F, M, P]):
          model_data[col_names] = values
    #類型轉換
    model_data = model_data.astype(float)
    #返回數據
    return model_data
4.利用Kmeans算法進行分類

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.preprocessing import StandardScaler, MinMaxScaler

#獲取數據
df0 = model_data.iloc[:, 0:4]
#標準化數據
res_std = StandardScaler().fit_transform(df0)

#分類簇數
n_clusters = range(2, 7)
#評分標準
scores = []
#遍歷每種分類
for i in range(len(n_clusters)):
    #訓練模型
    clf = KMeans(n_clusters = n_clusters[i], random_state = 20).fit(res_std)
    #獲取評分
    scores.append(silhouette_score(res_std, clf.labels_))
#獲取最大評分索引
maxindex = scores.index(max(scores))
#初始畫布
plt.figure(figsize = (8, 6), dpi = 100) 
#繪制圖形
plt.plot(n_clusters, scores, linestyle = '-.', c = 'b', alpha = 0.6, marker = 'o')
#編輯最佳簇數
plt.axvline(x = n_clusters[maxindex], linestyle = '--', c = 'r', alpha = 0.5)
#設置標題
plt.title('RFMP的聚類輪廓系數圖')
#設置y軸標簽
plt.ylabel('silhouette_score')
#設置x軸標簽
plt.xlabel('n_clusters')
#存儲圖形
plt.savefig('./RFMP聚類輪廓系數圖.png')

pYYBAGP4crSAePATAAB6CkBuGAs467.png
#獲取最佳分簇數模型
clf = KMeans(n_clusters = 2, random_state = 20).fit(res_std)
#添加label
df0['labels'] = clf.labels_
df0

poYBAGP4csqADAxuAADA4L2iLV4219.png
# 統計一下兩類用戶之間的差異,發現兩類客戶之間數量相差過大
print(f"類別0所占比例為:{df0['labels'].value_counts().values[0] / df0.shape[0]} t 類別1所占的比例為:{df0['labels'].value_counts().values[1] / df0.shape[0]}")
df0['labels'].value_counts()

poYBAGP4cuGAACohAABhAWmWrPU968.png
#用均值來評估兩類樣本之間的LRFMP
R_avg = df0.groupby('labels').agg({'R': np.mean}).reset_index()
F_avg = df0.groupby('labels').agg({'F': np.mean}).reset_index()
M_avg = df0.groupby('labels').agg({'M': np.mean}).reset_index()
P_avg = df0.groupby('labels').agg({'P': np.mean}).reset_index()

# 繪制相關的條形圖
def plot_bar(df_list, nrow, ncol):
    #初始畫布
    fig, axs = plt.subplots(nrow, ncol, figsize = (2 * (ncol + 2), 2.5), dpi = 100)
    #遍歷每個坐標系
    for i in range(len(axs)):
        #獲取坐標系
        ax = axs[i]
        #獲取數據
        df = df_list[i]
        #畫柱狀圖
        ax.bar(df.iloc[:, 0], df.iloc[:, 1], color = 'm', alpha = 0.4, width = 0.5)
        #獲取RFMP標簽對應數值
        for x, y in enumerate(df.iloc[:, 1].tolist()):
            #標注數據
            ax.text(x, y / 2, '%.0f' % y, va = 'bottom', ha = 'center', fontsize = 12)
        #設置x軸刻度
        ax.set_xticks([0, 1])
        #設置y軸刻度
        ax.set_yticks(())
        #設置小標題
        ax.set_title(f'{df.columns[1]}')
    #設置大標題
    plt.suptitle('兩類客戶的RFMP均值差異', y = 1.1, fontsize = 14)
    #存儲圖片
    plt.savefig('./兩類客戶LRFMP均值差異.png')
#獲取數據
df_list = [ R_avg, F_avg, M_avg, P_avg]
#繪制圖形
plot_bar(df_list, 1, 4)

總結:分為兩類用戶效果確實很明顯,但是分析還是有點一刀切,我們發現圖中四類效果也
不是很差,后期感興趣讀者可以進行四類用戶分類,在這里主要還是給大家一個思維拓展.

pYYBAGP4cwSAMhIiAABSH_4PLiQ061.png
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 分析
    +關注

    關注

    2

    文章

    134

    瀏覽量

    33323
  • 模式
    +關注

    關注

    0

    文章

    65

    瀏覽量

    13404
  • 信息資源
    +關注

    關注

    0

    文章

    3

    瀏覽量

    5930
收藏 人收藏

    評論

    相關推薦

    基于多通道分類合成的SAR圖像分類研究

    。目前,SAR圖像分類多是基于單通道圖像數據。多通道SAR數據極大地豐富了地物目標信息量,利用多通道數據進行分類,是SAR圖像分類的重要發展方向。本文提出基于多通道
    發表于 04-23 11:52

    選項卡跳轉,實現用戶登錄后跳轉到計時選項卡

    選項卡跳轉,實現用戶登錄后跳轉到計時選項卡
    發表于 12-13 16:48

    下拉列表或者枚舉如何實現用戶自己增加選項

    下拉列表或者枚舉如何實現用戶自己增加選項,比方說我加工的時候有很多種產品,每種產品的參數不一樣,當要增加新產品的時候,就要在下拉列表或枚舉中增加新的項目。高手指點
    發表于 08-17 08:36

    利用labSQL做一個用戶管理 如何實現

    和pc機連接是沒問題的 我現在可以實現利用labSQL的添加刪除查詢等簡單實現現在我想實現用戶管理的功能,包括查找庫里是否存在該用戶刪除選定
    發表于 09-28 15:44

    labview巧用配置文件實現用戶登錄系統

    ;gt;在利用labview虛擬儀器時,需要制作一個登陸系統。這里總結了3種方法:1、利用固定常量數組制作登錄系統該方法實現簡單,但用戶名和密碼不能修改。這里不做詳細介紹。2、
    發表于 11-27 15:49

    自定義Kmeans函數對多個坐標點進行自動分類實現

    ML之Kmeans利用自定義Kmeans函數實現對多個坐標點(自定義四個點)進行自動(最多迭代10次)分類
    發表于 12-25 10:51

    三種聚類算法學習

    聚類KMeans理論與算法實現
    發表于 03-12 07:02

    KNN分類算法及python代碼實現

    kNN分類算法的Python實現
    發表于 06-05 12:02

    請問一下怎么實現用戶自定制LED驅動器的設計?

    請問一下怎么實現用戶自定制LED驅動器的設計?
    發表于 06-08 06:32

    利用KNN算法實現基于系統調用的入侵檢測技術

    算法來自一種文本分類算法-KNN 算法,文中給出了用該算法實現的入侵檢測系統模型.
    發表于 06-13 11:01 ?18次下載

    分類算法分類及比較

    分類算法分類及比較 流分類算法可以根據不同的原則進行分類,本文根據對多個區域查找之間的關系
    發表于 03-04 11:26 ?2032次閱讀

    基于用戶身份特征的多標簽分類算法

    目前對于智慧校園中的家校溝通,缺乏一種衡量和參考的方法。針對智慧校園中特有的聊天特點即存在明顯的身份特征,提出了一種基于用戶身份特征的多標簽分類算法-Adaboost. ML。首先,新增加了啟發式
    發表于 12-01 16:22 ?0次下載

    愛立信性能優化器實現用戶體驗最優化

    作為愛立信認知軟件產品組合的一部分,“愛立信性能優化器(Ericsson Performance Optimizers)”采用了數字孿生技術,以及深度強化學習等先進AI技術,充分利用網絡優化技術的自動化、可擴展性、速度、精度和一致性,同時實現用戶體驗最優化與運營商效益最大
    的頭像 發表于 05-10 11:36 ?1210次閱讀

    在洗碗機中設計和實現用戶界面的新方法

    在洗碗機中設計和實現用戶界面的新方法
    發表于 10-31 08:23 ?3次下載
    在洗碗機中設計和<b class='flag-5'>實現用戶</b>界面的新方法

    EtherCAT運動控制器PT/PVT實現用戶自定義軌跡規劃

    EtherCAT運動控制器PT/PVT實現用戶自定義軌跡規劃。
    的頭像 發表于 08-15 11:49 ?662次閱讀
    EtherCAT運動控制器PT/PVT<b class='flag-5'>實現用戶</b>自定義軌跡規劃
    主站蜘蛛池模板: 国产小视频免费在线观看| 久久se精品一区二区国产| RUNAWAY韩国动漫免费官网版| 最新 国产 精品 精品 视频| 中文字幕精品AV内射夜夜夜| 中文字幕亚洲男人的天堂网络| 2020亚洲国产在线播放在线| ASIAN大陆明星裸休合成PICS| yellow免费观看完整版直播| 高h肉肉乳共妻| 国产亚洲精品久久久999蜜臀| 寂寞夜晚视频高清观看免费| 浪货嗯啊趴下NP粗口黄暴| 朋友的娇妻好爽好烫嗯| 五月丁香啪啪.| 亚洲一在线| 99亚洲精品| 国产精品亚洲欧美| 久久伊人电影| 日本无码免费久久久精品| 亚洲成人免费观看| 久久re这里视频只精品首页| 毛片网站视频| 日日碰狠狠躁久久躁综合网| 亚洲精品久久久久69影院| 做你的爱人BD日本| 丰满老熟女白浆直流| 果冻传媒AV精品一区| 麻豆啊传媒app黄版破解免费 | 69日本人XXXX护士HD| 纯肉高H种马艳遇风流多| 国产午夜精品理论片| 快乐激情站| 视频成人永久免费下载| 伊人网综合网| 调教日本美女| 久久久久久亚洲精品影院| 秋霞伦理电影在线看| 亚洲精品午睡沙发系列| jiapanese50欧美熟妇| 好爽别插了无码视频|