Python程序设计与实践大作业实验报告陆阳孙勇裘升明.docx
- 文档编号:26178529
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:32
- 大小:49.14KB
Python程序设计与实践大作业实验报告陆阳孙勇裘升明.docx
《Python程序设计与实践大作业实验报告陆阳孙勇裘升明.docx》由会员分享,可在线阅读,更多相关《Python程序设计与实践大作业实验报告陆阳孙勇裘升明.docx(32页珍藏版)》请在冰豆网上搜索。
Python程序设计与实践大作业实验报告陆阳孙勇裘升明
浙江工商大学计算机与信息工程学院
《Python程序设计与实践》大作业报告
专业:
计科
班级:
1404
学号:
1412190416、1412190415、1412190413
姓名:
陆阳,孙勇,裘昇明
指导教师:
蒲飞
2015年6月28日
题目介绍:
在真实得业务场景下,我们往往需要对所有商品得一个子集构建个性化推荐模型。
在完成这件任务得过程中,我们不仅需要利用用户在这个商品子集上得行为数据,往往还需要利用更丰富得用户行为数据.定义如下得符号:
u――用户集合?
i—-商品全集
P--商品子集,P?
I?
D――用户对商品全集得行为数据集合那么我们得目标就是利用D来构造U中用户对P中商品得推荐模型。
数据说明:
竞赛数据包含两个部分。
第一部分就是用户在商品全集上得移动端行为数据(D),表名为tianchi_mobile_remend_train—user,包含如下字段:
字段
字段说明
提取说明
user_id
用户标识
抽样&字段脱敏
item」d
商品标识
字段脱敏
behavior_type
用户对商品得行为类型
包括浏览、收藏、加购物车、购买,
对应取值分别就是1、2、3、4。
user_geohash
用户位置得空间标识,可以为空
由经纬度通过保密得算法生成
item_catego
商品分类标识
字段脱敏
ry
time
行为时间
精确到小时级别
第二个部分就是商品子集(P),表名为tianchi—mobile—remend—train
_item,包含如下字段:
字段
字段说明
提取说明
item」d
商品标识
抽样&字段脱敏
item_geohash
商品位置得空间标识,可以为空
由经纬度通过保密得算法生成
item_category
商品分类标识
字段脱敏
训练数据包含了抽样出来得一定量用户在一个月时间(11、18〜12、18)之
内得移动端行为数据(D),评分数据就是这些用户在这个一个月之后得一天(12、
19)对商品子集(P)得购买数据。
参赛者要使用训练数据建立推荐模型,并输出用户在接下来一天对商品子集购买行为得预测结果。
大作业报告内容包括以下几个部分
1、数据分组统计:
可统计有多少用户、商品、商品类别等信息,甚至每天各种行为得统计数。
如图:
A
B
C
D
E
]
■tine
behavior1
behavior2
behavi3
behaviot4
2
2014/11/18
'—57472
11B3
&13
451
3
2014/11/19
83300
1970
533
440
4
2014/11/20
62396
1095
2200
433
5
2014/11/11
70089
2172
518
429
6
2011/11/22
78661
1092
703
410
7
2014/11/23
88505
1165
64S
431
8
2014/11/24
95796
3063
2141
447
9
2014/11/25
58161
1128
629
451
10
2014/11/26
57880
1L2&
549
494
11
2014/11/27
59514
HIT
1118
403
12
2014/11/28
57424
1085
598
451
13
2014/11/29
56608
1135
672
438
14
2014/11/30
91616
1U9
762
453
15
2014/12/1
61986
2943
649
439
16
2014/12/2
94551
1338
730
38-iO
17
2014/12/3
79938
1278
1035
494
18
2014/12/4
54963
1181
671
467
19
2014/12/5
57024
4327
792
451
20
2014/12/6
55913
3024
1129
5&0
21
2014/12/7
100716
1513
755
207?
22
2014/12/8
105284
2i62
1133
412
23
2014/12/9
^4192
10D02
717
438
24
2014/12/10
91015
1707
1322
477
25
2014/12/11
135216
416&
722
2036
26
2014/12/12
278329
11954
1877
4394
2?
2014/12/13
120426
1129
981
43G
28
2011/12/14
68146
1615
U71
如
29
2^11/12/15
74960
1237
685
479
30
203^/12/16
S1934
167^
716
548
31
2014/12/17
76070
1341
867
517
32
201^/12/lB
fi4126
1U9
527
764
33
还有,在给出得用户行为数据中,有些用户在整个11—18日至12—18日
对商品有浏览行为记录,但就是从未产生过购买行为,这些用户会否在12月19号购买商品实难预测,因此,我们去除这些无购买行为得用户信息,认为这些用户在12月19号还就是不会购买任何商品。
贴关键代码
importtime
importpandasaspd
start=time>time()df_items=pd、read_csv("tianchi_mobile_remend_train」temcs
”\
v”)
df_items2=pd、read_csv("tianchi_mobi1e_remend_train_user、csv")
df」tems3=pd、DataFrame()
df_items4=pd、DataFrame()
df_items5=pd、DataFrame()
df_items3=df_items["item_id"]、drop_dup1icates()
df_items4=df」tems["item_category"]、drop_dup1icates()df_items5=df—items[df_items、item_geohash、notnull()]df_items5=df—items5["item_id"]、drop_duplicates()df_items6=df—items2["user—id"]、drop_dup1icates()df_items7=df_items2["item_id"]、drop_dup1icates()df_items8=df_items2[”item_category"]、drop_duplicates()total—behavior_num=len(df_items2)
df—items9=df_items2[df—items2、behavior_type==4]df_items10=df_items2[df」tems2、behavior_type!
=4]positive—num=len(df_items9)
negative_num=len(df_items10)
item_num=len(df_items3)
item_categories_num=len(df_items4)
item_geohash_num=1en(df_items5)
user_num=len(df_items6)
item_fu1l_num=len(df_items7)
item_categories_full—nun=1en(df_items8)
end=time、time()
print'商品子集中商品个数为:
',item_num
print'商品子集中商品类型数为:
',item_categories_num
print'商品子集中带geohash信息得商品个数为:
’,item—geohash—n
'用户数一共有:
/,user_num
/商品全集中商品个数为:
',item_full_num
'商品全集中商品种类数数为:
',item_categories_full_num
/商品全集中共有%d条仃为记录%(total_behavior_num)
消费仃为记录中负正样本比为%d:
1'%(negative_num^positive_
num)
/一共耗时%f秒'%(end—start)
2、数据预处理
⑴重新整理时间
重新整理数据得时间,也就就是Time字段,在数据统计分组中也提到过,因为原始数据得用户行为时间记录就是从11月1800时到12月18日23时,精
确到小时级,为了方便数据集得划分,需要将用户行为时间数据整理为0—30天,以天为单位,即11月18日得time为0、11月19日得time为1,以此类推。
贴关键代码
importpandasaspd
fromdatetimeimport衣
importtime
t0=time、time()
begin_time=datetime(2014,11,18,0,0)
deftrans_time(str_time):
entry—time=datetimestrptime(str—time,”%¥—%m-%d%H")
datatime_de1ta=(entry_time-begin_time)、days
returnint(datatime_delta)
df_train_user=pd、read—csv("tianchi_mobi1e_remend_train_user、csv")
p
IIIIIII
print”时间转换进行中、、、\n"df—train_user、time=df_train_user、timemap(lambdax:
t
rans_time(x))
df_train_user>to_csv(”train_trans_time>csv”,index=False)t1=time、time()
print”时间转换结束!
\n"
print"转换时间共耗时%f秒"%(t1-10)
⑵划分训练集与测试集
在分类问题中,模型需要经过训练集得学习,才能用于测试集,而训练集与测试集在形式上得区别在于前者有类别标签,后者则需要模型输出相应得类别标签。
这里得问题就是依据31天得用户操作记录预测第32天得购买情况,所以通常来说,训练集得构建需要利用31天得数据,而其相应得类别标签如何标注
在训练集中?
这个与您如何划分训练集与测试集有关;而测试集得构建则可用到31天得完整数据.下面举个例子,用于解释训练集与测试集得具体表现形式。
d
t)ran(i_id
fea,ture_l
feature_2
tag
12154500
1758
2
3
1
训练集样本示例
测试集样本示例
训练集样本示例中得user—id,brand—id(item_id)用于表示唯一得样本id,而特征feature_1,feature_2则用31天得数据构建而来。
本次比赛中,我们划分训练集与测试集所用得分割日期就是每10天。
第0-9天为一个
训练集,用第10天得数据给第0-9天数据添加类别标签。
第1-10天为一个训练集,用第11天得数据给第1—10天数据添加类别标签,依次类推,…,最后就是第20—29天为一个训练集,用第30天得数据给第20-29天数据添加类别标签。
测试集为第21—30天得数据。
贴关键代码
importpandasaspd
fromdatetimeimport*
importtime
num=22start=time、time()df_train—user=pd、read_csv(”train—trans—time_process、csv")
df_items=pd、read—csv("tianchi_mobile_remend_train_item、csv”)
df—items=df_itemsitem」d、drop_dup1icates()
a=pd、DataFrame()
a[”item_id"]=df_items、values
df_items=a
foriinrange(num):
print”划分训练集:
"+str(i)
j=i+10
ifj!
=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—type==4)][["user—id","item_id"]]
df_test=df_test、drop_duplicates()
df_test=pd、merge(1eft=df_test,right=df_items,how="inner”)、drop_dup1icates()
df_test、to_csv(”data/"+"result"+str(j)+"、csv”,i
ndex=Fa1se)
else:
df_set=df_train—user[(df_train_user、time〉=i)&(d_train_user、time df_set、to_csv("data/"+"test、csv",index=False) end=time、time() print'训练集划分耗时%f秒/%(end-start) ⑶平衡正负样本 正负样本比例需从1: 100降为1: 10〜1: 20之间。 贴关键代码 importpandasaspd importrandom importtime fromget_featuresimport衣 start=time、time() df—feature2=pd、DataFrame() j=10 forkinrange(20): i=j+k df—feature=pd、read—csv(”data_features/train”+str(i)+”、csv”) df_fea ture_ p=df_feature[df_feature 、tag= 二1] df_feature_n =df_feature[df_feature 、tag= =0] lp =len (df_feature_p) 1n= 1en (df_feature_n) iff 1oat( (In)/lp〉14: a =rang e(0,ln) sli ce=randomsample(a,lp* 14)# 1p*15 df_feature—n=df—feature_n、iloc[slice] df_feature=pd、concat([df_feature_p,df_feature_n],ignore_index=True) df—feature2=pd、coneat([df_feature,df—feature2]) df_feature2、to_csv("features/train_feature、csv",index=Fa 1se) end=time、time() print'对训练集抽样耗时%f秒’%(end-start) 3、特征提取 特征提取在数据挖掘中很重要,那么为什么它们那么重要呢? 之前提到过, 要想输出测试集得类别标签,需要模型在训练集经过学习,那么模型在训练集上学习得就是什么? 我们知道,在给模型输入数据得时候,实际上模型用到得都就是特征(及其对应得类别标签),而特征就就是用于描述为什么该样本得类别标签就就是如此,在本赛题中即用于描述某用户为什么购买/不购买某商品。 比如,用户购买某商品得原因,就是因为以前经常买,信得过,那么这里可以用“用户购买该商品得天数/用户访问该商品得天数”来刻画用户对该品牌得忠诚度。 当然,并不就是单一得特征就能描述所有情况,通常来说,需要针对所有可能得情形进行考虑,从而深刻而全面地刻画用户购买/不购买商品得原因。 这样,模型才能真正学到其中得规律,从而在测试集表现优异。 而这一过程,就称之为特征工程。 显然,要做好特征工程,需要我们自身对“用户会否购买商品”这一业务具有较深刻得理解,即领域知识,并将其用模型可理解得方式表现出来,如何抽取特征? 1、统计用户在31天中得购买量、点击量、收藏量、加购物车次数、有操作记录得天数、发生购买得天数、点击转购买率等等,并以点击转购买率做升序/降序排序进行观察,可以发现点击量越高得,点击转购买率也往往越低,尤其点击量极高得用户,往往购买量为0.由此可以考虑将用户购买量、点击转购买率等一系列特征用于描述用户就是否会在未来一天发生购买。 2、统计用户从初次访问商品到最终购买商品得时间,可以发现绝大多数购买都就是当天接触当天完成,越往后用户购买得可能性越低。 由此可以推测用户对商品得购买意愿就是随着距离上次访问得时间拉长而衰减得,进而可以使用衰减函数来模拟该购买意愿。 一方面,利用领域知识对数据进行分析、实验验证.另一方面,从分析得结果、实验得反馈来更新领域知识.这就是一个不断迭代得过程,需要成体系、且不断地完善。 以下仅供参考: (1)、基本统计类特征 A、销量(分割日期前1、2、3、4、5、10天) E、成交订单数(以同一天同一个用户为一个订单) C、购买人数 D以上3类特征分别再针对点击、收藏、加购物车等进行统计 (2)、转化率类特征 A、销量/点击数 B、成交订单数/点击订单数 C、购买人数/点击人数 D上述3个特征分别在针对收藏、购物车等操作进行统计 (3)、比值类特征 A、返客率(某周期内多次购买得用户数/总购买用户数) B、老客户率(3天【或其她周期7、15、30】前曾购买过且在前3天内再次购买得用户数/3天内总购买用户数) C、人均点击数、人均购买量、人均收藏量、人均加购物车量等 我们得做法: 1.用户所有行为总量 提取用户所有行为总量作为第一个特征,它就是指每个用户对每个商品所有行为得总量,其中得所有行为包括点击行为、收藏行为、购物车行为、购买行为. 用户所有行为总量定义为前10天得用户行为数据中用户对商品全集得所有行为总量,包括点击量、收藏量、购物车量、购买量。 从用户所有行为总量中,可以得到用户对某商品产生得行为次数,从而推测出该用户对阿里巴巴移动电商平台得操作频率与忠诚度,以此做出合理得个性化推荐。 之所以选择前10天 作为时间节点,就是由于划分之后得每个训练集与测试集都以10天为单位. 2.点击量 定义数据集得每个用户对商品全集中得商品得点击行为得总与为点击量。 从点击量中,可以知道用户浏览了几次某商品,从而推测该用户对该商品得兴趣程度,为之后得模型训练以及最后得个性化推荐奠定一个良好基础。 其中,对点击量按10天、5天、3天、1天得时间来划分.也就就是关于点击量,按时间得不同提取得特征(U—Click_sum10—U_click_sum1)有4个,分别就是前10天得用户点击量、前5天得用户点击量、前3天得用户点击量、前1天得用户点击量。 之所以这样提取特征就是由于之前划分得训练集就是以10天为单位划分得,这样可以更清楚地分析用户在10天中点击量得分布情况,对后面得模型训 练有很重要得作用 3•收藏量 定义数据集得每个用户对商品全集中得商品得收藏行为得总与为收藏量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 程序设计 实践 作业 实验 报告 陆阳孙勇裘升明