Finnish basketball predictions

Win chances for every men's Korisliiga, I divisioona and southern II divisioona game, from team ratings that update after each result. A side project next to the NBA model, built on the federation's own results.

Pre-gamepredicted before the game and storedBacktestscored afterwards, on games the model was not trained on

Python, pandas, Fly.io. Updated every morning around 11:00. The ratings learn from results only; rosters are not used yet.

Games

next three weeks

Loading the Finnish fixtures.

Pre-game or backtest

what each number is

A pre-game number comes from predictions stored before each game. A backtest scores the model afterwards on games it was not tuned on. Pre-game logging started on 16 October 2026, so most of the record is still a backtest.

  • Pre-game
    Logged predictions, from 16 October 2026

    Each game is stored twice and never changed: an early prediction when it first appears in the schedule, up to three weeks ahead, and a final one on the morning of the game, with every result up to then. The record uses the latest one stored before tip-off. Game-day predictions started on 19 October.

  • Backtest
    This season replayed

    Each morning the current model runs through this season's games in order. Every chance uses only games played before it, but the settings and code are today's, so it is not what the page showed on the day.

  • Backtest
    2025-26 accuracy

    Settings tuned on earlier seasons, then scored once on 2025-26.

  • Backtest
    Modelling decisions

    Every variant scored on 2025-26 after tuning on earlier seasons.

How it works

  • One rating per team

    Each team's rating is its expected point margin against an average team. Before a game, home rating minus away rating plus a home-court bonus gives the expected margin, and that turns into a win chance. After the game both ratings move by a fixed share of the surprise, the gap between the expected and the actual margin: a fixed share of it in Korisliiga and I divisioona, a fixed share in II divisioona.

    Opponent strength is built in, because the expected margin already includes it: losing by 8 to a team expected to win by 15 raises a rating. One limit: a game is judged by the ratings at the time. A heavy loss to an opponent that only later turns out to be strong is not revisited.

  • Two pools

    Korisliiga and both I divisioona groups share one pool, so a promoted team keeps the rating it earned. The II divisioona is its own pool: it learns from every region, and this page shows the southern group.

  • Over the summer

    Ratings shrink part of the way back to the level of the league a team last played in, because rosters change between seasons. That shrink is one of the settings the tuning chose.

Modelling decisions

backtests on 2025-26

The code

open source

The data pipeline, models and tests are in the finland folder of the Predicting-Nba repository. There are no betting prices for these leagues in any open data source yet, so nothing here is compared with a bookmaker.