如果沒有做分層基本就沒有在做運營這件事。——王慧文
用戶分層是一個應(yīng)用于產(chǎn)品和運營領(lǐng)域的概念。通常由運營人員協(xié)調(diào)數(shù)據(jù)分析部門和產(chǎn)品部門共同完成。
不同的用戶行為會衍生出不同的特性;面對不同特性的用戶,為了提高其更大的價值又對應(yīng)了不同的針對辦法,從而在業(yè)務(wù)上衍生了用戶分層的概念。網(wǎng)上關(guān)于用戶分層的方法已經(jīng)多如牛毛,但在實際應(yīng)用中依然有很多坑并未做詳細的闡述。本文將以我的實戰(zhàn)經(jīng)驗,按照用戶分層的順序,?細數(shù)幾個大家可能不知道的知識點。
一:數(shù)據(jù)是分層的前提??
完善的數(shù)據(jù)打點是用戶分層必不可少的前提。
在分層的最初,最忌諱的就是經(jīng)驗主義者憑借自己的【感覺】對用戶進行切割。
很多分層項目剛展開時,相關(guān)人員會犯?【前端可見】 就是特性的錯誤。打個比方,有10萬名用戶在論壇里發(fā)了內(nèi)容,于是這10萬人被分層到類似「創(chuàng)作者」這樣的類目中,對應(yīng)的可能是50萬人被歸類到「瀏覽者」這樣的層級中。這并不是錯誤的分類,但相較于分層顆粒度太大,且很難做出對應(yīng)的調(diào)整。
10萬人中有多少每天都在發(fā)內(nèi)容?有多少曾經(jīng)發(fā)過內(nèi)容現(xiàn)在不發(fā)了?有多少人在一天內(nèi)發(fā)布的數(shù)量遠超于均值?細數(shù)下去可以有無數(shù)的緯度等待挖掘,而挖掘的前提一定是前端的打點足夠精細。
二:分群必不可少?
分層不等于分群
用戶分層是根據(jù)不同的用戶行為對用戶進行層級的劃分;
用戶分群大多是根據(jù)不同的用戶屬性進行群體的劃分。
打個比方,男生女生、有娃無娃、老師醫(yī)生這些就是用戶群體的劃分,而如果是 說你本次消費了8000元,是當日消費者貢獻金額的前10%,這就是一個層級的劃分。簡單來說 ,分層和分群是動詞和名詞的區(qū)別。
一個用戶可以同時處在多個分群中,但在一個環(huán)境中他僅可能在一個層級里。我可能是男生,同時我也可以是醫(yī)生、我也可以是個有娃的寶爸,但我當前在社會上的地位盡可能是中產(chǎn),不可能除了中產(chǎn)以外又同時是個高凈值人士。
分層前盡可能先分群
很多分層模型搭建以后,會發(fā)現(xiàn)一個不好解釋的問題:當對一個低層級的用戶采取對應(yīng)的運營策略后,并不起實質(zhì)作用。
這個問題的出現(xiàn)往往是因為對分群的忽視。
假設(shè)小明是重點高中學生,小紅是職業(yè)院校的學生,我們用數(shù)學、物理、英語和機械修理的分數(shù)來對兩個人進行分級的話,毫無疑問,小明憑借數(shù)學、物理、英語的得分將遙遙領(lǐng)先于小紅,并處于分層的上級。那么似乎我們找到了對應(yīng)的針對辦法:針對小明要補習機械修理相關(guān)知識;針對小紅,要補習數(shù)學、物理、英語。
補了一個月以后,在下一次的考試中我們會發(fā)現(xiàn),兩人的成績沒有絲毫變化。
問題出現(xiàn)在:不同類型的人對應(yīng)著不同的用戶需求。小明無論機械修理學的多么精深,都不在他的考試清單里,小紅數(shù)學、英文、物理的成績也不會對她的就業(yè)有任何幫助。在日常的產(chǎn)品里,有些人的需求可能是每天來買東西,有些人不僅可以買,還能夠上傳自己的測評報告。
習慣和用戶能力的不同造成了需求的差異,而不同需求的人進入同一個評估體系中就是不公。因此在對用戶的行為進行切割前,依據(jù)產(chǎn)品內(nèi)用戶的不同的習慣進行大顆粒度分群是很有必要的。
三:評估模型? ?
RFM很好用?
RFM模型是經(jīng)典的價值評估模型,誕生至今已有數(shù)十年的歷史。
R:Recency,最近一次交易時間;
F:Frequency,交易頻次;
M:Monetary,交易金額。
網(wǎng)上有關(guān)RFM的介紹已經(jīng)很多,這里不做過多論述,僅說幾個重要的點
RFM模型的傳統(tǒng)三個維度可變。傳統(tǒng)維度RFM一般應(yīng)用于交易平臺,但同樣也可以在其他產(chǎn)品上大顯神威。例如?社區(qū)產(chǎn)品就可以取類似:最近內(nèi)容量、最近互動頻次、最近登陸時長。
RFM相比其他方法最大的優(yōu)勢在于能夠用最精簡的數(shù)據(jù)指標搭建相對完整的評估體系。
?如上圖所示,RFM模型衍生了8個細分層級、但在實際應(yīng)用中并非固定。具體幾個層級要視實際業(yè)務(wù)特性靈活變動。
因為分群的原因,?可能導致某一些用戶在某一個層級下為空。例如在社交產(chǎn)品中,一個僅僅喜歡瀏覽的忠實的用戶,沒有發(fā)內(nèi)容的需求,他在這個層級中就會出現(xiàn)發(fā)布內(nèi)容為空的現(xiàn)象,為了保持分層的公正,這樣的層級應(yīng)該存在且單獨進行評估。
K-means輔助計算
RFM在實際應(yīng)用中都必經(jīng)的一道步驟就是閾值的設(shè)定。數(shù)值多少算是高?多少算作低?常見的應(yīng)用辦法有平均數(shù)、眾數(shù)或是中位數(shù),或者更多的是憑經(jīng)驗拍腦袋。
但我在實際應(yīng)用中發(fā)現(xiàn)以上方法都會造成數(shù)值的偏頗,即假設(shè)小明小紅和小剛都參加了考試,小明考了120分、小紅考了10分、小剛考了60分,按照均值的處理辦法=120+10+60/3=63.3分,按照這個閾值計算,很明顯將小紅和小剛劃分為了一類人,可實際情況可能是小紅從來沒有學過習,而小剛一直在努力,再一次或許就能夠更進步,這樣的分類方法顯然是不公平的。
比較靠譜的方法是k均值聚類算法(k-means clustering algorithm)。是一種迭代求解的聚類分析算法。
其步驟是:
預(yù)將數(shù)據(jù)分為K組,則隨機選取K個對象作為初始的聚類中心,然后計算每個對象與各個種子聚類中心之間的距離,把每個對象分配給距離它最近的聚類中心。聚類中心以及分配給它們的對象就代表一個聚類。每分配一個樣本,聚類的聚類中心會根據(jù)聚類中現(xiàn)有的對象被重新計算。這個過程將不斷重復(fù)直到滿足某個終止條件。終止條件可以是沒有(或最小數(shù)目)對象被重新分配給不同的聚類,沒有(或最小數(shù)目)聚類中心再發(fā)生變化,誤差平方和局部最小。
其著名的解釋有:
有四個牧師去郊區(qū)布道,一開始牧師們隨意選了幾個布道點,并且把這幾個布道點的情況公告給了郊區(qū)所有的村民,于是每個村民到離自己家最近的布道點去聽課。
聽課之后,大家覺得距離太遠了,于是每個牧師統(tǒng)計了一下自己的課上所有的村民的地址,搬到了所有地址的中心地帶,并且在海報上更新了自己的布道點的位置。
牧師每一次移動不可能離所有人都更近,有的人發(fā)現(xiàn)A牧師移動以后自己還不如去B牧師處聽課更近,于是每個村民又去了離自己最近的布道點……
就這樣,牧師每個禮拜更新自己的位置,村民根據(jù)自己的情況選擇布道點,最終穩(wěn)定了下來。
Python實現(xiàn)方法如下:
import?numpy?as?np
import?pandas?as?pd
import?random
import?sys
import?time
class?KMeansClusterer:
????def?__init__(self,ndarray,cluster_num):
????????self.ndarray?=?ndarray
????????self.cluster_num?=?cluster_num
????????self.points=self.__pick_start_point(ndarray,cluster_num)
????def?cluster(self):
????????result?=?[]
????????for?i?in?range(self.cluster_num):
????????????result.append([])
????????for?item?in?self.ndarray:
????????????distance_min?=?sys.maxsize
????????????index=-1
????????????for?i?in?range(len(self.points)):????????????????
????????????????distance?=?self.__distance(item,self.points[i])
????????????????if?distance?<?distance_min:
????????????????????distance_min?=?distance
????????????????????index?=?i
????????????result[index]?=?result[index]?+?[item.tolist()]
????????new_center=[]
????????for?item?in?result:
????????????new_center.append(self.__center(item).tolist())
????????#?中心點未改變,說明達到穩(wěn)態(tài),結(jié)束遞歸
????????if?(self.points==new_center).all():
????????????return?result
????????self.points=np.array(new_center)
????????return?self.cluster()
????def?__center(self,list):
????????'''計算一組坐標的中心點
????????'''
????????#?計算每一列的平均值
????????return?np.array(list).mean(axis=0)
????def?__distance(self,p1,p2):
????????'''計算兩點間距
????????'''
????????tmp=0
????????for?i?in?range(len(p1)):
????????????tmp?+=?pow(p1[i]-p2[i],2)
????????return?pow(tmp,0.5)
????def?__pick_start_point(self,ndarray,cluster_num):
????????if?cluster_num?<0?or?cluster_num?>?ndarray.shape[0]:
????????????raise?Exception("簇數(shù)設(shè)置有誤")
????????#?隨機點的下標
????????indexes=random.sample(np.arange(0,ndarray.shape[0],step=1).tolist(),cluster_num)
????????points=[]
????????for?index?in?indexes:
????????????points.append(ndarray[index].tolist())
????????return?np.array(points)
如果看不懂的話不要慌,只需知道基本的原理就足夠了。實際應(yīng)用過程中大多由數(shù)據(jù)或者算法部門完成計算。將需求提交給對應(yīng)的部門就OK。
四.窮盡分群?
截止到這,我們已經(jīng)夠?qū)τ脩籼幱谀膫€層級,并且在他所屬層級中處于什么樣的“檔位”有了一個清晰的判定。例如我們現(xiàn)在就能得到類似【一個?付費用戶?且在最近30天都頻繁登錄并且堅持復(fù)購】的層級,似乎到這已經(jīng)結(jié)束了。但往往面對諸如「如何讓這部分人更活躍」或者「如何讓他們更多的付費」這樣的問題上,依然沒有直接了當?shù)慕鉀Q方案,這里提到一個方法是:
無限分群是尋找解法的捷徑
上文已經(jīng)講到,分群指的是區(qū)分用戶的屬性。屬性包括用戶的個人信息屬性,包括性別、城市、年齡這些畫像數(shù)據(jù)。同時也包括用戶的歷史行為屬性,比如是否用過某個功能?是否完成了某些特殊行為?假設(shè)某個用戶在前面的分群-RFM-Kmeas的過程中已經(jīng)被驗證是某個群體中的高價值用戶,那么他是否可能因為用過的某個功能而被激勵直至提升活躍?
依據(jù)這些行為上的差異,每一類用戶都能找到提高用戶價值的線索。
五.總結(jié)?
沒有數(shù)據(jù)的分層是不專業(yè)的,沒有分群的分層是不完善的
上述方法貫穿了用戶分層的整個路徑,在實際操作中大家可以參考借鑒。
但因分層這件事本身對應(yīng)的是不同的業(yè)務(wù)情況,實際操作中一定要保持批判,善于變通。
我說的,都不一定,你試試就知。
本文首發(fā)于公眾號:真的不一定