99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀基于用戶行為分析建立用戶偏好模型
基于用戶行為分析建立用戶偏好模型
2015-12-10
收藏

基于用戶行為分析建立用戶偏好模型




我們經(jīng)常將個(gè)性化推薦的思想簡單地抽象為:通過用戶的行為推測出用戶的興趣,從而給用戶推薦滿足他們興趣的物品。那我們其實(shí)就是要通過用戶行為分析建立一個(gè)用戶偏好(偏好即興趣)模型,模型中包含各個(gè)用戶的一個(gè)或更多個(gè)偏好。


插敘一段

像「用戶行為」,「用戶興趣」這樣的詞,大多數(shù)人都有一個(gè)默認(rèn)的感知,甚至對于這種詞的理解可能已固化為常識(shí),所以我很少見到有文章使用這些詞時(shí)解釋它們。我感覺涉及到算法模型時(shí),對這些詞的不加限定的寬泛認(rèn)知就容易影響對算法模型的深入理解,會(huì)導(dǎo)致感知模糊卻不自知。因?yàn)椴煌藢@些詞的基本理解可能一致,但是拓展理解各不相同。本文會(huì)作出限定解釋,且本文所談?dòng)脩粜袨槎际侵妇W(wǎng)絡(luò)(可以是電信網(wǎng)絡(luò),互聯(lián)網(wǎng))上的行為。


概念解釋

實(shí)體域

當(dāng)我們想基于用戶行為分析來建立用戶偏好模型時(shí),我們必須把用戶行為和興趣主題限定在一個(gè)實(shí)體域上。個(gè)性化推薦落實(shí)在具體的推薦中都是在某個(gè)實(shí)體域的推薦。比如對于閱讀網(wǎng)站,實(shí)體域包括所有的圖書,我們可以稱之為圖書域。其他還有,個(gè)性化音樂推薦,個(gè)性化電影推薦,個(gè)性化資訊推薦等。

用戶行為

用戶在門戶網(wǎng)站點(diǎn)擊資訊,評論資訊,在社交網(wǎng)站發(fā)布狀態(tài),評論狀態(tài),在電商網(wǎng)站瀏覽商品,購買商品,點(diǎn)評商品,以及在其他類型網(wǎng)站的種種行為都可是用戶行為。本文所指的用戶行為都是指用戶在某實(shí)體域上的行為。比如用戶在圖書域產(chǎn)生的行為有閱讀,購買,評分,評論等。

興趣主題

用戶的興趣維度,同樣是限定在某實(shí)體域的興趣,通??梢砸詷?biāo)簽的形式來表示。比如,對于圖書閱讀,興趣主題可以是「懸疑」,「科技」,「情感」等等分類標(biāo)簽。值得一提的是,興趣主題,只是從用戶行為中抽象出來的興趣維度,并無統(tǒng)一標(biāo)準(zhǔn)。比如qq閱讀和豆瓣閱讀的圖書分類標(biāo)簽大不一樣。而興趣維度的粒度也不固定,就像門戶網(wǎng)站有「新聞」,「體育」,「娛樂」等一級分類,而新聞下有「國內(nèi)」,「社會(huì)」,「國際」二級分類,娛樂下有「明星」,「星座」,「八卦」二級分類。我們選取什么粒度的興趣空間取決于我們對用戶偏好模型的要求。

興趣空間

在同一層次上興趣維度的集合,比如豆瓣閱讀中,可以用「新上架」,「熱門」,「特價(jià)」,「免費(fèi)」來構(gòu)成一個(gè)興趣空間(當(dāng)然,如果使用這個(gè)興趣空間來表征用戶的興趣,就太粗了,這里只是假設(shè)),也可以用「小說」,「幻想」,「計(jì)算機(jī)」,「科技」,「歷史」·····「美食」構(gòu)成一個(gè)興趣空間。這是兩種不同的分類維度。如果將「新上架」也加入到后者集合里,就顯然有些莫名其妙。值得一提是,這也并非不可能,這取決于一個(gè)如何看待這個(gè)集合的問題,如果不把它看作基于內(nèi)容的分類,而是圖書標(biāo)簽庫,那么也是可行的,甚至利于建立更好地模型。本文后面我有提到。

用戶行為數(shù)據(jù)

項(xiàng)亮在他的《推薦系統(tǒng)實(shí)踐》的2.1節(jié)有詳細(xì)介紹。通常在經(jīng)過對行為日志的匯總處理后生成的比較容易理解的數(shù)據(jù)就是一份描述用戶行為的會(huì)話日志。這種日志記錄了用戶的各種行為,比如在圖書閱讀app中這些行為主要包括點(diǎn)擊,試讀,購買,閱讀(在本地app中,閱讀行為有可能追蹤不到),評分,評論。

建立用戶偏好模型

基于用戶行為分析建立用戶偏好模型的核心工作就是:將用戶的行為轉(zhuǎn)換為用戶的偏好。

我們采用矩陣運(yùn)算的思維方式,以圖書閱讀為例說明。

下圖表示用戶(user)集合:

下圖表示圖書(item)集合:

那么用戶的行為矩陣可以表達(dá)為:

行表示用戶,列表示圖書,我們暫只考慮圖書的購買行為,1表示用戶看過該圖書,0表示用戶沒有看過該圖書。

如何將上述用戶行為矩陣轉(zhuǎn)化為用戶興趣矩陣(即行代表用戶,列代表興趣維度),一種顯著的方法是我們先確定圖書與興趣維度的對應(yīng)關(guān)系矩陣。而這個(gè)的前提是我們確定了使用何種興趣空間。一種常見的方式是專家給出一些樣本的分類結(jié)果,也就是一般意義的訓(xùn)練數(shù)據(jù),然后通過分類算法,得到分類模型,然后應(yīng)用到其余數(shù)據(jù)的分類問題當(dāng)中,解決其余大量數(shù)據(jù)的分類問題。這種分類的特點(diǎn)是一本圖書只被標(biāo)記為一種類別,假如有3個(gè)類別,

那么圖書-興趣矩陣為:

那么用戶行為矩陣轉(zhuǎn)換為用戶興趣矩陣的運(yùn)算公式即可表示為下圖,行表示用戶,列表示興趣,算出的矩陣再經(jīng)過歸一化后,每個(gè)值就代表某個(gè)用戶在某個(gè)興趣的偏好權(quán)重。

選擇這樣的興趣空間的局限顯而易見:一本圖書只能屬于一個(gè)興趣維度。實(shí)際情況中,一本圖書通常不只屬于某個(gè)分類,并且當(dāng)圖書的數(shù)據(jù)巨大時(shí),寄希望于編輯分類可能會(huì)越來越難以維持,所以通常是由用戶主動(dòng)給圖書添加標(biāo)簽,或者機(jī)器基于內(nèi)容,提取關(guān)鍵詞。但是這種形式得到的標(biāo)簽集會(huì)存在同義,生僻,維度過多等情況,需要經(jīng)過標(biāo)簽清洗的重要工作。前面已經(jīng)看到興趣空間的選擇真的是非常重要,直接影響所得到用戶的興趣矩陣。所以同樣的方法都得到了用戶偏好,但是好不好用,就跟這部分工作有關(guān)了。

用戶行為加權(quán)

上面展示的用戶行為矩陣示例是一個(gè)非常簡單的,直接可以從數(shù)據(jù)庫里提取的例子。而實(shí)際中在數(shù)據(jù)能夠支撐的情況下,我們不可能只考慮一種行為。為了獲得更合理的行為矩陣,我們就需要進(jìn)行行為加權(quán)。比如,A1表示用戶點(diǎn)擊的行為矩陣,A2表示購買的行為矩陣,A3表示評分的行為矩陣,那么加權(quán)矩陣就是:

至于各矩陣的權(quán)重跟我們建立用戶偏好模型的目的有關(guān),如果我們更希望找準(zhǔn)用戶的品味偏好,那么權(quán)重可能是:a1 < a2 < a3;如果我們更希望用戶購買,那么權(quán)重可能是:a1 < a3 < a2。

其他用戶行為分析方法

上面介紹的方法也算是一種主流的方法。但是從上面介紹的「興趣主題」,「興趣空間」也可以看出作出好的分類并不容易,分類粒度,分類維度等都不好控制,用戶打標(biāo)簽也需要復(fù)雜的標(biāo)簽清洗工作。在圖書,電影這樣的實(shí)體域,我們還可以通過類別給用戶推薦喜歡的物品,而在個(gè)性化資訊推薦領(lǐng)域(這里僅舉個(gè)例子,資訊推薦應(yīng)該有其特殊之處),我們不見得能通過類別推薦用戶喜歡的資訊,甚至用戶本身也不在意類別。我們并不需要顯式地構(gòu)建物品-興趣對應(yīng)關(guān)系矩陣,也可以將用戶和所喜歡類別的物品關(guān)聯(lián)起來。這就涉及到隱含語義分析技術(shù)。這個(gè)部分會(huì)日后在此文補(bǔ)充。

小總結(jié)

以上可以看出基于用戶行為分析的用戶偏好建模的常規(guī)方法非常簡單明了。事實(shí)上也的確如此,在使用這些方法或者思想編寫程序計(jì)算都不是什么難事。而實(shí)際上,我們遇到的問題卻并非是方法本身,而是數(shù)據(jù)本身。數(shù)據(jù)方面的兩大問題是稀疏和長尾分布。通常有行為數(shù)據(jù)用戶很少,而用戶的行為對象也集中在不多的物品上。方法易學(xué),而數(shù)據(jù)問題只能在實(shí)戰(zhàn)中才能深刻體會(huì),才會(huì)發(fā)現(xiàn)主要的精力和難點(diǎn)都在解決數(shù)據(jù)的稀疏和長尾上。希望日后能結(jié)合實(shí)際問題寫寫解決數(shù)據(jù)問題的文章。

此外,上面雖然是用矩陣運(yùn)算的思想講述,但我在實(shí)際項(xiàng)目中發(fā)現(xiàn)其運(yùn)算的本質(zhì)其實(shí)是對用戶行為的統(tǒng)計(jì)。所以在實(shí)戰(zhàn)中,不一定要先建矩陣,再做計(jì)算,直接在數(shù)據(jù)庫里使用sql計(jì)算非常方便。


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }