Python程序設(shè)計(jì)與實(shí)踐大作業(yè)實(shí)驗(yàn)報(bào)告陸陽(yáng)孫勇裘升明_第1頁(yè)
Python程序設(shè)計(jì)與實(shí)踐大作業(yè)實(shí)驗(yàn)報(bào)告陸陽(yáng)孫勇裘升明_第2頁(yè)
Python程序設(shè)計(jì)與實(shí)踐大作業(yè)實(shí)驗(yàn)報(bào)告陸陽(yáng)孫勇裘升明_第3頁(yè)
Python程序設(shè)計(jì)與實(shí)踐大作業(yè)實(shí)驗(yàn)報(bào)告陸陽(yáng)孫勇裘升明_第4頁(yè)
Python程序設(shè)計(jì)與實(shí)踐大作業(yè)實(shí)驗(yàn)報(bào)告陸陽(yáng)孫勇裘升明_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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):.姓名:陸陽(yáng),孫勇,裘昇明指導(dǎo)教師:蒲工2015年6月28日題目介紹:在真實(shí)的業(yè)務(wù)場(chǎng)景下,我們往往需要對(duì)所有商品的一個(gè)子集構(gòu)建個(gè)性化推薦模型。 在完成這件任務(wù)的過(guò)程中,我們不僅需要利用用戶在這個(gè)商品子集上的行為數(shù)據(jù),往 往還需要利用更豐富的用戶行為數(shù)據(jù)。定義如下的符號(hào):u用戶集合I 商品全集p商品子集,p?iD用戶對(duì)商品全集的行為數(shù)據(jù)集合那么我們的目標(biāo)是利用D來(lái)構(gòu)造U中用戶對(duì)P中商品的推薦模型。數(shù)據(jù)說(shuō)明:競(jìng)賽數(shù)據(jù)包含兩個(gè)部分。第一部分是用戶在商品全集上的移動(dòng)端行為數(shù)據(jù)( D),表名為 tianc

2、hi_mobile_recommend_train_user ,包含如下字段:字段字段說(shuō)明提取說(shuō)明?user_id?用戶標(biāo)識(shí)?抽樣&字段脫敏?item_id?商品標(biāo)識(shí)?字段脫敏?behavior_type?用戶對(duì)商品的行為類型?包括瀏覽、收藏、加購(gòu)物車、購(gòu)買,對(duì)應(yīng)取值分別是1、2、3、4?user_geohash?用戶位置的空間標(biāo)識(shí),可以為空?由經(jīng)緯度通過(guò)保密的算法生成item_category商品分類標(biāo)識(shí)字段脫敏time行為時(shí)間精確到小時(shí)級(jí)別|第二個(gè)部分是商品子集(P),表名為tianchi_mobile_recommend_trainjtem,包含如下字段:字段字段說(shuō)明提取說(shuō)明?item_

3、id?商品標(biāo)識(shí)?抽樣&字段脫敏?item_geohash?商品位置的空間標(biāo)識(shí),可以為空?由經(jīng)緯度通過(guò)保密的算法生成?item_category?商品分類標(biāo)識(shí)?字段脫敏訓(xùn)練數(shù)據(jù)包含了抽樣出來(lái)的一定量用戶在一個(gè)月時(shí)間()之內(nèi)的移動(dòng)端行為數(shù)據(jù)(D),評(píng)分?jǐn)?shù)據(jù)是這些用戶在這個(gè)一個(gè)月之后的一天()對(duì)商品子集(P)的購(gòu)買數(shù)據(jù)。參賽者要使用訓(xùn)練數(shù)據(jù)建立推薦模型,并輸出用戶在接下來(lái)一天對(duì)商品子集購(gòu)買 行為的預(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è)11-18日至12-18日對(duì)商

4、品有瀏覽行為記錄,但是從未產(chǎn)生過(guò)購(gòu)買行為,這些用戶會(huì)否在12月19號(hào)購(gòu)買商品實(shí)難預(yù)測(cè),因此,我們?nèi)コ@些無(wú)購(gòu)買行為的用戶信息,認(rèn)為這些用戶在12月19號(hào)還是不會(huì)購(gòu)買任何商品。 貼關(guān)鍵代碼 importtime importpandasaspd start=() df_items=()df_items2=()df_items3=()df_items4=()df_items5=()df_items3=df_itemsitem_id.drop_duplicates()df_items4=df_itemsitem_category.drop_duplicates()df_items5=df_items

5、item_id.drop_duplicates()df_items6=df_items2user_id.drop_duplicates()df_items7=df_items2item_id.drop_duplicates()df_items8=df_items2item_category.drop_duplicates()total_behavior_num=len(df_items2)df_items9=df_items2=4df_items10=df_items2!=4positive_num=len(df_items9)negative_num=len(df_items10)item_

6、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 商品子集中商品個(gè)數(shù)為:,item_numprint 商品子集中商品類型數(shù)為:,item_categories_numprint 商品子集中帶geohash 信息的商品個(gè)數(shù)為:,item_geohash_numprint 用戶數(shù)一共

7、有:,user_numprint 商品全集中商品個(gè)數(shù)為:,item_full_numprint 商品全集中商品種類數(shù)數(shù)為:,item_categories_full_numprint商品全集中共有舔行為記錄(total_behavior_num)print 消費(fèi)行為記錄中負(fù)正樣本比為%d:1%(negative_num/positive_num)print 一共耗時(shí)秒(6門位2寸)2、數(shù)據(jù)預(yù)處理 重新整理時(shí)間重新整理數(shù)據(jù)的時(shí)間,也就是 Time字段,在數(shù)據(jù)統(tǒng)計(jì)分組中也提到過(guò),因?yàn)樵紨?shù)據(jù)的用戶行為時(shí)間記錄是從11 月 18 日 0 時(shí)到 12 月 18 日 23 時(shí),精確到小時(shí)級(jí),為了方便數(shù)據(jù)

8、集的劃分,需要將用戶行為時(shí)間數(shù)據(jù)整理為0-30 天,以天為單位,即11 月18日的 time 為0、 11 月 19 日的 time 為1,以此類推。貼關(guān)鍵代碼importpandasaspdfromdatetimeimport*importtimet0=()begin_time=datetime(2014,11,18,0,0)deftrans_time(str_time):entry_time=(str_time,%Y-%m-%d%H)datatime_delta=(entry_time-begin_time).daysreturnint(datatime_delta)df_train_us

9、er=()print=nprint 時(shí)間轉(zhuǎn)換進(jìn)行中.nx:trans_time(x)(,index=False)t1=()print 時(shí)間轉(zhuǎn)換結(jié)束!nprint轉(zhuǎn)換時(shí)間共耗時(shí)f秒(t1-t0) 劃分訓(xùn)練集和測(cè)試集在分類問(wèn)題中,模型需要經(jīng)過(guò)訓(xùn)練集的學(xué)習(xí),才能用于測(cè)試集,而訓(xùn)練集和測(cè)試集在形式上的區(qū)別在于前者有類別標(biāo)簽,后者則需要模型輸出相應(yīng)的類別標(biāo)簽。這里的問(wèn)題是依據(jù)31 天的用戶操作記錄預(yù)測(cè)第32 天的購(gòu)買情況,所以通常來(lái)說(shuō),訓(xùn)練集的構(gòu)建需要利用31 天的數(shù)據(jù),而其相應(yīng)的類別標(biāo)簽如何標(biāo)注在訓(xùn)練集中?這個(gè)與你如何劃分訓(xùn)練集和測(cè)試集有關(guān);而測(cè)試集的構(gòu)建則可用到31 天的完整數(shù)據(jù)。下面舉個(gè)例子,用于

10、解釋訓(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)建而來(lái)。本次比賽中,我們劃分訓(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 天數(shù)據(jù)添加類別標(biāo)簽。測(cè)試集為第21-30 天的數(shù)據(jù)。貼關(guān)鍵代碼i

11、mportpandasaspdfromdatetimeimport*importtimenum=22start=()df_train_user=()df_items=()df_items=item_id=df_items=aforiinrange(num):print 劃分訓(xùn)練集:+str(i)j=i+10ifj!=31:df_set=df_train_user=i)&=i)&14:a=range(0,ln)slice=(a,lp*14)#lp*15df_feature_n=slicedf_feature=(df_feature_p,df_feature_n,ignore_index=True

12、) df_feature2=(df_feature,df_feature2)(features/,index=False)end=()print對(duì)訓(xùn)練集抽樣耗時(shí)f秒(3門雙2#3、特征提取特征提取在數(shù)據(jù)挖掘中很重要,那么為什么它們那么重要呢?之前提到過(guò),要想輸出測(cè)試集的類別標(biāo)簽,需要模型在訓(xùn)練集經(jīng)過(guò)學(xué)習(xí),那么模型在訓(xùn)練集上學(xué)習(xí)的是什么?我們知道,在給模型輸入數(shù)據(jù)的時(shí)候,實(shí)際上模型用到的都是特征(及其對(duì)應(yīng)的類別標(biāo)簽),而特征就是用于描述為什么該樣本的類別標(biāo)簽就是如此,在本賽題中即用于描述某用戶為什么購(gòu)買/ 不購(gòu)買某商品。比如,用戶購(gòu)買某商品的原因,是因?yàn)橐郧敖?jīng)常買,信得過(guò), 那么這里可以用 “用

13、戶購(gòu)買該商品的天數(shù) / 用戶訪問(wèn)該商品的天數(shù)”來(lái)刻畫(huà)用戶對(duì)該品牌的忠誠(chéng)度。當(dāng)然,并不是單一的特征就能描述所有情況,通常來(lái)說(shuō),需要針對(duì)所有可能的情形進(jìn)行考慮,從而深刻而全面地刻畫(huà)用戶購(gòu)買/ 不購(gòu)買商品的原因。這樣,模型才能真正學(xué)到其中的規(guī)律,從而在測(cè)試集表現(xiàn)優(yōu)異。而這一過(guò)程,就稱之為 特征工程 。顯然,要做好特征工程,需要我們自身對(duì) “用戶會(huì)否購(gòu)買商品”這一業(yè)務(wù)具有較深刻的理解,即領(lǐng)域知識(shí),并將其用模型可理解的方式表現(xiàn)出來(lái),如何抽取特征?1、統(tǒng)計(jì)用戶在31 天中的購(gòu)買量、點(diǎn)擊量、收藏量、加購(gòu)物車次數(shù)、有操作記錄的天數(shù)、發(fā)生購(gòu)買的天數(shù)、點(diǎn)擊轉(zhuǎn)購(gòu)買率等等,并以點(diǎn)擊轉(zhuǎn)購(gòu)買率做升序/降序排序進(jìn)行觀察,可

14、以發(fā)現(xiàn)點(diǎn)擊量越高的,點(diǎn)擊轉(zhuǎn)購(gòu)買率也往往越低,尤其點(diǎn)擊量極高的用戶,往往購(gòu)買量為0。 由此可以考慮將用戶購(gòu)買量、點(diǎn)擊轉(zhuǎn)購(gòu)買率等一系列特征用于描述用戶是否會(huì)在未來(lái)一天發(fā)生購(gòu)買。2、統(tǒng)計(jì)用戶從初次訪問(wèn)商品到最終購(gòu)買商品的時(shí)間,可以發(fā)現(xiàn)絕大多數(shù)購(gòu)買都是當(dāng)天接觸當(dāng)天完成,越往后用戶購(gòu)買的可能性越低。由此可以推測(cè)用戶對(duì)商品的購(gòu)買意愿是隨著距離上次訪問(wèn)的時(shí)間拉長(zhǎng)而衰減的,進(jìn)而可以使用衰減函數(shù)來(lái)模擬該購(gòu)買意愿。一方面,利用領(lǐng)域知識(shí)對(duì)數(shù)據(jù)進(jìn)行分析、實(shí)驗(yàn)驗(yàn)證。另一方面,從分析的結(jié)果、實(shí)驗(yàn)的反饋來(lái)更新領(lǐng)域知識(shí)。這是一個(gè)不斷迭代的過(guò)程,需要成體系、且不斷地完善。以下僅供參考:( 1)、基本統(tǒng)計(jì)類特征A.銷量(分割日期

15、前1、2、3、4、5、10天)B. 成交訂單數(shù)(以同一天同一個(gè)用戶為一個(gè)訂單)C.購(gòu)買人數(shù)D.以上3類特征分別再針對(duì)點(diǎn)擊、收藏、加購(gòu)物車等進(jìn)行統(tǒng)計(jì)( 2)、轉(zhuǎn)化率類特征A. 銷量 / 點(diǎn)擊數(shù)B. 成交訂單數(shù)/點(diǎn)擊訂單數(shù)C.購(gòu)買人數(shù)/點(diǎn)擊人數(shù)D.上述3個(gè)特征分別在針對(duì)收藏、購(gòu)物車等操作進(jìn)行統(tǒng)計(jì)( 3)、比值類特征A. 返客率(某周期內(nèi)多次購(gòu)買的用戶數(shù)/總購(gòu)買用戶數(shù))B. 老客戶率(3 天【或其他周期7、 15、 30】前曾購(gòu)買過(guò)且在前3 天內(nèi)再次購(gòu)買的用戶數(shù) /3 天內(nèi)總購(gòu)買用戶數(shù))C.人均點(diǎn)擊數(shù)、人均購(gòu)買量、人均收藏量、人均加購(gòu)物車量等我們的做法:1. 用戶所有行為總量提取用戶所有行為總量作為

16、第一個(gè)特征,它是指每個(gè)用戶對(duì)每個(gè)商品所有行為的總量,其中的所有行為包括點(diǎn)擊行為、收藏行為、購(gòu)物車行為、購(gòu)買行為。用戶所有行為總量定義為前10 天的用戶行為數(shù)據(jù)中用戶對(duì)商品全集的所有行為總量,包括點(diǎn)擊量、收藏量、購(gòu)物車量、購(gòu)買量。從用戶所有行為總量中,可以得到用戶對(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)擊量。從點(diǎn)擊量中,可以知道用戶瀏覽了幾次某商品,從而推測(cè)該用戶對(duì)該商品的

17、興趣程度,為之后的模型訓(xùn)練以及最后的個(gè)性化推薦奠定一個(gè)良好基礎(chǔ)。其中, 對(duì)點(diǎn)擊量按10 天、 5 天、3 天、 1 天的時(shí)間來(lái)劃分。也就是關(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ì)商品全集中的商品的收藏行為的總和為收藏量。這里可以 從收藏行為推測(cè)用戶對(duì)某商品

18、的感興趣程度,雖然收藏量不會(huì)大于點(diǎn)擊量,但是收藏行為必定大于點(diǎn)擊行為反映的用戶感興趣程度。4. 購(gòu)物車量定義數(shù)據(jù)集的每個(gè)用戶對(duì)商品全集中的商品加入購(gòu)物車行為的總數(shù)為購(gòu)物車量。這里可以從加入購(gòu)物車行為直接推斷用戶對(duì)某商品感興趣,雖然購(gòu)物車量必定大幅度小于點(diǎn)擊量和收藏量,但是加入購(gòu)物車行為反映用戶對(duì)某個(gè)商品感興趣程度必定大于點(diǎn)擊和收藏行為反映的感興趣程度。5. 購(gòu)買量定義數(shù)據(jù)集的每個(gè)用戶對(duì)商品全集中商品的購(gòu)買行為的總數(shù)為購(gòu)買量,或者說(shuō)用戶購(gòu)買商品子集的商品數(shù)量為購(gòu)買量。這里可以從用戶的購(gòu)買行為直接推斷為用戶對(duì)某商品感興趣,對(duì)個(gè)性化推薦有重要的意義。為了更清楚地看到購(gòu)買量與點(diǎn)擊量、收藏量、加購(gòu)物車量

19、的關(guān)系,對(duì)用戶前10 天的行為數(shù)據(jù)用散點(diǎn)圖表示,以用戶前10 天的購(gòu)買量為橫坐標(biāo),其他三類行為是縱坐標(biāo),如圖,可以看出用戶點(diǎn)擊量與其他的行為量相比明顯大很多,而點(diǎn)擊量越多的用戶購(gòu)點(diǎn)買量就越少。 點(diǎn)擊用戶前 10 天的行為數(shù)據(jù)對(duì)比6. 點(diǎn)擊 / 購(gòu)買率 點(diǎn)擊 / 購(gòu)買率的計(jì)算公式就是點(diǎn)擊量除以購(gòu)買量,即發(fā)生多少次點(diǎn)擊行為會(huì)有一次購(gòu)買行為,也就是電子商務(wù)平臺(tái)常說(shuō)的轉(zhuǎn)化率的倒數(shù)。這個(gè)特征可以挖掘點(diǎn)擊量和購(gòu)買量之間的關(guān)系,可以預(yù)測(cè)出用戶在點(diǎn)擊后,何時(shí)會(huì)發(fā)生購(gòu)買行為,更準(zhǔn)確地為用戶提供一個(gè)合理的個(gè)性化推薦。這里還是按時(shí)間的不同提取4 個(gè)特征(U_click/buy10-U_click/buy1 ) ,分

20、別是前10天的點(diǎn)擊 /購(gòu)買率、前5天的點(diǎn)擊 /購(gòu)買率、前3 天的點(diǎn)擊 /購(gòu)買率、前1 天的點(diǎn)擊 /購(gòu)買率。7. 收藏 / 購(gòu)買率收藏/購(gòu)買率的計(jì)算公式就是收藏量除以購(gòu)買量,即發(fā)生多少次收藏行為會(huì)有一次購(gòu)買行為。這個(gè)特征可以挖掘收藏量和購(gòu)買量之間的關(guān)系,可以預(yù)測(cè)出用戶在收藏后,何時(shí)會(huì)發(fā)生購(gòu)買行為,更準(zhǔn)確地為用戶提供一個(gè)合理的個(gè)性化推薦。這里還是按時(shí)間的不同提取4 個(gè)特征 ( U_collection/buy10-U_collection/buy1 ) ,分別是前10 天的收藏 / 購(gòu)買率、前5 天的收藏 / 購(gòu)買率、前3 天的收藏 / 購(gòu)買率、前1天的收藏 /購(gòu)買率。與點(diǎn)擊/購(gòu)買率不同,該特征的

21、取值范圍可能在0,1 之間,因?yàn)橘?gòu)買行為不一定要先收藏該商品,所以取值范圍應(yīng)該是大于等于0。8. 購(gòu)物車 / 購(gòu)買率購(gòu)物車 /購(gòu)買率的計(jì)算公式就是購(gòu)物車量除以購(gòu)買量,即發(fā)生多少次加入購(gòu)物車行為會(huì)有一次購(gòu)買行為。這個(gè)特征可以挖掘購(gòu)物車量和購(gòu)買量之間的關(guān)系,可以預(yù)測(cè)出用戶在加入購(gòu)物車后,何時(shí)會(huì)發(fā)生購(gòu)買行為,更準(zhǔn)確地為用戶提供一個(gè)合理的個(gè)性化推薦。還是按時(shí)間的不同提取4 個(gè)特征 ( U_car/buy10-U_car/buy1 ) , 分別是前10天的購(gòu)物車 / 購(gòu)買率、前5 天的購(gòu)物車/ 購(gòu)買率、前3 天的購(gòu)物車/購(gòu)買率、前1 天的購(gòu)物車/購(gòu)買率。該特征的取值范圍與收藏/ 購(gòu)買率相同,購(gòu)買行為不一

22、定要先加入購(gòu)物車,所以它也應(yīng)該是大于等于0。9. 商品銷量商品銷量是指每個(gè)商品的銷售量,與用戶的購(gòu)買行為有關(guān),由購(gòu)買了該商品的所有用戶總量決定。該特征直觀地反映了某個(gè)商品基于銷量上受喜愛(ài)程度,為訓(xùn)練模型以 及 個(gè) 性 化 推 薦 提 供 了 很 好 的 參 考 。 還 是 按 時(shí) 間 的 不 同 提 取 4個(gè) 特 征( Item_sale10-Item_sale1 ) ,分別是前10 天的商品銷量、前5 天的商品銷量、前3天的商品銷量、前1 天的商品銷量。該特征的取值范圍一定大于等于零。10. 成交訂單量成交訂單量是指包含該商品的總成交訂單的數(shù)量,與商品銷量類似,不同的是同一筆訂單中可能購(gòu)買了

23、多件該商品,那么此時(shí)商品銷量大于1, 而成交訂單量卻等于1。該特征反映了用戶對(duì)某個(gè)商品的購(gòu)買次數(shù),排除同一筆訂單購(gòu)買多件而使商品銷量看起來(lái)較高的情況。比如,用戶購(gòu)買牙刷時(shí),一筆訂單并不會(huì)只購(gòu)買一個(gè),通常會(huì)一起購(gòu)買多個(gè),那么牙刷的銷量相比一般只購(gòu)買一件的商品銷量高很多。通過(guò)成交訂單量可以反映商品基于訂單量受喜愛(ài)程度,提高了訓(xùn)練模型以及個(gè)性化推薦的準(zhǔn)確性。還是按時(shí)間的不同提取4 個(gè)特征(I_order10-I_order1 ) ,分別是前10 天的成交訂單量、前5 天的成交訂單量、前3 天的成交訂單量、前1 天的成交訂單量。該特征的取值范圍一定大于等于零。11. 購(gòu)買人數(shù)購(gòu)買人數(shù)是指購(gòu)買該商品的用

24、戶總?cè)藬?shù),與商品銷量與成交訂單相類似,不同的是同一個(gè)用戶可能對(duì)該商品多次下單,也可能購(gòu)買了多件該商品,那么此時(shí)成交訂單量大于1, 商品銷量大于1, 而購(gòu)買人數(shù)卻等于1。 該特征反映了某個(gè)商品的購(gòu)買人數(shù),排除同一個(gè)用戶購(gòu)買多次該商品的情況。比如,用戶購(gòu)買生活用品就會(huì)出現(xiàn)多次下單和購(gòu)買多件的情況。通過(guò)購(gòu)買人數(shù)可以真正反映商品基于用戶受喜愛(ài)程度,很大程度地提高了訓(xùn)練模型以及個(gè)性化推薦的準(zhǔn)確性。還是按時(shí)間的不同提取4 個(gè)特征(I_buyer10-I_buyer1 ) ,分別是前10 天的購(gòu)買人數(shù)、前5 天的購(gòu)買人數(shù)、前3 天的購(gòu)買人數(shù)、前1 天的購(gòu)買人數(shù)。該特征的取值范圍一定大于等于零。12. 是否加

25、購(gòu)物車加入購(gòu)物車的行為已經(jīng)在前面做了一個(gè)詳細(xì)地介紹和分析,其實(shí)在用戶行為數(shù)據(jù)中,是否加入購(gòu)物車也可以作為一個(gè)特征提取出來(lái)。將是否加購(gòu)物車的特征,定義為數(shù)據(jù)集的每個(gè)用戶對(duì)商品全集中的商品是否發(fā)生加入購(gòu)物車的行為。這里還是按時(shí)間的不同提取5 個(gè)特征 ( car5-car1 ) , 分別是倒數(shù)第5天是否加購(gòu)物車、倒數(shù)第4 天是否加購(gòu)物車、倒數(shù)第3 天是否加購(gòu)物車、倒數(shù)第2 天是否加購(gòu)物車、倒數(shù)第1 天是否加購(gòu)物車。之所以這樣提取特征,是因?yàn)閺挠脩粼?0天的倒數(shù)5 天內(nèi)是否會(huì)將某商品加入購(gòu)物車,可以預(yù)測(cè)該用戶在測(cè)試集中倒數(shù)5 天內(nèi)是否會(huì)發(fā)生加入購(gòu)物車的行為。該特征的取值范圍一定為1 或者 0, 其中

26、1 代表加購(gòu)物車, 0 代表不加購(gòu)物車。13. 是否購(gòu)買用戶購(gòu)買行為已經(jīng)和加購(gòu)物車行為一樣在前面做了詳細(xì)地介紹和分析,其實(shí)在用戶行為數(shù)據(jù)中,是否購(gòu)買也可以作為特征提取出來(lái)。在本文中,將是否購(gòu)買的特征,定義為數(shù)據(jù)集的每個(gè)用戶對(duì)商品全集中的商品是否會(huì)發(fā)生購(gòu)買行為。這里還是按時(shí)間的不同提取5 個(gè)特征 ( buy5-buy1 ) , 分別是倒數(shù)第5天是否購(gòu)買、倒數(shù)第4 天是否購(gòu)買、倒數(shù)第3 天是否購(gòu)買、倒數(shù)第2 天是否購(gòu)買、倒數(shù)第 1 天是否購(gòu)買。之所以這樣提取特征,是因?yàn)閺挠脩粼?0 天的倒數(shù)5 天內(nèi)是否會(huì)購(gòu)買某商品,可以預(yù)測(cè)該用戶在測(cè)試集中倒數(shù)5 天內(nèi)是否會(huì)發(fā)生購(gòu)買行為。該特征的取值范圍一定為1

27、或者 0, 其中 1 代表購(gòu)買,0 代表不購(gòu)買。14. 累計(jì)的用戶行為累計(jì)的用戶行為,也屬于用戶行為數(shù)據(jù)的一種表現(xiàn)形式,用戶行為數(shù)據(jù)在前面已經(jīng)做了詳細(xì)地介紹和分析,它可以直觀地反映出用戶的各種關(guān)鍵信息。累計(jì)的用戶行為定義為前10 天的用戶行為數(shù)據(jù)中用戶累計(jì)對(duì)商品子集的各行為總量,包括點(diǎn)擊量、收藏量、購(gòu)物車量、購(gòu)買量。與用戶所有行為總量特征不同之處在于,累計(jì)的用戶行為是基于商品子集的,而且是按照用戶行為提取特征。提取4 個(gè)特征(behav1-behav4),分別是前10天的用戶點(diǎn)擊量、前10天的用戶收藏量、前10天的用戶加購(gòu)物車量、前10 天的用戶購(gòu)買量。該特征的取值范圍一定為大于等于0。15.

28、 訪問(wèn)時(shí)間差訪問(wèn)時(shí)間差是指用戶在兩次訪問(wèn)時(shí)間的間隔,它可以反映用戶對(duì)網(wǎng)站的訪問(wèn)頻率等信息。本文中,提取特征訪問(wèn)時(shí)間差,將其定義為用戶最后一次訪問(wèn)商品子集中的某個(gè)商品到第10 天的天數(shù)間隔。這與倒數(shù)5 天的加購(gòu)物車量、購(gòu)買量相關(guān)聯(lián),可以得到用戶訪問(wèn)時(shí)間與購(gòu)買之間的關(guān)系。該特征的取值范圍為0,10 之間的整數(shù)。貼關(guān)鍵代碼importpandasaspd importrandom fromget_featuresimport* importtimet1=()j=10df_items=()df_items=item_id=df_items=aforkinrange(21):i=j+kprintaddf

29、eaturestotrains+str(i)df_tag=(data/+result+str(i)+.csv)df_tagtag=1df_feature=(data/+str(i)+.csv)df_feature_item=(left=df_feature,right=df_items,how=inner) df_ui=df_featureuser_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,inp

30、lace=True)U1=buy_sum10(df_feature,i)df_train=(left=df_ui_tag,right=U1,how=left) U2=click_sum10(df_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_trai

31、nU_click/buy10=df_trainU_click/buy5=df_trainU_click/buy3=df_trainU_click/buy1=df_trainU_click/buy10=df_trainU_click/buy10.map(lambdax:fillinfini ty(x)df_trainU_click/buy5=df_trainU_click/buy5.map(lambdax:fillinfinity(x)df_trainU_click/buy3=df_trainU_click/buy3.map(lambdax:fillinfinity (x)df_trainU_c

32、lick/buy1=df_trainU_click/buy1.map(lambdax:fillinfinity(x)df_trainU_collection/buy10=df_trainU_collection/buy5=df_trainU_collection/buy3=df_trainU_collection/buy1=df_trainU_collection/buy10=df_trainU_collection/buy10.map(lambdax: fillinfinity(x)df_trainU_collection/buy5=df_trainU_collection/buy5.map

33、(lambdax:fi llinfinity(x)df_trainU_collection/buy3=df_trainU_collection/buy3.map(lambdax:fi llinfinity(x)df_trainU_collection/buy1=df_trainU_collection/buy1.map(lambdax:fi llinfinity(x)df_trainU_car/buy10=df_trainU_car/buy5=df_trainU_car/buy3=df_trainU_car/buy1=df_trainU_car/buy10=df_trainU_car/buy1

34、0.map(lambdax:fillinfinity(x )df_trainU_car/buy5=df_trainU_car/buy5.map(lambdax:fillinfinity(x) df_trainU_car/buy3=df_trainU_car/buy3.map(lambdax:fillinfinity(x) df_trainU_car/buy1=df_trainU_car/buy1.map(lambdax:fillinfinity(x) df_behavior_sum10=behavior_sum10(df_feature)df_train=(left=df_train,righ

35、t=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=(left=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_tra

36、in=(left=df_train,right=df_buy,how=left) df_orders=I_Orders(df_feature_item,i) df_train=(left=df_train,right=df_orders,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

37、_time,how=left) (0,inplace=True)(data_features/train+str(i)+.csv,index=False)t2=()print給訓(xùn)練集打上標(biāo)簽耗時(shí) f秒(t2-t1)4、選擇分類模型可以用決策樹(shù)模型、隨機(jī)森林模型、Logistic回歸、GBRTf型等,具體可以上網(wǎng)站:查看各個(gè)模型的使用方法。決策樹(shù)模型:首先從包含了特征的訓(xùn)練集中選擇所需特征,調(diào)用 DecisionTreeClassifier 函數(shù)對(duì)該訓(xùn)練集訓(xùn)練模型,再使用predict 函數(shù)預(yù)測(cè)測(cè)試集的分類,再將分類結(jié)果是購(gòu)買( tag=1 )的商品作為推薦結(jié)果,將其與測(cè)試集的真實(shí)分類結(jié)果比對(duì),

38、最后評(píng)估該模型對(duì)本實(shí)證研究數(shù)據(jù)的準(zhǔn)確率,以F1 值為準(zhǔn)。決策樹(shù)分類模型的DecisionTreeClassifier 函數(shù),包含了很多參數(shù)設(shè)置,著重研究 criterion 參數(shù), criterion 表示衡量一個(gè)分類的質(zhì)量,支持的標(biāo)準(zhǔn)可選擇gini 和entropy 這兩個(gè)值,其中g(shù)ini 是基尼指標(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_resul

39、t,right=df_predict,how=inner)predict_num=len(df_predict)printDecisionTreepredict_numis:,predict_numhit_num=len(inner)printDecisionTreehit_numis:,hit_numresult_num=len(df_result)printDecisionTreetotalresultnumis:,result_numifpredict_num!=0:precision=float(hit_num)/predict_numifresult_num!=0:callrate=

40、float(hit_num)/result_numprintDecisionTreePrecisionis : ,precision printDecisionTreeCallrateis:,callrateifprecision+callrate!=0:print 決策樹(shù) F1 值為 :,2*precision*callrate/(precision+callrate),nelse:print 決策樹(shù) F1 值為 :0基于隨機(jī)森林的分類模型隨機(jī)森林是在決策樹(shù)的基礎(chǔ)上提出的分類模型,它屬于集成學(xué)習(xí)模型。他的核心思想就是通過(guò)訓(xùn)練和組合多個(gè)不同的決策樹(shù),使其形成森林,然后由多棵樹(shù)進(jìn)行投票來(lái)決定其分

41、類結(jié)果。首先從包含了特征的訓(xùn)練集中選擇所需特征,調(diào)用RandomForestClassifier 函數(shù)對(duì)該訓(xùn)練集訓(xùn)練模型,再使用predict 函數(shù)預(yù)測(cè)測(cè)試集的分類,再將分類結(jié)果是購(gòu)買(tag=1)的商品作為推薦結(jié)果,將其與測(cè)試集的真實(shí)分類結(jié)果比對(duì),最后評(píng)估該模型對(duì)本實(shí)證研究數(shù)據(jù)的準(zhǔn)確率,以F1 值為準(zhǔn)。隨機(jī)森林分類模型的 RandomForestClassifier函數(shù),包含了很多參數(shù)設(shè)置,其中著重 研究n_estimators和criterion參數(shù)。n_estimators表示森林里樹(shù)的個(gè)數(shù),整數(shù)形式; criterion表示衡量一個(gè)分類的質(zhì)量,支持的標(biāo)準(zhǔn)可選擇gini和entropy這

42、兩個(gè)值,其中g(shù)ini是基尼指標(biāo),entropy是信息增益。貼關(guān)鍵代碼df_predict=(model/)inner=(left=df_result,right=df_predict,how=inner)predict_num=len(df_predict)printRandomForestpredict_numis:,predict_numhit_num=len(inner)printRandomForesthit_numis:,hit_numresult_num=len(df_result)printRandomForesttotalresultnumis:,result_numifpre

43、dict_num!=0:precision=float(hit_num)/predict_numifresult_num!=0:callrate=float(hit_num)/result_numprintRandomForestPrecisionis : ,precisionprintRandomForestCallrateis:,callrateprint 隨機(jī)森林F1 值為 :,2*precision*callrate/(precision+callrate),nelse:print 隨機(jī)森林F1 值為 :0基于回歸樹(shù)的分類模型回歸樹(shù) GBDT 是一種迭代決策樹(shù)算法,由多個(gè)決策樹(shù)組成,在

44、本節(jié)中要具體使用的分類模型是GBRT,即梯度迭代回歸樹(shù),或者梯度提升回歸樹(shù),它側(cè)重于梯度迭代GB 和回歸樹(shù)RT。首先從包含了特征的訓(xùn)練集中選擇所需特征,再調(diào)用GradientBoostingClassifier函數(shù)對(duì)該訓(xùn)練集訓(xùn)練模型,再使用predict 函數(shù)預(yù)測(cè)測(cè)試集的分類,再將分類結(jié)果是購(gòu)買(tag=1)的商品作為推薦結(jié)果,將其與測(cè)試集的真實(shí)分類結(jié)果比對(duì),最后評(píng)估該模型對(duì)本實(shí)證研究數(shù)據(jù)的準(zhǔn)確率,以F1 值為準(zhǔn)?;貧w樹(shù)分類模型的GradientBoostingClassifier 函數(shù),包含了很多參數(shù)設(shè)置,其中著重研究參數(shù)learning_rate。learning_rate就是學(xué)習(xí)率,是指

45、每棵樹(shù)都對(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)printensemble_GBRT_LRpredict_numis:,predict_numhit_num=len(inner)printensemble_GBRT_LRhit_numis:,hit_numresult_num=len(df_result)printensemble_GBRT_LRtotalresultnumi

46、s:,result_numifpredict_num!=0:precision=float(hit_num)/predict_numifresult_num!=0:callrate=float(hit_num)/result_numprintensemble_GBRT_LRPrecisionis : ,precisionprintensemble_GBRT_LRCallrateis:,callrateifprecision+callrate!=0:printensemble_GBRT_LRF1 值為 :,2*precision*callrate/(precision+callrate),nelse:printensemble_GBRT_LRF1 值為 :0基于 Logistic 回歸的分類模型Logistic 回歸,是指通過(guò)連續(xù)型或者屬性型的自變量,預(yù)測(cè)屬性型因變量的分析方法 ,主要研究因變量各種可能發(fā)生的概率與自變量之間的關(guān)系。本文中,主要研究Logistic 回歸的二分類非線性模型,用來(lái)解決分類問(wèn)題,比如該用戶是否會(huì)購(gòu)買該商品。首先從包含了特征的訓(xùn)練集中選擇所需特征,再調(diào)用 LogisticRegression 函數(shù)對(duì)該訓(xùn)練集訓(xùn)練模型,再使用 predict 函數(shù)預(yù)測(cè)測(cè)試集的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論