<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python數(shù)據(jù)分析,RFM客戶分類模型

          共 4564字,需瀏覽 10分鐘

           ·

          2021-12-26 03:38

          今天為大家分析一個(gè)英國(guó)在線零售商的交易數(shù)據(jù)集
          img
          著重為大家介紹一下如何運(yùn)用RFM模型對(duì)客戶進(jìn)行分類

          并且解決如下問(wèn)題:
          1.以星期為單位,周幾的銷售額最高?請(qǐng)可視化顯示。
          2.利用 RFM 模型,對(duì) United Kingdom 的用戶進(jìn)行分類,分為如下所述的六類。
          a) 選用合適的圖形,可視化展示每一類用戶數(shù)占總數(shù)的比例;可視化展示每一類用戶消費(fèi)額占總消費(fèi)額的比例。
          b) 對(duì)每一類用戶,顯示其每個(gè)月的消費(fèi)總額的變化情況。(顯示在一個(gè) figure 中

          以下是具體的代碼

          import?pandas?as?pd

          讀取數(shù)據(jù),并且對(duì)數(shù)據(jù)格式作出一些調(diào)整,方便后續(xù)分析

          #?讀取并且查看數(shù)據(jù)
          df?=?pd.read_csv("Online?Retail(1).csv")
          df.head()

          InvoiceNoStockCodeDescriptionQuantityInvoiceDateUnitPriceCustomerIDCountry
          053636585123AWHITE HANGING HEART T-LIGHT HOLDER62010/12/1 8:262.5517850.0United Kingdom
          153636571053WHITE METAL LANTERN62010/12/1 8:263.3917850.0United Kingdom
          253636584406BCREAM CUPID HEARTS COAT HANGER82010/12/1 8:262.7517850.0United Kingdom
          353636584029GKNITTED UNION FLAG HOT WATER BOTTLE62010/12/1 8:263.3917850.0United Kingdom
          453636584029ERED WOOLLY HOTTIE WHITE HEART.62010/12/1 8:263.3917850.0United Kingdom
          #?將時(shí)間數(shù)據(jù)設(shè)置為pandas的數(shù)據(jù)格式
          df["InvoiceDate"]?=?pd.to_datetime(df["InvoiceDate"])
          #?注:由于最近一次購(gòu)物(Recency)是針對(duì)某個(gè)時(shí)間點(diǎn)計(jì)算的,而最后訂貨日期是 2011-12-09,因此
          #?我們把 2011-12-10?當(dāng)作今天,來(lái)計(jì)算 Recency。
          df["target_time"]?=?pd.to_datetime("2011-12-10")
          #?計(jì)算?Recency
          df["Recency"]?=?pd.to_datetime(df["target_time"])?-?pd.to_datetime(df["InvoiceDate"])
          #?計(jì)算每個(gè)訂單的總金額
          df["total"]?=?df["Quantity"]?*?df["UnitPrice"]
          df.head()

          InvoiceNoStockCodeDescriptionQuantityInvoiceDateUnitPriceCustomerIDCountrytarget_timeRecencytotal
          053636585123AWHITE HANGING HEART T-LIGHT HOLDER62010-12-01 08:26:002.5517850.0United Kingdom2011-12-10373 days 15:34:0015.30
          153636571053WHITE METAL LANTERN62010-12-01 08:26:003.3917850.0United Kingdom2011-12-10373 days 15:34:0020.34
          253636584406BCREAM CUPID HEARTS COAT HANGER82010-12-01 08:26:002.7517850.0United Kingdom2011-12-10373 days 15:34:0022.00
          353636584029GKNITTED UNION FLAG HOT WATER BOTTLE62010-12-01 08:26:003.3917850.0United Kingdom2011-12-10373 days 15:34:0020.34
          453636584029ERED WOOLLY HOTTIE WHITE HEART.62010-12-01 08:26:003.3917850.0United Kingdom2011-12-10373 days 15:34:0020.34

          設(shè)置分析所需的星期、月份等屬性,方便按此聚合

          df["星期"]?=?df["InvoiceDate"].dt.dayofweek+1
          df["月份"]?=?df["InvoiceDate"].dt.month
          df.head()

          InvoiceNoStockCodeDescriptionQuantityInvoiceDateUnitPriceCustomerIDCountrytarget_timeRecencytotal星期月份
          053636585123AWHITE HANGING HEART T-LIGHT HOLDER62010-12-01 08:26:002.5517850.0United Kingdom2011-12-10373 days 15:34:0015.30312
          153636571053WHITE METAL LANTERN62010-12-01 08:26:003.3917850.0United Kingdom2011-12-10373 days 15:34:0020.34312
          253636584406BCREAM CUPID HEARTS COAT HANGER82010-12-01 08:26:002.7517850.0United Kingdom2011-12-10373 days 15:34:0022.00312
          353636584029GKNITTED UNION FLAG HOT WATER BOTTLE62010-12-01 08:26:003.3917850.0United Kingdom2011-12-10373 days 15:34:0020.34312
          453636584029ERED WOOLLY HOTTIE WHITE HEART.62010-12-01 08:26:003.3917850.0United Kingdom2011-12-10373 days 15:34:0020.34312

          按星期聚合總銷售額

          df_by_w?=?df.groupby("星期").agg({"total":"sum"}).reset_index()
          df_by_w

          星期total
          011588609.431
          121966182.791
          231734147.010
          342112519.000
          451540610.811
          57805678.891
          from?pyecharts?import?options?as?opts
          from?pyecharts.charts?import?Bar
          bar?=?(
          ????Bar()
          ????.add_xaxis(df_by_w["星期"].to_list())
          ????.add_yaxis("銷售額",?df_by_w["total"].to_list())
          ????.set_global_opts(title_opts=opts.TitleOpts(title="銷售額對(duì)比圖"))
          )

          以星期為單位,周幾的銷售額最高?答案是周四

          bar.render_notebook()
          img

          利用 RFM 模型,對(duì) United Kingdom 的用戶進(jìn)行分類

          按客戶ID聚合,對(duì)發(fā)票訂單號(hào)進(jìn)行計(jì)數(shù),對(duì)每個(gè)發(fā)票的銷售額進(jìn)行匯總,對(duì)recency取最小值(作為該顧客的recency值)

          df_by_c?=?df.groupby("CustomerID").agg({"InvoiceNo":"count",?"total":"sum",?"Recency":"min"}).reset_index()
          df_by_c.columns?=?["CustomerID","Frequency","Monetary","Recency"]
          df_by_c.head()

          CustomerIDFrequencyMonetaryRecency
          012346.020.00325 days 13:43:00
          112347.01824310.002 days 08:08:00
          212348.0311797.2475 days 10:47:00
          312349.0731757.5518 days 14:09:00
          412350.017334.40310 days 07:59:00

          求出各列的四分位數(shù)

          df_by_c["Frequency"].quantile([0.25,0.5,0.75])
          0.25?????17.0
          0.50?????42.0
          0.75????102.0
          Name:?Frequency,?dtype:?float64
          df_by_c["Monetary"].quantile([0.25,0.5,0.75])
          0.25?????293.3625
          0.50?????648.0750
          0.75????1611.7250
          Name:?Monetary,?dtype:?float64
          將Recency這列的數(shù)據(jù)格式轉(zhuǎn)為整數(shù)(取day這個(gè)屬性就可以了)
          df_by_c["Recency"]?=?df_by_c["Recency"].dt.days
          df_by_c["Recency"].quantile([0.25,0.5,0.75])
          0.25?????16.0
          0.50?????50.0
          0.75????143.0
          Name:?Recency,?dtype:?float64

          按照剛才求得的各項(xiàng)指標(biāo)的四分位數(shù),制定相應(yīng)的函數(shù),計(jì)算RFM的值

          def?decide_F(score):
          ????if?score>102:
          ????????return?1
          ????elif?score>42:
          ????????return?2
          ????elif?score>17:
          ????????return?3
          ????else:
          ????????return?4
          ????
          def?decide_M(score):
          ????if?score>1611.725:
          ????????return?1
          ????elif?score>648.075:
          ????????return?2
          ????elif?score>293.3625:
          ????????return?3
          ????else:
          ????????return?4
          ????
          def?decide_R(score):
          ????if?score<16:
          ????????return?1
          ????elif?score<50:
          ????????return?2
          ????elif?score<143:
          ????????return?3
          ????else:
          ????????return?4
          df_by_c["F"]?=?df_by_c.apply(lambda?x:?decide_F(x.Frequency),?axis?=?1)
          df_by_c["M"]?=?df_by_c.apply(lambda?x:?decide_F(x.Monetary),?axis?=?1)
          df_by_c["R"]?=?df_by_c.apply(lambda?x:?decide_R(x.Recency),?axis?=?1)

          看一下求得的值

          df_by_c.head()

          CustomerIDFrequencyMonetaryRecencyFMR
          012346.020.00325444
          112347.01824310.002111
          212348.0311797.2475313
          312349.0731757.5518212
          412350.017334.40310414

          根據(jù)定義,制定對(duì)客戶進(jìn)行類型劃分的函數(shù)

          def?decide_type(f,?m,?r):
          ????if?f?==?1?and?m?==?1?and?r?==?1:
          ????????return?"最佳客戶"
          ????if?f?==?1?and?m?==?1?and?r?==?3:
          ????????return?"近流失客戶"
          ????if?f?==?1?and?m?==?1?and?r?==?4:
          ????????return?"流失客戶"
          ????if?f?==?4?and?m?==?4?and?r?==?4:
          ????????return?"流失廉價(jià)客戶"
          ????if?f?==?1:
          ????????return?"忠誠(chéng)客戶"
          ????if?m?==?1:
          ????????return?"大金主"
          ????????
          ????
          df_by_c["客戶類型"]?=??df_by_c.apply(lambda?x:?decide_type(x.F,?x.M?,x.R),?axis?=?1)
          df_by_c.head()

          CustomerIDFrequencyMonetaryRecencyFMR客戶類型
          012346.020.00325444流失廉價(jià)客戶
          112347.01824310.002111最佳客戶
          212348.0311797.2475313大金主
          312349.0731757.5518212大金主
          412350.017334.40310414大金主
          df_by_c_count?=?df_by_c.groupby("客戶類型").size().sort_values(ascending=False)
          df_by_c_count
          客戶類型
          大金主???????3064
          最佳客戶???????533
          忠誠(chéng)客戶???????347
          近流失客戶??????154
          流失客戶????????47
          流失廉價(jià)客戶??????39
          dtype:?int64
          datas?=?list(zip(df_by_c_count.index.to_list(),?df_by_c_count.to_list()))
          datas
          [('大金主',?3064),
          ?('最佳客戶',?533),
          ?('忠誠(chéng)客戶',?347),
          ?('近流失客戶',?154),
          ?('流失客戶',?47),
          ?('流失廉價(jià)客戶',?39)]
          from?pyecharts?import?options?as?opts
          from?pyecharts.charts?import?Pie
          def?create_pie(datas,?title)?->?Pie:
          ????"""?創(chuàng)建餅圖對(duì)象
          ????文檔地址:https://pyecharts.org/#/zh-cn/basic_charts?id=pie%ef%bc%9a%e9%a5%bc%e5%9b%be
          ????@param?datas:?數(shù)據(jù),形式為[('類型1',?數(shù)據(jù)1),?('類型2',?數(shù)據(jù)2),?('類型3',?數(shù)據(jù)3)]
          ????@param?title:?圖表的標(biāo)題
          ????"
          ""
          ????pie?=?Pie()
          ????pie.add("",?datas)
          ????pie.set_global_opts(
          ????????title_opts=opts.TitleOpts(title=title),
          ????????legend_opts=opts.LegendOpts(pos_right="right")
          ????)
          ????pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:?{c}:?go7utgvlrp%"))
          ????return?pie

          a)可視化展示每一類用戶數(shù)占總數(shù)的比例

          pie?=?create_pie(datas,?"餅圖-客戶類型對(duì)比")
          pie.render_notebook()
          img

          取出"CustomerID", ?"客戶類型"這兩列,準(zhǔn)備與df合并

          df1?=?df_by_c[["CustomerID",??"客戶類型"]]
          new?=?pd.merge(df,?df1,?on="CustomerID")
          new.head()

          InvoiceNoStockCodeDescriptionQuantityInvoiceDateUnitPriceCustomerIDCountrytarget_timeRecencytotal星期月份客戶類型
          053636585123AWHITE HANGING HEART T-LIGHT HOLDER62010-12-01 08:26:002.5517850.0United Kingdom2011-12-10373 days 15:34:0015.30312流失客戶
          153636571053WHITE METAL LANTERN62010-12-01 08:26:003.3917850.0United Kingdom2011-12-10373 days 15:34:0020.34312流失客戶
          253636584406BCREAM CUPID HEARTS COAT HANGER82010-12-01 08:26:002.7517850.0United Kingdom2011-12-10373 days 15:34:0022.00312流失客戶
          353636584029GKNITTED UNION FLAG HOT WATER BOTTLE62010-12-01 08:26:003.3917850.0United Kingdom2011-12-10373 days 15:34:0020.34312流失客戶
          453636584029ERED WOOLLY HOTTIE WHITE HEART.62010-12-01 08:26:003.3917850.0United Kingdom2011-12-10373 days 15:34:0020.34312流失客戶
          by_c_t?=?new.groupby("客戶類型")["total"].sum().sort_values(ascending=False)
          by_c_t
          客戶類型
          最佳客戶??????4106703.970
          大金主???????2472418.943
          忠誠(chéng)客戶??????1270195.150
          近流失客戶??????364926.870
          流失客戶????????86803.711
          流失廉價(jià)客戶?????-11011.550
          Name:?total,?dtype:?float64
          datas?=?list(zip(by_c_t.index.to_list(),?by_c_t.to_list()))
          datas
          [('最佳客戶',?4106703.970000173),
          ?('大金主',?2472418.9429999804),
          ?('忠誠(chéng)客戶',?1270195.1499999189),
          ?('近流失客戶',?364926.870000011),
          ?('流失客戶',?86803.71099999893),
          ?('流失廉價(jià)客戶',?-11011.549999999996)]

          b) 可視化展示每一類用戶消費(fèi)額占總消費(fèi)額的比例

          pie?=?create_pie(datas,?"餅圖-客戶銷售額對(duì)比")
          pie.render_notebook()
          img


          最后,推薦螞蟻老師的《零基礎(chǔ)學(xué)Python數(shù)據(jù)分析》:



          瀏覽 106
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91操操| 水多多在线成人免费视频 | 国产偷人免费视频 | 天天天天爽夜夜夜夜爽 | 青青草娱乐视频 |