1. 程式人生 > >一號店使用者畫像系統實踐

一號店使用者畫像系統實踐

1

電子商務是網際網路應用中發展期最早且模式最為成熟的商業模式,其使用者和業務所帶來的資料規模不斷擴大,如何從大資料獲取更大的價值?如何開發出真正貼合用戶實際需求的推薦系統?1月9日,在七牛雲主辦的架構師實踐日——矚目電商:從架構開發到系統優化專場沙龍,一號店架構師王富平為大家一一解答了這些問題。以下是他的演講實錄。

在開場之前,我想先引用梵高的一句話:“我想強調的是,同一個人有多樣的自畫像。與其追求照相般的相似性,不如深入地 發掘相似處”。下圖是是當時梵高比較得意時的畫像,戴了禮帽,穿了西服,但那時耳朵已經割掉了。我覺得作為一個好的駕架構師,要有藝術家的精神。時至今日架構發生了很多變化,新語言在不斷出現,我覺得沒必要把思維停留在某一個方面。

2

使用者畫像的定義

使用者畫像定義使用標籤來量化使用者特性屬性,達到描述使用者的目的。使用者畫像的難點就是資料來源,因為你拿要拿到足夠多足夠全的資料很不容易,所以要與業務結合,比如說這個人在30天內購買了你的商品,這就是一個標籤,但是如果你不參與開發這個系統,你不會想到有這個標籤。然後是動態更新,一個人是不斷變化的,就像梵高一樣,他不同時期的自畫像也是不一樣的。

假設現有使用者畫像有姓名、地域兩個屬性,你將如何使用?

最簡單的分析不同性別的群體特徵,做特定營銷。分析廣州、北京、客戶的群體特徵,分析90後、80後的群體特徵。其實這裡面有共同點,就是說分類和聚類。京東也好、淘寶也好、一號店也好,我不可能真的每一個使用者生成一套推薦方案,我們都是把人分成了一萬個類,或者一千個類,我們把你劃分到某一個類別裡面,在那個類別裡面做一個推薦。而且群體特徵往往更能反映你的個人喜好,就是說其實人與人之間是有共同點的,也是有異同點的。

分類—聚類

邁出個性化的第一步,使用者畫像的應用開始

1號店建立使用者畫像的初中是來自於《千人千面》專案,簡而言之:分析不同群體特徵,針對群體進行推薦調整,典型的群體有小區、學校公司等。下圖是2015年9月份轉化率的資料。我們覆蓋面也比較大,目前差不多355家公司,591個行業,覆蓋293個城市的4.26萬個小區。

3

1號店從零開始打造了自己的使用者畫像系統,包含了使用者標籤畫像使用者偏好畫像。經歷了全量版畫像、Storm版實時畫像、電商使用者標籤畫像等演進和完善的過程。在兩年的時間裡,遇到了效能瓶頸、資料質量評估、使用者標籤的膨脹、畫像在精準化營銷等應用場景的摸索,一步步成長,在推薦系統發揮了巨大作用。

使用者標籤畫像

我們的使用者標籤包含基本特徵社會身份顧客使用者生命週期類目偏好等等。比如說你怎麼判斷一個人是不是對女裝感興趣,假設我們有一個類目就是女裝,那很好辦,如果你購買都是女裝,那會認為你這個人對女裝比較感興趣。如下圖所示。

4

挑戰

我們期間遇到了兩方面的挑戰:

1.億級畫像系統實踐和應用

2.記錄和儲存億級使用者的畫像,支援和擴充套件不斷增加的維度和偏好,毫秒級的更新,支撐個公司性化推薦、廣告投放和精細化營銷等產品

怎麼做到的

1.使用者畫像演算法模型不斷優化

2.引入Storm等實時技術

3.主題推薦標籤、使用者命名實體等新增標籤補充進畫像

4.HBase的離線和線上分離、Hbase的KV讀和Solr的批量讀分離、region熱點監控和切分

5.資料流不斷優化

6.資料儲存改進

第一版畫像現狀

偏好系統包括類目偏好和導購屬性偏好兩個部分,第一版的偏好系統介面呼叫數每天達千萬次,主要服務於推薦欄位和EMD,但改變的偏好系統存在效能低下,偏好得分分佈不合理等問題:

1.執行一次全量的資料更新太慢

2.使用者的偏好得分資料分佈不合理,得分呈多波峰分佈,且在6.0、8.0區間的得分數目幾乎為0

3.使用者強偏好和弱偏好的閾值界限未有明顯規定

4.使用者未產生新的行為,興趣偏好分值將不會發生變化(未按時間進行衰減)

新版畫像系統流程

5

這個很簡單,就是大家都能想到的離線和線上,離線要基於使用者的行為,產品的資訊進行打分,要得到一個個人的偏好,前端提供一個接,基本上是這樣子。

畫像模型優化1

關於演算法模型做了一些優化,第一個優化就是得分,通過操作得分使它的偏好更有區分性,歷史行為應有衰減。你這個得分假設永遠是疊加的,這也是有問題的,因為你一個月之前或者一年之前所有的行為,如果現在還影響著你的得分,會有不準確性,所以會有一個歷史的衰減得分。偏好得分分佈應與使用者對類目的權重分佈一致,關鍵是對資料的處理,還有怎麼樣去調整你的模型。

偏好畫像的得分應滿足三個條件:

  • 使用者在此類目或導購屬性上的操作越多,得分越高
  • 使用者對類目或導購屬性的喜好程度不同,可以通過偏好得分割槽間體現
  • 使用者的歷史行為應有衰減

對於類目偏好,需先將使用者對類目偏好離散化提高某些場景效能,最簡單的行為可劃分為兩檔【喜歡|一般】。

引數調整原則:

  • 衰減係數的設定滿足兩個月衰減一半

(結合使用者在不同類目下的購買週期,見下頁)

  • 各類行為權重之間的比例設定等同於使用者各種行為數目的比例
  • 偏好得分分佈應與使用者對類目的權重分佈一致

畫像模型優化2

然後有一個購買週期的問題,就是說不同的東西會有一個購買週期的,比如說牙膏多久前買的,牛奶多久前買的,這些東西的週期性是比較強的。後面會有一個實時推薦,根據使用者的行為進行算分,根據各個類目的偏好進行一個實時推薦。

主題標籤,比如說吃貨,比如說愛吃零食的女性,算是吃貨範圍。還有數碼極客,就是通過主題劃分人。具體的方法我就不多講,就是通過你購買的東西進行分類。下圖是使用者不同類目的購買週期。

6

主題推薦標籤

主題和標籤的對映關係如下:

7

使用標籤表中的關鍵詞列表,結合商品的評論、標題資料給商品打標籤。

商品打標籤公式為:

8

使用者打標籤公式為:

9

HBase的離線和線上分離

講一下HBase,我們拿了很多開源的東西。我想問一下CAP大家都瞭解吧,一個數據庫你只能獲取兩個特性。這邊我們採用了離線和線上的方式,把可用性提上去。如下圖所示。

10

Solr解決批處理選人

我們還有一個選人機制,就是使用者畫像的另一個場景,既然你有使用者的各種資訊了,那麼對於其他業務,比如說廣告業務,比如說促銷業務他們提供了一個需求,就是選人,是基於Solr做的一個選人中心。如下圖所示。

11

調優相關表,提高讀寫效能

根據畫像表每一臺機器的熱點,遷移或者切分。

12

資料流優化

guid和userid的對應關係中,濾掉公用電腦和黃牛賬戶(全國有20萬左右人從事刷單產業鏈)。為了進一步提高離線部分的計算速度,犧牲演算法精確性,使用者的行為權重計算亦可以增量計算

設Wh為使用者對某個類目的歷史行為權重,Wc為使用者最新一天的行為權重,則總的行為權重

Wt = λWh + Wc,   0<λ<1

如果採用上述方法,則不必遍歷使用者的所有的行為資料,每次更新時,只需遍歷一天的資料即可。

優化資料儲存

使用者行為和行為統計表HBase替換為Hive,最後的畫像表保留為HBase;

考慮到類目偏好使用比較頻繁,而導購屬性偏好資料量遠大於類目偏好,解耦來將兩者分開儲存;

類目偏好離線資料結構-Hive

13

全量資料過濾

全量資料過濾,就是類目偏好離線的全量資料進行過濾之後,匯入線上部分,主要優化就是剛才講的模型優化。過濾原則:

  • 每個使用者的偏好類目數量小於一個固定值
  • 使用者偏好得分大於下限,該下限可假設使用者當天在某個類目只有一個加車行為,然後帶入模型反推出來

導購屬性偏好離線的全量資料進行過濾之後,匯入線上部分。過濾原則:

  • 屬性偏好大於一個固定的下限
  • 屬性值的數量小於一個上限
  • 屬性值偏好大於一個固定下限

主要優化和改進點

主要優化和改進如下圖所示。

14

  • 長期興趣和短期偏好解耦
  • 類目和屬性不同畫像偏好解耦

嘗試與未來

我們曾經想做實時畫像,實時的達到導到實時裡面,但是現在我們並不是做實時畫像,我們做的是實時推薦,為什麼不做呢?因為這些演算法不太好算,比如說算一個衰減週期,你要根據30天的編號算一個你當前類目的變化,你要拿30天的資料,這樣的演算法壓力就很重。未來想做就是使用HBase映象雙叢集,Apache Lgnite+HBase。

我們也做了一些有趣的東西,就是一些排行榜,對某些大學做一些排行榜的排名,實際上根據大學的特定群體我們已經做了推薦,這個東西其實還蠻好玩的。

一些啟示

1.提煉出該案例(或專案)的哲理、方法論。

2.演算法準確度、資料規模、更新速度相互制衡,提高某些指標,必須犧牲其他指標。

3.一個系統遇到效能瓶頸的時候,跳出系統本身,瞭解業務,根據業務解耦,以滿足不同場景。

4.資料流各個環節都可能出錯,自動化檢查各個節點的中間資料,考慮降級和延遲環境。

5.系統的演進是個長期的過程,系統的分分合合和業務量有關,防止過度架構浪費資源。

6.不同版本開發的時候,適度換些開發者,融入新的思路,避免思維定式。

7.標籤體系的管理規範比技術本身更重要,否則大部分標籤會沉睡,後面基本用不到。

8.資料驅動,通過觀察和研究資料,對資料有一定的敏感度,產生新的使用者畫像資料。