在给定完整历史记录的情况下计算球队赢得体育比赛的赔率的算法

2024-01-03

假设:

  • 团队永远不会改变
  • 球队的技术没有提高
  • 每个团队相对于其他团队的某些子集的表现的整个历史是已知的
  • 球队之间进行的比赛数量很多,但可能很少(每支球队都没有与其他球队交手)

例如:

我有一长串比赛结果,如下所示:

Team A beats Team B
Team B beats Team A
Team A beats Team B
Team C beats Team A
Team A beats Team C

Problem:

预测任何球队击败任何其他球队的正确投注赔率。

在上面的例子中,也许我们得出结论 A 应该在 66% 的情况下击败 B。这是基于直接观察并且非常简单。然而,找到 C 击败 B 的概率似乎更困难。他们从未一起打过球,但看起来很有可能是 C > B,有些信心不足。

我所做的研究:

我读过很多关于技巧游戏的不同排名系统的内容,例如国际象棋的 Elo 和 Glicko 评级系统。这些方法的不足是因为它们对所涉及的概率分布做出了假设。例如,Elo 的中心假设是每场比赛中每个棋手的国际象棋表现是一个正态分布的随机变量。然而,根据维基百科,还有其他分布更适合现有数据。

我不想假设分布。在我看来,手头有 10,000 多个比赛结果,我应该能够从证据中推断出分布(我不知道如何做到这一点),或者使用某种不关心的强化学习方案分布是什么。


您希望对一个概率(或多个概率)做出最佳估计,并随着更多数据的可用而不断更新您的估计。这就要求贝叶斯推理 https://en.wikipedia.org/wiki/Bayesian_inference!贝叶斯推理基于以下观察:A 和 B 两种情况同时出现的概率(分布)等于 A 出现情况的概率(分布)(假设 B 出现这种情况)乘以概率B就是这种情况。以公式形式表示:

P(A,B) = P(A|B)P(B)

and also

P(A,B) = P(B|A)P(A)

因此

P(A|B)P(B) = P(B|A)P(A)

将 P(B) 带到另一边,我们得到贝叶斯更新规则:

P(A|B)' = P(B|A)P(A)/P(B)

通常,A 代表您尝试估计的任何变量(例如“x 队击败 y 队”),而 B 代表您的观察结果(例如,球队之间获胜和失败的比赛的完整历史记录)。我写了素数(即引用P(A|B)') 表示等式的左边代表您信念的更新。为了使其具体化,您的newx 队击败 y 队的概率估计,鉴于迄今为止的所有观察结果,是进行这些观察的概率鉴于您之前的估计, 乘以你的previous估计,除以看到您所看到的观察结果的总体概率(即,不假设团队之间的相对实力;一支球队大部分时间获胜的可能性低于两支球队获胜频率相同的可能性)。

当前更新左侧的 P(A|B)' 成为下一次更新右侧的新 P(A)。随着更多数据的进入,您只需不断重复此操作即可。通常,为了尽可能不偏不倚,您会从 P(A) 的完全平坦分布开始。随着时间的推移,P(A) 将变得越来越确定,尽管该算法相当能够处理您试图估计的潜在概率的突然变化(例如,如果团队 x 突然变得更强,因为有新玩家加入)团队)。

好消息是贝叶斯推理与贝塔分布 http://en.wikipedia.org/wiki/Beta_distributionElKamina 也提到过。事实上,这两者经常结合在人工智能系统中,旨在学习概率分布。虽然 Beta 分布本身仍然是一种假设,但它的优点是它可以采取多种形式(包括完全平坦和极其尖峰),因此相对而言没有理由担心您选择的分布可能会影响您的结果。

一个坏消息是,除了 beta 分布之外,您仍然需要做出假设。例如,假设您有以下变量:

A: x 队击败 y 队

B:y 队击败 z 队

C:x 队击败 z 队

并且您可以从 x 和 y 之间的直接匹配以及 y 和 z 之间的匹配中获得观察结果,但不能从 x 和 z 之间的匹配中获得观察结果。估计 P(C) 的一种简单(虽然幼稚)的方法是假设传递性:

P(C) = P(A)P(B)

无论您的方法多么复杂,您都必须定义某种概率结构来处理数据中的差距和相互依赖性。无论您选择什么结构,它始终是一个假设。

另一个坏消息是这种方法非常复杂,我无法向您详细说明如何将其应用于您的问题。鉴于您需要一个相互依赖的概率结构(给定涉及 x、y 和 z 队的其他分布,x 队击败 y 队的概率),您可能需要使用贝叶斯网络 https://en.wikipedia.org/wiki/Bayesian_network或相关分析(例如马尔可夫随机场 https://en.wikipedia.org/wiki/Markov_random_field or 路径分析 https://en.wikipedia.org/wiki/Path_analysis_(statistics)).

我希望这有帮助。无论如何,请随时要求澄清。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在给定完整历史记录的情况下计算球队赢得体育比赛的赔率的算法 的相关文章

  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 统计Sweep算子的Python实现

    我正在学习一些用书中缺失的数据进行统计的技术 缺失数据的统计分析作者 利特尔和鲁宾 对于处理单调无响应数据来说 一个特别有用的函数是扫频操作员 详情见第 148 151 页 我知道 R 模块gmm有swp函数可以做到这一点 但我想知道是否有
  • 寻找距离原点最近的 100 颗恒星的算法

    首先让我提出正确的问题 问 有一个文件包含超过一百万个点 x y 每个点代表一颗星星 a b 处有一颗行星地球 现在 任务是构建一种算法 返回距离地球最近的 100 颗恒星 您的算法的时间和空间复杂度是多少 这个问题在各种采访中被问过很多次
  • 如何求小于给定数的最大2次方

    我需要找到小于给定数字的最大 2 次幂 我陷入困境 找不到任何解决方案 Code public class MathPow public int largestPowerOf2 int n int res 2 while res lt n
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 包围一组点的多边形

    我有一组 S 点 2D 由 x 和 y 定义 我想找到 P 包围该组所有点的最小 含义 具有最少数量的点 多边形 P 是S 有没有已知的算法来计算这个 我在这个领域缺乏文化令人惊讶 感谢您的帮助 对于这个问题有很多算法 它被称为 最小边界框
  • 生成所有多集大小为 n 的分区的算法

    我一直在试图找出一种方法来生成多重集的所有不同的大小为 n 的分区 但到目前为止却空手而归 首先让我展示一下我想要实现的目标 假设我们有一个输入向量uint32 t std vector
  • 快速约会算法

    我在一家咨询公司工作 大部分时间都在客户所在地 正因为如此 我很少见到同事 为了更好地了解彼此 我们将安排一个晚宴 会有很多小桌子 方便人们聊天 为了在聚会期间与尽可能多的不同的人交谈 每个人都必须每隔一段时间 比如每小时 换一张桌子 如何
  • 直接选择排序与交换选择排序

    有什么区别直接选择排序 vs 交换选择排序 今天我陷入了一场争论 我的教授在他的讲义中使用了这两个术语 维基百科和任何教科书或网站都会为您提供的选择排序就是他所说的 交换选择排序 我以前从未听说过 交换选择排序 这个术语 仅 选择排序 并且
  • GCC的sqrt()编译后如何工作?使用哪种root方法?牛顿-拉夫森?

    只是对标准感到好奇sqrt 来自 GCC 上的 math h 我自己编码的sqrt 使用牛顿拉夫森来做到这一点 是的 我知道 fsqrt 但CPU是如何做到这一点的呢 我无法调试硬件 现代 CPU 中的典型 div sqrt 硬件使用 2
  • 数学组合的完美最小哈希

    首先定义两个整数N and K where N gt K 两者都在编译时已知 例如 N 8 and K 3 接下来 定义一组整数 0 N or 1 N 如果这使答案更简单 并调用它S 例如 0 1 2 3 4 5 6 7 的子集数量S wi
  • 计算两点之间的最短路线

    过去几周我一直在开发一款多人 HTML5 游戏 使用nodejs and websockets 我已经被这个问题困扰了一段时间 想象一下 我用数组实现了这个平铺地图 如下所示 1 or 棕色瓷砖 路上有障碍物 玩家无法通过 0 or 绿色瓷
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 如何定义“f_n-chi-square”函数并使用“uniroot”求置信区间?

    I want to get a 95 confidence interval for the following question 我已经写了函数f n在我的 R 代码中 我首先使用 Normal 随机采样 100 个样本 然后定义函数h

随机推荐