用Hive建立RFM模型

一、前言

做數(shù)據(jù)分析的時(shí)候小槐,我們總是喜歡把客戶分類淮捆,這樣才能更有針對(duì)性的制定運(yùn)營活動(dòng),比如按性別本股、年齡攀痊、等級(jí)、區(qū)域拄显、設(shè)備苟径、渠道等各個(gè)維度進(jìn)行細(xì)分,這些維度都是基于客戶的自身屬性躬审。


用戶分類

RFM模型是客戶關(guān)系管理領(lǐng)域里的一種消費(fèi)行為分析模型棘街,用來衡量用戶的內(nèi)在價(jià)值和忠誠度。它從三個(gè)關(guān)鍵維度描述用戶的購買行為承边,其中R近度(Recency)代表最近購買時(shí)間遭殉,指上次購買距離當(dāng)前的時(shí)間間隔;F頻度(Frequency)代表購買頻率博助,指某一段時(shí)間內(nèi)購買的次數(shù)险污;M額度(Monetary)代表總購買金額,指某一段時(shí)間內(nèi)購買商品的金額富岳。

經(jīng)過研究發(fā)現(xiàn):
- R值越小蛔糯,用戶越有可能產(chǎn)生新的交易。
- F值越大窖式,用戶越有可能產(chǎn)生新的交易蚁飒。
- M值越大,用戶越有可能產(chǎn)生新的交易萝喘。

根據(jù)RFM模型淮逻,可以將付費(fèi)用戶細(xì)分為8種類型:

R近度 F頻度 M額度 用戶類型
重要價(jià)值客戶
重要發(fā)展客戶
重要保持客戶
重要挽留客戶
一般價(jià)值客戶
一般發(fā)展客戶
一般保持客戶
一般挽留客戶
RFM模型

二琼懊、構(gòu)建RFM模型

樣本數(shù)據(jù)(純屬虛構(gòu))
_uid pid money _tm pstatus
10255293 6000311 0.99 1519884098 2
10255293 6000939 0.99 1519884598 1
10459895 6000326 5 1519884709 2
10459895 6001344 30 1519917316 2
112135473 6000016 100 1519873245 2
112135473 6000070 1000 1519875865 2
116956409 6000233 5 1519881468 2
117171509 6000598 30 1519893902 2
117171509 6000585 5 1519893441 2
1179365 5999641 1.99 1519841118 2

其中,_uid表示付費(fèi)用戶ID爬早,pid表示訂單ID肩碟,money表示付費(fèi)額度,_tm表示付費(fèi)時(shí)間凸椿,pstatus表示訂單狀態(tài)(1表示退款削祈,2表示支付成功),hive sql實(shí)現(xiàn)如下:

Hive SQL實(shí)現(xiàn)
WITH q1
AS (
    SELECT *
        ,datediff(from_unixtime(unix_timestamp(), 'yyyy-MM-dd'), from_unixtime(cast(last AS INT), 'yyyy-MM-dd')) AS recency
    FROM (
        SELECT *
        FROM (
            SELECT `_uid`
                ,cast(COALESCE(pamount, 0) AS DOUBLE) * cast(COALESCE(prate, 0) AS DOUBLE) AS pay
                ,pstatus
                ,row_number() OVER (
                    PARTITION BY `_uid`
                    ,`pid` ORDER BY `_tm` DESC
                    ) AS rank
                ,FIRST_VALUE(`_tm`) OVER (
                    PARTITION BY `_uid` ORDER BY `_tm` DESC
                    ) AS last
            FROM user_order2
            WHERE tm BETWEEN 20180101
                    AND 20180131
                AND plat = 607
            ) subquery
        WHERE subquery.rank = 1
            AND subquery.pstatus = 2
        ) a
    )
INSERT overwrite LOCAL directory '/home/hadoop/order' ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
SELECT u1.`_uid`
    ,CASE 
        WHEN u1.recency >= u2.recency
            AND u1.frequency >= u2.frequency
            AND u1.monetary >= u2.monetary
            THEN '重要價(jià)值客戶'
        WHEN u1.recency >= u2.recency
            AND u1.frequency < u2.frequency
            AND u1.monetary >= u2.monetary
            THEN '重要發(fā)展客戶'
        WHEN u1.recency < u2.recency
            AND u1.frequency >= u2.frequency
            AND u1.monetary >= u2.monetary
            THEN '重要保持客戶'
        WHEN u1.recency < u2.recency
            AND u1.frequency < u2.frequency
            AND u1.monetary >= u2.monetary
            THEN '重要挽留客戶'
        WHEN u1.recency >= u2.recency
            AND u1.frequency >= u2.frequency
            AND u1.monetary < u2.monetary
            THEN '一般價(jià)值客戶'
        WHEN u1.recency >= u2.recency
            AND u1.frequency < u2.frequency
            AND u1.monetary < u2.monetary
            THEN '一般發(fā)展客戶'
        WHEN u1.recency < u2.recency
            AND u1.frequency >= u2.frequency
            AND u1.monetary < u2.monetary
            THEN '一般保持客戶'
        WHEN u1.recency < u2.recency
            AND u1.frequency < u2.frequency
            AND u1.monetary < u2.monetary
            THEN '一般挽留客戶'
        END
FROM (
    SELECT `_uid`
        ,recency
        ,sum(pay) AS monetary
        ,count(1) AS frequency
    FROM q1
    GROUP BY `_uid`
        ,recency
    ) u1
JOIN (
    SELECT t2.daysum / t1.ucount AS recency
        ,t1.paycount / t1.ucount AS frequency
        ,t1.paysum / t1.ucount AS monetary
    FROM (
        SELECT sum(pay) AS paysum
            ,sum(1) AS paycount
            ,(count(DISTINCT `_uid`) * 1.0) AS ucount
        FROM q1
        ) t1
    JOIN (
        SELECT sum(recency) AS daysum
        FROM (
            SELECT `_uid`
                ,recency
            FROM q1
            GROUP BY `_uid`
                ,recency
            ) t
        ) t2
    ) u2
最終輸出結(jié)果
_uid 標(biāo)簽類型
12529029 重要價(jià)值客戶
94834596 重要發(fā)展客戶
96111789 重要保持客戶
115595186 重要挽留客戶
95696135 一般價(jià)值客戶
94851783 一般發(fā)展客戶
96083591 一般保持客戶
94901846 一般挽留客戶
用戶類型分布
用戶類型分布

三脑漫、總結(jié)

RFM是一個(gè)簡潔髓抑、有效的模型。但其這三個(gè)維度包含的信息有限优幸。在用戶分類運(yùn)營過程中吨拍,無法具體到個(gè)性化需求。如果某個(gè)類別的用戶對(duì)活動(dòng)沒有響應(yīng)网杆,他仍然會(huì)出現(xiàn)在下一次的營銷目標(biāo)人群中羹饰,造成資源的浪費(fèi)√既矗可以結(jié)合畫像系統(tǒng)中的其他標(biāo)簽屬性队秩,比如購買周期、響應(yīng)程度昼浦、活躍程度等維度馍资。
上面的例子采用均值來劃分用戶類型,它容易受到數(shù)據(jù)極端值的影響关噪,對(duì)于偏態(tài)分布的數(shù)據(jù)鸟蟹,其劃分結(jié)果的代表性較差,可以使用中位數(shù)(percentile)或者其他劃分標(biāo)準(zhǔn)使兔,如找出所有用戶的整體分布形態(tài)建钥,按照業(yè)務(wù)需求進(jìn)行切分。
另外就是不同用戶每次付費(fèi)額度差異較大虐沥,有的用戶一次付費(fèi)額度只有1元熊经,有的用戶一次付費(fèi)100元。但在計(jì)算頻度時(shí)都算一次置蜀。因此需要在RFM指標(biāo)基礎(chǔ)上加上權(quán)重值奈搜,使其能夠較好的反應(yīng)出用戶的最終價(jià)值。
聚類算法也經(jīng)常被用于客戶分類盯荤,我們將在下章特征工程中給出詳細(xì)說明。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末焕盟,一起剝皮案震驚了整個(gè)濱河市秋秤,隨后出現(xiàn)的幾起案子宏粤,更是在濱河造成了極大的恐慌,老刑警劉巖灼卢,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绍哎,死亡現(xiàn)場離奇詭異,居然都是意外死亡鞋真,警方通過查閱死者的電腦和手機(jī)崇堰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涩咖,“玉大人海诲,你說我怎么就攤上這事¢莼ィ” “怎么了特幔?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長闸昨。 經(jīng)常有香客問我蚯斯,道長,這世上最難降的妖魔是什么饵较? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任拍嵌,我火速辦了婚禮,結(jié)果婚禮上循诉,老公的妹妹穿的比我還像新娘撰茎。我一直安慰自己,他們只是感情好打洼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布龄糊。 她就那樣靜靜地躺著,像睡著了一般募疮。 火紅的嫁衣襯著肌膚如雪炫惩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天阿浓,我揣著相機(jī)與錄音他嚷,去河邊找鬼。 笑死芭毙,一個(gè)胖子當(dāng)著我的面吹牛筋蓖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播退敦,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼粘咖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了侈百?” 一聲冷哼從身側(cè)響起瓮下,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤翰铡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后讽坏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锭魔,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年路呜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迷捧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胀葱,死狀恐怖漠秋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巡社,我是刑警寧澤膛堤,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站晌该,受9級(jí)特大地震影響肥荔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朝群,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一燕耿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姜胖,春花似錦誉帅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慢蜓,卻和暖如春亚再,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晨抡。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國打工氛悬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耘柱。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓如捅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親调煎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子镜遣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容