From 36f5bb514c5bfad2efcbb4818c1f8cc5f3695f80 Mon Sep 17 00:00:00 2001 From: surya Date: Tue, 11 Jul 2023 01:46:09 +0530 Subject: [PATCH] Add IPL --- _posts/2023-07-10-whatwasthatipl.markdown | 150 ++++++++++++++++++++++ images/doubleeliminator.png | Bin 0 -> 21534 bytes 2 files changed, 150 insertions(+) create mode 100644 _posts/2023-07-10-whatwasthatipl.markdown create mode 100644 images/doubleeliminator.png diff --git a/_posts/2023-07-10-whatwasthatipl.markdown b/_posts/2023-07-10-whatwasthatipl.markdown new file mode 100644 index 0000000..751a6a3 --- /dev/null +++ b/_posts/2023-07-10-whatwasthatipl.markdown @@ -0,0 +1,150 @@ +--- +layout: post +title: Unfair fixtures! +categories: ["ideas"] +--- + +Analyzing the fixtures of recently concluded IPL 2023. Was it set up fairly? + +------ + +[IPL](https://en.wikipedia.org/wiki/2023_Indian_Premier_League) is the biggest cricket event in the world. The format of the game is generally +a double round robin followed by a double eliminator with the top 4 teams to decide the ultimate winner - modelled after the well recognized +"Group Stage followed by Playoffs" format. + +**Group Stage** + +Group Stage is used to seed the teams. A round robin format is when each team plays against every other team. This is pretty good. If +there are less number of teams, the fixture could include a double roun robin instead, where each team plays against every other team +twice. + +Let us assume that there are a total of 8 teams in the tournament. + +Then each team has 7 opponents. Each team has to play each of those 7 teams twice, which means each team would play 14 games. +In total, the total number of games in the double round robin fixtures is going to be the number of teams in the tournament times +the number of matches played by each team, which is 14 times 8 = 112. + +But not quite, you see out of the 14 games played by team 1, 2 of them are against team 2. We should not make the mistake of counting +that game again while calculating the total games played by team 2. That is - team 1 vs team 2 is the same as team 2 vs team 1. In the +above calculation, we have effectively counted each game twice - once as team 1 vs team 2 and once as team 2 vs team 1. Therefore the +total number of games is actually half of the above figure which is **56**. + +At this point, as each team has already played twice against another, I would consider it fair to simply call the top team at the end +of this as the winner of the tournament. + +But people like watching close games - regardless of the skill level of the players. Under such a premise, the seeding done above could be put +to use to set up as many close games as possible. + +**The Playoffs** + +One way to set up the playoff matches is to pick the top teams of the tournament (preferably the top 4) and make them play against each other. +To make it fairer to the top performing teams, we could pit the top team against the bottom team and pit the second team against the +second-last team. It is likely that the first two teams are going to go to the finals based on what we might have already seen in the +double round robin group stage. But hey... there could be "upsets". + +Consider this setup for the top 4 seeded teams. + +- Game 1: Team 1 plays against Team 2. +- Game 2: Team 3 plays against Team 4. +- Game 3: Winner of Game 1 plays against Winner of Game 2. +- Game 4: Loser of Game 1 plays against Loser of Game 2. Loser of this game is eliminated. +- Game 5: Winner of Game 4 plays against Loser of Game 3. +- Game 6: Winner of Game 5 plays against Winner of Game 3. + +Winner of Game 6 is the winner of the tournament. The final is between a team that has won all its games, against a team +that has lost exactly one game. If a team loses 2 games, then it is eliminated. This format also ensures that a team doesn't +go out on a single freak loss after playing the entire group stage properly. This format - is called a **double-eliminator** +since each team needs to lose twice to leave the tournament. + +But most importantly, we now have mitigated the possibility of upsets! + +> Note that to run a double-eliminator, one needs a number of teams that can be expressed as an exponent of 2 - 4, 8, 16 and so on. +Each game generates a winner and a loser who plays subsequently, or generates a winner and eliminates the other team. At the end of +the round where only a winner is generated, we would need a corresponding winner from another game to pair up in the next round. +This is only possible halving the total number of teams after every such stage still leaves a number of teams that is divisible by 2. + +**What does IPL do?** + +IPL generally runs a double round robin for the Group stage and then a funky partial double eliminator for the Playoffs as follows. + +- Game 1: Team 1 vs Team 2. +- Game 2: Team 3 vs Team 4. Loser is eliminated. +- Game 3: Winner of Game 2 vs Loser of Game 1. +- Game 4: Winner of Game 3 vs Winner of Game 1. + +The top 2 teams get 2 chances. The bottom 2 teams are eliminated on their first loss. Pretty sure that the organizers would simply +explain this unfairness away by saying that the top teams are better than the bottom two and deserve more chances than the bottom +teams. + +Traditionally there are 8 teams. That means 56 group stage matches and 4 playoff games resulting in a total of 60 games. This format +is pretty stupid spending more than 90 percent of the games on seeding only to finish off the tournament in a matter of 4 games. + +IPL 2023 had 10 teams. If the organizers did what they normally do, the tournament would have ended up even more crazy - + +10 teams double round robin = 90 games in the group stage. +4 teams "funky" partial double eliminator = 4 games in the playoffs. + +A total of 94 games with 90 games in the group stage!! + +The only reason the organizers do this is because more matches - especially those that are guaranteed to take place without eliminations +(basically all group stage games) are money making machines - stadium tickets, and advertisements. The fairness of the fixtures isn't even +the 10th most important thing in this context. + +Surprisingly though, IPL 2023 did something less crazy with 10 teams, the group stage had 70 games. And the playoffs 4. + +70!?? + +How are there 70 games? If each team plays against the other team once, there should be 45 games. If they play twice, there should be 90. +How did each team play a fractional number of games against the other? + +**More Teams = More Unfairness** + +To figure this out, I started investigating the fixtures more deeply. Unfortunately, the organizing committee simply has a PDF file containing +the list of fixtures. That is not an easy format for anyone interesting in doing data analysis. Therefore, I took a detour trying to +parse and extract out this data in a more machine readable form. That took some time, but it was worth it. (The code is available +[here](https://github.com/cool-mist/ipl-data)). + +Once I had the data in the right format, I could see that each team played exactly 14 games each. Clearly implying that they played atleast some +of them more than once as there are only 9 other teams. + +I picked a team at random - Mumbai Indians, and looked at the games they have played. + +They have played 2 games against the following teams and 1 game with the remaining teams. This means 5 times 2 plus 4 = 14. + +- Gujarat Titans +- Royal Challengers Bangalore +- Punjab Kings +- Sunrisers Hyderabad +- Chennai Super Kings + +I picked up another team - Delhi Capitals, and they played the same type of games, exactly 2 games against the same 5 teams above. + +In fact, by bruteforcing my way through the entire team list, we can see that there have been 2 hidden groups. Group 1 is the group listed +above. The other Group 2 is + +- Rajasthan Royals +- Lucknow Super Giants +- Delhi Capitals +- Kolkata Knight Riders +- Mumbai Indians + +Each team played a single game against members of the same group, and 2 games against the opposite group. + +Somehow, they have made this even less fair than how it already is. To ensure that one side does not get to win too many games in the group stage, +the two virtual groups above have to be balanced. This balancing is probably done using the results of the previous year, but that doesn't mean +anything in this volatile tournament where players switch sides every year. + +**A Fairer Alternative** + +I propose below, a fairer alternative to the above nonsense, for 10 teams. + +- A single round robin group stage for a total of 45 games. +- Eliminate the bottom 2 teams. A proper double elimination with the top 8 teams for a total of 14 games. + +This brings the total number of games to 59! 1 Less than what IPL has been doing with 8 teams previously. + +If required, we can throw in another game to identify the 3rd place in the playoffs as well to round it up to 60. + +(The double eliminator for 8 teams with an optional 3rd place playoff is shown below). + +![YouShallNotPass]({{site.base_url | absolute_url}}/images/doubleeliminator.png) diff --git a/images/doubleeliminator.png b/images/doubleeliminator.png new file mode 100644 index 0000000000000000000000000000000000000000..2c555e698b14448dcc579514a138f04a3c61ac9a GIT binary patch literal 21534 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 literal 0 HcmV?d00001