




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、浙江工商大學(xué)計算機(jī)與信息工程學(xué)院Python程序設(shè)計與實(shí)踐大作業(yè)報告專 業(yè): 計科 班 級: 1404 學(xué) 號:1412190416、1412190415、1412190413 姓 名: 陸陽,孫勇,裘昇明 指導(dǎo)教師: 蒲飛 2015 年 6 月 28 日題目介紹:在真實(shí)的業(yè)務(wù)場景下,我們往往需要對所有商品的一個子集構(gòu)建個性化推薦模型。在完成這件任務(wù)的過程中,我們不僅需要利用用戶在這個商品子集上的行為數(shù)據(jù),往往還需要利用更豐富的用戶行為數(shù)據(jù)。定義如下的符號:U用戶集合I商品全集P商品子集,P ID用戶對商品全集的行為數(shù)據(jù)集合那么我們的目標(biāo)是利用D來構(gòu)造U中用戶對P中商品的
2、推薦模型。數(shù)據(jù)說明:競賽數(shù)據(jù)包含兩個部分。第一部分是用戶在商品全集上的移動端行為數(shù)據(jù)(D),表名為tianchi_mobile_recommend_train_user,包含如下字段:字段字段說明提取說明 user_id 用戶標(biāo)識 抽樣&字段脫敏 item_id 商品標(biāo)識 字段脫敏 behavior_type 用戶對商品的行為類型 包括瀏覽、收藏、加購物車、購買,對應(yīng)取值分別是1、2、3、4。 user_geohash 用戶位置的空間標(biāo)識,可以為空 由經(jīng)緯
3、度通過保密的算法生成item_category商品分類標(biāo)識字段脫敏time行為時間精確到小時級別第二個部分是商品子集(P),表名為tianchi_mobile_recommend_train_item,包含如下字段:字段字段說明提取說明 item_id 商品標(biāo)識 抽樣&字段脫敏 item_ geohash 商品位置的空間標(biāo)識,可以為空 由經(jīng)緯度通過保密的算法生成 item_category 商品分類標(biāo)識 字段脫敏訓(xùn)練數(shù)據(jù)包含了抽樣出來的一定量用戶在一個月時間(11.1812.18)之內(nèi)
4、的移動端行為數(shù)據(jù)(D),評分?jǐn)?shù)據(jù)是這些用戶在這個一個月之后的一天(12.19)對商品子集(P)的購買數(shù)據(jù)。參賽者要使用訓(xùn)練數(shù)據(jù)建立推薦模型,并輸出用戶在接下來一天對商品子集購買行為的預(yù)測結(jié)果。 大作業(yè)報告內(nèi)容包括以下幾個部分1、數(shù)據(jù)分組統(tǒng)計:可統(tǒng)計有多少用戶、商品、商品類別等信息,甚至每天各種行為的統(tǒng)計數(shù)。如圖:還有,在給出的用戶行為數(shù)據(jù)中,有些用戶在整個11-18日至12-18日對商品有瀏覽行為記錄,但是從未產(chǎn)生過購買行為,這些用戶會否在12月19號購買商品實(shí)難預(yù)測,因此,我們?nèi)コ@些無購買行為的用戶信息,認(rèn)為這些用戶在12月19號還是不會購買任何商品。貼關(guān)鍵代碼import ti
5、meimport pandas as pdstart=time.time()df_items=pd.read_csv("tianchi_mobile_recommend_train_item.csv")df_items2=pd.read_csv("tianchi_mobile_recommend_train_user.csv")df_items3=pd.DataFrame()df_items4=pd.DataFrame()df_items5=pd.DataFrame()df_items3=df_items"item_id".drop_
6、duplicates()df_items4=df_items"item_category".drop_duplicates()df_items5=df_itemsdf_items.item_geohash.notnull()df_items5=df_items5"item_id".drop_duplicates()df_items6=df_items2"user_id".drop_duplicates()df_items7=df_items2"item_id".drop_duplicates()df_items8=
7、df_items2"item_category".drop_duplicates()total_behavior_num=len(df_items2)df_items9=df_items2df_items2.behavior_type=4df_items10=df_items2df_items2.behavior_type!=4positive_num=len(df_items9)negative_num=len(df_items10)item_num=len(df_items3)item_categories_num=len(df_items4)item_geohash_
8、num=len(df_items5)user_num=len(df_items6)item_full_num=len(df_items7)item_categories_full_num=len(df_items8)end=time.time()print '商品子集中商品個數(shù)為:',item_numprint '商品子集中商品類型數(shù)為:',item_categories_numprint '商品子集中帶geohash信息的商品個數(shù)為:',item_geohash_numprint '用戶數(shù)一共有:',user_numprint
9、'商品全集中商品個數(shù)為:',item_full_numprint '商品全集中商品種類數(shù)數(shù)為:',item_categories_full_numprint '商品全集中共有%d條行為記錄' %(total_behavior_num)print '消費(fèi)行為記錄中負(fù)正樣本比為%d:1' %(negative_num/positive_num)print '一共耗時%f秒' %(end-start)2、數(shù)據(jù)預(yù)處理1 重新整理時間重新整理數(shù)據(jù)的時間,也就是Time字段,在數(shù)據(jù)統(tǒng)計分組中也提到過,因?yàn)樵紨?shù)據(jù)的用戶行為時間
10、記錄是從11月18日0時到12月18日23時,精確到小時級,為了方便數(shù)據(jù)集的劃分,需要將用戶行為時間數(shù)據(jù)整理為0-30天,以天為單位,即11月18日的time為0、11月19日的time為1,以此類推。貼關(guān)鍵代碼import pandas as pdfrom datetime import *import timet0=time.time()begin_time=datetime(2014,11,18,0,0)def trans_time(str_time): entry_time=datetime.strptime(str_time,"%Y-%m-%d %H") data
11、time_delta=(entry_time-begin_time).days return int(datatime_delta)df_train_user=pd.read_csv("tianchi_mobile_recommend_train_user.csv")print "=n"print "時間轉(zhuǎn)換進(jìn)行中 .n"df_train_user.time=df_train_user.time.map(lambda x:trans_time(x)df_train_user.to_csv("train_trans_time.
12、csv",index=False)t1=time.time()print "時間轉(zhuǎn)換結(jié)束!n"print "轉(zhuǎn)換時間共耗時%f秒" %(t1-t0)2 劃分訓(xùn)練集和測試集在分類問題中,模型需要經(jīng)過訓(xùn)練集的學(xué)習(xí),才能用于測試集,而訓(xùn)練集和測試集在形式上的區(qū)別在于前者有類別標(biāo)簽,后者則需要模型輸出相應(yīng)的類別標(biāo)簽。這里的問題是依據(jù)31天的用戶操作記錄預(yù)測第32天的購買情況,所以通常來說,訓(xùn)練集的構(gòu)建需要利用31天的數(shù)據(jù),而其相應(yīng)的類別標(biāo)簽如何標(biāo)注在訓(xùn)練集中?這個與你如何劃分訓(xùn)練集和測試集有關(guān);而測試集的構(gòu)建則可用到31天的完整數(shù)據(jù)。下面舉個例子,用于
13、解釋訓(xùn)練集和測試集的具體表現(xiàn)形式。訓(xùn)練集樣本示例 測試集樣本示例訓(xùn)練集樣本示例中的user_id, brand_id(item_id)用于表示唯一的樣本id,而特征feature_1, feature_2則用31天的數(shù)據(jù)構(gòu)建而來。本次比賽中,我們劃分訓(xùn)練集和測試集所用的分割日期是每10天。第0-9天為一個訓(xùn)練集,用第10天的數(shù)據(jù)給第0-9天數(shù)據(jù)添加類別標(biāo)簽。第1-10天為一個訓(xùn)練集,用第11天的數(shù)據(jù)給第1-10天數(shù)據(jù)添加類別標(biāo)簽,依次類推,,最后是第20-29天為一個訓(xùn)練集,用第30天的數(shù)據(jù)給第20-29天數(shù)據(jù)添加類別標(biāo)簽。測試集為第21-30天的數(shù)據(jù)。貼關(guān)鍵代碼import pandas a
14、s pdfrom datetime import *import timenum=22start=time.time()df_train_user=pd.read_csv("train_trans_time_process.csv")df_items=pd.read_csv("tianchi_mobile_recommend_train_item.csv")df_items=df_items.item_id.drop_duplicates()a=pd.DataFrame()a"item_id"=df_items.valuesdf_it
15、ems=afor i in range(num): print "劃分訓(xùn)練集:"+str(i) j=i+10 if j!=31: df_set=df_train_user(df_train_user.time>=i) & (df_train_user.time<j) df_set.to_csv("data/"+str(j)+".csv",index=False) df_test=df_train_user(df_train_user.time=j) & (df_train_user.behavior_typ
16、e=4)"user_id","item_id" df_test=df_test.drop_duplicates() df_test=pd.merge(left=df_test,right=df_items,how="inner").drop_duplicates() df_test.to_csv("data/"+"result"+str(j)+".csv",index=False) else: df_set=df_train_user(df_train_user.time&g
17、t;=i)&(df_train_user.time<j) df_set.to_csv("data/"+"test.csv",index=False)end=time.time()print '訓(xùn)練集劃分耗時%f秒' %(end-start)3 平衡正負(fù)樣本正負(fù)樣本比例需從1:100降為1:101:20之間。貼關(guān)鍵代碼import pandas as pdimport randomimport timefrom get_features import *start=time.time()df_feature2=pd.DataF
18、rame()j=10for k in range(20): i=j+k df_feature=pd.read_csv("data_features/train"+str(i)+".csv") df_feature_p= df_featuredf_feature.tag=1 df_feature_n = df_featuredf_feature.tag=0 lp = len(df_feature_p) ln = len(df_feature_n) if float(ln)/lp > 14: a = range(0,ln) slice = random
19、.sample(a,lp*14) # lp*15 df_feature_n = df_feature_n.ilocslice df_feature = pd.concat(df_feature_p,df_feature_n,ignore_index=True) df_feature2=pd.concat(df_feature,df_feature2)df_feature2.to_csv("features/train_feature.csv",index=False)end=time.time()print '對訓(xùn)練集抽樣耗時%f秒' %(end-start
20、)3、特征提取特征提取在數(shù)據(jù)挖掘中很重要,那么為什么它們那么重要呢?之前提到過,要想輸出測試集的類別標(biāo)簽,需要模型在訓(xùn)練集經(jīng)過學(xué)習(xí),那么模型在訓(xùn)練集上學(xué)習(xí)的是什么?我們知道,在給模型輸入數(shù)據(jù)的時候,實(shí)際上模型用到的都是特征(及其對應(yīng)的類別標(biāo)簽),而特征就是用于描述為什么該樣本的類別標(biāo)簽就是如此,在本賽題中即用于描述某用戶為什么購買/不購買某商品。比如,用戶購買某商品的原因,是因?yàn)橐郧敖?jīng)常買,信得過,那么這里可以用“用戶購買該商品的天數(shù)/用戶訪問該商品的天數(shù)”來刻畫用戶對該品牌的忠誠度。當(dāng)然,并不是單一的特征就能描述所有情況,通常來說,需要針對所有可能的情形進(jìn)行考慮,從而深刻而全面地刻畫用戶購買
21、/不購買商品的原因。這樣,模型才能真正學(xué)到其中的規(guī)律,從而在測試集表現(xiàn)優(yōu)異。而這一過程,就稱之為特征工程。顯然,要做好特征工程,需要我們自身對“用戶會否購買商品”這一業(yè)務(wù)具有較深刻的理解,即領(lǐng)域知識,并將其用模型可理解的方式表現(xiàn)出來,如何抽取特征?1、統(tǒng)計用戶在31天中的購買量、點(diǎn)擊量、收藏量、加購物車次數(shù)、有操作記錄的天數(shù)、發(fā)生購買的天數(shù)、點(diǎn)擊轉(zhuǎn)購買率等等,并以點(diǎn)擊轉(zhuǎn)購買率做升序/降序排序進(jìn)行觀察,可以發(fā)現(xiàn)點(diǎn)擊量越高的,點(diǎn)擊轉(zhuǎn)購買率也往往越低,尤其點(diǎn)擊量極高的用戶,往往購買量為0。由此可以考慮將用戶購買量、點(diǎn)擊轉(zhuǎn)購買率等一系列特征用于描述用戶是否會在未來一天發(fā)生購買。2、統(tǒng)計用戶從初次訪問商
22、品到最終購買商品的時間,可以發(fā)現(xiàn)絕大多數(shù)購買都是當(dāng)天接觸當(dāng)天完成,越往后用戶購買的可能性越低。由此可以推測用戶對商品的購買意愿是隨著距離上次訪問的時間拉長而衰減的,進(jìn)而可以使用衰減函數(shù)來模擬該購買意愿。一方面,利用領(lǐng)域知識對數(shù)據(jù)進(jìn)行分析、實(shí)驗(yàn)驗(yàn)證。另一方面,從分析的結(jié)果、實(shí)驗(yàn)的反饋來更新領(lǐng)域知識。這是一個不斷迭代的過程,需要成體系、且不斷地完善。以下僅供參考:(1)、基本統(tǒng)計類特征A. 銷量(分割日期前1、2、3、4、5、10天)B.成交訂單數(shù)(以同一天同一個用戶為一個訂單)C.購買人數(shù)D.以上3類特征分別再針對點(diǎn)擊、收藏、加購物車等進(jìn)行統(tǒng)計(2)、轉(zhuǎn)化率類特征A.銷量/點(diǎn)擊數(shù)B.成交訂單數(shù)/
23、點(diǎn)擊訂單數(shù)C.購買人數(shù)/點(diǎn)擊人數(shù)D.上述3個特征分別在針對收藏、購物車等操作進(jìn)行統(tǒng)計(3)、比值類特征A.返客率(某周期內(nèi)多次購買的用戶數(shù)/總購買用戶數(shù))B.老客戶率(3天【或其他周期7、15、30】前曾購買過且在前3天內(nèi)再次購買的用戶數(shù)/3天內(nèi)總購買用戶數(shù))C人均點(diǎn)擊數(shù)、人均購買量、人均收藏量、人均加購物車量等我們的做法:1. 用戶所有行為總量提取用戶所有行為總量作為第一個特征,它是指每個用戶對每個商品所有行為的總量,其中的所有行為包括點(diǎn)擊行為、收藏行為、購物車行為、購買行為。用戶所有行為總量定義為前10天的用戶行為數(shù)據(jù)中用戶對商品全集的所有行為總量,包括點(diǎn)擊量、收藏量、購物車量、購買量。從
24、用戶所有行為總量中,可以得到用戶對某商品產(chǎn)生的行為次數(shù),從而推測出該用戶對阿里巴巴移動電商平臺的操作頻率和忠誠度,以此做出合理的個性化推薦。之所以選擇前10天作為時間節(jié)點(diǎn),是由于劃分之后的每個訓(xùn)練集和測試集都以10天為單位。2. 點(diǎn)擊量定義數(shù)據(jù)集的每個用戶對商品全集中的商品的點(diǎn)擊行為的總和為點(diǎn)擊量。從點(diǎn)擊量中,可以知道用戶瀏覽了幾次某商品,從而推測該用戶對該商品的興趣程度,為之后的模型訓(xùn)練以及最后的個性化推薦奠定一個良好基礎(chǔ)。其中,對點(diǎn)擊量按10天、5天、3天、1天的時間來劃分。也就是關(guān)于點(diǎn)擊量,按時間的不同提取的特征(U_click_sum10- U_click_sum1)有4個,分別是前1
25、0天的用戶點(diǎn)擊量、前5天的用戶點(diǎn)擊量、前3天的用戶點(diǎn)擊量、前1天的用戶點(diǎn)擊量。之所以這樣提取特征是由于之前劃分的訓(xùn)練集是以10天為單位劃分的,這樣可以更清楚地分析用戶在10天中點(diǎn)擊量的分布情況,對后面的模型訓(xùn)練有很重要的作用。3. 收藏量定義數(shù)據(jù)集的每個用戶對商品全集中的商品的收藏行為的總和為收藏量。這里可以從收藏行為推測用戶對某商品的感興趣程度,雖然收藏量不會大于點(diǎn)擊量,但是收藏行為必定大于點(diǎn)擊行為反映的用戶感興趣程度。4. 購物車量定義數(shù)據(jù)集的每個用戶對商品全集中的商品加入購物車行為的總數(shù)為購物車量。這里可以從加入購物車行為直接推斷用戶對某商品感興趣,雖然購物車量必定大幅度小于點(diǎn)擊量和收藏
26、量,但是加入購物車行為反映用戶對某個商品感興趣程度必定大于點(diǎn)擊和收藏行為反映的感興趣程度。5. 購買量定義數(shù)據(jù)集的每個用戶對商品全集中商品的購買行為的總數(shù)為購買量,或者說用戶購買商品子集的商品數(shù)量為購買量。這里可以從用戶的購買行為直接推斷為用戶對某商品感興趣,對個性化推薦有重要的意義。點(diǎn)擊為了更清楚地看到購買量與點(diǎn)擊量、收藏量、加購物車量的關(guān)系,對用戶前10天的行為數(shù)據(jù)用散點(diǎn)圖表示,以用戶前10天的購買量為橫坐標(biāo),其他三類行為是縱坐標(biāo),如圖,可以看出用戶點(diǎn)擊量與其他的行為量相比明顯大很多,而點(diǎn)擊量越多的用戶購買量就越少。用戶前10天的行為數(shù)據(jù)對比6. 點(diǎn)擊/購買 率點(diǎn)擊/購買率的計算公式就是點(diǎn)
27、擊量除以購買量,即發(fā)生多少次點(diǎn)擊行為會有一次購買行為,也就是電子商務(wù)平臺常說的轉(zhuǎn)化率的倒數(shù)。這個特征可以挖掘點(diǎn)擊量和購買量之間的關(guān)系,可以預(yù)測出用戶在點(diǎn)擊后,何時會發(fā)生購買行為,更準(zhǔn)確地為用戶提供一個合理的個性化推薦。這里還是按時間的不同提取4個特征(U_click/buy10-U_click/buy1),分別是前10天的點(diǎn)擊/購買率、前5天的點(diǎn)擊/購買率、前3天的點(diǎn)擊/購買率、前1天的點(diǎn)擊/購買率。7. 收藏/購買 率收藏/購買率的計算公式就是收藏量除以購買量,即發(fā)生多少次收藏行為會有一次購買行為。這個特征可以挖掘收藏量和購買量之間的關(guān)系,可以預(yù)測出用戶在收藏后,何時會發(fā)生購買行為,更準(zhǔn)確地
28、為用戶提供一個合理的個性化推薦。這里還是按時間的不同提取4個特征(U_collection/buy10-U_collection/buy1),分別是前10天的收藏/購買率、前5天的收藏/購買率、前3天的收藏/購買率、前1天的收藏/購買率。與點(diǎn)擊/購買率不同,該特征的取值范圍可能在0,1之間,因?yàn)橘徺I行為不一定要先收藏該商品,所以取值范圍應(yīng)該是大于等于0。8. 購物車/購買 率購物車/購買率的計算公式就是購物車量除以購買量,即發(fā)生多少次加入購物車行為會有一次購買行為。這個特征可以挖掘購物車量和購買量之間的關(guān)系,可以預(yù)測出用戶在加入購物車后,何時會發(fā)生購買行為,更準(zhǔn)確地為用戶提供一個合理的個性化推
29、薦。還是按時間的不同提取4個特征(U_car/buy10- U_car/buy1),分別是前10天的購物車/購買率、前5天的購物車/購買率、前3天的購物車/購買率、前1天的購物車/購買率。該特征的取值范圍與收藏/購買率相同,購買行為不一定要先加入購物車,所以它也應(yīng)該是大于等于0。9. 商品銷量商品銷量是指每個商品的銷售量,與用戶的購買行為有關(guān),由購買了該商品的所有用戶總量決定。該特征直觀地反映了某個商品基于銷量上受喜愛程度,為訓(xùn)練模型以及個性化推薦提供了很好的參考。還是按時間的不同提取4個特征(Item_sale10-Item_sale1),分別是前10天的商品銷量、前5天的商品銷量、前3天的
30、商品銷量、前1天的商品銷量。該特征的取值范圍一定大于等于零。10. 成交訂單量成交訂單量是指包含該商品的總成交訂單的數(shù)量,與商品銷量類似,不同的是同一筆訂單中可能購買了多件該商品,那么此時商品銷量大于1,而成交訂單量卻等于1。該特征反映了用戶對某個商品的購買次數(shù),排除同一筆訂單購買多件而使商品銷量看起來較高的情況。比如,用戶購買牙刷時,一筆訂單并不會只購買一個,通常會一起購買多個,那么牙刷的銷量相比一般只購買一件的商品銷量高很多。通過成交訂單量可以反映商品基于訂單量受喜愛程度,提高了訓(xùn)練模型以及個性化推薦的準(zhǔn)確性。還是按時間的不同提取4個特征(I_order10-I_order1),分別是前1
31、0天的成交訂單量、前5天的成交訂單量、前3天的成交訂單量、前1天的成交訂單量。該特征的取值范圍一定大于等于零。11. 購買人數(shù)購買人數(shù)是指購買該商品的用戶總?cè)藬?shù),與商品銷量與成交訂單相類似,不同的是同一個用戶可能對該商品多次下單,也可能購買了多件該商品,那么此時成交訂單量大于1,商品銷量大于1,而購買人數(shù)卻等于1。該特征反映了某個商品的購買人數(shù),排除同一個用戶購買多次該商品的情況。比如,用戶購買生活用品就會出現(xiàn)多次下單和購買多件的情況。通過購買人數(shù)可以真正反映商品基于用戶受喜愛程度,很大程度地提高了訓(xùn)練模型以及個性化推薦的準(zhǔn)確性。還是按時間的不同提取4個特征(I_buyer10-I_buyer
32、1),分別是前10天的購買人數(shù)、前5天的購買人數(shù)、前3天的購買人數(shù)、前1天的購買人數(shù)。該特征的取值范圍一定大于等于零。12. 是否加購物車加入購物車的行為已經(jīng)在前面做了一個詳細(xì)地介紹和分析,其實(shí)在用戶行為數(shù)據(jù)中,是否加入購物車也可以作為一個特征提取出來。將是否加購物車的特征,定義為數(shù)據(jù)集的每個用戶對商品全集中的商品是否發(fā)生加入購物車的行為。這里還是按時間的不同提取5個特征(car5-car1),分別是倒數(shù)第5天是否加購物車、倒數(shù)第4天是否加購物車、倒數(shù)第3天是否加購物車、倒數(shù)第2天是否加購物車、倒數(shù)第1天是否加購物車。之所以這樣提取特征,是因?yàn)閺挠脩粼?0天的倒數(shù)5天內(nèi)是否會將某商品加入購物車
33、,可以預(yù)測該用戶在測試集中倒數(shù)5天內(nèi)是否會發(fā)生加入購物車的行為。該特征的取值范圍一定為1或者0,其中1代表加購物車,0代表不加購物車。13. 是否購買用戶購買行為已經(jīng)和加購物車行為一樣在前面做了詳細(xì)地介紹和分析,其實(shí)在用戶行為數(shù)據(jù)中,是否購買也可以作為特征提取出來。在本文中,將是否購買的特征,定義為數(shù)據(jù)集的每個用戶對商品全集中的商品是否會發(fā)生購買行為。這里還是按時間的不同提取5個特征(buy5-buy1),分別是倒數(shù)第5天是否購買、倒數(shù)第4天是否購買、倒數(shù)第3天是否購買、倒數(shù)第2天是否購買、倒數(shù)第1天是否購買。之所以這樣提取特征,是因?yàn)閺挠脩粼?0天的倒數(shù)5天內(nèi)是否會購買某商品,可以預(yù)測該用戶
34、在測試集中倒數(shù)5天內(nèi)是否會發(fā)生購買行為。該特征的取值范圍一定為1或者0,其中1代表購買,0代表不購買。14. 累計的用戶行為累計的用戶行為,也屬于用戶行為數(shù)據(jù)的一種表現(xiàn)形式,用戶行為數(shù)據(jù)在前面已經(jīng)做了詳細(xì)地介紹和分析,它可以直觀地反映出用戶的各種關(guān)鍵信息。累計的用戶行為定義為前10天的用戶行為數(shù)據(jù)中用戶累計對商品子集的各行為總量,包括點(diǎn)擊量、收藏量、購物車量、購買量。與用戶所有行為總量特征不同之處在于,累計的用戶行為是基于商品子集的,而且是按照用戶行為提取特征。提取4個特征(behav1- behav4),分別是前10天的用戶點(diǎn)擊量、前10天的用戶收藏量、前10天的用戶加購物車量、前10天的用
35、戶購買量。該特征的取值范圍一定為大于等于0。15. 訪問時間差訪問時間差是指用戶在兩次訪問時間的間隔,它可以反映用戶對網(wǎng)站的訪問頻率等信息。本文中,提取特征訪問時間差,將其定義為用戶最后一次訪問商品子集中的某個商品到第10天的天數(shù)間隔。這與倒數(shù)5天的加購物車量、購買量相關(guān)聯(lián),可以得到用戶訪問時間與購買之間的關(guān)系。該特征的取值范圍為0,10之間的整數(shù)。貼關(guān)鍵代碼import pandas as pdimport randomfrom get_features import *import timet1=time.time()j=10df_items=pd.read_csv("tianc
36、hi_mobile_recommend_train_item.csv")df_items=df_items.item_id.drop_duplicates()a = pd.DataFrame()a"item_id" = df_items.valuesdf_items = afor k in range(21): i=j+k print "add features to trains "+str(i) df_tag=pd.read_csv("data/"+"result"+str(i)+".csv
37、") df_tag"tag"=1 df_feature=pd.read_csv("data/"+str(i)+".csv") df_feature_item=pd.merge(left=df_feature,right=df_items,how="inner") df_ui = df_feature"user_id","item_id".drop_duplicates() df_ui = pd.merge(left=df_ui,right=df_items,how=
38、"inner") df_ui_tag = pd.merge(left=df_ui,right=df_tag,how="left") df_ui_tag.fillna(0,inplace=True) U1 = buy_sum10(df_feature,i) df_train = pd.merge(left=df_ui_tag,right=U1,how="left") U2 = click_sum10(df_feature,i) df_train = pd.merge(left=df_train,right=U2,how="le
39、ft") U3 = collection_sum10(df_feature,i) df_train = pd.merge(left=df_train,right=U3,how="left") U4 = car_sum10(df_feature,i) df_train = pd.merge(left=df_train,right=U4,how="left") df_train"U_click/buy10" = df_train.U_click_sum10/df_train.U_buy_sum10 df_train"U
40、_click/buy5" = df_train.U_click_sum5/df_train.U_buy_sum5 df_train"U_click/buy3" = df_train.U_click_sum3/df_train.U_buy_sum3 df_train"U_click/buy1" = df_train.U_click_sum1/df_train.U_buy_sum1 df_train"U_click/buy10"=df_train"U_click/buy10".map(lambda x: fi
41、llinfinity(x) df_train"U_click/buy5"=df_train"U_click/buy5".map(lambda x: fillinfinity(x) df_train"U_click/buy3"=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
42、) df_train"U_collection/buy10" = df_train.U_collection_sum10/df_train.U_buy_sum10 df_train"U_collection/buy5" = df_train.U_collection_sum5/df_train.U_buy_sum5 df_train"U_collection/buy3" = df_train.U_collection_sum3/df_train.U_buy_sum3 df_train"U_collection/buy1&qu
43、ot; = df_train.U_collection_sum1/df_train.U_buy_sum1 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&q
44、uot;=df_train"U_collection/buy3".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_sum10/df_train.U_buy_sum10 df_train"U_car/buy5" = df_train.U_c
45、ar_sum5/df_train.U_buy_sum5 df_train"U_car/buy3" = df_train.U_car_sum3/df_train.U_buy_sum3 df_train"U_car/buy1" = df_train.U_car_sum1/df_train.U_buy_sum1 df_train"U_car/buy10"=df_train"U_car/buy10".map(lambda x: fillinfinity(x) df_train"U_car/buy5"=d
46、f_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".map(lambda x: fillinfinity(x) df_behavior_sum10 = behavior_sum10(df_feature) df_train
47、= pd.merge(left=df_train,right=df_behavior_sum10,how="left") df_I_buyers = I_buyers(df_feature_item,i) df_train = pd.merge(left=df_train,right=df_I_buyers,how="left") df_item1 = Item_sale(df_feature,i) df_train = pd.merge(left=df_train,right=df_item1,how="left") df_car
48、= car(df_feature,i) df_train = pd.merge(left=df_train,right=df_car,how="left") df_buy = buy(df_feature,i) df_train = pd.merge(left=df_train,right=df_buy,how="left") df_orders = I_Orders(df_feature_item,i) df_train = pd.merge(left=df_train,right=df_orders,how="left") df_
49、ui_sum = UI_Sum(df_feature_item,i) df_train = pd.merge(left=df_train,right=df_ui_sum,how="left") df_ui_last_time = last_time(df_feature_item,i) df_train = pd.merge(left=df_train,right=df_ui_last_time,how="left") df_train.fillna(0,inplace=True) df_train.to_csv("data_features/
50、train"+str(i)+".csv",index=False)t2=time.time()print "給訓(xùn)練集打上標(biāo)簽耗時%f秒" %(t2-t1)4、選擇分類模型 可以用決策樹模型、隨機(jī)森林模型、Logistic回歸、GBRT模型等,具體可以上網(wǎng)站:/stable/ 查看各個模型的使用方法。決策樹模型:首先從包含了特征的訓(xùn)練集中選擇所需特征,調(diào)用DecisionTreeClassifier函數(shù)對該訓(xùn)練集訓(xùn)練模型,再使用predict函數(shù)預(yù)測測試集的分類,再將分類結(jié)果是購買(tag=1)的商品作
51、為推薦結(jié)果,將其與測試集的真實(shí)分類結(jié)果比對,最后評估該模型對本實(shí)證研究數(shù)據(jù)的準(zhǔn)確率,以F1值為準(zhǔn)。決策樹分類模型的DecisionTreeClassifier函數(shù),包含了很多參數(shù)設(shè)置,著重研究criterion參數(shù),criterion表示衡量一個分類的質(zhì)量,支持的標(biāo)準(zhǔn)可選擇gini和entropy這兩個值,其中g(shù)ini是基尼指標(biāo),entropy是信息增益。由于用十折交叉驗(yàn)證的方法,所以每次改變一個變量都需要對該模型重新抽樣,對其運(yùn)行10次,得出第1次到第10次的驗(yàn)證結(jié)果,對十次準(zhǔn)確率F1值求平均作為該模型最終的F1值。貼關(guān)鍵代碼df_predict = pd.read_csv("mo
52、del/predict_DecisionTree.csv")inner = pd.merge(left=df_result,right=df_predict,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 &q
53、uot;DecisionTree total result num is: ",result_numif predict_num!=0: precision = float(hit_num)/predict_numif result_num!=0: callrate = float(hit_num)/result_numprint "DecisionTree Precision is:",precisionprint "DecisionTree Call rate is: ",callrateif precision+callrate != 0
54、: print "決策樹F1值為: ",2*precision*callrate/(precision+callrate),'n'else: print "決策樹F1值為: 0" 基于隨機(jī)森林的分類模型隨機(jī)森林是在決策樹的基礎(chǔ)上提出的分類模型,它屬于集成學(xué)習(xí)模型。他的核心思想就是通過訓(xùn)練和組合多個不同的決策樹,使其形成森林,然后由多棵樹進(jìn)行投票來決定其分類結(jié)果。首先從包含了特征的訓(xùn)練集中選擇所需特征,調(diào)用RandomForestClassifier函數(shù)對該訓(xùn)練集訓(xùn)練模型,再使用predict函數(shù)預(yù)測測試集的分類,再將分類結(jié)果是購買(tag
55、=1)的商品作為推薦結(jié)果,將其與測試集的真實(shí)分類結(jié)果比對,最后評估該模型對本實(shí)證研究數(shù)據(jù)的準(zhǔn)確率,以F1值為準(zhǔn)。 隨機(jī)森林分類模型的RandomForestClassifier函數(shù),包含了很多參數(shù)設(shè)置,其中著重研究n_estimators和criterion參數(shù)。n_estimators表示森林里樹的個數(shù),整數(shù)形式;criterion表示衡量一個分類的質(zhì)量,支持的標(biāo)準(zhǔn)可選擇gini和entropy這兩個值,其中g(shù)ini是基尼指標(biāo),entropy是信息增益。貼關(guān)鍵代碼df_predict = pd.read_csv("model/predict_RandomForest.csv&quo
56、t;)inner = pd.merge(left=df_result,right=df_predict,how="inner")predict_num = len(df_predict)print "RandomForest predict_num is: ",predict_numhit_num = len(inner)print "RandomForest hit_num is: ",hit_numresult_num = len(df_result)print "RandomForest total result nu
57、m is: ",result_numif predict_num!=0: precision = float(hit_num)/predict_numif result_num!=0: callrate = float(hit_num)/result_numprint "RandomForest Precision is:",precisionprint "RandomForest Call rate is: ",callrateif precision+callrate != 0: print "隨機(jī)森林 F1值為: ",
58、2*precision*callrate/(precision+callrate),'n'else:print "隨機(jī)森林 F1值為: 0"基于回歸樹的分類模型回歸樹GBDT是一種迭代決策樹算法,由多個決策樹組成,在本節(jié)中要具體使用的分類模型是GBRT,即梯度迭代回歸樹,或者梯度提升回歸樹,它側(cè)重于梯度迭代GB和回歸樹RT。首先從包含了特征的訓(xùn)練集中選擇所需特征,再調(diào)用GradientBoostingClassifier函數(shù)對該訓(xùn)練集訓(xùn)練模型,再使用predict函數(shù)預(yù)測測試集的分類,再將分類結(jié)果是購買(tag=1)的商品作為推薦結(jié)果,將其與測試集的真實(shí)分類
59、結(jié)果比對,最后評估該模型對本實(shí)證研究數(shù)據(jù)的準(zhǔn)確率,以F1值為準(zhǔn)?;貧w樹分類模型的GradientBoostingClassifier函數(shù),包含了很多參數(shù)設(shè)置,其中著重研究參數(shù)learning_rate。learning_rate就是學(xué)習(xí)率,是指每棵樹都對學(xué)習(xí)率的縮小有貢獻(xiàn)。它的默認(rèn)值是0.1,可以0.5和1.0的取值為例進(jìn)行分析。貼關(guān)鍵代碼df_predict = pd.read_csv("model/ensemble_predict_result_GBRT_LR.csv")inner = pd.merge(left=df_result,right=df_predict,how="inner")predict_num = len(df_predict)print "ensemble_GBRT_LR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 豆制品加工項(xiàng)目可行性報告
- 長興垃圾焚燒發(fā)電項(xiàng)目
- 醫(yī)療行業(yè)電子病歷與遠(yuǎn)程醫(yī)療咨詢解決方案
- 電力設(shè)施環(huán)境保護(hù)管理規(guī)范
- 三農(nóng)村社會保障體系實(shí)施方案
- 服裝行業(yè)智能制造云平臺方案
- 部編版四年級語文下冊教學(xué)設(shè)計方案(全冊)
- 小學(xué)生課文課件
- 2025年安全生產(chǎn)風(fēng)險分級管控考試題庫:安全檢查與事故預(yù)防試題
- 2025年小學(xué)語文畢業(yè)升學(xué)考試全真模擬卷(口語表達(dá)訓(xùn)練與語言組織能力試題)
- 質(zhì)量互變規(guī)律、否定之否定規(guī)律
- 小學(xué)語文六年級下冊單元作文評價表:讓真情自然流露
- 2024魚塘租賃合同模板
- 小學(xué)數(shù)學(xué)教學(xué)中數(shù)學(xué)文化的滲透與傳承
- 你比劃我猜題目大全555個
- 《8 家庭養(yǎng)雞》(教案)-2023-2024學(xué)年六年級下冊綜合實(shí)踐活動皖教版
- 小學(xué)百科知識題庫大全
- HG∕T 4594-2014 熱固性粉末涂料冷卻壓片設(shè)備
- 《電工電子技術(shù)》高職全套教學(xué)課件
- 碳九加氫工藝流程
- 智能網(wǎng)聯(lián)汽車第三章毫米波雷達(dá)課件
評論
0/150
提交評論