開篇
先推薦幾篇關(guān)于推薦的文章某弦,個人感覺對于入門很有實際意義,是IBM的工程師寫的,如下:
探索推薦引擎內(nèi)部的秘密惫周,第 1 部分: 推薦引擎初探
探索推薦引擎內(nèi)部的秘密,第 2 部分: 深入推薦引擎相關(guān)算法 - 協(xié)同過濾
探索推薦引擎內(nèi)部的秘密康栈,第 3 部分: 深入推薦引擎相關(guān)算法 - 聚類
推薦兩本書,如下:
項亮:《推薦系統(tǒng)實踐》
蔣凡:《推薦系統(tǒng)》
推薦系統(tǒng)是什么
推薦喷橙,就是把你可能喜歡的商品啥么,推到你的面前。構(gòu)建一個推薦系統(tǒng)贰逾,就是構(gòu)建如何把商品推到你面前的過程悬荣。
經(jīng)常有人說,推薦就是算法疙剑,從某種角度來說氯迂,這未嘗不對践叠。但在接觸推薦系統(tǒng)之前,我們還是先不研究算法嚼蚀,一說到算法禁灼,可能就以為很高深了,也很唬人轿曙,立馬產(chǎn)生一種膜拜之感弄捕,也就變得神秘起來了。
對于我們沒有多少推薦理論支撐的工程師导帝,進入推薦守谓,還是先求入門。我們不缺實踐您单,先通過工作中的實踐領(lǐng)會某種推薦方案斋荞,再求通過閱讀書籍、學(xué)習(xí)算法加深領(lǐng)會和理解虐秦,進而通過不同的推薦方案平酿,以及其效果的客觀評估,提高水平和境界羡疗。
第一步染服,當(dāng)我們真正完完整整的接觸到推薦系統(tǒng),達到一個入門級水平叨恨,可以獨立構(gòu)建一個千萬級PV網(wǎng)站的推薦系統(tǒng)之后柳刮,可能基本的觀點會是:
(1)推薦是一個整體的計算過程,在編碼中痒钝,關(guān)于算法的部分所占的工作量可能1%都不到秉颗;
(2)每一種推薦方案的選擇,都是一種整體的計算過程送矩。
構(gòu)建一個千萬PV級別的推薦系統(tǒng)相對容易蚕甥,一天的日志不過幾百M,計算過程中的數(shù)據(jù)栋荸,單臺機器的內(nèi)存可以存下菇怀,當(dāng)PV達到幾億幾十億時,就需要進行稍微復(fù)雜一點的分布式計算了晌块;
推薦的計算方法很多爱沟,如何選擇,效果難以預(yù)料匆背,只有通過橫向和縱向多做效果分析呼伸,才有意義。
隨著理解的加深钝尸,境界的提升括享,知識的更多了解搂根,認知也都會處于不斷的調(diào)整中。铃辖。剩愧。
推薦的計算過程
計算的數(shù)據(jù)來源
Web訪問日志、購買澳叉、收藏隙咸,這些實際是用戶的行為數(shù)據(jù);
用戶成洗,這是分析的基礎(chǔ)數(shù)據(jù)五督;
商品,這是分析的基礎(chǔ)數(shù)據(jù)瓶殃;
計劃日志的存儲格式
如何標(biāo)記同一個未登陸用戶充包;如何找出未登陸用戶和登陸用戶是用一個人。
這是很重要的遥椿,這是以后日志分析計算的基礎(chǔ)基矮。
示例如下:
27.189.237.91 - - [27/Jun/2014:15:00:01 +0800] "GET 某個URL HTTP/1.1" 200 75 "前一個URL" "95907011.390482691.1402709325.1403851977.1403852394.7" "95907011.8a8a8aeb385a8c6b013860df24501310" [- - -] [image/webp,*/*;q=0.8] "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"
以上Web日志URL,95907011.390482691.1402709325.1403851977.1403852394.7 和 95907011.8a8a8aeb385a8c6b013860df24501310 冠场,使用google analysis的js代碼記錄的家浇,分別用來標(biāo)記未登錄用戶的ID和登錄用戶的ID。
對于google analysis的js代碼的用途碴裙,這里衍生一下钢悲,實際上,完全可以基于它建立第三方的流量分析系統(tǒng)舔株,流程如下:
(1)需要統(tǒng)計流量的網(wǎng)站進行查碼莺琳,用來記錄cookie等,并觸發(fā)到服務(wù)器端的請求(可以是去請求一個不存在的圖片)
(2)當(dāng)服務(wù)器端接收到請求后载慈,會把Head里面的網(wǎng)站訪問流量相關(guān)信息進行記錄惭等,服務(wù)器端的程序是一個簡單的Servlet即可。
計算過程第一步
根據(jù)用戶行為數(shù)據(jù)办铡,分析出用戶和商品的關(guān)系辞做;用戶<-->瀏覽、用戶<-->購買寡具、用戶<-->收藏等秤茅。
計算過程的第二步
根據(jù)第一步計算的數(shù)據(jù),分析中常用的推薦結(jié)果晒杈,比如根據(jù)瀏覽數(shù)據(jù),計算出“看了又看”孔厉,根據(jù)購買數(shù)據(jù)拯钻,計算出“買了又買”等帖努。
計算過程的算法(或者叫規(guī)則)
算法,是廣義的粪般,數(shù)學(xué)公式拼余;規(guī)則,是小眾的亩歹,公司自己定義的匙监,復(fù)雜自己場景的業(yè)務(wù)規(guī)則,在計算過程的第二步小作,計算最終的推薦結(jié)果時亭姥,大部分使用的都是自行定義的業(yè)務(wù)規(guī)則。
以推薦“看了又看”為例顾稀,根據(jù)一個商品达罗,如何推薦出其他商品呢:
可以就根據(jù)這個推薦類型的基本含義,一個商品 ---> 看了這個商品的很多人静秆,又看了 ---> 很多的商品粮揉,這就是推薦結(jié)果了,但是這個推薦結(jié)果有非常非常多抚笔,如何推薦呢扶认?
可以推薦購買次數(shù)最終的,推薦最新的殊橙,推薦兩個商品的View人群最相似的......
推薦結(jié)果的接口提供
這就沒有什么了辐宾,都是通用的。
推薦系統(tǒng)的核心
基于業(yè)務(wù)的蛀柴,推薦效果的評價體系螃概;
基于技術(shù)的,大數(shù)據(jù)量時的分布式計算
代碼說明
前置項目:這個相關(guān)項目就比較多了鸽疾,網(wǎng)站吊洼、商品、訂單制肮,都有相關(guān)性冒窍。
最新源碼:git clone git@github.com:pumadong/cl-recommend.git 。
推薦的發(fā)展
大數(shù)據(jù)量計算豺鼻、數(shù)據(jù)流實時計算综液、用戶行為精準(zhǔn)分析、用戶聚簇細化儒飒、個性化推薦等谬莹。
可能更高級別的搜索推薦,還是需要搜索推薦理論的支撐,不同于實現(xiàn)層面的東西附帽,這個可能存在境界層次方面的不同埠戳,認知了才知道。蕉扮。整胃。
日志分析擴展和流量統(tǒng)計
對于日志的分析,可以統(tǒng)計網(wǎng)站的流量喳钟,但是要過濾掉對JS/CSS/IMG等靜態(tài)資源的URL屁使,只保留真實有效的訪問。
在一個頁面的訪問過程中奔则,瀏覽器會向服務(wù)器發(fā)起很多個請求蛮寂,把HTML/CSS/IMG/JS等都下載下來,解析成美觀的頁面应狱,展現(xiàn)給訪問者共郭,在這個過程中其實會在NGINX等Web服務(wù)器中,記錄很多行日志疾呻。
關(guān)于流量統(tǒng)計除嘹,也有很多采用插碼的方式,插碼這種方式岸蜗,業(yè)界的代碼標(biāo)準(zhǔn)是Google的GA尉咕,插碼的好處是可以統(tǒng)計記錄更多信息(超出日志),可以自定義很多事件璃岳,收集更多信息年缎。
當(dāng)前google由于特殊原因國內(nèi)不能直接訪問,但是對于ga代碼的統(tǒng)計是沒有問題的铃慷,訪問地址是:http://www.google-analytics.com/ga.js单芜。
比較日志分析和插碼兩種方式,日志分析是有訪問就記錄日志犁柜,此時頁面可能沒展示完成訪問者就關(guān)閉了洲鸠;插碼這種方式,只有執(zhí)行到插入的JS代碼的時候馋缅,才會記錄流星扒腕;也就是前一種強調(diào)來過,后一種強調(diào)有效訪問萤悴。
日志分析這種流量分析方式瘾腰,需要過濾掉爬蟲的IP地址;而插碼就不需要覆履,因為爬蟲只會爬頁面內(nèi)容蹋盆,并不會執(zhí)行JS费薄,JS的執(zhí)行實際是瀏覽器的JS引擎幫我們做的。
另外栖雾,對于第三方的流量分析义锥,則必須是插碼,不可能使用日志分析岩灭。
官方網(wǎng)址:https://support.google.com/analytics