Resultater av Eliteserien 2019 - hvem kom nærmest?

Da var Eliteserien over for i år. Hvordan gikk det med tippinga fra mars? Da bestemte jeg for å legge gjennomsnittet av oddssidenes tipping og avisenes ekspertkommentarer til grunn..

Eivind Hageberg https://suppe-og-analyse.netlify.app
2019-12-14

Hvordan ser dette ut opp i mot resultatet? Hvordan ble tabellen til slutt? Jo slik:

kable(arrange(select(df, Lag, Resultat, MinPrognose = Prognose), Resultat)) 
Lag Resultat MinPrognose
Molde 1 3.6
Bodø/Glimt 2 10.6
Rosenborg 3 5.0
Odd 4 8.2
Viking 5 39.8
Kristiansund BK 6 7.8
Haugesund 7 8.0
Stabæk 8 34.0
Brann 9 9.0
Vålerenga 10 5.2
Strømsgodset 11 27.2
Sarpsborg 08 12 15.6
Mjøndalen 13 39.0
Lillestrøm 14 8.4
Tromsø 15 28.2
Ranheim 16 33.6

Som vi ser av tabellen: ikke veldig nærme - men heller ikke helt tilfeldig.

Hvordan ser dette ut i forhold til de forskjellige prognosene?

temp = gather(df, ID, prognose, Nettavisen:Prognose) %>%
  mutate(type = ifelse(ID == "Resultat", "Resultat", "Prognose"))

ggplot() + 
  geom_count(data = filter(temp, type == "Prognose"), aes(x = prognose, y = Lag), colour = "grey") +
  geom_point(data = filter(temp, type == "Resultat"), aes(x = prognose, y = Lag), colour = "black") +
  geom_point(data = filter(temp, ID == "Prognose"), aes(x = prognose, y = Lag), colour = "red") +
  labs(x = "Plassering", y = "Lag", colour = "Prognose eller resultat?")

Hvem er nærmest? Vi bruker RMSE som mål, den gir større straff til store feil:

#RMSE
rmse <- function(feil){
    sqrt(mean(feil^2))
}

temp = data.frame(ID = as.character(), rmse = as.numeric(), stringsAsFactors = FALSE)

feil = df$Resultat - df$Nettavisen
temp = bind_rows(temp, data.frame(ID = "Nettavisen", rmse = rmse(feil), stringsAsFactors = FALSE))
feil = df$Resultat - df$Oddschecker
temp = bind_rows(temp, data.frame(ID = "Oddschecker", rmse = rmse(feil), stringsAsFactors = FALSE))
feil = df$Resultat - df$Dagsavisen
temp = bind_rows(temp, data.frame(ID = "Dagsavisen", rmse = rmse(feil), stringsAsFactors = FALSE))
feil = df$Resultat - df$Dagbladet
temp = bind_rows(temp, data.frame(ID = "Dagbladet", rmse = rmse(feil), stringsAsFactors = FALSE))
feil = df$Resultat - df$Aftenposten
temp = bind_rows(temp, data.frame(ID = "Aftenposten", rmse = rmse(feil), stringsAsFactors = FALSE))
feil = df$Resultat - df$Prognose
temp = bind_rows(temp, data.frame(ID = "MinPrognose", rmse = rmse(feil), stringsAsFactors = FALSE))

kable(arrange(temp, rmse))
ID rmse
Dagsavisen 4.663690
Dagbladet 5.267827
Oddschecker 5.408327
Nettavisen 5.488625
MinPrognose 14.755169
Aftenposten 67.433300

Aftenposten var den beste ekspertpanelet her, fulgt av Dagsavisen. Dagbladet, Oddsen og Nettavisen gjør det alle dårligere. Men forskjellene er ikke veldig store.