【天池】穿衣搭配-第一赛季

最近阴差阳错地入了天池大数据比赛的坑,第一次参加这种比赛,收获还是不少的~在此记录一下~

麻麻我不会穿衣搭配

最初看到这个题目,第一感觉是好难啊,理解题目理解了好久,那么多数据集,组织形式都不一样,而且还有图像,都不知道如何下手,不知如何把这些数据组织起来。

好在袁老板和君哥跟我进行了初步的探讨,带我稍稍入了下门~让我知道了协同过滤、关联规则挖掘这些算法的存在。然后袁老板的由简入繁的思想一直影响着我整个比赛过程,不然按照我强迫症和懒癌晚期的性子来的话,肯定没法开始就放弃了。

拖了好久,看了好些资料才决定用python来写这个代码,到10月13日才正式开始敲代码来做这道题,而我还没学过python。幸好这个时候找到了姐姐和我玩这道题,于是我们先用搭配套餐划分了测试集和训练集,姐姐给力地完成了线下评测程序。

然后我们就开始各种摸索:

最初我们想到的是同一用户购买的商品之间有搭配关系,购买同一商品的用户购买的其他商品跟它可能也有关系;根据搭配套餐可以得到类别搭配关系和分词搭配关系。因此:

  1. 一方面用搭配套餐得到类别之间的搭配关系,然后直接用测试商品的类别找到对应类别的商品,取前200个。这种方法有很大的盲目性,折腾半天也只有0.009%左右。。。= =不忍直视
    另一方面,姐姐用买过某种商品的用户买的其他商品与之搭配,效果也不好。(当时可能脑子不好使,以为同一用户购买过的两种商品的搭配,不好实现。。。= =)

  2. 尝试加入分词特征,但是却一直往关键词提取上跑,用过tf-idf啥的都跑偏了。我们一直天真地以为是参数问题,最好突然就能蒙到一个参数让它提高一大截。。。事实证明还是想太多了

  3. 经过和袁老板讨论,我们决定尝试打分法,给分词之间的搭配度打分,然后用每个测试商品的分词和所有商品的分词对比打分,取得分最高的200个。费了很大劲,但是结果却只能上0.03%。

  4. 在我们在坑里越陷越深的时候,大神翔哥及时给我指明了一个方向,就是同一用户购买的两个商品之间是有搭配关系的~虽然其实按大神们的表述是:两个商品被同一个人购买的次数越大越搭配,但是其实应该是殊途同归的~可是我写出来的代码效果还是不理想,幸好我已经意识到调参是不能改变数量级的,得加新想法。于是我把加入到历史商品的候选集中,并设置为一个较大的评分,我们终于站上了3!

  5. 最后翔哥告诉我他发现了按照商品相似度排序就能达到4,加上搭配集作为筛选可以到6,我连夜实现了这个想法,却始终都只有1.5左右T^T。。。我只能两手准备,在之前的思路基础上,按相似度排序把不足200的商品补足,可以达到线下3.7。最终调了各种参数做到了线下3.8,线上4.13结束第一赛季。

大神带我飞

第一次做这种比赛,接触到这种数量级的数据,感觉真的很奇妙,现在回想起来,之前好长一阵时间都徘徊在0.01附近都不知道是咋回事,差点都要放弃。可是偶然看到阿杜自己一个人打比赛,在自己电脑上写下了“一定要坚持做天池”;论坛上天池师兄写的一定要坚持做完一次比赛;翔哥的鼓励和帮助。。。我觉得一定得踏踏实实做完一次才能不让自己后悔,别人都可以的事情我也能做得到。

而姐姐作为我的队友,感觉一开始也是抱着试一试玩一玩的心态的,可是后来越来越上心,我又找回了原来和队友一起努力的感觉。期间yc和qy的鼓励和帮忙给点子也着实给了我很多启发。真的是一种很奇妙的感觉。

关于天池比赛

通过这个比赛,虽然还只是第一赛季,虽然我只是个弱菜,但是还算认识了一些大神的id和他们的世界。虽然在大神的眼里,某些想法就是最简单的想法了,但是对于我这个数据挖掘的小菜来说,都是新鲜事物。后来根据 偏执狂小江 分享的详细思路,我又重新实现了一下,线下能达到5.1了,虽然大家都能达到6.2 T^T。

总结一下

1、仔细分析数据和分析的方法非常重要。若是不发现那个相似度的规律,怎么也不会用这种方法来做。不能先入为主地以为一些常识就是数据的规律。
2、脑洞要大,思路不能混乱。想法会很多,但是不能让他们交织在一起,越搞越乱。要敢想敢做。没有突破的时候要勇于尝试新想法。
3、词袋模型,TF-IDF向量,余弦相似性。