查看原文
其他

听说,SuperMajor,血魔和兽王更配哦

数据冰山 数据冰山 2022-04-11

明眼人已经看出来了,文章的标题套用了德芙巧克力广告的句式。

为什么要借用这个句式?因为本文要讨论的是——在刚刚结束的「中国DOTA2超级锦标赛」上,职业队选择的英雄之间,是否存在有价值的关联关系?这些英雄组合的胜率如何?

然而尴尬的是,虽然德芙用心良苦,但大家似乎并不认为巧克力和音乐有什么关联...所以这并不是一个好类比,我们还是回到几乎所有人写关联分析都会引用的黄金案例——「啤酒」和「尿布」上来。这个比德芙广告流传更广的故事是这样的:

我们去沃尔玛超市会发现一个很有趣的现象:货架上啤酒与尿布竟然放在一起售卖,这看似毫不相关的东西,为什么会放在一起呢?
原来,在美国,妇女们经常会嘱咐她们的丈夫下班后给孩子买一点尿布回来,而丈夫在买完尿布后,大都会顺手买一瓶自己爱喝的啤酒。商家通过对大量交易记录进行分析,发现了这对神奇的组合。于是就毫不犹豫地将尿布与啤酒摆放在一起售卖,促进销售。

购物篮分析可以用下图简单说明:表格中有五笔订单,每笔订单包含若干商品(无先后顺序),比如第一笔订单表示小明同时购买了面包&牛奶。

对大量订单进行关联分析(association analysis),可以挖掘出隐藏在数据集中的联系,找出关联规则(association rules)。比如商家发现,购买了尿布的顾客中,大多数同时购买了啤酒,那么就可以得出关联规则:尿布-->啤酒(注意:箭头表示关联规则是有方向的,反过来买了啤酒的顾客,购买尿布的比例不高)。搞清楚了这些规则, 商家就能想办法掏空你的钱包。

那么问题来了,这和DOTA2有什么关系?有关系!仔细想一想,可以发现「顾客挑选商品」和「队伍挑选英雄」是有共同点的:

  1. 有很多购物篮,每个购物篮选择了若干商品,运用关联分析挖掘商品之间的关联规则。

  2. 有很多场比赛,每场比赛的两支队伍选择了若干英雄(注:DOTA2的比赛规则是两支队伍从100多名英雄中各选5名),运用关联分析挖掘英雄之间的关联规则。

接下来,本文尝试运用关联分析挖掘SuperMajor舞台上的英雄关联规则。(为了大多数读者的阅读体验,本文会多讲原理少聊技术。少部分想学技术的读者,可以参考放在GitHub上的代码)

选好题目之后,数据分析师要做的第一件事就是:获取数据源。针对这个题目,我们需要SuperMajor每场比赛的选人信息:

要如何寻找关联规则呢?我们不妨先跟着感觉走,采用最直接(很多人可能不自觉用过)的方法是:英雄组合出现的次数越多,关联关系越强。下图展示了SuperMajor出场次数在8次以上(包括8次)的英雄组合。其中「杰奇洛(俗称:双头龙)+娜迦海妖」(睡接冰)和「干扰者(俗称:萨尔)+死亡先知」(团战阵容?)的搭配都出现过11次,是本次比赛职业选手最喜欢的英雄组合。

衡量“出现次数”的专业术语叫Support(中文翻译:支持度),以关联规则{双头龙->娜迦海妖}为例,Support等于双头龙&娜迦海妖一起出现的次数/阵容总数,也就是11/206(比赛场数*2)=0.053,差不多十场比赛(二十套阵容)会出现一次。

那么问题来了——Support指标的阈值要怎么定?要同时出现多少次,我们才认为有关联关系?定Support阈值需要结合实际问题进行,高了低了都不好:

  • 如果Support阈值定的太高,通常只能筛选出由「常见英雄(上场次数多)」构成的关联规则,导致无法获得由「不常见英雄」组成的关联规则。比如上图选择的Support阈值为0.039,挖掘出的关联规则包含:兽王、术士、萨尔、死亡先知、拉希克等英雄。这些英雄全部是本次SuperMajor的热门英雄(下图展示了本届比赛上场次数排名top8的英雄)。而{小精灵(学名:艾欧)->火猫(学名:灰烬之灵)}(Support=0.019)这种不常见英雄构成的关联规则就丢失了。 




  • 如果Support阈值定的太低,会造成关联规则的泛滥。比如将Support阈值定为0.015,会得到150多个关联规则,基本上常见英雄搭配任意一名其他英雄,都能够形成关联规则,显然也不好。

看来只靠Support指标是不行的,我们需要更多指标来衡量关联规则的优劣,比如Confidence(中文翻译:置信度)。Confidence本质上是一个条件概率,表示关联规则{X->Y}选择了X时后,再选择Y的概率P(Y|X)(可以想象一下:队友选了发条,影魔王就开心了~)。给大家看两张图就明白了。

先看第一张图——「兽王」协作英雄。兽王是本届SuperMajor上场次数最多的英雄(高达42次),和53名英雄做过队友。其中合作次数最多的是术士,兽王&术士的组合一共出现过10次,计算{兽王->术士}关联规则的Confidence为10/42=23.8%(注:Confidence的计算规则不满足对称性,{术士->兽王}关联规则的Confidence为35.7%。但两者的Support值相等。)

再看小精灵的英雄协作图,小精灵一共出场6次,其中有4次搭配了火猫。所以{小精灵->火猫}关联规则的Confidence为4/6=66.7%,非常高(选了小精灵,大概率要配火猫)。

到现在为止,我们介绍了两个指标——Support和Confidence,从不同的角度衡量关联规则的优劣。那么,有了这两个指标是不是就高忱无忧了呢?很遗憾,并不是。用于评价关联规则的客观指标还有很多,比如:lift、leverage、conviction等等。考虑到阅读体验,就不多说了,感兴趣的可以阅读《Association Analysis: Basic Concepts and Algorithms》

另外,更重要的是,除了客观指标,在进行关联分析时,还需要了解数据集所处行业的领域知识(这就是万分弹幕大神厉害的地方了)。

最后说结论:本文选择Support阈值为0.015、Confidence阈值为0.4、lift阈值为1.2对SuperMajor的比赛进行挖掘,得到英雄关联规则如下(顺手加了胜率)。

结合出场次数、Confidence、胜率三个最重要的指标,发现:

  • {血魔-->兽王}:上场次数8次,Confidence为44.4%(选了血魔之后有44.4%的几率拿出兽王),胜率高达87.5%。同理还有{艾欧-->灰烬之灵}、{孽主-->祸乱之源}等,都是本次SuperMajor非常成功的热门组合。

     


  • 兽王虽然本次胜率较高(55%),但也有很多英雄不太适合搭配兽王,比如:{圣堂刺客-->兽王}的胜率是25%,{圣堂刺客-->娜迦海妖}的胜率是75%。(有没有万分大神在评论中解释一下~)

 

写到这里,文章就结束了,希望能给不熟悉「关联分析」的朋友一点帮助。


几点说明:

  1. 关联分析需要大量数据样本(几万场比赛不嫌多),本文为了方便描述,只选取了SuperMajor的100多场比赛作为数据集。后续如果有空,考虑用天梯公开比赛作为数据源再跑一次,帮助大家上分~

  2. 虽然本文只用了包含两名英雄的关联规则作为例子,但关联规则是可以包含任意多名英雄的。比如:{影魔&复仇之魂->兽王}、{兽王&复仇之魂->影魔}等等。

特别鸣谢:何求知

点击查看历史文章,揭开冰山水面下更多的数据秘密!


知乎专栏:数据冰山

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存