Brandear拍卖数据挖掘竞赛直播(一)
来源: | 作者:木贼 | 发布时间: 2020-01-02 | 1327 次浏览 | 分享到:

  最近我年纪大了,体力和脑力都已经不能和现在的那些年轻人相比,同时我所兼职的公司事务确实有些繁忙,不能像当年那样全力地参加数据挖掘竞赛了。于是我只好把心态放轻松,像这样以娱乐的心态,一边比赛,一边记录比赛的过程。当然我不能选择Kaggle或者天池这种平台上的比赛,因为把各种被吊打的过程记录下来实在有些丢人。因而我要选一些人数比较少的平台或是比赛。

  于是在报春同学的推荐下(想象一下报春同学气鼓鼓地扭过头,说「哼!你这种菜鸡,还是老老实实做这种小比赛吧!」),我选择Nishika平台的

「Brandearオークション!」 レコメンドエンジン開発www.nishika.com

这个平台似乎刚刚建立,比赛数量和参赛选手数都比较少,感觉会比较容易一些,即便被吊打也不会被吊打得太难看。


图0 「Brandearオークション!」 レコメンドエンジン開発

  参赛的第一天,主要要完成的任务包括

1. 审题
2. 构建线下测试集
3. 设计基线
4. 提交




1. 审题

1.1 赛题

  这场比赛的赛题的赛题是日文的,阅读起来可能有一些困难;不过借助一些翻译工具,大体还是能读懂。


图1.1-1 这一页谷歌翻译大体还算可靠

简单来说,就是一个拍卖网站。我们大概需要给会员推荐一些拍卖。


图1.1-2 这一页翻译的问题比较多

也就是每个会员,我们需要推荐20件拍卖;这20件拍卖将被用NDCG来评价。

  注意谷歌对お気に入り追加的翻译有些混乱。其实我们这里主要关注会员的两种动作,入札(即竞标),以及お気に入り追加(即收藏)(更准确的翻译应该是加入我的最爱,以下简称收藏)。简单来说,我们给会员预测的拍卖,如果用户最终竞标了它,那么得2分,如果用户最终收藏了它,那么得1分。

1.2 数据

  接下来我们看数据

图1.2 数据说明,同样翻译问题很多

注意マスタmaster被翻译为了师父,我也不清楚这里的含义。或许是「主要的」的意思?

  这里有好大一堆数据,我们先关心比较重要的。显然其中auction.csv(拍卖数据),watchlist.csv(收藏数据),shudounyuusatsu.csv(「手動入札」,竞标数据)这三份数据比较重要。我们可以找到data_explanation.xlsx文件来查看这几份数据的说明。

1.3 数据说明


图1.3-1 拍卖数据auction.csv的说明,没有翻译

结合列名说明大致可以猜出每一列含义,这里的第三列说明基本上就是列名的汉字或片仮名的写法。

图1.3-2 收藏数据和竞标数据的说明,同上

注意削除フラグ就是删除flag,表示是否被删除。收藏数据的删除包含两种情况,即用户自行删除,或者拍卖结束删除;竞标的删除则只包含拍卖结束删除的情况。

1.4 数据观察

  接下来,我们把数据下载下来,然后汇入

library(data.table)

測試會員表 = fread("sample_submission.csv", col.names=c("會員標識", "拍賣標識"))
測試會員表 = unique(測試會員表[, .(會員標識)], by = NULL)

拍賣表 = fread("auction.csv", col.names=c("拍賣標識", "商品種別標識", "商品標識", "再出品回數", "狀態標識", "品牌標識", "類型標識", "類型組標識", "線標識", "顏色", "男女別標識", "參考價格", "拍賣作成日"))
拍賣表$拍賣作成日序 = as.double(as.Date(substring(拍賣表$拍賣作成日, 1, 10))-as.Date("2019-10-01"))

氣入追加表 = fread("watchlist.csv", col.names=c("會員標識", "拍賣標識", "登錄日", "削除標記"))
氣入追加表$登錄日序 = as.double(as.Date(substring(氣入追加表$登錄日, 1, 10))-as.Date("2019-10-01"))
氣入追加表 = merge(氣入追加表, 拍賣表, by = "拍賣標識")

入札表 = fread("shudounyuusatsu.csv", col.names=c("拍賣標識", "會員標識", "入札日", "金額", "數量", "即決標記", "削除標記"))
入札表$入札日序 = as.double(as.Date(substring(入札表$入札日, 1, 10))-as.Date("2019-10-01"))
入札表 = merge(入札表, 拍賣表, by = "拍賣標識")

注意評価手法页中提到有6016个会员,我暂时没有找到6016个会员的来源,因此只能从sample_submission.csv中读入这6016个会员。

  此时,我们观察数据主要观察数据的时间。評価手法页有提到我们要预测的时间段是2019-09-24至2019-09-30(为了处理方便,我们可以把时间都转化为到2019-10-01的日数差)。其中收藏表(氣入追加表)和竞标表(入札表)的时间范围都是2018-09-01至2019-09-23;拍卖表的时间范围是2018-02-01至2019-09-30(尚不清楚这是否是一个穿越)。





2. 构建线下测试

  线上的测试时间段是2019-09-24至2019-09-30,那么显然线下的测试时间段就应该向前推7天。也就是收藏表竞标表截取到2019-09-17之前,然后预测2019-09-17至2019-09-23的数据。根据题目的描述,我们选取2019-09-17至2019-09-23内有竞标或收藏行为的会员(明显的穿越,尚不清楚对赛题又什么影响);这样的会员有6344个,和线上的6016基本相当,说明这样构建大致是没有问题的。

線下參照表 = rbind(氣入追加表[登錄日序 >= -14 & 登錄日序 < -7, .(會員標識, 拍賣標識, 標籤 = 1)], 入札表[入札日序 >= -14 & 入札日序 < -7, .(會員標識, 拍賣標識, 標籤 = 2)])
線下參照表 = 線下參照表[, .(標籤 = max(標籤)), .(會員標識, 拍賣標識)]
線下測試會員表 = unique(線下參照表[, .(會員標識)], by = NULL)

線下氣入追加表 = 氣入追加表[登錄日序 < -14]
線下入札表 = 入札表[入札日序 < -14]




3. 设计基线

3.1 基本基线

  实际上,我也不知道Brandear到底是干嘛的网站,我也不清楚拍卖是怎么进行的,题目中也没有什么相关的描述,这对于我们的分析来说是一个很大的困难。

  我们之前更常见到的是对商品的推荐,也就是预测用户会购买或交互哪些商品。这个赛题推荐的是拍卖,和商品大概还是不太一样的。因为一个用户构建了一个商品,另一个用户还可以继续买这个商品;可是一个用户拍到了一件商品,另一个用户就没有办法再拍了。不过我们暂时先不考虑这些。

  对于商品推荐的问题,例如要预测用户在未来一段时间内会交互的商品,我们经常用的一个规则是,将用户交互过的商品作为预测。这里我们可以采用类似的思路,也就是把会员收藏或是竞标过的拍卖作为预测(当然首先要确认会员是否经常多次收藏或是竞标,结论是肯定的)。当然这样的拍卖有很多个,我们要设计一个打分函数,来给每一个候选拍卖打分,并且按分数从高到低排序,每个会员取最高的20个。

  那么首先,收藏过的拍卖和竞标过的拍卖的打分显然不同(因为评价时的权重不同)。我经过线下测试,最后发现分别给它们1分和4分最好。

  然后我们要考虑时间。这里主要有两个时间,分别是拍卖表中的CreateDate和收藏表竞标表各自的Date。正常判断,时间越近的拍卖,会员越有可能再一次收藏或是竞标。那么我们可以给它们一个和时间相关的权重,这个权重可以采用下面的形式

[公式]

简单测试了一下,α取0.5时比较好,β取1时比较好。

  这样的打分可能不止一个,因为用户可能既收藏过又竞标过。如果有多个分数,我们怎么合并这些分数呢?是取和,取范数和,还是取最大值呢?经过线下测试,取最大值效果最好,因此这里取最大值。

  这样我们得到了一些会员-拍卖对,及它们的分数。那么我们将它们排好序,每个会员取前20个就好。但是这个题目要求每个会员必须预测20个拍卖,如果有不足20个的怎么办?我就简单地随便选了20个拍卖用来补充。

  这个基线在线下的成绩大概是0.043。

3.2 删除

  然后我又发现收藏表竞标表中各有一个删除flag的字段。但实际上竞标表的这个字段都是1,可以忽略;收藏表也是绝大部分为1,不过有少量为0的记录。

  我们可以大致分析一下,显然会员在删除收藏之后才会重新收藏,因此我们只要选取删除flag为1的收藏记录就好。(这纯属事后诸葛,事实上我分别测试了全取、只取0、只取1之后,发现只取1最好,遂采用)

  这样改进了一下,成绩提升到0.046。





4. 提交

  至此我们大致完成了一个基线(我一般都是像这样开始做一场数据挖掘竞赛的,也就是边做边理解赛题)。虽然感觉每个地方都可以再改进改进,但也没有必要一次性做到完美,毕竟这场比赛还有很多天的时间。

  于是我们可以生成线上的结果并提交了。提交之后,成绩大概是
图4-1 成绩

图4-1 成绩

(第一次提交没有加时间权重;第二次提交补充了时间权重;第三次提交补充了上面提到的删除规则)
图4-2 排行榜

图4-2 排行榜

看排行榜便可以知道,这场比赛没有多少人认真做。看起来我选对了比赛。

  那么今天就做到这里。把代码上传到github上(链接https://ndearAuction/tree/mastehttps://github.com/sang1yu2/BrandearAuction/tree/master/1)上,然后就可以休息了。改天有时间的时候,可以继续做一做。





  最后背一背单词吧

會員(かいいん㉧)        会员
入札(にゅうさつ㉧)       竞标
お気に入り(おきにいり㉧)    喜欢的
追加(ついか㉧)         追加
手動(しゅど㉧)         手动
男女別(だんじょべつ)      男女别
参考(さんこう㉧)        参考
価格(かかく㉧)         价格
商品(しょうひん①)       商品
種別(しゅべつ①)        种别,类别
登録(とうろく㉧)        登录
削除(さくじょ①)        删除
金額(きんがく㉧)        金额
数量(すうりょう③)       数量