write down,forget

第一届全国大学生数据挖掘邀请赛-数据集分析篇

<Category: 小道消息, 数据仓库, 数据挖掘> 查看评论

今天下午有点时间,研究了下#第一届大学生全国数据挖掘邀请赛#的数据集,顺便写个酱油贴。

数据集版权归 上海花千树信息科技有限公司 世纪佳缘交友网站 http://www.love21cn.com 所有

此处省略相关废话51句,详细介绍走这边,http://www.statmodelingcompetition.com

咱们先了解下这次比较的评分标准:

Normalized Discounted Cumulative Gain(NDCG
有关NDCG评分,具体看这里http://www.statmodelingcompetition.com/explain.html


NDCG@10简单来说:
click得1分/msg得2分
取10个你的推荐人(有顺序的哦),对照实际的用户的反馈(rec/click/msg),结合上面的公式,算出你NDCG@10分数。
最理想的情况就是你推荐的每个人,他都发站内消息(注,spammer不算),即NDCG理想得分:1.0,当然这是不可能的,目前排行榜上最高也就.24左右

介绍下下载下来的数据:

data目录:
profile_f.txt,女性会员的资料,203843条数据
profile_m.txt,男性会员的资料,344552条数据
test.txt,
train.txt,原始数据,事实表,格式[USER_ID_A USER_ID_B ROUND ACTION],用户A在第几轮推荐的时候给用户B的反应(不理、点击查看资料、发站内消息)
字段列表.xlsx,这个不要解释,省去废话5字

python目录:(具体看里面的使用方法,这里简单提一下)
evaluate.py,本地计算NDCG分数的脚本
labels_train.txt,由data目录的train.txt数据转换而来,将同一用户的对其他后续人的推荐反馈做的一个聚合,注意,这里已经将推荐轮数给抹掉,分析的时候,推荐轮数可能有点影响。
yourranks.txt,这文件里默认给了一个随机的数据,主要是指导你上传提交的数据格式,每一行,每一列和labels_train.txt的文件里的数据是一一对应的,表示的是labels_train.txt里面的候选人(推荐给用户A的)最合理的推荐顺序(这个其实就是我们需要做的,那个最有可能被用户A看上,当然第一时间推给他,如此。。,注,可能你会奇怪为什么每行的数据不一样,没有办法,因为每一个用户的候选推荐人数列表就是不一样的,有可能是推荐轮数的问题,有可能是给我们的数据的稀疏性造成的,这些都不是问题,只有我们保证前10个,最多20个是非常精确的就行)
使用方法.txt,pass。。。

其实数据挖掘,对数据的理解很重要,并且还需要理解数据之上的业务,然后再建模分析,不断调整优化。

先八卦一下,看哪个人接受的推荐次数最多。
简单对train.txt里面的数据进行处理,得到按推荐次数排序的人员列表:
python脚本:

结果,按升序:

找到这条记录:

参照excel表格,还原下数据,我们来看一下:

这只是单个的特征而已,只能说明个体,我们要了解整体的情况,这么分析不死人吗,还是先入库吧。
先来Profile表的

导入方法:
sqlserver》建表》数据库右键选择import data》选择数据源:flat file source》选择txt文件》目标表选我们上面定义的表,column自动mapping》导》done

其他表类似,建之。。。,典型的星型结构,简单。

入库之后,数据好分析多了,可以发现很多脏数据,需要做些清洗。

先分析下数据吧,看看数据集都有些什么特征:
首先,可以看到,这个数据集都是浙江的会员
地区:浙江、杭州市

分析注册时间(将unixtime转换成datetime):

截取片段

从注册时间可以看用户的会员资格,注册时间那么久,还米有找到意中人?神马情况?最后一次登陆时间还是03年,神马意思?
单看上面的数据可以得到一些有用的信息,另外结合评分的数据,创建维度表,根据需要建立各种分析模型,进行分析。

星座,年龄,登陆次数,是否有房,行业。。。这里面大有文章,一个引子,先到这里,希望对你有用。

本文来自: 第一届全国大学生数据挖掘邀请赛-数据集分析篇


  1. 用什么算法进行评分的,算法需要学习吗?

  2. 哦,忘了看简介。各特征值有没有权重之说,有没有参考资料

  3. 我想问下你写那个新浪RSS生成器
    怎么让时间显示正确或者去掉时间?
    老是在1970年···

    medcl Reply:

    @宋若愚, 没有看到显示1970啊

    宋若愚 Reply:

    @medcl, 我现在是改的用月光的代码了
    其实你那个很方便
    不过就是插入后时间都是1970.01.01,调用到独立博客时