今年夏天,我想在一个一直困扰我的问题上测试我的运筹学技能。为什么我在在线每日幻想棒球方面如此糟糕?
如果您正在阅读本文,您可能知道我在说什么。我假设您是那种想要做一些研究的人,并且可能偶然发现了这篇数据科学博客文章,以寻找有关如何建立团队的技巧。
剧透警报:我有坏消息要告诉你。
在本博客中,您将了解在线梦幻体育运动为何如此困难。你会看到这些网络游戏提供商创造的经济是高效的,如果你想玩这个系统,你需要投入很多时间。
如果您不熟悉我所说的任何内容,那么本段适合您。根据一个匿名的在线赌博网站,在线幻想体育博彩是一个价值 480 亿美元的行业。在梦幻体育中,您选择当天参加比赛的球员,看看他们是否可以通过表现出色来赚钱。在棒球版本中,您选择一个由 8 名位置球员和 2 名投手组成的名单;而且他们的薪水不能超过联盟的工资帽。他们那天的表现决定了你的得分。您无需做任何事情,只需选择当天最好的球员。
很简单,对吧?
进入我的幻想团队,芝加哥红线骗子。是的,我确实为我的虚构团队建立了一个徽标。它对你是什么?
我们没那么好。我已经打了一个月左右,我的球队赔钱了。不是很多,我不会放一堆。但是,我不能辞掉我的日常工作;我想知道为什么。
为了理解为什么我在这个游戏中如此糟糕,我使用了我的决策分析工具包,并重新使用了久经考验的、真正的投资组合分析工具——蒙特卡洛模拟。模拟将帮助我了解人事决策中的风险——特别是考虑到我们低于联盟工资帽的限制,应该选择哪十名球员。
该模拟将使用从 2018 年到我们模拟的比赛前一天的美国职业棒球大联盟球员的真实结果。我通过从 MLB.com 的公共 API 获取所有活跃大联盟的每日统计数据来实现这一点。 (注意:数据工程超出了本博客的范围。)
收集统计数据后,我们必须收集参与我们有兴趣模拟的奇幻游戏的合格玩家。我通过与专门从事日常奇幻运动的在线体育博彩运营商的公共 API 进行交互来实现这一目标。 (注意:数据工程超出了本博客的范围。)
一旦收集了数据并确定了符合条件的球员,模拟就可以进行详尽的搜索,并通过新的约束传播进行修改,以找到表现最好的阵容;或者用户可以定义一个阵容并评估其性能。
模拟的目的是模拟由 2 名投手和 8 名位置球员组成的棒球比赛的潜在结果。这些结果使用在线提供商每日梦幻棒球比赛的经典规则进行评分。
有了可用的数据,我们就可以根据我们的真实数据对预期结果进行试验和建模。我们的目标是确定 8 个位置球员(代表棒球中的所有 8 个守备位置)和 2 个投手的幻想得分。我们的模型需要分别处理位置球员和投手。
对于位置球员,得分高度倾向于击球结果。对于位置球员,我们的重点将是模拟板的出现以及该板出现的相应潜在结果。
我们通过模拟进攻结果来实现这一点,我们只关心板的外观,因为这是玩家影响幻想游戏的唯一机会。我们的模拟流程图显示了我们的模型将如何继续识别车牌外观及其潜在结果。
球员在每场比赛中可以有各种各样的盘子出场,而且大多与他们出现在阵容中的顺序有关。排在后排的位置球员往往比排在前排(开始)的球员出场次数更少。我们的模型可以访问球员在历史上的出场次数,但无法访问他们在该比赛中出现的阵容中的顺序。这是我们模拟准确性的第一个限制。我根据历史结果而不是基于即将到来的比赛的击球顺序的实际预期来模拟板外观。
为了完成我们的模拟,我们通过使用随机数生成器从每个位置玩家的历史板外观的有序列表中选择板外观,从过去的游戏中经验性地采样板外观。
对于模拟的每场比赛,都会执行这种随机选择的板外观。这种方法对于匹配每个玩家的预期结果非常准确。
一旦模拟了盘子的外观,我们现在需要确定模型来确定哪些结果是可能的,并利用嵌套概率来选择代表玩家期望达到的结果。我们嵌套或链式概率的第一站是从玩家将盘子外观转变为进攻结果的能力中进行抽样。这个比率可以应用于模拟的盘子外观,以确定玩家在该游戏中取得了多少结果。
确定结果的数量后,我们可以使用玩家的历史结果来模拟玩家的能力。例如,如果我们模拟一个以击出大量本垒打而闻名的球员——我们会在他的历史表现中看到许多本垒打。
模拟将根据经验从玩家过去取得的结果分布中抽样。然后可以根据在线幻想提供者的记分卡对结果进行评分,并根据结果发生时的游戏状态进行进一步处理以模拟其他结果。
结果发生时的游戏状态也会影响我们的模拟必须建模的三个最终结果。这三个结果取决于玩家获得结果之前、期间和之后发生的事件。我们流程图的最后一层显示只有在某些结果发生时才有可能运行、被盗基地和 RBI。
此外,这三个事件的数量也会受到结果的影响。例如,如果一名球员击出本垒打,他们将获得至少一分打点和一分。由于这种结果,他们也没有机会获得被盗基地。我们在嵌套概率的附加层中对所有这些规则进行建模,并根据过去的玩家表现进行经验抽样,以模拟玩家正在执行的游戏状态。下面是其中一个结果的示例,建模运行。
定义完所有函数后,我现在可以为任何有足够样本表现的玩家模拟无限游戏。结果表现非常好。这是来自 LA Dodgers 的模拟 Trea Turner 示例。
在模拟中考虑了击球手,该模型还必须能够模拟投手的结果。投手的幻想得分只考虑他们面对的击球手的出局结果和结果。
对于投手,该模型从模拟投球局开始。这很重要,因为我自己的新颖研究表明,投更多局的投手往往表现更好(通过减少跑动、安打,并随着比赛的进行提高他们的胜率等)。
这种观察是直观的,因为经理不太可能将一名表现出色的强壮投手从比赛中拉出来而不是另一名投手。
为了完成我们的模拟,我们通过使用随机数生成器从为每个投手投球的历史局的有序列表中选择投球局,根据经验对过去比赛的投球局进行抽样。实现这一点的代码类似于击球手的板外观功能。对于模拟的每个游戏,都会执行此随机选择。这种方法对于匹配每个投手的预期投球局非常准确。
投手结果根据投球局数进行评估。正如我之前所指出的,我这样做是因为球员的表现会根据投手的比赛深度而有所不同。
我们关心三个结果——他们是胜利、跑动、安打、保送和三振出局的次数。我通过对与投球局相对应的投手数据子集进行经验采样来模拟这些结果。这个过程确保我们尊重投手的表现作为投球局的函数。
最终结果是每次运行后检查模拟状态。每当模拟投手投出 9 个完整的局时,该模型就会为完整的比赛打分。每当模拟投手投出 9 局完整的一局并且没有得分得分时,它就会将投手完全停赛归于该投手。最后,如果模拟产生的投手完成了所有 9 局并且没有安打,则模型将模拟投手归为无安打。
定义了我们所有的投球函数后,我现在可以用足够的样本数据为任何投手模拟无限的比赛。模拟数据与我们模拟的投手的实际 MLB 表现非常相似。
该项目的目标是评估为日常幻想体育游戏选择阵容的风险。为了实现这一点,我构建了一个函数,通过花费高达 50,000 美元的工资帽来随机填写一个有效的阵容,这在梦幻棒球供应商的经典规则中指定。我这样做了 500 次,以创建 500 个随机有效的阵容来模拟。有效阵容中的每位球员都经过了自己的模拟——每人模拟 50 场比赛。结果并不令人惊讶。
棒球比赛的结果似乎有很多随机性。
以下是根据点数与可变性的比率选择的前 10 名随机阵容的模拟性能摘要——如金融中的夏普比率。这些阵容代表了风险最小但最有效的选择。
这是相同的视觉效果,但选择了得分最高的有效阵容。
这些图像显示了具有强大性能的有效阵容,但所有这些阵容的预期值都非常接近。通过这种广泛的搜索,我们找不到明显优于所有其他阵容的阵容。我们的模拟成功地表明,没有大量详细的球员分析和评估的梦幻棒球比赛只是机会游戏。
总之,模拟是了解与决策相关的风险的非常有用的工具。它已成功应用于广泛的应用领域,包括产品设计、飞行员训练、排队研究以及现在的梦幻运动。
这个特定模拟的结果表明,短期内棒球是非常随机的。任何球员,在任何一天,都可能有一场好或坏的比赛。对决可以发挥作用,游戏情况会影响玩家的决定。
我们实现了对非常复杂的系统进行建模并获得非常真实的结果的能力。从长远来看,我希望我的模拟能够培养出与现实生活中表现相似的玩家。
可以改进模拟。例如,我们没有任何表现结果的游戏状态数据。我们根据过去的成就进行模拟,但改进的模型也会模拟游戏状态。这将是重要的下一步,因为其他玩家的决定和游戏状态会影响玩家产生结果的能力。此外,该模型无法模拟对决——这是奇幻运动中的一个关键话题。击球手的表现会因他们面对的投手或他们所在的球队而有所不同。
最后,我希望安装新的改进,考虑到对局,并逐步提高我评估短期球员表现的能力。
也在这里发布。