前言
大家常常说程序员是个非常严肃的职业哈,但是其实呢,我们也在用自己的方式表达浪漫。大家如果在Kaggle上搜索“Santa”,就能够发现Kaggle上每年都有和Santa有关的数据分析比赛:比如帮助Santa分配礼物,帮助Santa找合适的路线,如何用一个残次的雪橇怎么给孩子们送礼物等等。所以,当以后大家收到圣诞节礼物的时候,请大家记得程序员同学们的默默付出hhhh。
这个系列blog是回顾近几年的Kaggle上关于Santa主题的一系列竞赛题目。
一、题目简介
1.题目内容
比赛题目为Santa Gift Matching Challenge,比赛时间是2018年。题目内容是提出一个礼物分配算法使得孩子们的整体满意度(happiness)最高。数据中,每个孩子有100种想要的礼物,一共有1,000,000个孩子,Santa一共有1000种礼物,每个礼物都有1000想给礼物的孩子(好孩子)。
所以,这是一个双向匹配的问题,既要保证孩子们的happiness高(孩子得到想要的礼物),也要保证礼物的happiness高(礼物送到它喜欢的孩子那里)。
2.数据与约束
在比赛中,有1,000,000个孩子,每个孩子有自己的100个礼物偏好列表;有1000个礼物,并且每个礼物期望送达的1000个孩子列表。所以我们需要把给每一个孩子一个礼物,使得孩子和礼物的happiness最高。对于孩子来说,这个礼物在其wish list排名越高越好,对于礼物和Santa来说,这个孩子在该礼物的好孩子排位越高越好。
这里有一些细节问题,
其中,0,5%的孩子是三胞胎,三胞胎的礼物需要相同;4%的孩子是双胞胎,双胞胎的礼物需要相同。每个礼物有1000件,所以1000种礼物*1000件 = 1,000,000,与孩子数目一致,能够保证每个孩子一件礼物。
3.评估方案
评估方案如下,采用归一化的
Average Normalized Happiness (ANH) = (AverageNormalizedChildHappiness (ANCH) ) ^ 3 + (AverageNormalizedSantaHappiness (ANSH) ) ^ 3
A N C H = 1 n c ∑ i = 0 n c − 1 C h i l d H a p p i n e s s M a x C h i l d H a p p i n e s s ,