Hockeysiffrors expected goals modell

2023-09-03 | 8 minuters läsning

En av nyheterna för projektet Hockeysiffror den här säsongen är att jag har tagit fram en expected goals modell som förhoppningsvis kommer hjälpa oss att bättre utvärdera lagen i SHL och HA. I den här texten tänkte jag gå igenom vad modellen är, vad den inte är, dess styrkor och dess svagheter.

Det första man måste säga när man pratar om expected goals(xG) är att det inte finns någon standard eller fast definition av vad det är för något, men i grunden handlar det om att sätta ett värde på hur farligt ett avslut är. Hur man kommer fram till det här värdet skiljer sig dock åt från modell till modell, bland annat beroende på vad man har för data att tillgå, vilka tekniska förutsättningar man har och så vidare.

I NHL finns flera publika modeller, där dom mest kända (EvolvingHockey, MoneyPuck) använder skottdata och matar in diverse parametrar, som avstånd till målet, vinkel mot målet, tid sen förra skottet med mera i en machine learning(ML) modell där målet är att beräkna sannolikheten för att ett skott ska bli mål. Även för SHL har det funnits några publika modeller tidigare. Petter Carnbro, nu i Leksand, brukade tidigare posta skottkartor på twitter med xG värden efter matcherna och Erik Wilderoth, nu i Färjestad, hade en xG modell på sin tidigare sajt BetterThanAMonkey. Hur Petters modell fungerade vet jag inte men BTAM delade in rinken i ett antal rutor och räknade ut skottprocenten för varje ruta. Alltså en lite annan metod än tidigare nämnda modeller från NHL. Det finns även ”privata” modeller, den mest uppenbara med tanke på SHL och HA är givetvis Sportlogiqs. Exakt hur den är uppbyggd håller dom hemligt för sig själva men dom har den stora fördelen att förutom själva skotteventet även beräkna för passningar som leder fram till skottet, om skottet är screenat, om skytten är pressad, och liknande. Det är naturligtvis väldigt värdefull information som publika modeller inte har tillgång till.

Min modell är kraftigt inspirerad av dom publika NHL modellerna. Likt dom så använder jag en ML modell för att försöka förutse sannolikheten för att ett skott ska bli mål(givet en genomsnittlig skytt och en genomsnittlig målvakt). Både EvolvingHockey och MoneyPuck använder en modell av typen Gradient Boosting(eller iaf varianter av den) medan jag istället använder modelltypen logistic regression som inte är fullt lika precis men betydligt lättare att implementera och snabbare att köra vilket var argument som tilltalade mig. Det är möjligt att jag framöver kommer testa att istället använda någon annan modell men för tillfället känner jag mig nöjd med mitt val.

Underlaget för xG modellen är dom tre senaste säsongerna från SHL och den senaste från Hockeyallsvenskan. Alla straffar och skott tagna mot tom målbur är bortplockade. Följande parametrar för varje skott tas med i beräkning:

Det är viktigt att komma ihåg att kvalitet på skytten och målvakten inte tas med i beräkningen av xG. Modellen utgår ifrån att varje skytt och varje målvakt är en genomsnittlig spelare i ligan. Det här medför att vissa spelare kommer att över- eller underprestera sitt xG. Dom kommer till ett visst antal målchanser(xG) men sen bestämmer deras kvalitet som skytt om dom kommer göra fler eller färre mål än vad xG föreslår. Över kortare tidsperioder(eller över hela säsonger ibland, 52 matcher är trots allt inget gigantiskt sample-size) kan såklart även sämre skyttar överprestera sitt xG och vice versa för normalt skickliga skyttar. Men en genomsnittlig skytt kommer över tid att göra ungefär lika många mål som sitt xG, förutsett att modellen är någorlunda korrekt vill säga. Samma tänk kan appliceras på målvakter.

Utvärdering av modellen

Varför bryr vi oss då överhuvudtaget om xG och hur kan vi testa om modellen är värd att använda? Målskytte i hockey är väldigt känsligt för varians och därför kan det vara svårt att säga hur många mål ett lag eller en spelare kommer göra framöver baserat på det dom har gjort tidigare. Det här gäller speciellt om vi arbetar med ett litet sample size. Därav termer som ”Puck luck” och ”PDO bender”. Eftersom xG tar bort åtminstone delar av dom här faktorerna så har man sett att för att förutspå framtida mål så är xG ett bättre verktyg än mål. Så låt oss testa. Grafen nedan visar gjorda mål per timme och lag för dom två senaste säsongerna i SHL och den senaste i HA. Säsongerna är sen delade på hälften så att x-axeln består av första halvan av varje säsong och på y-axeln är den andra halvan av säsongen. På så sätt kan vi se sambandet mellan lagens gjorda mål första halvan av säsongen jämfört med andra halvan.

Korrelation mellan mål första halvan och andra halvan

r^2 är ett värde(mellan 0 och 1) på hur stor korrelationen mellan dom två axlarna är, det vill säga hur stort är sambandet mellan dom två. Vi kan se här att det finns ett samband mellan mål första halvan och andra halvan men det är inte så stort. Värt att nämna är väl också att en halv säsong, 26 matcher, inte är ett speciellt stort sample-size, men det är inte obetydligt och borde säga någonting.

En liknande graf men där vi istället tittar på xG.

Korrelation mellan xG första halvan av säsongen och andra halvan

Här ser vi att xG är betydligt mer stabilt över säsongen och att första halvan är en ganska bra indikator på hur ett lag kommer skapa chanser även andra halvan. Ett fullständigt samband hade vi inte räknat med eftersom lag byter spelare, ändrar taktik, sparkar tränare, får skador med mera.

Slutligen kan vi titta på sambandet mellan xG första halvan och gjorda mål andra halvan för att se om xG kan förutse framtida mål.

Korrelation mellan xG första halvan av säsongen och gjorda mål andra halvan

Vi ser att sambandet inte är jättestort men att det finns där och att det är större än för faktiska mål(den första grafen).

En intressant iakttagelse är att korrelationen xGF vs GF för senaste SHL säsongen är betydligt svagare än övriga säsonger. Om jag tittar på samma graf men med 22/23 säsongen för SHL bortplockad(dvs SHL 21/22 och HA 22/23) så är sambandet mellan xG första halvan och mål andra halvan mycket större med en r^2 på 0.3. Om det är en tillfällighet eller om det finns något bakomliggande till varför det är så är svårt att säga men det är värt att hålla ett öga på under säsongen.

Ett sista test jag vill göra är att se hur min modell ser ut om man jämför med en etablerad modell som sportlogiqs. Här tittar jag på senaste säsongen i SHL och HA och xGF% för respektive lag och modell.

Korrelation mellan Hockeysiffrors xGF% och sportlogiqs xGF%

Ett r^2 värde på 0.867 får ses som riktigt bra i sammanhanget och ett tecken på att min modell står sig relativt väl mot den rådande giganten på området. Vi ser att det finns några rejäla utstickare men att dom flesta punkterna är samlade kring trendlinjen. Om jag tar bort den största utstickaren i SHL respektive HA så blir r^2 värdet en bit över 0.9. Nu tycker jag dock inte att man bara ska strunta i utstickarna utan försöka analysera varför dom skiljer sig åt så att man kan göra bästa möjliga utvärdering. Möjliga orsaker kan vara skillnader i bakomliggande modeller, olika tillgång till data(passningar, screens osv.) som jag diskuterat tidigare eller automatisk vs manuell taggning, där sportlogiqs sker automatiserat medans officiella statistiken taggas manuellt och live vilket jag av egen erfarenhet vet är en riktigt utmanande uppgift. Det finns ganska enkla sätt som man kan justera för olikheter i taggning mellan rinkar och det är något som jag förmodligen kommer titta på framöver.

Användning

Nu har vi gått igenom en massa teknikaliteter och kan äntligen komma till det roliga, hur kan vi använda xG för att utvärdera hockey?

För närvarande kan vi titta på xG för och emot på lagnivå. Både för enskilda matcher och längre perioder. Tyvärr finns inte möjligheten att titta på on-ice xG för enskilda spelare men däremot har vi individuell xG. Det kan säga oss vilka spelare som kommer till flest chanser och i kombination med mål blir det också ett mått på skottkvalitet hos spelare. Med det sagt är det inte så att spelaren som överpresterar sitt xG mest är den bästa skytten. Ett exempel från HA förra säsongen: David Bernhardt och Alexander Anderberg gjorde 18 respektive 17 mål under spel när inget lag hade plockat sin målvakt. Båda hade också en skottprocent runt 10.5%. Men tittar man på xG så hade Bernhardt 11.2 och Anderberg 5.7 sett över säsongen. Båda spelarna överpresterade alltså sitt xG rejält men Bernhardt kom till betydligt fler chanser. Man skulle kunna tolka det som att Anderberg är en mycket bättre skytt än Bernhardt, men mer troligt i mina ögon är att Anderberg hade sitt livs säsong där puckarna studsade rätt. Bernhardt visade redan för två säsonger sedan att han är kapabel till liknande siffror. Nu ska båda spelarna spela i SHL under säsongen och jag förväntar mig inte att någon av dom kommer upp i samma målskörd som förra säsongen men kan Bernhardt fortsätta att komma till chanser i liknande utsträckning så ger jag honom högst chans av dom två att återupprepa fjolåret.

Ett väldigt användbart område för xG är också för att utvärdera målvakter. Hittills har man fått hålla tillgodo med skottprocent, visserligen med möjligheten att se hur stor andel av skotten som kommer från sektorn som hjälpmedel men med xG öppnas helt andra möjligheter att titta på en målvakts prestation i förhållande till arbetsbördan.

Som avslutning kan vi titta på lagen i SHL och HA och deras xGF% i lika styrka från förra säsongen. Håll tillgodo och på återhörande.

xGF% i SHL 22/23

xGF% i Hockeyallsvenskan 22/23