When trying to to Bayesian interference to estimate probability, we can use Beta distribution as a prior. Below are some steps to calculate it.

From the Data Science from Scratch book.

import math as m


$f(x, \alpha, \beta) = x^{\alpha - 1} (1 - x)^{\beta - 1} \frac {1} {\text{B}(\alpha, \beta)}$

where

$\text{B} = \Gamma(\alpha) \Gamma(\beta) \frac{1} {\Gamma(\alpha + \beta)}$

where

$\Gamma(n)$ is the Gamma function which, for positive integers is

$\Gamma(n) = (n - 1)!$

def B(alpha: float, beta: float) -> float:
"This scales the parameters between 0 and 1"
return m.gamma(alpha) * m.gamma(beta) / m.gamma(alpha + beta)

def beta_pdf(x: float, alpha: float, beta:float) -> float:
if x <= 0 or x >=1: return 0

return x ** (alpha - 1) * (1 - x) ** (beta - 1) / B(alpha, beta)

import numpy as np
import pandas as pd
import altair as alt

df = pd.DataFrame()

Beta_combinations = [(1, 1), (10, 10), (4, 16), (16, 4), (30, 30)]

for Beta in Beta_combinations:
alpha, beta = Beta
df_B = pd.DataFrame()
df_B['x'] = pd.Series(np.arange(0.01, 1, .01))
df_B['y'] = df_B['x'].apply(lambda x: beta_pdf(x, alpha, beta))
df_B['Beta'] = f'({alpha}, {beta})'

df = pd.concat([df, df_B])


The distribution centers around $\alpha \frac{1} {\alpha + \beta}$

• Beta(1, 1) is the uniform distribution in [1, 1]
• When alpha is greater than beta the distribution is skewed to the left (and respectively, in the opposite case)
• The greater alpha and beta are the 'tighter' is the distribution
alt.Chart(df).mark_line().encode(alt.X('x:Q'), alt.Y('y:Q'), alt.Color('Beta'), tooltip=['x', 'y', 'Beta'], strokeDash='Beta').properties(width=600)