Skip to content

Getting Started

A quick tour of pyrf's core functionality.

Create a Distribution

from pyrf.models import Poisson, DixonColes

# Single team goal distribution
home = Poisson(lambda_=1.8)
away = Poisson(lambda_=1.2)

# Joint match model with Dixon-Coles adjustment
model = DixonColes(lambda_home=1.8, lambda_away=1.2, rho=-0.10)

Compute Probabilities

from pyrf.core import GoalGrid

grid = GoalGrid.default()
pmf = model.pmf(grid)  # probability mass function over all scorelines

Build a Quote

from pyrf.market import Quote, Market

quote = Quote.build(
    market=Market.TOTAL_GOAL,
    line=2.5,
    over_odds=1.90,
    under_odds=2.00,
)
print(quote.implied_margin())

Calculate Payoffs

from pyrf.payoffs import TotalGoals
from pyrf.market import QuotedLine

surface = TotalGoals(line=QuotedLine(value=2.5))
implied = surface.implied_odds(model, grid)
print(implied)

Calibrate from Market Data

model = DixonColes.calibrate(
    tg_quote=tg_quote,
    ah_quote=ah_quote,
    rho=-0.10,
)

Visualise

model.plot()  # heatmap of the joint PMF

For more detail, see the User Guide or explore the Marimo Notebooks.