□文/張曉博
(河南省煙草公司新鄉(xiāng)市公司卷煙營銷中心 河南·新鄉(xiāng))
[提要] 為推動河南煙草商業(yè)數(shù)字化轉型,提升資源要素配置效率,本文以客戶行為數(shù)據(jù)為分析對象,構建卷煙推薦算法。首先闡述推薦技術的分類和特點,論述協(xié)同過濾算法的實現(xiàn)路徑和基本原理,以零售客戶卷煙推薦為場景,從數(shù)據(jù)獲取、相似度計算、生成推薦策略、結果修正等方面論述基于用戶的協(xié)同過濾推薦算法(UserCF)和基于項目的協(xié)同過濾推薦算法(ltemCF)構建過程,論證相似度系數(shù)對算法“馬太效應”的影響,通過復雜度分析得出ltemCF 在擴展性方面優(yōu)于UserCF 的推論,通過編程和離線實驗,驗證推論的正確性、算法的可行性,揭示推薦結果的流行度、覆蓋率與鄰居數(shù)量k 的關系。
在信息技術的推動下,新一輪科技革命和產(chǎn)業(yè)變革快速發(fā)展,推動著社會進步,深刻影響著人們的工作和生活。2019 年,我國數(shù)字經(jīng)濟增加值達到35.8 萬億元,占GDP 比重達到36.2%?!笆奈濉币?guī)劃和2035 年遠景目標綱要對“加快數(shù)字化發(fā)展,建設數(shù)字中國”謀篇布局,強調(diào)要“迎接數(shù)字時代,激活數(shù)據(jù)要素潛能”,煙草行業(yè)作為國家經(jīng)濟體系的重要組成部分,同樣在加快自身的數(shù)字化轉型步伐,2021 年全國煙草工作會議的精神之一就是要“推進實施數(shù)字化轉型戰(zhàn)略”。 煙草行業(yè)經(jīng)過多年信息化建設,已基本實現(xiàn)了數(shù)據(jù)資源的原始積累,如何聚焦新場景、新服務、新要求,進而發(fā)揮數(shù)據(jù)要素潛能、優(yōu)化資源配置,是行業(yè)在數(shù)字化轉型過程中需要解決的突出問題。
客戶行為數(shù)據(jù)是企業(yè)最具價值的數(shù)據(jù)資源之一,蘊含著客戶的消費軌跡和個性偏好,通過對此類數(shù)據(jù)的分析、挖掘,從數(shù)據(jù)角度建立對客戶行為的理解,企業(yè)可以更深入地洞察客戶消費心理、發(fā)現(xiàn)潛在需求、提高商品銷售。在行業(yè)外,客戶行為數(shù)據(jù)的主要使用途徑是推薦系統(tǒng)。電子商務推薦系統(tǒng)(Recommendation Systems for E-Commerce)是“利用電子商務網(wǎng)站向客戶提供商品信息和建議,幫助用戶決定應該購買什么產(chǎn)品,模擬銷售人員幫助客戶完成購買的過程”。推薦系統(tǒng)的研究內(nèi)容包括:用戶信息的獲取和建模、推薦技術研究、推薦算法評價三個方面。其中,推薦技術是構成推薦系統(tǒng)的核心,決定著推薦效果,根據(jù)其所采用的算法原理,推薦技術可分為以下幾類:
(一)基于規(guī)則的推薦技術。通過預置一系列觸發(fā)條件或規(guī)則,根據(jù)條件判斷生成推薦結果。例如,數(shù)據(jù)挖掘領域的關聯(lián)規(guī)則(Association Rule),其原理是通過多次迭代構造出頻繁項集,根據(jù)提升度、置信度、支持度等指標建立關聯(lián)規(guī)則,從而幫助企業(yè)給顧客提供購買建議、制訂合理的交叉銷售方案。簡單關聯(lián)規(guī)則屬于無監(jiān)督學習算法,當前項數(shù)量和項目集元素數(shù)量過多時,會造成運算速度慢、資源開銷大的問題,同時規(guī)則質量也難以保證。
(二)基于內(nèi)容的推薦技術。核心原理是通過標簽庫、隱語義向量等技術分別對用戶和商品進行畫像,根據(jù)畫像結果計算出用戶和商品之間的關聯(lián)性,再根據(jù)關聯(lián)性的高低進一步的排序和篩選得出推薦方案,該技術的推薦結果具有良好的解釋性,缺點是很難為用戶推薦其關注點之外的商品,對用戶的潛在興趣挖掘有限。
(三)基于鄰域的推薦技術。其基本原理是kNN,根據(jù)相關性尋找與客戶最相似的k 個鄰居,將鄰居最感興趣的若干物品推薦給客戶。協(xié)同過濾算法是鄰域推薦技術的典型代表,其能夠以類似“愛屋及烏”的方式將相似物品推薦給用戶,更容易挖掘潛在需求。缺點是當用戶或物品數(shù)量規(guī)模較大時,相似性計算的效率會變的非常低,除此之外還存在數(shù)據(jù)稀疏性、冷啟動、可擴展性三大問題。
以上算法中,協(xié)同過濾技術以其較為優(yōu)秀的需求挖潛效果和良好的“效率-質量”平衡性,在電子商務領域得到了廣泛應用,例如Netflix、YouTube、亞馬遜等。在煙草行業(yè),浙江省局在構建“互聯(lián)網(wǎng)+”煙草商業(yè)模式的過程中將協(xié)同過濾技術用于卷煙商品推薦,取得了良好成效。但目前,河南煙草商業(yè)在零售客戶卷煙商品推薦方面主要還是采用傳統(tǒng)的“專家系統(tǒng)”(即客戶經(jīng)理口頭宣傳),主觀性較強,缺乏從數(shù)據(jù)角度分析客戶潛在需求的能力??蛻粜袨閿?shù)據(jù)涉及方方面面,本文以其中的卷煙訂購數(shù)據(jù)為例,論述了協(xié)同過濾推薦算法的實現(xiàn)過程,分析了算法存在的“馬太效應”,在理論推導的基礎上,通過實驗論證了基于物品的協(xié)同過濾推薦算法的可行性和運算優(yōu)勢。
(一)實現(xiàn)路徑。推薦系統(tǒng)基本通過三種途徑建立用戶與物品的聯(lián)系:(1)用戶-用戶-物品。即若用戶A 與用戶B 具有相似的興趣,則可認為用戶B 喜歡的物品對用戶A 來說同樣喜歡,可將B 用戶購買過的物品推薦給A。(2)用戶-物品-物品。即若用戶喜歡某個物品,則可將與該物品相似的物品推薦給用戶。(3)用戶-特征-物品。利用人與物的聯(lián)系,即若用戶具有某種特征或標簽,可將與該特征或標簽相似的物品推薦給用戶。以上(1)、(2)即是協(xié)同過濾技術的基本思想。當需要為目標用戶推薦商品時,可以先找到與目標用戶相似的用戶(或與目標用戶購物籃物品相似的物品),然后將相似用戶喜歡的物品(或與購物籃中物品相似的物品)推薦給目標用戶。根據(jù)相似對象的不同,協(xié)同過濾技術總體可分為兩類:以路徑(1)為代表的基于用戶的協(xié)同過濾(User-based Collaborative Filtering,UserCF),以及路徑(2)為代表的基于項目的協(xié)同過濾(Item-based Collaborative Filtering,ItemCF)。
(二)算法模型。無論是UserCF 還是ItemCF,其主要實現(xiàn)過程可分為以下兩步:(1)計算用戶相似度或物品相似度。(2)根據(jù)相似度和用戶歷史行為數(shù)據(jù)生成推薦策略。下面以卷煙商品推薦為例,論述算法模型構建步驟:
1、構建客戶-卷煙數(shù)據(jù)矩陣。假設全市有n 個卷煙零售客戶,用集合U={U1,U2,…,Un}表示,銷售i 個規(guī)格的卷煙,用集合M={M1,M2,…,Mi}表示,構建矩陣R=(rni),rni表示客戶Un在卷煙Mi上的特征(其中,Un∈U,Mi∈M),該特征可以是訂購量,也可以是訂購次數(shù)、商品評分、銷售比重等各類客戶行為。矩陣Rn×i中的一行代表一個客戶在所有卷煙上的特征,每一列表示一個卷煙在所有客戶上的特征。
2、構建相似度矩陣。與聚類算法類似,協(xié)同過濾算法也使用“距離”作為用戶或物品之間的相似性度量。常見的“距離”計算方法有以下幾種:
(1)歐氏距離。假設客戶Ua,Ub∈U,則兩者的歐氏距離可通過以下公式計算:
(2)Jaccard 系數(shù)。若客戶Ua,Ub訂購卷煙的集合分別是Ia,Ib(Ua,Ub∈U 且Ia,Ib∈M),則Jaccard 系數(shù)可表示為:
(3)余弦距離。如果把用戶(或卷煙)的特征看作向量,則向量的余弦距離等于向量的內(nèi)積與向量長度乘積的商。如果兩個向量長度相近,同時方向相同或相反,則其余弦距離的絕對值接近1;若兩個向量長度區(qū)別較大,或相互垂直接近正交,則余弦距離的絕對值接近0。假設用戶Ua,Ub∈U,余弦距離可表示為:
除此之外,還可以采用歐式距離的平方、皮爾遜相關系數(shù)等。無論采用哪種算法,歸根到底是要對相似度進行量化,為相似性判斷提供客觀的、可比的數(shù)值依據(jù)。
對于式(2)和式(3),特征矩陣R 的元素取值將直接決定距離的計算結果。一般的,rni通常取用戶對商品的評分,但由于目前新商盟系統(tǒng)尚未集成卷煙評分功能,所以本文對rni的取值采用以下規(guī)則:當用戶訂購了某卷煙時,對應的rni為1,否則rni為0。在距離算法方面,采用式(3)的余弦距離作為相似性度量標準。
構建矩陣W=(wi,j)作為相似度矩陣。若采用UserCF,則wa,b(wa,b∈W)表示零售戶a 與零售戶b 的相似度,若采用ItemCF,wa,b(wa,b∈W)表示卷煙a 與卷煙b 的相似度。W 為方陣,其維數(shù)與零售客戶或卷煙規(guī)格的數(shù)量相同。
3、生成推薦策略。如前文所述,協(xié)同過濾技術采用了kNN,推薦策略基于k 個最相近鄰居生成。選擇鄰居的過程即是算法字面中“協(xié)同”的過程,在把鄰居喜好的卷煙正式推薦給客戶前,需要將推薦列表中目標客戶已訂購的卷煙“過濾”掉,只留下目標客戶未訂購過的卷煙,以提高推薦策略的有效性。具體過程是,當用UserCF 算法為客戶Ua推薦卷煙時,首先從用戶相似度矩陣W 中檢索wa,j(j=1,2,…,n),根據(jù)wa,j找出k 個與Ua相似度高的客戶,k 個客戶與目標客戶的相似度用集合w={w1,w2,…,wk}表示,然后建立這k 個客戶訂購過的卷煙的集合i={i1,i2,…,im},并從i 中移除Ua已經(jīng)訂購過的卷煙。接著對集合i中的每個卷煙計算推薦度pi,計算公式見式(4)。最后將集合i 按照pi降序排列,生成推薦結果。
ItemCF 生成推薦策略的過程與UserCF 類似,可按照式(5)計算推薦度pi。其中,N(Ua)表示客戶Ua已訂購的卷煙規(guī)格種類數(shù)量。
式(4)和式(5)中帶有下標的r 是相似度修正系數(shù),假如其取值為訂購量,以ItemCF 為例,其作用可解釋為:即使客戶已訂購的卷煙ia和備選卷煙ib有較高的相似度,但如果客戶對ia的興趣度較低(表現(xiàn)為訂購量少或訂購次數(shù)少),則仍不能將ib推薦給客戶,因此要對給w 進行修正,得出一個較低的pi值。需要注意的是,若r 取值不當,不但不能起到修正效果,反而會進一步放大薦算法的“馬太效應”,也就是說算法會更傾向于向目標客戶推薦熱門卷煙,而忽視處于“長尾”的卷煙,不利于挖掘潛在需求。
例如,假如表1 為計算得出的物品相似度矩陣,客戶訂購了卷煙I2和I3,數(shù)量分別是40 條和5 條,采用ItemCF 生成推薦策略,如果將訂購量作為r 值,那么pi1=0.8×40+0.2×5=33,pi4=0.2×40+0.8×5=12,算法將優(yōu)先推薦I1。但實際情況很可能是I1和I2屬于熱門主銷規(guī)格,而I3和I4屬于補充規(guī)格,但由于客戶對I3的訂購量少,使得在r 的作用下,其他卷煙很難從I3得到相對較高的推薦度,這種“連坐”懲罰明顯會讓“強者更強,弱者更弱”,即“馬太效應”。為降低這種效應,讓所有卷煙獲得相對公平的推薦幾率,本文將r 取值為1,重新計算得到,pi1=0.8+0.2=1,pi4=0.2+0.8=1,在計算結果上,讓I1和I4有了均等的“出鏡”機會,從而使算法能更好地發(fā)現(xiàn)客戶的“尾部”需求。(表1)
表1 物品相似度矩陣一覽表
推薦算法最終要應用于實際場景。在實際使用前應當對算法的可用性、準確性、運算性能等進行評估,以確定最優(yōu)運行參數(shù)、確保使用效果。推薦算法不但要對高維度的用戶和商品數(shù)據(jù)進行運算,而且要將推薦結果快速呈現(xiàn)給用戶,所以對計算速度有著較高要求。
(一)評價指標。協(xié)同過濾算法可以通過以下幾個指標進行評價:
1、系統(tǒng)性能。包括算法的時間復雜度和空間復雜度。時間復雜度是指算法的時間開銷,常見的時間復雜度包括常數(shù)階、對數(shù)階、線性階等;空間復雜度體現(xiàn)了算法的存儲資源開銷,與算法采用的數(shù)據(jù)結構密切相關。
2、準確率。指在推薦結果集中有多少比例的卷煙被零售客戶實際訂購。
3、招回率。指在零售客戶的訂單中有多少比例的商品來自推薦結果集。
4、流行度。如果流行度很高,說明推薦結果偏熱門,不太能夠為客戶帶來新穎的推薦結果。卷煙Im的流行度按照式(6)計算,其中N(Im)指訂購卷煙Im的客戶。算法的流行度用推薦結果集的平均流行度表示,即其中n 為推薦結果集中的元素個數(shù)。
5、覆蓋率。表示推薦結果集中的卷煙規(guī)格占規(guī)格總數(shù)的比例,如果所有的卷煙都被至少推薦給了1 個客戶,那么該算法的覆蓋率就是100%。覆蓋率越高,就有越多的卷煙進入客戶的推薦列表,算法就越能發(fā)挖長尾需求。
由于目前尚不具備將推薦算法植入新商盟在線運行的條件,無法驗證算法的準確率和招回率,所以本文對算法的評測主要基于離線實驗,并選擇流行度、覆蓋率作為評價標準。
(二)算法復雜度。如引言部分所述,當用戶或物品的數(shù)量規(guī)模較大時,協(xié)同過濾算法的資源開銷會急劇增大,尤其在相似性計算上,效率會變得非常低,這個問題被稱為算法的“擴展性”。
根據(jù)復雜度的定義及算法原理易知,UserCF 的運算用時和存儲空間開銷與用戶數(shù)的平方成正比,而ItemCF 在此方面則與卷煙規(guī)格數(shù)成正比。就地市級煙草公司來說,零售客戶的基本在104數(shù)量級,卷煙規(guī)格的數(shù)量級在102,客戶的月平均品牌寬度數(shù)量級在101。所以,可以推斷,當零售客戶數(shù)量增大時,UserCF 的資源開銷將遠高于IterCF,在擴展性方面,ItemCF 將優(yōu)于UserCF。
按照前述算法模型編寫程序代碼,計算流行度、覆蓋率、算法運行時間三個關鍵數(shù)據(jù),記錄不同k 值(即鄰居數(shù)量)下的算法表現(xiàn),評估算法的可行性和運算效能。
(一)實驗環(huán)境。本文實驗的軟件環(huán)境為Windows7 操作系統(tǒng)、Python3.8.7 編程語言,硬件環(huán)境為CPU Croe i5-3470,8G DDR3 1600內(nèi)存。
(二)實驗步驟
1、數(shù)據(jù)準備。抽取新鄉(xiāng)市2021 年4 月5 日至4 月30 日零售客戶卷煙訂購數(shù)據(jù),共669,538 行,保存為csv 格式,第1 列是許可證號,第2 列是卷煙代碼,第3 列是訂購量。
2、編寫代碼。編寫數(shù)據(jù)讀取、相似度計算、卷煙推薦、流行度計算、覆蓋率計算5 個功能模塊,對代碼進行優(yōu)化,對每個模塊進行單元測試,確保功能正常、結果準確。
3、復雜度實驗。分別取前0.05%、1%、2%、3%、4%、5%、100%的原始數(shù)據(jù),形成7 個分組,每個分組進行1 次實驗,記錄客戶數(shù)、平均品牌寬度、相似度矩陣運算耗時數(shù)據(jù)。
4、流行度和覆蓋率實驗。采用全量數(shù)據(jù),計算并記錄不同k 值下推薦結果的流行度和覆蓋率,觀察三者之間的關系。
(三)實驗結果。在原始數(shù)據(jù)中,用戶數(shù)u 等于20,543,戶均品牌寬度i 等于32.59,規(guī)格總量I 等于133。圖1 為便于觀察曲線走勢,圖中4 個指標各自做了0~100 標準化,展示了UserCF 和ItemCF 耗時隨數(shù)據(jù)條件的變化趨勢,圖2 是不同k 值下ItemCF 推薦結果的流行度和覆蓋率的變化曲線。(圖1、圖2)
圖1 不同分組的耗時曲線圖
圖2 不同K 值下ItemCF 推薦結果流行度和覆蓋率變化趨勢圖
(四)實驗結論。從圖1 和圖2 不難看出,UserCF 的耗時曲線與u2走勢基本一致,呈指數(shù)增長,ItemCF 耗時曲線與u×i2高度吻合,呈線性增長,從而證明了當用戶數(shù)量遠高于商品數(shù)量時,ItemCF 要比UserCF有著更好的擴展性。
k 值的選擇對推薦結果的流行度和覆蓋率有直接影響。隨著K 逐漸變大,流行度逐漸下降,這種下降可以解釋為k 值的增大為更多冷門卷煙提供了進入到推薦列表的機會,同時也從側面印證了協(xié)同過濾算法本身更傾向于推薦相對熱門的商品。覆蓋率隨k 值逐漸上升,并且覆蓋率的上升速度隨k 值增大而逐漸放緩??梢?,k 值的選擇并非越高越好,一方面k 值對提升覆蓋率的邊際效用遞減;另一方面如果推薦列表中的商品過多,反而會失去其對客戶訂購行為的指導意義。
由于新商盟系統(tǒng)功能的限制,煙草行業(yè)對客戶行為數(shù)據(jù)的收集能力仍十分有限,在大數(shù)據(jù)快速發(fā)展的今天,不得不說是一種遺憾。協(xié)同過濾推薦算法作為互聯(lián)網(wǎng)時代最為流行的推薦算法之一,有著廣闊的應用前景和改進空間,開源組織Apache 甚至已將協(xié)同過濾算法作為功能模塊之一集成到了Mahout 項目當中。筆者通過編寫代碼實現(xiàn)協(xié)同過濾算法,一方面考慮了煙草業(yè)務的特殊性;另一方面也希望通過動手實踐對算法原理有更加深入地體會和了解。本文所述算法模型和實驗代碼僅涉及了協(xié)同過濾的基礎功能,對冷啟動、數(shù)據(jù)稀疏性、代碼優(yōu)化、相似性懲罰等問題并未做深入研究,在實際應用前,仍需要進一步完善和優(yōu)化。