【问题标题】:How to construct an implied prob. matrix of a Poisson distribution in python如何构造隐含概率。 python中泊松分布的矩阵
【发布时间】:2019-03-05 15:28:23
【问题描述】:

我的数据框有两列,其中 Team_A 和 Team_B 在比赛中进球的平均值。对于每一行,我想创建一个 3 x 3 矩阵,使用泊松分布覆盖所有可能的得分线。 这是我数据的前几行,

d = {'Team_A':[2.0160, 1.3421, 2.4654, 3.0281], 'Team_B':[0.0653, 1.5641, 4.0241, 1.2375]}
df = pd.DataFrame(data=d)

所以第一排的 A 队应该用score [2-0] (rounded to nearest integer) 赢得比赛。假设分数是独立的并且出现在一个区间内,并使用泊松分布的公式,

P(k wins in interval) = ((lambda**k) * exp(-lambda))/factorial(k)

在哪里k = [0,1,2,3]

Team A scores 0, 1, 2 and 3 goals with prob. [0.1332, 0.2685, 0.2707, 0.1819] respectively. 
And, Team B scores 0, 1, 2 and 3 goals with [0.5205, 0.3399, 0.1110, 0.0242] probabilities.

下表由上述概率的元素乘法构成。

For example the implied prob. of a 2-0 Team A win = 0.2707 * 0.5205 = 0.140899

                        Team_A Goals                    0       1       2      3
    Team_B Goals     Poisson for no.of_goal/Team    0.1332  0.2685  0.2707  0.1819
      0                     0.5205                  0.0693  0.1398  0.1409  0.0947
      1                     0.3399                  0.0453  0.0913  0.0920  0.0618
      2                     0.1110                  0.0148  0.0298  0.0030  0.0202
      3                     0.0242                  0.0032  0.0065  0.0065  0.0044

问题

我不知道如何编写一个循环遍历每一行并创建一个 3 x 3 矩阵的 Python 函数。

【问题讨论】:

    标签: python pandas statistics poisson


    【解决方案1】:

    我不知道如何编写一个循环遍历每一行的 Python 函数 并创建一个 3 x 3 矩阵。

    我知道您已经处理了问题的统计部分(例如从泊松分布计算概率),对吗?

    如果是这样,您可以使用itertools product 来创建您的表格。
    假设prob_aprob_b 是两个数组,分别包含团队 A 和团队 B 的概率。矩阵是这样构建的:

    from itertools import product
    import numpy as np
    
    prod_table = np.array([(i*j) for i, j in product(prob_b, prob_a)])
    prod_table.shape = (4, 4)
    

    现在您有了一个 4x4 矩阵,其中包含您需要的所有值,您可以将其转换回 pandas 数据框。
    在此表中,团队 A 概率是列索引,团队 B 概率是行索引(应该与您的示例匹配)。因此,要获得 pandas 数据框,您可以这样做:

    prob_df = pd.DataFrame(prod_table, index=prob_b, columns=prob_a)
    

    这就是您要查找的表格。

    【讨论】:

      【解决方案2】:

      我会将 numpy 用于简单的线性代数运算(例如,乘以小矩阵)。

      如果您已经拥有所需形状的数据框,则可以轻松地将其转换为 numpy.ndarray。

      https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy

      如果不是,您将要创建一个零数组,然后在正确的位置插入正确的元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多