




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、浙江工商大學(xué)計(jì)算機(jī)與信息工程學(xué)院 Python程序設(shè)計(jì)與實(shí)踐大作業(yè)報(bào)告專 業(yè):計(jì)科班級(jí): 1404學(xué)號(hào):二姓名: 陸陽,孫勇,裘昇明指導(dǎo)教師:蒲32015年6 月28日題目介紹:在真實(shí)的業(yè)務(wù)場(chǎng)景下,我們往往需要對(duì)所有商品的一個(gè)子集構(gòu)建個(gè)性化推薦模型。在完成這件任務(wù)的過程中,我們不僅需要利用用戶在這個(gè)商品子集上的行為數(shù)據(jù), 往往還需 要利用更豐富的用戶行為數(shù)據(jù)。定義如下的符號(hào):u用戶集合I 冏品全集p商品子集,p?iD用戶對(duì)商品全集的行為數(shù)據(jù)集合那么我們的目標(biāo)是利用D來構(gòu)造U中用戶對(duì)P中商品的推薦模型。數(shù)據(jù)說明:競(jìng)賽數(shù)據(jù)包含兩個(gè)部分。第一部分是用戶在商品全集上的移動(dòng)端行為數(shù)據(jù)( D),表名為ti
2、anchi_mobile_recommend_train_user ,包含如下字段:字段字段說明提取說明?user_id?用戶標(biāo)識(shí)?抽樣&字段脫敏?item_id?商品標(biāo)識(shí)?字段脫敏?behavior_type?用戶對(duì)商品的行為類型?包括瀏覽、收藏、加購物車、購買,對(duì)應(yīng)取值分別是 1、2、3、4。?user_geohash?用戶位置的空間標(biāo)識(shí),可以為空?由經(jīng)緯度通過保密的算法生成item_category商品分類標(biāo)識(shí)字段脫敏time行為時(shí)間精確到小時(shí)級(jí)別第二個(gè)部分是商品子集(P),表名為tianchi_mobile_recommend_train_item ,包含如下字段:字段字段說明
3、提取說明?item_id?商品標(biāo)識(shí)?抽樣&字段脫敏?item_ geohash?商品位置的空間標(biāo)識(shí),可以為空?由經(jīng)緯度通過保密的算法生成?item_category?商品分類標(biāo)識(shí)?字段脫敏訓(xùn)練數(shù)據(jù)包含了抽樣出來的一定量用戶在一個(gè)月時(shí)間()之內(nèi)的移動(dòng)端行為數(shù)據(jù)(D),評(píng)分?jǐn)?shù)據(jù)是這些用戶在這個(gè)一個(gè)月之后的一天()對(duì)商品子集(P)的購買數(shù)據(jù)。參賽者要使用訓(xùn)練數(shù)據(jù)建立推薦模型,并輸出用戶在接下來一天對(duì)商品子集購買行為的預(yù)測(cè)結(jié) 果。?大作業(yè)報(bào)告內(nèi)容包括以下幾個(gè)部分1、數(shù)據(jù)分組統(tǒng)計(jì):可統(tǒng)計(jì)有多少用戶、商品、商品類別等信息,甚至每天各種行為的統(tǒng)計(jì)數(shù)。如圖:還有,在給出的用戶行為數(shù)據(jù)中,有些用戶在整個(gè)
4、11-18日至12-18日對(duì)商品有瀏覽 行為記錄,但是從未產(chǎn)生過購買行為,這些用戶會(huì)否在12月19號(hào)購買商品實(shí)難預(yù)測(cè),因 此,我們?nèi)コ@些無購買行為的用戶信息,認(rèn)為這些用戶在12月19號(hào)還是不會(huì)購買任何商品。貼關(guān)鍵代碼import timeimport pandas as pdstart=()df_items=("")df_items2=("")df_items3=()df_items4=()df_items5=()df_items3=df_items"item_id".drop_duplicates()df_items4=df_it
5、ems"item_category".drop_duplicates()df_items5=df_items"item_id".drop_duplicates()df_items6=df_items2"user_id".drop_duplicates()df_items7=df_items2"item_id".drop_duplicates()df_items8=df_items2"item_category".drop_duplicates()total_behavior_num=len(df
6、_items2)df_items9=df_items2=4df_items10=df_items2!=4positive_num=len(df_items9)negative_num=len(df_items10)item_num=len(df_items3)item_categories_num=len(df_items4)item_geohash_num=len(df_items5)user_num=len(df_items6)item_full_num=len(df_items7)item_categories_full_num=len(df_items8)end=()print
7、9; 商品子集中商品個(gè)數(shù)為: ',item_numprint ' 商品子集中商品類型數(shù)為: ',item_categories_numprint ' 商品子集中帶 geohash 信息的商品個(gè)數(shù)為: ',item_geohash_numprint ' 用戶數(shù)一共有: ',user_numprint ' 商品全集中商品個(gè)數(shù)為: ',item_full_numprint '商品全集中商品種類數(shù)數(shù)為:',item_categories_full_numprint '商品全集中共有d條行為記錄(total_
8、behavior_num)print '消費(fèi)行為記錄中負(fù)正樣本比為%d:1' %(negative_num/positive_num)print ' 一共耗時(shí) %f 秒' %(end-start)2、數(shù)據(jù)預(yù)處理 重新整理時(shí)間重新整理數(shù)據(jù)的時(shí)間,也就是 Time字段,在數(shù)據(jù)統(tǒng)計(jì)分組中也提到過,因?yàn)樵紨?shù)據(jù)的用戶行為時(shí)間記錄是從11 月 18 日 0 時(shí)到 12月 18 日 23 時(shí),精確到小時(shí)級(jí),為了方便數(shù)據(jù)集的劃分,需要將用戶行為時(shí)間數(shù)據(jù)整理為 0-30 天,以天為單位,即 11 月 18 日的time 為 0、 11 月 19 日的 time 為 1,以此類推
9、。貼關(guān)鍵代碼import pandas as pdfrom datetime import *import timet0=()begin_time=datetime(2014,11,18,0,0)def trans_time(str_time):entry_time=(str_time,"%Y-%m-%d %H")datatime_delta=(entry_time-begin_time).daysreturn int(datatime_delta)df_train_user=("")print "=n"print " 時(shí)間
10、轉(zhuǎn)換進(jìn)行中.n"("",index=False)t1=()print " 時(shí)間轉(zhuǎn)換結(jié)束!n"print " 轉(zhuǎn)換時(shí)間共耗時(shí)f秒"(t1-t0) 劃分訓(xùn)練集和測(cè)試集在分類問題中, 模型需要經(jīng)過訓(xùn)練集的學(xué)習(xí), 才能用于測(cè)試集, 而訓(xùn)練集和測(cè)試集在形式上的區(qū)別在于前者有類別標(biāo)簽, 后者則需要模型輸出相應(yīng)的類別標(biāo)簽。 這里的問題是依據(jù) 31 天的用戶操作記錄預(yù)測(cè)第 32 天的購買情況, 所以通常來說, 訓(xùn)練集的構(gòu)建需要利用 31 天的數(shù)據(jù),而其相應(yīng)的類別標(biāo)簽如何標(biāo)注在訓(xùn)練集中?這個(gè)與你如何劃分訓(xùn)練集和測(cè)試集有關(guān);而測(cè)試集的構(gòu)建則可用
11、到 31 天的完整數(shù)據(jù)。下面舉個(gè)例子,用于解釋訓(xùn)練集和測(cè)試集的具體表現(xiàn)形式。訓(xùn)練集樣本示例測(cè)試集樣本示例訓(xùn)練集樣本示例中的 user_id, brand_id ( item_id )用于表示唯一的樣本id ,而特征 feature_1, feature_2 則用 31 天的數(shù)據(jù)構(gòu)建而來。本次比賽中, 我們劃分訓(xùn)練集和測(cè)試集所用的分割日期是每 10 天。 第 0-9 天為一個(gè)訓(xùn)練集, 用第 10 天的數(shù)據(jù)給第 0-9 天數(shù)據(jù)添加類別標(biāo)簽。第 1-10 天為一個(gè)訓(xùn)練集,用第 11 天的數(shù)據(jù)給第 1-10 天數(shù)據(jù)添加類別標(biāo)簽,依次類推,最后是第20-29天為一個(gè)訓(xùn)練集,用第30天的數(shù)據(jù)給第20-29
12、天數(shù)據(jù)添加類別標(biāo)簽。測(cè)試集為第 21-30 天的數(shù)據(jù)。貼關(guān)鍵代碼import pandas as pdfrom datetime import *import timenum=22start=()df_train_user=("")df_items=("")df_items="item_id"=df_items=afor i in range(num):print " 劃分訓(xùn)練集:"+str(i)j=i+10if j!=31:df_set=df_train_user>=i) & <j)(&quo
13、t;data/"+str(j)+".csv",index=False)df_test=df_train_user=j) & =4)"user_id","item_id"df_test=()df_test=(left=df_test,right=df_items,how="inner").drop_duplicates()("data/"+"result"+str(j)+".csv",index=False)else:df_set=df_t
14、rain_user>=i)&<j)("data/"+"",index=False)end=()print ' 訓(xùn)練集劃分耗時(shí) %f 秒' %(end-start) 平衡正負(fù)樣本正負(fù)樣本比例需從1:100 降為 1:101:20 之間。貼關(guān)鍵代碼import pandas as pdimport randomimport timefrom get_features import *start=()df_feature2=()j=10for k in range(20):i=j+kdf_feature=("dat
15、a_features/train"+str(i)+".csv")df_feature_p= df_feature=1df_feature_n = df_feature=0lp = len(df_feature_p)ln = len(df_feature_n)if float(ln)/lp > 14:a = range(0,ln)slice = (a,lp*14) # lp*15df_feature_n = slicedf_feature = (df_feature_p,df_feature_n,ignore_index=True)df_feature2=(d
16、f_feature,df_feature2)("features/",index=False)end=()print ' 對(duì)訓(xùn)練集抽樣耗時(shí) f秒'(end-start)3、特征提取特征提取在數(shù)據(jù)挖掘中很重要, 那么為什么它們那么重要呢?之前提到過, 要想輸出測(cè)試集的類別標(biāo)簽,需要模型在訓(xùn)練集經(jīng)過學(xué)習(xí),那么模型在訓(xùn)練集上學(xué)習(xí)的是什么?我們知道,在給模型輸入數(shù)據(jù)的時(shí)候,實(shí)際上模型用到的都是特征(及其對(duì)應(yīng)的類別標(biāo)簽) , 而特征就是用于描述為什么該樣本的類別標(biāo)簽就是如此, 在本賽題中即用于描述某用戶為什么購買/ 不購買某商品。比如, 用戶購買某商品的原因, 是因?yàn)?/p>
17、以前經(jīng)常買,信得過,那么這里可以用 “用戶購買該商品的天數(shù)/ 用戶訪問該商品的天數(shù)” 來刻畫用戶對(duì)該品牌的忠誠(chéng)度。當(dāng)然,并不是單一的特征就能描述所有情況,通常來說,需要針對(duì)所有可能的情形進(jìn)行考慮,從而深刻而全面地刻畫用戶購買 / 不購買商品的原因。這樣,模型才能真正學(xué)到其中的規(guī)律,從而在測(cè)試集表現(xiàn)優(yōu)異。而這一過程,就稱之為 特征工程顯然,要做好特征工程,需要我們自身對(duì) “用戶會(huì)否購買商品” 這一業(yè)務(wù)具有較深刻的理解,即領(lǐng)域知識(shí),并將其用模型可理解的方式表現(xiàn)出來,如何抽取特征?1、統(tǒng)計(jì)用戶在31 天中的購買量、點(diǎn)擊量、收藏量、加購物車次數(shù)、有操作記錄的天數(shù)、發(fā)生購買的天數(shù)、點(diǎn)擊轉(zhuǎn)購買率等等,并以
18、點(diǎn)擊轉(zhuǎn)購買率做升序 / 降序排序進(jìn)行觀察,可以發(fā)現(xiàn)點(diǎn)擊量越高的, 點(diǎn)擊轉(zhuǎn)購買率也往往越低, 尤其點(diǎn)擊量極高的用戶, 往往購買量為0。由此可以考慮將用戶購買量、點(diǎn)擊轉(zhuǎn)購買率等一系列特征用于描述用戶是否會(huì)在未來一天發(fā)生購買。2、統(tǒng)計(jì)用戶從初次訪問商品到最終購買商品的時(shí)間,可以發(fā)現(xiàn)絕大多數(shù)購買都是當(dāng)天接觸當(dāng)天完成, 越往后用戶購買的可能性越低。 由此可以推測(cè)用戶對(duì)商品的購買意愿是隨著距離上次訪問的時(shí)間拉長(zhǎng)而衰減的,進(jìn)而可以使用衰減函數(shù)來模擬該購買意愿。一方面,利用領(lǐng)域知識(shí)對(duì)數(shù)據(jù)進(jìn)行分析、實(shí)驗(yàn)驗(yàn)證。另一方面,從分析的結(jié)果、實(shí)驗(yàn)的反饋來更新領(lǐng)域知識(shí)。這是一個(gè)不斷迭代的過程,需要成體系、且不斷地完善。以下
19、僅供參考:( 1)、基本統(tǒng)計(jì)類特征A. 銷量(分割日期前1、 2、 3、 4、 5、 10 天)B.成交訂單數(shù)(以同一天同一個(gè)用戶為一個(gè)訂單)C. 購買人數(shù)D.以上3類特征分別再針對(duì)點(diǎn)擊、收藏、加購物車等進(jìn)行統(tǒng)計(jì)( 2)、轉(zhuǎn)化率類特征A. 銷量 / 點(diǎn)擊數(shù)B.成交訂單數(shù)/點(diǎn)擊訂單數(shù)C. 購買人數(shù) / 點(diǎn)擊人數(shù)D.上述3個(gè)特征分別在針對(duì)收藏、購物車等操作進(jìn)行統(tǒng)計(jì)( 3)、比值類特征A.返客率(某周期內(nèi)多次購買的用戶數(shù)/總購買用戶數(shù))B.老客戶率(3天【或其他周期7、15、30】前曾購買過且在前3天內(nèi)再次購買的用戶數(shù)/3 天內(nèi)總購買用戶數(shù))C.人均點(diǎn)擊數(shù)、人均購買量、人均收藏量、人均加購物車量等我
20、們的做法:1. 用戶所有行為總量提取用戶所有行為總量作為第一個(gè)特征,它是指每個(gè)用戶對(duì)每個(gè)商品所有行為的總量,其中的所有行為包括點(diǎn)擊行為、收藏行為、購物車行為、購買行為。用戶所有行為總量定義為前10 天的用戶行為數(shù)據(jù)中用戶對(duì)商品全集的所有行為總量, 包括點(diǎn)擊量、 收藏量、購物車量、購買量。從用戶所有行為總量中,可以得到用戶對(duì)某商品產(chǎn)生的行為次數(shù),從而推測(cè)出該用戶對(duì)阿里巴巴移動(dòng)電商平臺(tái)的操作頻率和忠誠(chéng)度, 以此做出合理的個(gè)性化推薦。 之所以選擇前10 天作為時(shí)間節(jié)點(diǎn),是由于劃分之后的每個(gè)訓(xùn)練集和測(cè)試集都以 10 天為單位。2. 點(diǎn)擊量定義數(shù)據(jù)集的每個(gè)用戶對(duì)商品全集中的商品的點(diǎn)擊行為的總和為點(diǎn)擊量。
21、 從點(diǎn)擊量中,可以知道用戶瀏覽了幾次某商品, 從而推測(cè)該用戶對(duì)該商品的興趣程度, 為之后的模型訓(xùn)練以及最后的個(gè)性化推薦奠定一個(gè)良好基礎(chǔ)。其中,對(duì)點(diǎn)擊量按10 天、 5 天、 3 天、 1 天的時(shí)間來劃分。也就是關(guān)于點(diǎn)擊量,按時(shí)間的不同提取的特征( U_click_sum10-U_click_sum1 )有 4個(gè),分別是前10天的用戶點(diǎn)擊量、前5天的用戶點(diǎn)擊量、前3 天的用戶點(diǎn)擊量、前1 天的用戶點(diǎn)擊量。之所以這樣提取特征是由于之前劃分的訓(xùn)練集是以10 天為單位劃分的, 這樣可以更清楚地分析用戶在10 天中點(diǎn)擊量的分布情況,對(duì)后面的模型訓(xùn)練有很重要的作用。3. 收藏量定義數(shù)據(jù)集的每個(gè)用戶對(duì)商品全
22、集中的商品的收藏行為的總和為收藏量。這里可以從收藏行為推測(cè)用戶對(duì)某商品的感興趣程度,雖然收藏量不會(huì)大于點(diǎn)擊量,但是收藏行為必定大于點(diǎn)擊行為反映的用戶感興趣程度。4. 購物車量定義數(shù)據(jù)集的每個(gè)用戶對(duì)商品全集中的商品加入購物車行為的總數(shù)為購物車量。這里可以從加入購物車行為直接推斷用戶對(duì)某商品感興趣,雖然購物車量必定大幅度小于點(diǎn)擊量和收藏量,但是加入購物車行為反映用戶對(duì)某個(gè)商品感興趣程度必定大于點(diǎn)擊和收藏行為反映的感興趣程度。5. 購買量定義數(shù)據(jù)集的每個(gè)用戶對(duì)商品全集中商品的購買行為的總數(shù)為購買量,或者說用戶購買商品子集的商品數(shù)量為購買量。這里可以從用戶的購買行為直接推斷為用戶對(duì)某商品感興趣,對(duì)個(gè)性
23、化推薦有重要的意義。為了更清楚地看到購買量與點(diǎn)擊量、收藏量、加購物車量的關(guān)系,對(duì)用戶前10 天的行為數(shù)據(jù)用散點(diǎn)圖表示,以用戶前10 天的購買量為橫坐標(biāo),其他三類行為是縱坐標(biāo),如圖,可以看出用戶點(diǎn)擊量與其他的行為量相比明顯大很多,而點(diǎn)擊量越多的用戶購買量就越少。點(diǎn)點(diǎn)擊用戶前 10 天的行為數(shù)據(jù)對(duì)比6. 點(diǎn)擊 / 購買 率點(diǎn)擊 / 購買率的計(jì)算公式就是點(diǎn)擊量除以購買量, 即發(fā)生多少次點(diǎn)擊行為會(huì)有一次購買行為, 也就是電子商務(wù)平臺(tái)常說的轉(zhuǎn)化率的倒數(shù)。這個(gè)特征可以挖掘點(diǎn)擊量和購買量之間的關(guān)系,可以預(yù)測(cè)出用戶在點(diǎn)擊后,何時(shí)會(huì)發(fā)生購買行為,更準(zhǔn)確地為用戶提供一個(gè)合理的個(gè)性化推薦。這里還是按時(shí)間的不同提取4
24、 個(gè)特征( U_click/buy10-U_click/buy1 ),分別是前10 天的點(diǎn)擊 / 購買率、前 5 天的點(diǎn)擊 / 購買率、前3 天的點(diǎn)擊 / 購買率、前1 天的點(diǎn)擊 / 購買率。7. 收藏 / 購買 率收藏 / 購買率的計(jì)算公式就是收藏量除以購買量, 即發(fā)生多少次收藏行為會(huì)有一次購買行為。 這個(gè)特征可以挖掘收藏量和購買量之間的關(guān)系,可以預(yù)測(cè)出用戶在收藏后,何時(shí)會(huì)發(fā)生購買行為,更準(zhǔn)確地為用戶提供一個(gè)合理的個(gè)性化推薦。這里還是按時(shí)間的不同提取4 個(gè)特征( U_collection/buy10-U_collection/buy1 ),分別是前10 天的收藏/ 購買率、前5 天的收藏 /
25、 購買率、前3 天的收藏 / 購買率、前1 天的收藏 / 購買率。與點(diǎn)擊/ 購買率不同,該特征的取值范圍可能在0,1 之間, 因?yàn)橘徺I行為不一定要先收藏該商品, 所以取值范圍應(yīng)該是大于等于0。8. 購物車 / 購買 率購物車 / 購買率的計(jì)算公式就是購物車量除以購買量, 即發(fā)生多少次加入購物車行為會(huì)有一次購買行為。 這個(gè)特征可以挖掘購物車量和購買量之間的關(guān)系,可以預(yù)測(cè)出用戶在加入購物車后,何時(shí)會(huì)發(fā)生購買行為,更準(zhǔn)確地為用戶提供一個(gè)合理的個(gè)性化推薦。還是按時(shí)間的不同提取4 個(gè)特征( U_car/buy10- U_car/buy1 ),分別是前10 天的購物車/購買率、前5 天的購物車 / 購買率
26、、前3 天的購物車/ 購買率、前1 天的購物車/ 購買率。該特征的取值范圍與收藏 / 購買率相同,購買行為不一定要先加入購物車,所以它也應(yīng)該是大于等于0。9. 商品銷量商品銷量是指每個(gè)商品的銷售量,與用戶的購買行為有關(guān),由購買了該商品的所有用戶總量決定。該特征直觀地反映了某個(gè)商品基于銷量上受喜愛程度,為訓(xùn)練模型以及個(gè)性化推薦提供了很好的參考。還是按時(shí)間的不同提取4個(gè)特征 ( Item_sale10-Item_sale1 ) , 分別是前 10 天的商品銷量、 前 5 天的商品銷量、前 3 天的商品銷量、前1 天的商品銷量。該特征的取值范圍一定大于等于零。10. 成交訂單量成交訂單量是指包含該商
27、品的總成交訂單的數(shù)量,與商品銷量類似,不同的是同一筆訂單中可能購買了多件該商品,那么此時(shí)商品銷量大于1,而成交訂單量卻等于1 。該特征反映了用戶對(duì)某個(gè)商品的購買次數(shù),排除同一筆訂單購買多件而使商品銷量看起來較高的情況。比如,用戶購買牙刷時(shí),一筆訂單并不會(huì)只購買一個(gè),通常會(huì)一起購買多個(gè),那么牙刷的銷量相比一般只購買一件的商品銷量高很多。通過成交訂單量可以反映商品基于訂單量受喜愛程度,提高了訓(xùn)練模型以及個(gè)性化推薦的準(zhǔn)確性。還是按時(shí)間的不同提取 4 個(gè)特征( I_order10-I_order1 ),分別是前10 天的成交訂單量、前5 天的成交訂單量、前3 天的成交訂單量、前1 天的成交訂單量。該特
28、征的取值范圍一定大于等于零。11. 購買人數(shù)購買人數(shù)是指購買該商品的用戶總?cè)藬?shù),與商品銷量與成交訂單相類似,不同的是同一個(gè)用戶可能對(duì)該商品多次下單,也可能購買了多件該商品,那么此時(shí)成交訂單量大于1,商品銷量大于1 ,而購買人數(shù)卻等于 1。該特征反映了某個(gè)商品的購買人數(shù),排除同一個(gè)用戶購買多次該商品的情況。比如,用戶購買生活用品就會(huì)出現(xiàn)多次下單和購買多件的情況。通過購買人數(shù)可以真正反映商品基于用戶受喜愛程度,很大程度地提高了訓(xùn)練模型以及個(gè)性化推薦的準(zhǔn)確性。還是按時(shí)間的不同提取 4 個(gè)特征( I_buyer10-I_buyer1 ),分別是前10 天的購買人數(shù)、前5 天的購買人數(shù)、前 3 天的購買
29、人數(shù)、前1 天的購買人數(shù)。該特征的取值范圍一定大于等于零。12. 是否加購物車加入購物車的行為已經(jīng)在前面做了一個(gè)詳細(xì)地介紹和分析,其實(shí)在用戶行為數(shù)據(jù)中,是否加入購物車也可以作為一個(gè)特征提取出來。將是否加購物車的特征,定義為數(shù)據(jù)集的每個(gè)用戶對(duì)商品全集中的商品是否發(fā)生加入購物車的行為。這里還是按時(shí)間的不同提取5 個(gè)特征( car5-car1 ),分別是倒數(shù)第5 天是否加購物車、倒數(shù)第 4 天是否加購物車、倒數(shù)第3 天是否加購物車、倒數(shù)第2 天是否加購物車、倒數(shù)第1 天是否加購物車。之所以這樣提取特征, 是因?yàn)閺挠脩粼?0 天的倒數(shù) 5 天內(nèi)是否會(huì)將某商品加入購物車, 可以預(yù)測(cè)該用戶在測(cè)試集中倒數(shù)5
30、 天內(nèi)是否會(huì)發(fā)生加入購物車的行為。該特征的取值范圍一定為 1 或者 0, 其中 1 代表加購物車, 0 代表不加購物車。13. 是否購買用戶購買行為已經(jīng)和加購物車行為一樣在前面做了詳細(xì)地介紹和分析,其實(shí)在用戶行為數(shù)據(jù)中,是否購買也可以作為特征提取出來。在本文中,將是否購買的特征,定義為數(shù)據(jù)集的每個(gè)用戶對(duì)商品全集中的商品是否會(huì)發(fā)生購買行為。這里還是按時(shí)間的不同提取5 個(gè)特征( buy5-buy1 ),分別是倒數(shù)第5 天是否購買、倒數(shù)第4 天是否購買、倒數(shù)第 3 天是否購買、倒數(shù)第2 天是否購買、倒數(shù)第1 天是否購買。之所以這樣提取特征,是因?yàn)閺挠脩粼?0天的倒數(shù) 5 天內(nèi)是否會(huì)購買某商品,可以預(yù)
31、測(cè)該用戶在測(cè)試集中倒數(shù)5 天內(nèi)是否會(huì)發(fā)生購買行為。該特征的取值范圍一定為 1 或者 0, 其中 1 代表購買, 0 代表不購買。14. 累計(jì)的用戶行為累計(jì)的用戶行為, 也屬于用戶行為數(shù)據(jù)的一種表現(xiàn)形式, 用戶行為數(shù)據(jù)在前面已經(jīng)做了詳細(xì)地介紹和分析,它可以直觀地反映出用戶的各種關(guān)鍵信息。累計(jì)的用戶行為定義為前10 天的用戶行為數(shù)據(jù)中用戶累計(jì)對(duì)商品子集的各行為總量,包括點(diǎn)擊量、收藏量、購物車量、購買量。與用戶所有行為總量特征不同之處在于,累計(jì)的用戶行為是基于商品子集的,而且是按照用戶行為提取特征。提取4 個(gè)特征( behav1- behav4),分別是前10天的用戶點(diǎn)擊量、前10天的用戶收藏量、前
32、10天的用戶加購物車量、前 10 天的用戶購買量。該特征的取值范圍一定為大于等于 0。15. 訪問時(shí)間差訪問時(shí)間差是指用戶在兩次訪問時(shí)間的間隔,它可以反映用戶對(duì)網(wǎng)站的訪問頻率等信息。 本文中, 提取特征訪問時(shí)間差, 將其定義為用戶最后一次訪問商品子集中的某個(gè)商品到第 10 天的天數(shù)間隔。這與倒數(shù)5 天的加購物車量、購買量相關(guān)聯(lián),可以得到用戶訪問時(shí)間與購買之間的關(guān)系。該特征的取值范圍為 0,10 之間的整數(shù)。貼關(guān)鍵代碼import pandas as pdimport randomfrom get_features import *import timet1=()j=10df_items=(&q
33、uot;")df_items= = ()a"item_id" =df_items = afor k in range(21):i=j+kprint "add features to trains "+str(i)df_tag=("data/"+"result"+str(i)+".csv")df_tag"tag"=1df_feature=("data/"+str(i)+".csv")df_feature_item=(left=d
34、f_feature,right=df_items,how="inner")df_ui = df_feature"user_id","item_id".drop_duplicates()df_ui = (left=df_ui,right=df_items,how="inner")df_ui_tag = (left=df_ui,right=df_tag,how="left")(0,inplace=True)U1 = buy_sum10(df_feature,i)U2 = click_sum10(df
35、_feature,i)df_train = (left=df_train,right=U2,how="left")U3 = collection_sum10(df_feature,i)df_train = (left=df_train,right=U3,how="left")U4 = car_sum10(df_feature,i)df_train = (left=df_train,right=U4,how="left")df_train"U_click/buy10" =df_train"U_click/b
36、uy5" =df_train"U_click/buy3" =df_train"U_click/buy1" =df_train"U_click/buy10"=df_train"U_click/buy10".map(lambda x:fillinfinity(x)df_train"U_click/buy5"=df_train"U_click/buy5".map(lambda x:fillinfinity(x)df_train"U_click/buy3"
37、;=df_train"U_click/buy3".map(lambda x:fillinfinity(x)df_train"U_click/buy1"=df_train"U_click/buy1".map(lambda x:fillinfinity(x)df_train"U_collection/buy10" =df_train"U_collection/buy5" =df_train"U_collection/buy3" =df_train"U_collectio
38、n/buy1" =df_train"U_collection/buy10"=df_train"U_collection/buy10".map(lambda x: fillinfinity(x)df_train"U_collection/buy5"=df_train"U_collection/buy5".map(lambda x: fillinfinity(x)df_train"U_collection/buy3"=df_train"U_collection/buy3"
39、;.map(lambda x: fillinfinity(x)df_train"U_collection/buy1"=df_train"U_collection/buy1".map(lambda x: fillinfinity(x)df_train"U_car/buy10" =df_train"U_car/buy5" =df_train"U_car/buy3" =df_train"U_car/buy1" =df_train"U_car/buy10"=df_
40、train"U_car/buy10".map(lambda x: fillinfinity(x)df_train"U_car/buy5"=df_train"U_car/buy5".map(lambda x:fillinfinity(x)df_train"U_car/buy3"=df_train"U_car/buy3".map(lambda x:fillinfinity(x)df_train"U_car/buy1"=df_train"U_car/buy1".
41、map(lambda x:fillinfinity(x)df_behavior_sum10 = behavior_sum10(df_feature)df_train = (left=df_train,right=df_behavior_sum10,how="left")df_I_buyers = I_buyers(df_feature_item,i)df_train = (left=df_train,right=df_I_buyers,how="left")df_item1 = Item_sale(df_feature,i)df_train = (lef
42、t=df_train,right=df_item1,how="left")df_car = car(df_feature,i)df_train = (left=df_train,right=df_car,how="left")df_buy = buy(df_feature,i)df_train = (left=df_train,right=df_buy,how="left")df_orders = I_Orders(df_feature_item,i)df_train = (left=df_train,right=df_orders,
43、how="left")df_ui_sum = UI_Sum(df_feature_item,i)df_train = (left=df_train,right=df_ui_sum,how="left")df_ui_last_time = last_time(df_feature_item,i)df_train = (left=df_train,right=df_ui_last_time,how="left")(0,inplace=True)("data_features/train"+str(i)+".c
44、sv",index=False)t2=()print "給訓(xùn)練集打上標(biāo)簽耗時(shí) f秒"(t2-t1)4、選擇分類模型可以用決策樹模型、隨機(jī)森林模型、Logistic回歸、GBRTf型等,具體可以上網(wǎng)站:查看各個(gè)模型的使用方法。決策樹模型:首先從包含了特征的訓(xùn)練集中選擇所需特征,調(diào)用 DecisionTreeClassifier 函數(shù)對(duì)該訓(xùn)練集訓(xùn)練模型, 再使用 predict 函數(shù)預(yù)測(cè)測(cè)試集的分類, 再將分類結(jié)果是購買( tag=1 )的商品作為推薦結(jié)果, 將其與測(cè)試集的真實(shí)分類結(jié)果比對(duì), 最后評(píng)估該模型對(duì)本實(shí)證研究數(shù)據(jù)的準(zhǔn)確率,以 F1 值為準(zhǔn)。決策樹分類模型的
45、DecisionTreeClassifier 函數(shù),包含了很多參數(shù)設(shè)置,著重研究criterion參數(shù), criterion表示衡量一個(gè)分類的質(zhì)量, 支持的標(biāo)準(zhǔn)可選擇gini 和 entropy這兩個(gè)值,其中 gini 是基尼指標(biāo), entropy 是信息增益。由于用十折交叉驗(yàn)證的方法, 所以每次改變一個(gè)變量都需要對(duì)該模型重新抽樣, 對(duì)其運(yùn)行 10 次,得出第1 次到第 10 次的驗(yàn)證結(jié)果,對(duì)十次準(zhǔn)確率F1 值求平均作為該模型最終的 F1 值。貼關(guān)鍵代碼df_predict = ("model/")inner = (left=df_result,right=df_predi
46、ct,how="inner")predict_num = len(df_predict)print "DecisionTree predict_num is: ",predict_numhit_num = len(inner)print "DecisionTree hit_num is: ",hit_numresult_num = len(df_result)print "DecisionTree total result num is: ",result_numif predict_num!=0:precisio
47、n = float(hit_num)/predict_numcallrate = float(hit_num)/result_num print "DecisionTree Precision is : ",precisionprint "DecisionTree Call rate is: ",callrate if precision+callrate != 0:print "決策樹F1 值為 : ",2*precision*callrate/(precision+callrate),'n'else:print &
48、quot;決策樹F1 值為 : 0"基于隨機(jī)森林的分類模型隨機(jī)森林是在決策樹的基礎(chǔ)上提出的分類模型, 它屬于集成學(xué)習(xí)模型。 他的核心思想就是通過訓(xùn)練和組合多個(gè)不同的決策樹, 使其形成森林, 然后由多棵樹進(jìn)行投票來決定其 分類結(jié)果。首先從包含了特征的訓(xùn)練集中選擇所需特征,調(diào)用 RandomForestClassifier 函數(shù)對(duì)該訓(xùn)練集訓(xùn)練模型,再使用 predict 函數(shù)預(yù)測(cè)測(cè)試集的分類,再將分類結(jié)果是購買( tag=1) 的商品作為推薦結(jié)果, 將其與測(cè)試集的真實(shí)分類結(jié)果比對(duì), 最后評(píng)估該模型對(duì)本實(shí)證研究 數(shù)據(jù)的準(zhǔn)確率,以 F1 值為準(zhǔn)。隨機(jī)森林分類模型的RandomForestCl
49、assfier函數(shù),包含了很多參數(shù)設(shè)置,其中著重 研究n_estimators和criterion參數(shù)。n_estimators表示森林里樹的個(gè)數(shù),整數(shù)形式;criterion 表示衡量一個(gè)分類的質(zhì)量,支持的標(biāo)準(zhǔn)可選擇 gini 和 entropy 這兩個(gè)值,其中 gini 是基尼 指標(biāo), entropy 是信息增益。貼關(guān)鍵代碼df_predict = ("model/")inner = (left=df_result,right=df_predict,how="inner")predict_num = len(df_predict)print &quo
50、t;RandomForest predict_num is: ",predict_num hit_num = len(inner)print "RandomForest hit_num is: ",hit_num result_num = len(df_result)print "RandomForest total result num is: ",result_numif predict_num!=0:precision = float(hit_num)/predict_numif result_num!=0:callrate = floa
51、t(hit_num)/result_numprint "RandomForest Precision is : ",precisionprint "RandomForest Call rate is: ",callrateif precision+callrate != 0:print "隨機(jī)森林F1 值為 : ",2*precision*callrate/(precision+callrate),'n'else:print "隨機(jī)森林F1 值為 : 0"基于回歸樹的分類模型回歸樹 GBDT 是一種
52、迭代決策樹算法,由多個(gè)決策樹組成,在本節(jié)中要具體使用的分類模型是GBRT ,即梯度迭代回歸樹,或者梯度提升回歸樹,它側(cè)重于梯度迭代GB 和回歸樹 RT 。首先從包含了特征的訓(xùn)練集中選擇所需特征,再調(diào)用 GradientBoostingClassifier 函數(shù)對(duì)該訓(xùn)練集訓(xùn)練模型,再使用 predict 函數(shù)預(yù)測(cè)測(cè)試集的分類,再將分類結(jié)果是購買(tag=1)的商品作為推薦結(jié)果,將其與測(cè)試集的真實(shí)分類結(jié)果比對(duì),最后評(píng)估該模型對(duì)本實(shí)證研究數(shù)據(jù)的準(zhǔn)確率,以 F1 值為準(zhǔn)?;貧w樹分類模型的 GradientBoostingClassifier 函數(shù),包含了很多參數(shù)設(shè)置,其中著重研究參數(shù)learning_
53、rate。learning_rate就是學(xué)習(xí)率,是指每棵樹都對(duì)學(xué)習(xí)率的縮小有貢獻(xiàn)。它的默認(rèn)值是,可以和的取值為例進(jìn)行分析。貼關(guān)鍵代碼df_predict = ("model/")inner = (left=df_result,right=df_predict,how="inner")predict_num = len(df_predict)print "ensemble_GBRT_LR predict_num is: ",predict_numhit_num = len(inner)print "ensemble_GBRT_
54、LR hit_num is: ",hit_numresult_num = len(df_result)print "ensemble_GBRT_LR total result num is: ",result_numif predict_num!=0:precision = float(hit_num)/predict_numif result_num!=0:print "ensemble_GBRT_LR Precision is : ",precisionprint "ensemble_GBRT_LR Call rate is: &
55、quot;,callrateif precision+callrate != 0:print "ensemble_GBRT_LR F1 值為 :",2*precision*callrate/(precision+callrate),'n' else:print "ensemble_GBRT_LR F1 值為 : 0"基于 Logistic 回歸的分類模型Logistic 回歸, 是指通過連續(xù)型或者屬性型的自變量, 預(yù)測(cè)屬性型因變量的分析方法,主要研究因變量各種可能發(fā)生的概率與自變量之間的關(guān)系。 本文中, 主要研究 Logistic 回 歸的二分類非線性模型,用來解決分類問題,比如該用戶是否會(huì)購買該商品。首先從包含了特征的訓(xùn)練集中選擇所需特征,再調(diào)用 LogisticRegression 函數(shù)對(duì)該訓(xùn)練集訓(xùn)練模型,再使用predict函數(shù)預(yù)測(cè)測(cè)試集的分類,再將分類結(jié)果是購買(tag=1)的商品作為推薦結(jié)果, 將其與測(cè)試集的真實(shí)分類結(jié)果比對(duì), 最后評(píng)估該模型對(duì)本實(shí)證研究數(shù)據(jù)的準(zhǔn)確率,以 F1 值為準(zhǔn)。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院接送服務(wù)協(xié)議
- 2025年02月魯南技師學(xué)院工作人員(14人)筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 西服出售合同范本
- 2024年太原市小店區(qū)醫(yī)療集團(tuán)招聘筆試真題
- 臨時(shí)養(yǎng)生顧問協(xié)議
- 加班補(bǔ)償協(xié)議范本
- 知識(shí)版權(quán)對(duì)提升企業(yè)形象的作用
- 2024年湖州安吉英才人力資源服務(wù)有限公司招聘筆試真題
- 2024年淮南師范學(xué)院招聘預(yù)考試真題
- 人力資源服務(wù)協(xié)議范本
- 2015-2022年青島酒店管理職業(yè)技術(shù)學(xué)院高職單招語文/數(shù)學(xué)/英語筆試參考題庫含答案解析
- 保險(xiǎn)第三方理賠調(diào)查服務(wù)方案
- 我愛運(yùn)動(dòng)手抄報(bào)電子小報(bào)模板(附A4線稿)可打印涂色
- 新能源汽車結(jié)構(gòu)原理與檢修(彩色版)課件
- GB/T 9113-2010整體鋼制管法蘭
- GB/T 32722-2016土壤質(zhì)量土壤樣品長(zhǎng)期和短期保存指南
- 2009數(shù)據(jù)結(jié)構(gòu)英文試卷A及答案
- FZ/T 51010-2014纖維級(jí)聚對(duì)苯二甲酸1,3-丙二醇酯切片(PTT)
- 中等職業(yè)學(xué)校英語教學(xué)大綱詞匯表本表共收詞2200個(gè)左右含
- 三年級(jí)下冊(cè)道德與法治《我是獨(dú)特的》教學(xué)課件【新部編版】
- “互聯(lián)網(wǎng)+”大學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)課件
評(píng)論
0/150
提交評(píng)論