圣诞老公公的礼物名单

浏览: 2080

“Jingle bells, jingle bells 

Jingle all the way

Oh what fun it is to ride in a one horseopen sleigh

hey~”

叮叮叮,又到了一年一度的圣诞节,可爱的大家都在朋友圈@微信团队,求一顶萌萌哒圣诞帽~那么大家心仪的圣诞礼物是神马呢?然鹅,现在越来越多滴小盆友,可以选择的礼物种类也越来越多,真的让圣诞老公公非常头疼啊!

image.png

这个时候,一个善解人意的小精灵告诉圣诞老人,也许这样一群人能够帮到你!当当当,为了帮助圣诞老人和小朋友们过一个愉快的节日,挑选出大家都满意的圣诞礼物,最近Kaggle的数据分析师们都纷纷献计献策,快来一起看看吧!

问题描述

  • 数据描述:

在kaggle的这个挑战里,我们需要完成一个礼物配对的算法,使大家的快乐值最大化。在圣诞老人给我们的数据中,每一个小孩子都有10个想要的礼物。但是,由于每类礼物的数量有限,圣诞老人在分发礼物时每个礼物都有1000最想要给到的小盆友。如何同时最大化地满足圣诞老人和小朋友们的想法,这是一个问题。并且,在小朋友中,有4000个小朋友是双胞胎,应家长们的强烈要求,双胞胎小朋友的礼物必须一致(别问我为神马,请大家回忆一下和兄弟姐妹争礼物的场面吧)。

  • 评价标准:

那么,究竟神马叫做快乐最大化呢?作为数据分析师,当然是用数据来说话啦!我们的目标就是使下面的快乐值最大化:

        Average Normalized Happiness (ANH) =

             AverageNormalizedChildHappiness (ANCH) + 

              AverageNormalizedSantaHappiness (ANSH)


根据这个公式,平均快乐值等于小朋友的平均快乐值加上圣诞老人的评价快乐值。那么,怎么分别得到两个平均快乐值呢?

image.png

是小朋友的总数,是礼物的总数。

最大的快乐值:

  MaxChildHappiness= len(ChildWishList) * 2,

        MaxGiftHappiness= len(GiftGoodKidsList) * 2.

         ChildHappiness = 2 * GiftOrder

数据分析

我们手中有两组数据,一组是小朋友的礼物名单,另一个就来自于圣诞老人喜好。

在小朋友的礼物名单里,总共有1,000,000 个小朋友,每个小朋友有10个想要的礼物。

image.png

前4000名小朋友是双胞胎,每对双胞胎的序号是相连的,可以看到的是,即使是双胞胎,两个小朋友喜欢的礼物也大不相同,只有大概10%的双胞胎想要的礼物相同,真的是非常让人伤脑筋。

 在圣诞老人的礼物名单里,因为每件礼物的数量是有限的,所以他希望可以优先满足上一年表现很好的乖孩子,他在名单按序号列出了优先级名单。通过分析发现,并不是所有的孩子都出现在了圣诞老人的名单里,这些小朋友的礼物又该怎么分配呢?

image.png算法分析

在分析了数据之后,满足双方的条件真的不容易。我不禁想问,假如只按照小朋友的名单或只按照圣诞老人的名单,最后的快乐值如何呢?

    • 小朋友名单优先    

    首先,我们将双胞胎分为一组,根据ID的先后次序判断长幼,按照哥哥或姐姐的喜好给双胞胎分配礼物。(别问我为什么,我姐姐叫我去给她洗衣服了==)

image.png

对于其他小孩,根据他们的礼物名单顺序分配礼物,只要礼物还有剩余,就尽量满足他们的喜好

image.png


    对于每个小孩,当他们礼物名单里最喜欢的10个礼物都没有剩余的时候,这时就在剩余的礼物里选取剩余最多的礼物分配给他们。


    • 圣诞老人名单优先

    当我们只考虑圣诞老人的名单时,我们根据圣诞老人的优先级来分配礼物。通过遍历1000个礼物的名单,只要小朋友的名字出现在这个礼物的序列里,就将这个礼物分配给这个小朋友。同样,对于双胞胎,也是按照哥哥姐姐的喜好来配给

image.png

因为并不是所以的小朋友名字都出现在圣诞老人的名单里,因此在遍历一遍圣诞老人的礼物名单之后,我们需要再次给这些小朋友分配礼物。同样,也是选择剩余最多的礼物分配给他们。

image.png

结果分析:

根据评分要求,我们需要计算出平均快乐值。

image.png

计算出的得分如下表,

image.png

看到这个结果,大家想到什么了呢?

小朋友优先算法的最终得分远远高于圣诞老人优先算法,在仅仅考虑小朋友愿望的时候,得到的总快乐值就高达0.816。相反,假如我们只考虑圣诞老人的礼物名单,而不顾小朋友的感受,得到的总快乐值不足0.24。这难道不能说明小朋友的愿望其实才是最重要的么?

不得不让我联想到,当我们在给对方选择礼物时,是不是应该多多考虑对方想要什么,而不是自己的孤立想法。当收礼物的人感到真正快乐时,双方都会得到真正的满足,大家好才是真的好,不是么?

所以,圣诞老公公你知道怎么分配礼物了么?以及想要送礼物的你?知道怎么选择礼物了么?

  • Reference:

https://www.kaggle.com/junyawatanabe/overviewing-dataset

https://www.kaggle.com/lemonkoala/greedy-v2  

推荐 2
本文由 数据取经团 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

不错不错

要回复文章请先登录注册