王國珺
(福州職業(yè)技術(shù)學(xué)院 福建 福州 350000)
所謂推薦算法就是利用用戶的一些行為,通過一些數(shù)學(xué)算法,推測出用戶可能喜歡的東西。大數(shù)據(jù)推薦算法最早源于國外對于Hadoop系統(tǒng)的算法優(yōu)化,Pessemier在2011年便著手研究在Hadoop系統(tǒng)和Mapreduce框架下的推薦算法,推薦算法也第一次在大數(shù)據(jù)環(huán)境下進(jìn)行相關(guān)理論研究和數(shù)據(jù)測試[1]。
常見的推薦方法很多,但當(dāng)前最流行的兩種方法是基于內(nèi)存的過濾和協(xié)同過濾。其中內(nèi)容的過濾,主要是獲取物品或用戶的屬性信息及某種相似度定義,通過相同的相似度定義來與物品或用戶進(jìn)行匹配。而協(xié)同過濾主要是依靠以往的行為,例如已有的評級或交易,這里的評級包括用戶對物品的顯示評級和隱式評級,認(rèn)為過去表現(xiàn)出相似偏好的用戶在未來偏好也會類似。
ALS算法是基于模型的推薦算法,基本思想是對稀疏矩陣進(jìn)行模型分解,評估出缺失項的值,以此來得到一個基本的訓(xùn)練模型,然后依照此模型可以針對新的用戶和物品數(shù)據(jù)進(jìn)行評估。ALS是采用交替的最小二乘法來算出缺失項的,交替的最小二乘法是在最小二乘法的基礎(chǔ)上發(fā)展而來的。
本案例采用協(xié)同過濾方法的ALS算法實現(xiàn)商品推薦。
在數(shù)據(jù)倉庫業(yè)務(wù)中,事實表中放研究對象,維度表中放一般事實的屬性。關(guān)于業(yè)務(wù)研究主要分為以下4個步驟:
業(yè)務(wù)過程是由組織完成的微觀活動,例如,獲得訂單、開具發(fā)票、接收付款、處理服務(wù)電話、注冊學(xué)生、執(zhí)行醫(yī)療程序、處理索賠等。業(yè)務(wù)過程包含以下公共特征,理解它們將有助于區(qū)分組織中不同的業(yè)務(wù)過程:業(yè)務(wù)過程通常用行為動詞表示,因為它們通常表示業(yè)務(wù)執(zhí)行的活動。與之相關(guān)的維度描述與每個業(yè)務(wù)過程事件關(guān)聯(lián)的描述性環(huán)境。
?業(yè)務(wù)過程通常由某個操作型系統(tǒng)支撐,例如,賬單或購買系統(tǒng)。
?業(yè)務(wù)過程建立或獲取關(guān)鍵性能度量。有時這些度量是業(yè)務(wù)過程的直接結(jié)果,度量從其他時間獲得。分析人員總是想通過過濾器和約束的不同組合,來審查和評估這些度量。
?業(yè)務(wù)過程通常由輸入激活,產(chǎn)生輸出度量。在許多組織中,包含一系列過程,它們既是某些過程的輸出,也是某些過程的輸入。
聲明粒度意味著精確定義某個事實表的每一行表示什么。粒度傳遞的是與事實表度量有關(guān)的細(xì)節(jié)級別。它回答 “如何描述事實表中每個行的內(nèi)容” 這一問題。粒度由獲取業(yè)務(wù)過程事件的操作型系統(tǒng)的物理實現(xiàn)確定。
典型的粒度聲明如下:
?機場登機口處理的每個登機牌采用一行表示
?倉庫中每種材料庫存水平的每日快照采用一行表示
聲明粒度是不容忽視的關(guān)鍵步驟。如果不能清楚地定義粒度,整個設(shè)計就像建立在流沙之上,對候選維度的討論處于兜圈子的狀態(tài),不適當(dāng)?shù)氖聦崒㈦[藏在設(shè)計中。不適當(dāng)?shù)木S度始終籠罩著DW/BI實現(xiàn)。設(shè)計組的每個人都要對事實表粒度達(dá)成共識,這一點非常重要。
業(yè)務(wù)過程確定后,設(shè)計小組將面臨一系列有關(guān)粒度的決策。明確在維度模型中應(yīng)該包含哪個級別的細(xì)節(jié)數(shù)據(jù)。
有許多理由要求以最低的原子粒度處理數(shù)據(jù)。原子粒度數(shù)據(jù)具有強大的多維性。事實度量越詳細(xì),就越能獲得更確定的事實。將所知的所有確定的事情轉(zhuǎn)換成維度。在這點上,原子數(shù)據(jù)與多維方法能夠?qū)崿F(xiàn)最佳匹配。
本案例研究中,最細(xì)粒度的數(shù)據(jù)是用戶訂單中涉及的單個產(chǎn)品,假設(shè)要開發(fā)的系統(tǒng)按照一個購物車中某種產(chǎn)品為單一項而上卷所有銷售。盡管用戶可能不會對分析與特定訂單交易關(guān)聯(lián)的單項感興趣,但您能預(yù)測所有他們需要獲得的數(shù)據(jù)的方法。例如,他們可能希望知道周一與周日的銷售差別,或者他們希望評估是否值得存大量某品牌的商品等。盡管上述查詢不需要某一特定交易的數(shù)據(jù),但他們提出的查詢請求需要以準(zhǔn)確的方式對詳細(xì)數(shù)據(jù)執(zhí)行分片操作而獲得。如果僅選擇提供匯總數(shù)據(jù),則無法獲得這些問題的正確答案。
這里需要特別注意的是:基于大數(shù)據(jù)倉庫的這種智能的用戶畫像的系統(tǒng)幾乎總是要求數(shù)據(jù)盡可能以最細(xì)粒度來表示,不是因為需要查詢單獨的某行,而是因為查詢需要以非常精確的方式對細(xì)節(jié)進(jìn)行切分。
維度要解決的問題是“業(yè)務(wù)人員如何描述來自業(yè)務(wù)過程度量事件的數(shù)據(jù)”應(yīng)當(dāng)使用健壯的維度集合來裝飾事實表,這些維度表示承擔(dān)每個度量環(huán)境中所有可能的單值描述符。如果粒度清楚,維度通常易于區(qū)分,因為它們表示的是與“誰、什么、何處、何時、為何、如何”關(guān)聯(lián)的事件。常見維度的實例包括日期、產(chǎn)品、客戶、雇員、設(shè)備等。在選擇每個維度時,應(yīng)該列出所有具體的、文本類型的屬性以充實每個維度表。
事實表粒度選擇完畢后,維度的選擇就比較直接了。產(chǎn)品與事務(wù)立即呈現(xiàn)。在主維度框架內(nèi),可以考慮其他維度是否可以被屬性化為訂單度量。例如,銷售日期、銷售店面、哪種銷售的產(chǎn)品被促銷、處理銷售的店員、可能的支付方法等。我們將這些以另外的設(shè)計原則表達(dá)。
詳細(xì)的粒度說明確定了事實表的主要維度。然后可以將更多維度增加到事實表維度應(yīng)用于該案例中:日期、產(chǎn)品、促銷、支付方式。
可以通過回答“過程的度量是什么”這一問題來確定事實。商業(yè)用戶非常愿意分析這些性能度量。設(shè)計中的所有候選事實必須符合第2步的粒度定義。明顯屬于不同粒度的事實必須放在不同的事實表中。典型事實是可加性數(shù)值,例如,訂貨數(shù)量或成本總額等。
需要綜合考慮業(yè)務(wù)用戶需求和數(shù)據(jù)來源的實際情況,并與4個步驟聯(lián)系起來,如圖1所示。強烈建議堅決抵制僅僅只考慮數(shù)據(jù)來源來建模數(shù)據(jù)。將注意力放在數(shù)據(jù)上可能不會像與商業(yè)用戶交流那樣復(fù)雜,但數(shù)據(jù)不能替代業(yè)務(wù)用戶的輸入。遺憾的是,許多組織仍然在采用這種看似最省力的數(shù)據(jù)驅(qū)動的方法,當(dāng)然這樣做基本不能取得成功。
設(shè)計的最后一步是確認(rèn)應(yīng)該將哪些事實放到事實表中。粒度聲明有助于穩(wěn)定相關(guān)的考慮。事實必須與粒度吻合:放入訂單中交易的單獨產(chǎn)品線項。在考慮可能存在的事實時,可能會發(fā)現(xiàn)仍然需要調(diào)整早期的粒度聲明或維度選擇。
在Spark生態(tài)圈中,MLlib組件支持ALS算法,它是協(xié)同過濾式推薦算法中非常經(jīng)典的一種。主要實現(xiàn)通過學(xué)習(xí)用戶對商品的評分來推斷出用戶的喜好,并向用戶推薦適合的產(chǎn)品,或?qū)W習(xí)商品的信息,尋找可能潛在的用戶進(jìn)行推薦。
當(dāng)前案例截取是電商平臺用戶購物的流程,見圖2。
通過該業(yè)務(wù),分析用戶畫像的行為,例如用戶的留存率、新增用戶占日活躍用戶比率、用戶行為漏斗分析、用戶相對商品復(fù)購率分析、商品推薦計算等。涉及的庫表眾多,這里只選取有代表性的9張表,分別是訂單表、訂單詳情表、商品表、用戶表、商品一級分類表、商品二級分類表、商品三級分類表、支付流水表、商品評分表[2]。
圖3為亞馬遜網(wǎng)站的一個截圖,每款商品都會有評分?jǐn)?shù)據(jù)。應(yīng)用ALS算法,可通過用戶對商品的評分,實現(xiàn)通過商品尋找可能有興趣的人,或通過人查找有興趣的商品的功能。
設(shè)計的第l步是通過對業(yè)務(wù)需求以及可用數(shù)據(jù)源的綜合考慮,決定對哪種業(yè)務(wù)過程開展建模工作。當(dāng)前基于大數(shù)據(jù)倉庫用戶畫像的業(yè)務(wù)應(yīng)該將注意力放在最為關(guān)鍵的、最易實現(xiàn)的用戶業(yè)務(wù)過程。最易實現(xiàn)涉及一系列的考慮,包括數(shù)據(jù)可用性與質(zhì)量以及組織的準(zhǔn)備工作等。在此電商購物業(yè)務(wù)案例研究中,管理層希望更好地理解通過當(dāng)前系統(tǒng)獲得的客戶購買情況。因此將要建模的業(yè)務(wù)過程是訂單下單到交易完成的過程。該數(shù)據(jù)保證商業(yè)用戶能夠分析被銷售的產(chǎn)品,它們是在哪幾天、哪個商店、處于何種促銷環(huán)境中被哪類人群購買。表1是系統(tǒng)總線矩陣[3]。
表1 系統(tǒng)總線矩陣
本案例操作系統(tǒng)選擇開源CentOS7,應(yīng)用大數(shù)據(jù)工具選用Apache開源工具Hadoop、Hive、Spark、Zookeeper、HBase、Flume、Sqoop。
整個案例數(shù)據(jù)存儲以Hadoop為基礎(chǔ),然后進(jìn)行數(shù)據(jù)管理工具和分析工具及ETL工具的安裝與配置。由于MapReduce本身的中間結(jié)果復(fù)寫磁盤的特性,也決定了它并不適合交互性強、循環(huán)迭代的學(xué)習(xí)知識的過程,故在用戶畫像的產(chǎn)品推薦過程中,選用的基于內(nèi)存計算的Spark工具,基于其內(nèi)核,應(yīng)用Spark SQL組件從Hive大數(shù)據(jù)倉庫中提取數(shù)據(jù),應(yīng)用Spark MLlib機器學(xué)習(xí)組件,完成ALS算法參數(shù)的學(xué)習(xí)過程,使其依據(jù)用戶對商品的歷史評價數(shù)據(jù),正確實現(xiàn)商品的推薦過程,即通過某個商品找到可能購買的用戶,同時通過用戶找到可能購買的商品[4]。
在Hive工具的conf/hive-site.xml文件中配置遠(yuǎn)程服務(wù),即加入下面參數(shù)配置項。
將Hadoop配置文件目錄etc/hadoop下的core-site.xml和hdfs-site.xml文件拷貝到項目中resources文件夾中。將Hive配置文件目錄/usr/local/hive/conf下的hive-site.xml文件拷貝到項目中resources文件夾中??截惵窂揭妶D4。
ALS協(xié)同算法,其全稱是交替最小二乘法(Alternating Least Squares),由于簡單高效,已被廣泛應(yīng)用在推薦場景中,目前已經(jīng)被集成到Spark MLlib和ML庫中[5]。
下面我們構(gòu)造一組商品與用戶的評分矩陣,見表2。
表2 商品與用戶的評分矩陣
我們應(yīng)用推薦算法,其目的就是找出兩個屬性的相似性,例如找出兩個用戶的相似喜歡,進(jìn)而完成推薦過程。例如,表中“用戶1”和“用戶2”喜好相對最像,唯一的是“用戶2”比“用戶1”多了一個對商品4的評分,所以肉眼我們可認(rèn)為當(dāng)向“用戶1”推薦商品時,可將“商品4”推薦給“用戶1”。
以下是部分recommend代碼:
其中:ratings:訓(xùn)練的數(shù)據(jù)格式是Rating(userID,productID,rating)的RDD。rank參數(shù)指當(dāng)我們進(jìn)行矩陣分解時,將原來的矩陣A(m×n)分解成X(m×rank)矩陣與Y(rank×n)矩陣。
Iteration:ALS算法重復(fù)計算次數(shù)。
進(jìn)行測試,通過輸入不同的參數(shù),觀察推薦結(jié)果,例如:輸入1,針對用戶推薦商品時,發(fā)現(xiàn)給用戶1推薦時,推薦了商品4。圖5顯示的是測試結(jié)果。
我們將學(xué)習(xí)參數(shù)按圖中紅色框中進(jìn)行修改,然后再次研究推薦算法時,發(fā)現(xiàn)給用戶1推薦的商品不是商品4,而是商品3了。
綜上所述,本文介紹了基于大數(shù)據(jù)倉庫技術(shù)和數(shù)據(jù)畫像進(jìn)行商品推薦的過程,通過ALS算法,在選擇商品的時候更加科學(xué)。