published: Feb. 26, 2019, 8:40 p.m.
MMA math is basically the transitive property applied to MMA. Its the idea that if some fighter A beats fighter B and then B beats fighter C, then A should be able to beat C as well. It is definitely a bad way to determine if A is better than C. For one, there are many counter examples, and you can use it to show that pretty much any fighter can beat another regardless of skill or weight classes. "Experts" and "people who know things" would say that this is method of looking at purely who beat who is a bad way to judge fighters, and instead the skill sets of individual fighter should be compared. But what would happen if you did not take any skill or statistics into account and ranked fighters based off of solely who beat who? And what would happen if someone was dumb enough to waste their free time creating a ranking system based off a method that everyone agrees is terrible and inaccurate? Well I intend to answer both of those questions.
For this analysis I ranked every fighter in a weight class at the present time based off of their record against the other fighters who are currently in that weight class. So this system ignores all fights that have happened against people who have moved to a different weight class or are no longer in the UFC. However if two people fought at some point when they were not in the UFC or in a different weight class, but are now currently in the same weight class, then the fight will count.
I got the complete list of active UFC fighters from Bloody Elbow. I also used used the Bloody Elbow rankings for each weight class to compare with my rankings. I got the win/losses of each fighter from Sherdog.
In order to rank them we need to quantify the win/losses of everyone so that each fighter has a single number, or a "score", and then we can sort them by this score to obtain a ranking where the highest score is the highest rank. Now in order to get this concept of a list of fighters with the wins and losses associated with them into a numerical ranking ,we must find a way to frame it mathematically. This can be done by thinking about the problem as a graph. In math a graph is a set of objects (referred to as nodes) that are connected to each other in some way. The connections are called edges. In this case each fighter in a weight class would be a node, and a fight that occurred between two nodes will connect them with an edge. The winner/loser information of each fight is encoded into the edge by giving it a direction, the edge will start from the node that was the loser in the fight and point to the winner node.
Now once we have the data and a way to represent our problem mathematically we can use algorithms made by smart people to get what we want. The two ones that I've chosen to use are the local reaching centrality and a type of prestige ranking.
The local reaching centrality of a node is the proportion of all nodes in the graph that can be reached from that node to the total amount of nodes. This measurement was designed to determine how hierarchical a certain network is. We could think of each weight class as a hierarchy were the top ranked fighters are at the top. Then by sorting the fighters by the hierarchy score calculated for each node by the local reaching centrality algorithm and we get a ranking for that weight class.
To visualize the local reaching centrality look at the graph shown below for the self proclaimed best fisherman in MMA, UFC lightweight Gregor Gillespie. This graph is a subgraph of the lightweight one, it only shows the fighters that Gregor would beat if using MMA math. The function used to make this graph is the same one that determines which nodes turn red when a fighter's name is pressed in my rankings. So for Gregor all three of the fighters he beat are added to his graph, and then the two fighters who were beaten by fighters he beat are also added.
At the time that I created this graph Gregor had a local reaching centrality of 0.061728. The local reaching centrality is the proportion of nodes that Gregor can reach compared to the total amount of nodes. Not including Gregor there were 81 nodes at the time in the lightweight graph, and not including Gregor there are 5 nodes in the graph above that can be reached by Gregor. So 5/81 = 0.061728.
Weighted:
The graph above is unweighted so each of Gregor's wins are scored exactly the same. This didn't seem quite right to me. For one I would think that if two fighters fought each other twice and each won one fight, then the one that won more recently should be higher ranked. Also if someone beat a fighter currently at the top of their division back when they were young and just starting their career, it would make sense that that win shouldn't be considered as meaningful as if they had a recent victory against that same top ranked fighter when they were in there prime. For example, Court McGee beat Robert Whittaker in 2012. That was an impressive win, but it was in 2012 when Whittaker was still in his early 20s and trying to fight at Welterweight. It would have been much more impressive if he had beaten 2019 Whittaker who's the Middleweight champion.
In order to address this I introduced just a kiss subjectivity and added weights to each edge. A weight is a number assigned to each edge. I made weights by having some constant factor like 0.8, and then raising that number to the power of the number of fights that have past for the loser since they lost. So if someone beat someone and that was the loser's most recent fight the weight would be 0.80=1. If that loss was the loser had two fights since that loss the weight would be 0.82=0.64. So the strength of a connection from the winner to the loser will be lower based off of how many fights have passed since the loser lost. Below is the same Gregor Gillespie graph but with weights added to the edges.
Calculating local reaching centrality with weights is a little more complicated. The difference between it is that the numerator is no longer just the amount of nodes in the graph above, but the sum of the weight of the edges to get to a node divided by amount of edges to the node. So for Gregor the connection to Jason and Vince would be 1.0/1, To Joaquim it would be 2.0/2, and for Christos it is 1.0225/2. The algorithm uses the shortest path so even though there are two different ways to connect Gregor and Andrew it would be 0.8/2. The sum of all these is 1+1+1+1.0225/2+ 0.8/2=4.3112. This is slightly less than the 5 it would be if it was unweighted. If normalized=False in the algorithm than the local reaching centrality would be 4.3112/8= 0.0532 . But by default it is normalized so this number is divided by the ratio of the size of the weighted graph to the size if it was unweighted. With normalization the final local reaching centrality would be 0.0532 /(72.22/122)= 0.0933. I left the scores normalized but I don't think it makes a difference when the nodes are ranked.
A prestige based ranking system like this is used in Google's PageRank algorithm to rank search results. The gist of prestige ranking is that it scores a node based off of the score of other nodes its connected to. So if a node was linked to a couple of nodes with a high score then that node would get a high score as well. It makes it interesting to calculate because this score is self defined, to calculate a node's score you need to calculate the score of all it's connected nodes and so on. So to calculate all of the scores for each node you need to know the connections between nodes and the score of each node. This is where linear algebra comes in to help.
A graph can be represented as a matrix of every edge between all the nodes in the network. This matrix is called the adjacency matrix. Then we can also think of the centrality score for all the nodes in the graph as a 1xN matrix where N is the total amount of nodes. Each value in that matrix corresponds to the score of a certain node. That score vector will be a the product of all of the connections of the graph (the adjacency matrix) times the score vector. This will only be true when the score vector is an eigenvector of the adjacency matrix (Assuming we ignore that eigenvalue scalar which makes sense since we only care about the ranking of the score and the scalar would apply to them all equally). Luckily for us eigenvectors are used extensively in linear algebra so a bunch of smart people have already discovered efficient ways to calculate them. So long story short in order to find the score vector for the graph we just need to calculate the eigenvector of its adjacency matrix. What I described above was eigenvector centrality, Katz centrality is the same but it also applies an attuenator to the weights of edges. For every additional connection needed to reach a node the weight is reduced so that nodes that have the greatest affect on the ranking of a certain node are the ones closest to it.
One thing that makes it difficult to rank these fighters is the amount of times were some fighter A beats fighter B and then fighter C goes ahead and beats A. This is referred to a cycle, where a path can be created that flows from one node back into that same node. If it was not for these cycles it would be fairly easy to judge how well a node should be ranked based off of the flow from the nodes with the most wins to the ones with the most losses. But with cycles if a top fighter is a part of one of the cycles and then another fighter comes a long and beats any of the other fighters in this cycle, then with this ranking system that fighter will have a connection to all of the wins that the top fighter has.
Click here to see the cycles in every weight class
It is interesting to note that some weight classes have a lot of cycles while some barely have any. Heavy weight is a mess with cycles, it looks like everybody's beaten everybody at some point.
For my ranking earlier I counted each weight class as its own graph and treated them all separately. I also tried to count every fighter on the UFC roster as one large graph. This way fighters who switched weight classes will still have the wins at different weight classes counted towards their rankings.
Click here to see my rankings using the full graph
The Katz ranking still seems like it makes sense when the full graph is accounted for, but the local reaching centrality is all over the place. Its also super hard to see whats going on because of the nodes are piled on to each other. There are apparently plugins for the cyctoscape.js javascript library I used to generate the interactive graph that would allow me to have separate clusters in the overall graph for each of weight class. I think that could look cool. I didn't do any of this stuff though because it sounds like working with javascript more and that does not sound enjoyable.
Doesn't seem like they are that great. There are some cases where someone who has lost to another fighter is ranked higher. This doesn't seem intuitive or in the spirit of MMA Math. I think that some of this might be addressed though by adjusting the weights on the edges. Kamaru Usman was always ranked higher by both my ranking schemes than Tyrone Woodley which seemed odd and was not how any official rankings saw it. But when those two did end up meeting Usman beat him pretty handedly. I like to think of that as a win for my rankings.
Local reaching centrality seems to have problems when there are a lot of cycles. When that's the case the amount of nodes that they have connections to is about the same and their ranking becomes about the same for all fighters. Apparently prestige rankings are supposed to be better the more interconnections there are (At least according to this). For Acylic graphs where there are no cycles the score is useless. If I wanted to be clever I could use a combination of both algorithms to calculate one ranking. The global reaching centrality is a single number for the graph that determines how hierarchical it is. It's calculated using all of the local reaching centrality scores from the nodes in the graph. This number could then be used to determine what proportion of the score is calculated using the reaching centrality and how much is calculated with the Katz centrality. The more hierarchical it is the more weight could be put on the local reaching centrality portion, and the less hierarchical the graph is the more weight could be put on the Katz centrality portion.
I didn't do any of this stuff though. There are all of these factors that I could try to tune in order to get the my rankings to change, but I don't have a yard stick to compare them to in order to tell me if my ranking system gets better or worse as I adjust it. There is no set truth to compare these rankings to so its hard to judge how good they are. If there was a definitive ranking out there somewhere out there and could then tweak by rankings until it better matches theirs. But no rankings are perfect, especially the official UFC rankings because there some fighters will mysterious increase in the rankings when they have an upcoming fight that's being promoted.