# Elo Model for Vex Competitions

I’ve been thinking recently about how the Elo system could be applied to VEX.
Elo suffers some disadvantages in VEX, mostly a small sample size and the fact that the alliance system makes it difficult to attribute wins to a specific team, and I couldn’t figure out to get past those.
So I just made a model anyway.
It takes a match SKU, and will calculate the Elo rankings for every team that has played a match so far.
It basically uses the standard Elo formula, with a few special changes:
The K-factor is 32.
Elo changes are calculated per alliance and distributed among teams based on a team’s proportion of the total alliance Elo rating.
The margin of victory affects the K factor so that large victories are worth more than small ones.

I have no real idea as to how useful this is, but please feel free to look at it yourself, if only for some cool numbers to stare at.

This has not been tested at an event in progress, because I couldn’t find any that were running when I made it.

Can someone explain to me what Elo is?

It’s basically a ranking system designed for chess players, but it’s being used everywhere. For example, fivethirtyeight.com uses it as the base for its NBA, MLB, and NFL predictions. Your Elo rating is used to calculate your chance of winning a given match. If you overperform your chances, your rating goes up, and if you underperform, your rating goes down. If you overperform by a lot, like if you win an upset victory against a much higher ranked team, your rating goes up a lot. But if you beat a team you were supposed to beat, i.e, a team ranked lower than you, your rating barely moves. It also works the opposte way, where if you get beaten by a team considered worse than you, your rating plummets. Elo is also zero-sum, meaning that if your rating goes up, your opponent’s goes down by the same amount. Now, in VEX, alliances have matches, not teams, so I add together each team’s Elo to get the total alliance Elo, which I then use for the calculation.

Do we have to have Visual Studio to see it or have you/are you going to release a build of it?

Should have made this more clear, but on GitHub, builds are under the releases section of a repo. The releases for this are at: https://github.com/MadDoctor5813/VexElo/releases

Oh, duh that’s my bad

You mentioned large margin victories being worth more than small margin victories, which in starstruck is surely an indication of an easy game against worse opposition, due to the back and forth nature of the game. This would therefore do the opposite of what the ELO system is meant to accomplish, by rewarding teams for easier matches.

I don’t believe that’s too much of a problem. In the scenario you describe, a strong team beating up on a weak team, the weak team’s Elo score should be much lower than the strong team’s. This should limit any potential gains. The margin of victory adjustment helps in the beginning where everyone is at 1500. If you win by 50 points in your first match, it stands to reason that you are a good team.

The small sample size is the biggest issue. Elo rankings from within a single event would have a significant margin of error. However, Elo rankings across an entire season could be better. That said, lack of connectivity among the data set would present similar issues. In terms of the attribution to a specific team, there are a few ways to model this. I’d consider experimenting with different models and modifications of k-factors to see where it leads you. I’ve done some research into Elo rankings for alliance play in the past; there’s actually been some work done in this field when it comes to multiplayer video games that you could apply to your model.

Our team has started to experiment with one. We run it for our region and it works ok, putting good teams high and lower teams low. However, as Karthik says it doesn’t work with only one tournament, you need a few for it to start working ( a team that was undefeated because they didn’t play hard matches in the elim rounds ended up really high, despite the fact they were eliminated before finals). In addition, teams can change very significantly from event to event (our skills scores doubled in one case), which sorta upsets the system. We have it set up so that the better team on the alliance is given 66% of the blame for the match and the worse 33%, to try and prevent teams that got carried from getting too high.

I wish we had some way of getting individual scores per team in an alliance, then we could properly allocate Elo. I think your 66% and 33% system is a good idea, but I would prefer something less arbitrary.

I’ve been thinking about how this could be extended to the whole season, but something will be needed to deal with how robots can dramatically change between matches. I know 538 moves ratings some percentage back towards the average of 1500 between seasons.

It would be cool if this pulled data from all events a team has attended in a season and could be used to predict future events that have posted their team lists.

This is on the wishlist. If I do it, it’ll probably become a website, because nobody wants to download a whole .exe just for this. Time to learn web dev, I guess.

I would download the .exe for the final product.

Even if you would, I feel the average person wouldn’t be bothered to download a full .NET program for what is basically a glorified table. Besides, I need an excuse to learn web dev anyway.

This is really… mathy. I sort of skimmed it, and I have no idea what’s going on. Maybe after I finish high school, or university, or my 40s, I’ll understand it, but it really is over my head right now.

+1 to this thread, I’ll definitely be watching this because I am a numbers person.

Ok, the website is taking shape. Sort of. Who knows if this is reasonable Django code, but it seems to work. Currently it saves match data from the whole season into a database (taking quite some time to do it, if anyone has any ideas to speed that up, I’d glad to hear it.) Next up, ranking people and predicting matches. And then eventually, deploying it, whatever black magic that involves.

How can I run the website version of it on Visual Studio? I’ve got the original one working fine.

Speaking of Multiplayer Video Games, World of Tanks uses the Elo system for its competitions and ranking the various players on the home matches. I don’t know much about it, but based on the mobile companion, the Elo rating works on several components of a game. For example, the Elo system for World of Tanks takes into the account for shell pen, amount of damage dealt, damage received, win ratio, loss ratio, xp earned, and a lot more factors.

For Vex competitions, the rating would consider the win ratio, loss ratio, points scored, avg points per game, tournaments won, tournaments lost, and any other factors that are in each match. There’s a very long equation that comes into play that I don’t remember off the top of my head (for obvious reasons) and a lot more things.

Example Elo graph: