下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、浙江工商大學(xué)計算機(jī)與信息工程學(xué)院 Python程序設(shè)計與實踐大作業(yè)報告專 業(yè):計科班級: 1404學(xué)號:二姓名: 陸陽,孫勇,裘昇明指導(dǎo)教師:蒲32015年6 月28日題目介紹:在真實的業(yè)務(wù)場景下,我們往往需要對所有商品的一個子集構(gòu)建個性化推薦模型。在完成這件任務(wù)的過程中,我們不僅需要利用用戶在這個商品子集上的行為數(shù)據(jù), 往往還需 要利用更豐富的用戶行為數(shù)據(jù)。定義如下的符號:u用戶集合I 冏品全集p商品子集,p?iD用戶對商品全集的行為數(shù)據(jù)集合那么我們的目標(biāo)是利用D來構(gòu)造U中用戶對P中商品的推薦模型。數(shù)據(jù)說明:競賽數(shù)據(jù)包含兩個部分。第一部分是用戶在商品全集上的移動端行為數(shù)據(jù)( D),表名為ti
2、anchi_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)緯度通過保密的算法生成item_category商品分類標(biāo)識字段脫敏time行為時間精確到小時級別第二個部分是商品子集(P),表名為tianchi_mobile_recommend_train_item ,包含如下字段:字段字段說明
3、提取說明?item_id?商品標(biāo)識?抽樣&字段脫敏?item_ geohash?商品位置的空間標(biāo)識,可以為空?由經(jīng)緯度通過保密的算法生成?item_category?商品分類標(biāo)識?字段脫敏訓(xùn)練數(shù)據(jù)包含了抽樣出來的一定量用戶在一個月時間()之內(nèi)的移動端行為數(shù)據(jù)(D),評分?jǐn)?shù)據(jù)是這些用戶在這個一個月之后的一天()對商品子集(P)的購買數(shù)據(jù)。參賽者要使用訓(xùn)練數(shù)據(jù)建立推薦模型,并輸出用戶在接下來一天對商品子集購買行為的預(yù)測結(jié) 果。?大作業(yè)報告內(nèi)容包括以下幾個部分1、數(shù)據(jù)分組統(tǒng)計:可統(tǒng)計有多少用戶、商品、商品類別等信息,甚至每天各種行為的統(tǒng)計數(shù)。如圖:還有,在給出的用戶行為數(shù)據(jù)中,有些用戶在整個
4、11-18日至12-18日對商品有瀏覽 行為記錄,但是從未產(chǎn)生過購買行為,這些用戶會否在12月19號購買商品實難預(yù)測,因 此,我們?nèi)コ@些無購買行為的用戶信息,認(rèn)為這些用戶在12月19號還是不會購買任何商品。貼關(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; 商品子集中商品個數(shù)為: ',item_numprint ' 商品子集中商品類型數(shù)為: ',item_categories_numprint ' 商品子集中帶 geohash 信息的商品個數(shù)為: ',item_geohash_numprint ' 用戶數(shù)一共有: ',user_numprint ' 商品全集中商品個數(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 ' 一共耗時 %f 秒' %(end-start)2、數(shù)據(jù)預(yù)處理 重新整理時間重新整理數(shù)據(jù)的時間,也就是 Time字段,在數(shù)據(jù)統(tǒng)計分組中也提到過,因為原始數(shù)據(jù)的用戶行為時間記錄是從11 月 18 日 0 時到 12月 18 日 23 時,精確到小時級,為了方便數(shù)據(jù)集的劃分,需要將用戶行為時間數(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 " 時間
10、轉(zhuǎn)換進(jìn)行中.n"("",index=False)t1=()print " 時間轉(zhuǎn)換結(jié)束!n"print " 轉(zhuǎn)換時間共耗時f秒"(t1-t0) 劃分訓(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)建則可用
11、到 31 天的完整數(shù)據(jù)。下面舉個例子,用于解釋訓(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
12、天數(shù)據(jù)添加類別標(biāo)簽。測試集為第 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)練集劃分耗時 %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 ' 對訓(xùn)練集抽樣耗時 f秒'(end-start)3、特征提取特征提取在數(shù)據(jù)挖掘中很重要, 那么為什么它們那么重要呢?之前提到過, 要想輸出測試集的類別標(biāo)簽,需要模型在訓(xùn)練集經(jīng)過學(xué)習(xí),那么模型在訓(xùn)練集上學(xué)習(xí)的是什么?我們知道,在給模型輸入數(shù)據(jù)的時候,實際上模型用到的都是特征(及其對應(yīng)的類別標(biāo)簽) , 而特征就是用于描述為什么該樣本的類別標(biāo)簽就是如此, 在本賽題中即用于描述某用戶為什么購買/ 不購買某商品。比如, 用戶購買某商品的原因, 是因為
17、以前經(jīng)常買,信得過,那么這里可以用 “用戶購買該商品的天數(shù)/ 用戶訪問該商品的天數(shù)” 來刻畫用戶對該品牌的忠誠度。當(dāng)然,并不是單一的特征就能描述所有情況,通常來說,需要針對所有可能的情形進(jìn)行考慮,從而深刻而全面地刻畫用戶購買 / 不購買商品的原因。這樣,模型才能真正學(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)購買率等等,并以
18、點(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)計用戶從初次訪問商品到最終購買商品的時間,可以發(fā)現(xiàn)絕大多數(shù)購買都是當(dāng)天接觸當(dāng)天完成, 越往后用戶購買的可能性越低。 由此可以推測用戶對商品的購買意愿是隨著距離上次訪問的時間拉長而衰減的,進(jìn)而可以使用衰減函數(shù)來模擬該購買意愿。一方面,利用領(lǐng)域知識對數(shù)據(jù)進(jìn)行分析、實驗驗證。另一方面,從分析的結(jié)果、實驗的反饋來更新領(lǐng)域知識。這是一個不斷迭代的過程,需要成體系、且不斷地完善。以下
19、僅供參考:( 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ù)/點(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ù)、人均購買量、人均收藏量、人均加購物車量等我
20、們的做法:1. 用戶所有行為總量提取用戶所有行為總量作為第一個特征,它是指每個用戶對每個商品所有行為的總量,其中的所有行為包括點(diǎn)擊行為、收藏行為、購物車行為、購買行為。用戶所有行為總量定義為前10 天的用戶行為數(shù)據(jù)中用戶對商品全集的所有行為總量, 包括點(diǎn)擊量、 收藏量、購物車量、購買量。從用戶所有行為總量中,可以得到用戶對某商品產(chǎn)生的行為次數(shù),從而推測出該用戶對阿里巴巴移動電商平臺的操作頻率和忠誠度, 以此做出合理的個性化推薦。 之所以選擇前10 天作為時間節(jié)點(diǎn),是由于劃分之后的每個訓(xùn)練集和測試集都以 10 天為單位。2. 點(diǎn)擊量定義數(shù)據(jù)集的每個用戶對商品全集中的商品的點(diǎn)擊行為的總和為點(diǎn)擊量。
21、 從點(diǎn)擊量中,可以知道用戶瀏覽了幾次某商品, 從而推測該用戶對該商品的興趣程度, 為之后的模型訓(xùn)練以及最后的個性化推薦奠定一個良好基礎(chǔ)。其中,對點(diǎn)擊量按10 天、 5 天、 3 天、 1 天的時間來劃分。也就是關(guān)于點(diǎn)擊量,按時間的不同提取的特征( U_click_sum10-U_click_sum1 )有 4個,分別是前10天的用戶點(diǎn)擊量、前5天的用戶點(diǎn)擊量、前3 天的用戶點(diǎn)擊量、前1 天的用戶點(diǎn)擊量。之所以這樣提取特征是由于之前劃分的訓(xùn)練集是以10 天為單位劃分的, 這樣可以更清楚地分析用戶在10 天中點(diǎn)擊量的分布情況,對后面的模型訓(xùn)練有很重要的作用。3. 收藏量定義數(shù)據(jù)集的每個用戶對商品全
22、集中的商品的收藏行為的總和為收藏量。這里可以從收藏行為推測用戶對某商品的感興趣程度,雖然收藏量不會大于點(diǎn)擊量,但是收藏行為必定大于點(diǎn)擊行為反映的用戶感興趣程度。4. 購物車量定義數(shù)據(jù)集的每個用戶對商品全集中的商品加入購物車行為的總數(shù)為購物車量。這里可以從加入購物車行為直接推斷用戶對某商品感興趣,雖然購物車量必定大幅度小于點(diǎn)擊量和收藏量,但是加入購物車行為反映用戶對某個商品感興趣程度必定大于點(diǎn)擊和收藏行為反映的感興趣程度。5. 購買量定義數(shù)據(jù)集的每個用戶對商品全集中商品的購買行為的總數(shù)為購買量,或者說用戶購買商品子集的商品數(shù)量為購買量。這里可以從用戶的購買行為直接推斷為用戶對某商品感興趣,對個性
23、化推薦有重要的意義。為了更清楚地看到購買量與點(diǎn)擊量、收藏量、加購物車量的關(guān)系,對用戶前10 天的行為數(shù)據(jù)用散點(diǎn)圖表示,以用戶前10 天的購買量為橫坐標(biāo),其他三類行為是縱坐標(biāo),如圖,可以看出用戶點(diǎn)擊量與其他的行為量相比明顯大很多,而點(diǎn)擊量越多的用戶購買量就越少。點(diǎn)點(diǎn)擊用戶前 10 天的行為數(shù)據(jù)對比6. 點(diǎn)擊 / 購買 率點(diǎn)擊 / 購買率的計算公式就是點(diǎn)擊量除以購買量, 即發(fā)生多少次點(diǎn)擊行為會有一次購買行為, 也就是電子商務(wù)平臺常說的轉(zhuǎn)化率的倒數(shù)。這個特征可以挖掘點(diǎn)擊量和購買量之間的關(guān)系,可以預(yù)測出用戶在點(diǎn)擊后,何時會發(fā)生購買行為,更準(zhǔn)確地為用戶提供一個合理的個性化推薦。這里還是按時間的不同提取4
24、 個特征( 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)確地為用戶提供一個合理的個性化推薦。這里還是按時間的不同提取4 個特征( U_collection/buy10-U_collection/buy1 ),分別是前10 天的收藏/ 購買率、前5 天的收藏 /
25、 購買率、前3 天的收藏 / 購買率、前1 天的收藏 / 購買率。與點(diǎn)擊/ 購買率不同,該特征的取值范圍可能在0,1 之間, 因為購買行為不一定要先收藏該商品, 所以取值范圍應(yīng)該是大于等于0。8. 購物車 / 購買 率購物車 / 購買率的計算公式就是購物車量除以購買量, 即發(fā)生多少次加入購物車行為會有一次購買行為。 這個特征可以挖掘購物車量和購買量之間的關(guān)系,可以預(yù)測出用戶在加入購物車后,何時會發(fā)生購買行為,更準(zhǔn)確地為用戶提供一個合理的個性化推薦。還是按時間的不同提取4 個特征( U_car/buy10- U_car/buy1 ),分別是前10 天的購物車/購買率、前5 天的購物車 / 購買率
26、、前3 天的購物車/ 購買率、前1 天的購物車/ 購買率。該特征的取值范圍與收藏 / 購買率相同,購買行為不一定要先加入購物車,所以它也應(yīng)該是大于等于0。9. 商品銷量商品銷量是指每個商品的銷售量,與用戶的購買行為有關(guān),由購買了該商品的所有用戶總量決定。該特征直觀地反映了某個商品基于銷量上受喜愛程度,為訓(xùn)練模型以及個性化推薦提供了很好的參考。還是按時間的不同提取4個特征 ( Item_sale10-Item_sale1 ) , 分別是前 10 天的商品銷量、 前 5 天的商品銷量、前 3 天的商品銷量、前1 天的商品銷量。該特征的取值范圍一定大于等于零。10. 成交訂單量成交訂單量是指包含該商
27、品的總成交訂單的數(shù)量,與商品銷量類似,不同的是同一筆訂單中可能購買了多件該商品,那么此時商品銷量大于1,而成交訂單量卻等于1 。該特征反映了用戶對某個商品的購買次數(shù),排除同一筆訂單購買多件而使商品銷量看起來較高的情況。比如,用戶購買牙刷時,一筆訂單并不會只購買一個,通常會一起購買多個,那么牙刷的銷量相比一般只購買一件的商品銷量高很多。通過成交訂單量可以反映商品基于訂單量受喜愛程度,提高了訓(xùn)練模型以及個性化推薦的準(zhǔn)確性。還是按時間的不同提取 4 個特征( I_order10-I_order1 ),分別是前10 天的成交訂單量、前5 天的成交訂單量、前3 天的成交訂單量、前1 天的成交訂單量。該特
28、征的取值范圍一定大于等于零。11. 購買人數(shù)購買人數(shù)是指購買該商品的用戶總?cè)藬?shù),與商品銷量與成交訂單相類似,不同的是同一個用戶可能對該商品多次下單,也可能購買了多件該商品,那么此時成交訂單量大于1,商品銷量大于1 ,而購買人數(shù)卻等于 1。該特征反映了某個商品的購買人數(shù),排除同一個用戶購買多次該商品的情況。比如,用戶購買生活用品就會出現(xiàn)多次下單和購買多件的情況。通過購買人數(shù)可以真正反映商品基于用戶受喜愛程度,很大程度地提高了訓(xùn)練模型以及個性化推薦的準(zhǔn)確性。還是按時間的不同提取 4 個特征( I_buyer10-I_buyer1 ),分別是前10 天的購買人數(shù)、前5 天的購買人數(shù)、前 3 天的購買
29、人數(shù)、前1 天的購買人數(shù)。該特征的取值范圍一定大于等于零。12. 是否加購物車加入購物車的行為已經(jīng)在前面做了一個詳細(xì)地介紹和分析,其實在用戶行為數(shù)據(jù)中,是否加入購物車也可以作為一個特征提取出來。將是否加購物車的特征,定義為數(shù)據(jù)集的每個用戶對商品全集中的商品是否發(fā)生加入購物車的行為。這里還是按時間的不同提取5 個特征( car5-car1 ),分別是倒數(shù)第5 天是否加購物車、倒數(shù)第 4 天是否加購物車、倒數(shù)第3 天是否加購物車、倒數(shù)第2 天是否加購物車、倒數(shù)第1 天是否加購物車。之所以這樣提取特征, 是因為從用戶在10 天的倒數(shù) 5 天內(nèi)是否會將某商品加入購物車, 可以預(yù)測該用戶在測試集中倒數(shù)5
30、 天內(nèi)是否會發(fā)生加入購物車的行為。該特征的取值范圍一定為 1 或者 0, 其中 1 代表加購物車, 0 代表不加購物車。13. 是否購買用戶購買行為已經(jīng)和加購物車行為一樣在前面做了詳細(xì)地介紹和分析,其實在用戶行為數(shù)據(jù)中,是否購買也可以作為特征提取出來。在本文中,將是否購買的特征,定義為數(shù)據(jù)集的每個用戶對商品全集中的商品是否會發(fā)生購買行為。這里還是按時間的不同提取5 個特征( buy5-buy1 ),分別是倒數(shù)第5 天是否購買、倒數(shù)第4 天是否購買、倒數(shù)第 3 天是否購買、倒數(shù)第2 天是否購買、倒數(shù)第1 天是否購買。之所以這樣提取特征,是因為從用戶在10天的倒數(shù) 5 天內(nèi)是否會購買某商品,可以預(yù)
31、測該用戶在測試集中倒數(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天的用戶收藏量、前
32、10天的用戶加購物車量、前 10 天的用戶購買量。該特征的取值范圍一定為大于等于 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=()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)簽耗時 f秒"(t2-t1)4、選擇分類模型可以用決策樹模型、隨機(jī)森林模型、Logistic回歸、GBRTf型等,具體可以上網(wǎng)站:查看各個模型的使用方法。決策樹模型:首先從包含了特征的訓(xùn)練集中選擇所需特征,調(diào)用 DecisionTreeClassifier 函數(shù)對該訓(xùn)練集訓(xùn)練模型, 再使用 predict 函數(shù)預(yù)測測試集的分類, 再將分類結(jié)果是購買( tag=1 )的商品作為推薦結(jié)果, 將其與測試集的真實分類結(jié)果比對, 最后評估該模型對本實證研究數(shù)據(jù)的準(zhǔn)確率,以 F1 值為準(zhǔn)。決策樹分類模型的
45、DecisionTreeClassifier 函數(shù),包含了很多參數(shù)設(shè)置,著重研究criterion參數(shù), criterion表示衡量一個分類的質(zhì)量, 支持的標(biāo)準(zhǔn)可選擇gini 和 entropy這兩個值,其中 gini 是基尼指標(biāo), entropy 是信息增益。由于用十折交叉驗證的方法, 所以每次改變一個變量都需要對該模型重新抽樣, 對其運(yùn)行 10 次,得出第1 次到第 10 次的驗證結(jié)果,對十次準(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)練和組合多個不同的決策樹, 使其形成森林, 然后由多棵樹進(jìn)行投票來決定其 分類結(jié)果。首先從包含了特征的訓(xùn)練集中選擇所需特征,調(diào)用 RandomForestClassifier 函數(shù)對該訓(xùn)練集訓(xùn)練模型,再使用 predict 函數(shù)預(yù)測測試集的分類,再將分類結(jié)果是購買( tag=1) 的商品作為推薦結(jié)果, 將其與測試集的真實分類結(jié)果比對, 最后評估該模型對本實證研究 數(shù)據(jù)的準(zhǔn)確率,以 F1 值為準(zhǔn)。隨機(jī)森林分類模型的RandomForestCl
49、assfier函數(shù),包含了很多參數(shù)設(shè)置,其中著重 研究n_estimators和criterion參數(shù)。n_estimators表示森林里樹的個數(shù),整數(shù)形式;criterion 表示衡量一個分類的質(zhì)量,支持的標(biāo)準(zhǔn)可選擇 gini 和 entropy 這兩個值,其中 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、迭代決策樹算法,由多個決策樹組成,在本節(jié)中要具體使用的分類模型是GBRT ,即梯度迭代回歸樹,或者梯度提升回歸樹,它側(cè)重于梯度迭代GB 和回歸樹 RT 。首先從包含了特征的訓(xùn)練集中選擇所需特征,再調(diào)用 GradientBoostingClassifier 函數(shù)對該訓(xùn)練集訓(xùn)練模型,再使用 predict 函數(shù)預(yù)測測試集的分類,再將分類結(jié)果是購買(tag=1)的商品作為推薦結(jié)果,將其與測試集的真實分類結(jié)果比對,最后評估該模型對本實證研究數(shù)據(jù)的準(zhǔn)確率,以 F1 值為準(zhǔn)?;貧w樹分類模型的 GradientBoostingClassifier 函數(shù),包含了很多參數(shù)設(shè)置,其中著重研究參數(shù)learning_
53、rate。learning_rate就是學(xué)習(xí)率,是指每棵樹都對學(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ù)測屬性型因變量的分析方法,主要研究因變量各種可能發(fā)生的概率與自變量之間的關(guān)系。 本文中, 主要研究 Logistic 回 歸的二分類非線性模型,用來解決分類問題,比如該用戶是否會購買該商品。首先從包含了特征的訓(xùn)練集中選擇所需特征,再調(diào)用 LogisticRegression 函數(shù)對該訓(xùn)練集訓(xùn)練模型,再使用predict函數(shù)預(yù)測測試集的分類,再將分類結(jié)果是購買(tag=1)的商品作為推薦結(jié)果, 將其與測試集的真實分類結(jié)果比對, 最后評估該模型對本實證研究數(shù)據(jù)的準(zhǔn)確率,以 F1 值為準(zhǔn)。
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024演出設(shè)備租賃合同
- 煙臺市牟平區(qū)高陵水庫調(diào)水工程環(huán)評報告表
- 鹽城師范學(xué)院《教師口語》2021-2022學(xué)年第一學(xué)期期末試卷
- 鹽城師范學(xué)院《基礎(chǔ)教育改革研究》2022-2023學(xué)年第一學(xué)期期末試卷
- 2024年黃金地段荒山承包與生態(tài)開發(fā)協(xié)議
- 領(lǐng)導(dǎo)科學(xué)考前沖刺
- 2024家庭裝飾裝修的施工合同
- 2024個人向公司借款的合同范本
- 2024上海房地產(chǎn)項目借款合同范本
- 環(huán)思教育幼兒專業(yè)課周測
- 2024年大學(xué)試題(農(nóng)學(xué))-園藝商品學(xué)筆試參考題庫含答案
- MOOC 數(shù)學(xué)物理方程-南京信息工程大學(xué) 中國大學(xué)慕課答案
- 重點(diǎn)關(guān)愛學(xué)生幫扶活動記錄表
- 分層抽樣設(shè)計案例分析
- 2023年-2024年食品安全快速檢測考試題庫及答案
- 幼兒園大班健康繪本《牙齒旅行記》課件
- GB/T 31384-2024旅游景區(qū)公共信息導(dǎo)向系統(tǒng)設(shè)置規(guī)范
- 2024年榆林能源集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 母語為英語的漢語學(xué)習(xí)者習(xí)得漢語語音的偏誤分析及教學(xué)對策
- 一病一品糖尿病
- 2024海上風(fēng)電無人機(jī)巡檢技術(shù)規(guī)范
評論
0/150
提交評論