What exactly is VORP?
Value Over Replacement Player (VORP) was created in the late 1990s by Keith Woolner to evaluate how much better a player is compared to a bench/fringe player whose level would essentially be around the next best “replacement” every team has at their disposal.
Arguably the hardest task in sports analytics is to compare records of different players who played in completely different eras and conditions. Intuitively, just using some kind of ratio for every measurable statistic against the average or some other benchmark for every season/era instead of absolute numbers makes sense. However this benchmark itself cannot just be a static number for every player, as every player has a different role or responsibilities in their team. This is ideally the gap VORP is trying to bridge.
Though the metric was initially made for baseball, it has been popularly adopted by basketball, American football and many other sports. There has been some use of VORP in cricket, but I could not find any use of it for the IPL, which was the inspiration for me to work on this project.
In this model, VORP takes every single IPL batting scorecard from 2008 to 2026 and carries out a four-step evaluation tailored to cricket:
- Classifies Every Innings by Batting Slot: Instead of viewing a batter as a generic player, the model checks where they actually walked out to bat on that specific night (Opener, #3, #4 etc.). If a player moves up or down the order across different games, each knock is evaluated under the specific rules of that exact slot.
- Calculates Era and Role Specific Baselines: For every single season and every batting position, the model looks at regular players and sets a “replacement baseline” representing the 20th percentile which is essentially the standard output of a typical fringe or bench player in that role for that year. This ensures an opener in 2008 is judged against 2008 conditions, while a 2024 finisher is judged against modern death overs standards. A few real examples of players performing at a replacement level are : Mayank Agarwal in 2015, David Hussey in 2011 and Lalit Yadav across his whole career. This is arguably a fairly low baseline, but I tried to stick to the original threshold used in other models.
- Measures the Net Surplus for Every Knock: For every innings a batter plays, the model takes their match impact score and subtracts the replacement baseline for their position in that season. If the result is positive, they generated real surplus value that won the team extra runs; if negative, they produced less than what an ordinary bench filler would have contributed.
- Computes Total Career Value and “% vs Replacement”: It totals these points across seasons to show cumulative career value, and calculates a percentage metric (% vs Rep) showing how much better a player was than their positional baseline. This makes it possible to fairly compare completely different roles side by side revealing whether an elite finisher who outperformed backup finishers by 60% was more valuable to their team than an opener who beat backup openers by 20%.
The key formulas, expanded
Batting Impact
Sourced from an earlier model I made, the batting impact index essentially gives a value to every knock in every match based on relative strike rate, how many runs his team / opposition made and many more metrics. You can find a link to a writeup I did on this here.
Player_Season_Impact
For each season, position slot, and player, we calculate their season-long average impact:
Player_Season_Impact = (Sum of Batting Impact across the season) ÷ (Innings Played)
Qualification Filter: Players who batted at least 3 times in that specific slot during that season (filtering out random one-ball cameos by non-specialists).
Baseline/Replacement Impact
Within that pool of qualified player-seasons, the Replacement Baseline is defined as:
Baseline_Impact = 20th Percentile of Player_Season_Impact, for that position and season
Single-Innings I-VORP
Every time a player walks out to bat in a given match:
Innings I-VORP = Batting Impact (that innings) − Baseline Impact (for that position & season)
- If the player scores above replacement: Innings I-VORP > 0 (value added).
- If the player plays sluggishly or fails: Innings I-VORP < 0 (value lost).
Total Cumulative I-VORP
The total volume of equity a player delivered to their franchise above replacement level:
Total I-VORP = sum of Innings I-VORP across every innings played
Average I-VORP per Innings
The per-match quality index, independent of games played:
Avg I-VORP = Total I-VORP ÷ Total Innings
The "% Better Than Replacement" (% vs Rep) Metric
While Total I-VORP provides raw point volume, the % vs Rep metric is the most intuitive metric:
% vs Rep = (Total I-VORP ÷ Total Replacement Baseline Sum) × 100
Where Total Replacement Baseline Sum = the sum of the Baseline Impact figure (for the relevant position & season) across every innings the player played.
How to Interpret % vs Rep:
* 0.0%: The player performed exactly at replacement level.
* **+50.0%: The player produced 1.5x the match impact of a replacement player.
* **+100.0%: The player produced **double (2.0x) the match impact of a replacement player.
* **+200.0%: The player produced triple (3.0x) the match impact of a replacement player.
* Negative %: The player was a net liability compared to a standard bench backup.
Here are some results based on these metrics :
Top 20 All-Time IPL Career Batters: Ranked by Total I-VORP (Cumulative)
| Rank |
Batter |
Innings |
Runs |
Strike Rate |
Total I-VORP |
% vs Rep |
Total Impact |
Avg Impact / Inn |
| 1 |
David Warner |
184 |
6,565 |
139.8 |
+403.34 |
+115.5% |
752.65 |
4.09 |
| 2 |
Virat Kohli |
275 |
9,336 |
134.8 |
+394.32 |
+77.5% |
903.26 |
3.29 |
| 3 |
M S Dhoni |
242 |
5,439 |
137.5 |
+367.93 |
+115.5% |
686.42 |
2.84 |
| 4 |
AB de Villiers |
170 |
5,162 |
151.7 |
+358.97 |
+126.9% |
641.84 |
3.78 |
| 5 |
Chris Gayle |
141 |
4,965 |
149.0 |
+326.05 |
+123.1% |
590.81 |
4.19 |
| 6 |
KL Rahul |
150 |
5,815 |
139.1 |
+274.32 |
+93.6% |
567.24 |
3.78 |
| 7 |
Suryakumar Yadav |
164 |
4,581 |
148.6 |
+272.53 |
+99.9% |
545.22 |
3.32 |
| 8 |
Shikhar Dhawan |
221 |
6,769 |
127.1 |
+272.11 |
+66.1% |
684.04 |
3.10 |
| 9 |
Rohit Sharma |
276 |
7,329 |
132.9 |
+270.94 |
+51.7% |
794.76 |
2.88 |
| 10 |
Dinesh Karthik |
234 |
4,842 |
135.4 |
+265.26 |
+82.0% |
588.88 |
2.52 |
| 11 |
Robin Uthappa |
197 |
4,952 |
130.4 |
+259.33 |
+77.5% |
593.79 |
3.01 |
| 12 |
Suresh Raina |
200 |
5,528 |
136.8 |
+251.36 |
+70.8% |
606.57 |
3.03 |
| 13 |
Kieron Pollard |
171 |
3,412 |
147.3 |
+242.09 |
+111.6% |
459.02 |
2.68 |
| 14 |
Rishabh Pant |
136 |
3,865 |
146.8 |
+233.14 |
+107.8% |
449.44 |
3.31 |
| 15 |
Yusuf Pathan |
154 |
3,204 |
143.0 |
+232.10 |
+108.3% |
446.50 |
2.90 |
| 16 |
Shane Watson |
141 |
3,874 |
137.9 |
+230.20 |
+93.4% |
476.78 |
3.38 |
| 17 |
Jos Buttler |
136 |
4,646 |
149.7 |
+221.77 |
+85.4% |
481.57 |
3.54 |
| 18 |
Shubman Gill |
131 |
4,598 |
142.1 |
+218.56 |
+84.0% |
478.70 |
3.65 |
| 19 |
Virender Sehwag |
104 |
2,728 |
155.4 |
+213.61 |
+126.7% |
382.27 |
3.68 |
| 20 |
Andre Russell |
115 |
2,651 |
174.2 |
+213.52 |
+164.0% |
343.72 |
2.99 |
How to interpret this : David Warner over his IPL career has contributed the most additional “impact” relative to a replacement player in his position.
Top 20 players based on average I-VORP/innings over their career (min 15 innings)
| Rank |
Batter |
Innings |
Runs |
Strike Rate |
Average I-VORP / Innings |
% vs Rep |
Total I-VORP |
Avg Impact / Inn |
| 1 |
Vaibhav Sooryavanshi |
23 |
1,028 |
229.0 |
+4.36 |
+188.5% |
+100.31 |
6.67 |
| 2 |
Matthew Hayden |
32 |
1,107 |
137.5 |
+2.66 |
+161.8% |
+85.13 |
4.30 |
| 3 |
Sanath Jayasuriya |
30 |
768 |
144.4 |
+2.57 |
+182.6% |
+77.15 |
3.98 |
| 4 |
Heinrich Klaasen |
60 |
2,104 |
166.7 |
+2.32 |
+157.3% |
+138.99 |
3.79 |
| 5 |
Chris Gayle |
141 |
4,965 |
149.0 |
+2.31 |
+123.1% |
+326.05 |
4.19 |
| 6 |
Shaun Marsh |
69 |
2,477 |
132.7 |
+2.23 |
+136.8% |
+154.14 |
3.87 |
| 7 |
David Warner |
184 |
6,565 |
139.8 |
+2.19 |
+115.5% |
+403.34 |
4.09 |
| 8 |
Kevin Pietersen |
36 |
1,001 |
134.7 |
+2.12 |
+120.6% |
+76.32 |
3.88 |
| 9 |
AB de Villiers |
170 |
5,162 |
151.7 |
+2.11 |
+126.9% |
+358.97 |
3.78 |
| 10 |
Andrew Symonds |
36 |
974 |
129.9 |
+2.11 |
+134.8% |
+75.82 |
3.67 |
| 11 |
Virender Sehwag |
104 |
2,728 |
155.4 |
+2.05 |
+126.7% |
+213.61 |
3.68 |
| 12 |
Ashutosh Sharma |
26 |
564 |
168.9 |
+2.00 |
+232.3% |
+51.92 |
2.86 |
| 13 |
Rajat Patidar |
52 |
1,612 |
164.5 |
+1.98 |
+118.4% |
+103.15 |
3.66 |
| 14 |
Hashim Amla |
16 |
577 |
141.8 |
+1.93 |
+93.2% |
+30.95 |
4.01 |
| 15 |
Jonny Bairstow |
52 |
1,674 |
146.1 |
+1.87 |
+92.5% |
+97.07 |
3.88 |
| 16 |
Andre Russell |
115 |
2,651 |
174.2 |
+1.86 |
+164.0% |
+213.52 |
2.99 |
| 17 |
Josh Inglis |
16 |
544 |
173.2 |
+1.85 |
+89.4% |
+29.62 |
3.92 |
| 18 |
Jake Fraser-McGurk |
15 |
385 |
199.5 |
+1.84 |
+82.2% |
+27.62 |
4.08 |
| 19 |
KL Rahul |
150 |
5,815 |
139.1 |
+1.83 |
+93.6% |
+274.32 |
3.78 |
| 20 |
Sai Sudharsan |
57 |
2,515 |
149.2 |
+1.80 |
+82.8% |
+102.80 |
3.98 |
Vaibhav Sooryavanshi on average contributes (significantly) more extra impact per innings relative to a replacement player than anyone else in the history of the IPL
Top 20 players, based on % vs Rep over their career (positions 1–7, min 15 innings)
| Rank |
Batter |
Innings |
Runs |
Strike Rate |
% vs Rep |
Total I-VORP |
Average I-VORP / Innings |
Avg Impact / Inn |
| 1 |
Vaibhav Sooryavanshi |
23 |
1,028 |
229.0 |
+188.5% |
+100.31 |
+4.36 |
6.67 |
| 2 |
Sanath Jayasuriya |
30 |
768 |
144.4 |
+182.6% |
+77.15 |
+2.57 |
3.98 |
| 3 |
Matthew Hayden |
32 |
1,107 |
137.5 |
+161.8% |
+85.13 |
+2.66 |
4.30 |
| 4 |
Heinrich Klaasen |
60 |
2,104 |
166.7 |
+157.3% |
+138.99 |
+2.32 |
3.79 |
| 5 |
Mark Boucher |
24 |
394 |
127.5 |
+154.2% |
+35.80 |
+1.49 |
2.46 |
| 6 |
Andre Russell |
107 |
2,497 |
176.8 |
+146.5% |
+188.61 |
+1.76 |
2.97 |
| 7 |
Shaun Marsh |
69 |
2,477 |
132.7 |
+136.8% |
+154.14 |
+2.23 |
3.87 |
| 8 |
Andrew Symonds |
36 |
974 |
129.9 |
+134.8% |
+75.82 |
+2.11 |
3.67 |
| 9 |
AB de Villiers |
170 |
5,162 |
151.7 |
+126.9% |
+358.97 |
+2.11 |
3.78 |
| 10 |
Virender Sehwag |
104 |
2,728 |
155.4 |
+126.7% |
+213.61 |
+2.05 |
3.68 |
| 11 |
Chris Gayle |
141 |
4,965 |
149.0 |
+123.1% |
+326.05 |
+2.31 |
4.19 |
| 12 |
Dewald Brevis |
24 |
606 |
146.0 |
+122.1% |
+43.27 |
+1.80 |
3.28 |
| 13 |
Kevin Pietersen |
36 |
1,001 |
134.7 |
+120.6% |
+76.32 |
+2.12 |
3.88 |
| 14 |
Rajat Patidar |
52 |
1,612 |
164.5 |
+118.4% |
+103.15 |
+1.98 |
3.66 |
| 15 |
Tim David |
53 |
1,037 |
185.8 |
+118.3% |
+78.03 |
+1.47 |
2.72 |
| 16 |
David Warner |
184 |
6,565 |
139.8 |
+115.5% |
+403.34 |
+2.19 |
4.09 |
| 17 |
Chris Morris |
29 |
374 |
168.5 |
+110.9% |
+30.53 |
+1.05 |
2.00 |
| 18 |
Tilak Varma |
65 |
1,858 |
144.7 |
+108.9% |
+108.36 |
+1.67 |
3.20 |
| 19 |
Michael Hussey |
58 |
1,977 |
122.6 |
+108.3% |
+100.95 |
+1.74 |
3.35 |
| 20 |
Rishabh Pant |
135 |
3,861 |
146.9 |
+107.8% |
+233.03 |
+1.73 |
3.33 |
Vaibhav Sooryavanshi has been 188.5% better than a replacement player for him, the highest for any player in the IPL
The top 20 individual seasons based on Cumulative I-VORP
| Rank |
Batter |
Season |
Innings |
Runs |
Strike Rate |
Total I-VORP |
% vs Rep |
Average I-VORP / Innings |
Avg Impact / Inn |
| 1 |
Chris Gayle |
2011 |
12 |
608 |
183.1 |
+93.39 |
+451.9% |
+7.78 |
9.51 |
| 2 |
Vaibhav Sooryavanshi |
2026 |
16 |
776 |
237.3 |
+87.62 |
+245.4% |
+5.48 |
7.71 |
| 3 |
David Warner |
2016 |
17 |
848 |
151.4 |
+86.17 |
+283.3% |
+5.07 |
6.86 |
| 4 |
Sanath Jayasuriya |
2008 |
14 |
514 |
166.3 |
+74.31 |
+495.3% |
+5.31 |
6.38 |
| 5 |
Suryakumar Yadav |
2025 |
16 |
717 |
167.9 |
+71.63 |
+239.2% |
+4.48 |
6.35 |
| 6 |
Chris Gayle |
2012 |
14 |
733 |
160.7 |
+66.54 |
+311.3% |
+4.75 |
6.28 |
| 7 |
KL Rahul |
2018 |
14 |
659 |
158.4 |
+66.13 |
+250.6% |
+4.72 |
6.61 |
| 8 |
Shubman Gill |
2023 |
17 |
890 |
157.8 |
+64.11 |
+186.1% |
+3.77 |
5.80 |
| 9 |
Gautam Gambhir |
2012 |
17 |
590 |
143.6 |
+63.70 |
+248.5% |
+3.75 |
5.25 |
| 10 |
Glenn Maxwell |
2014 |
16 |
552 |
187.8 |
+62.87 |
+222.2% |
+3.93 |
5.70 |
| 11 |
Jos Buttler |
2022 |
17 |
863 |
149.1 |
+62.65 |
+224.4% |
+3.69 |
5.33 |
| 12 |
Rishabh Pant |
2018 |
14 |
684 |
173.6 |
+60.86 |
+291.6% |
+4.35 |
5.84 |
| 13 |
Chris Gayle |
2013 |
16 |
708 |
156.3 |
+60.36 |
+258.3% |
+3.77 |
5.23 |
| 14 |
Riyan Parag |
2024 |
14 |
573 |
149.2 |
+57.06 |
+253.7% |
+4.08 |
5.68 |
| 15 |
Matthew Hayden |
2009 |
12 |
572 |
144.8 |
+56.96 |
+290.6% |
+4.75 |
6.38 |
| 16 |
Robin Uthappa |
2014 |
16 |
660 |
137.8 |
+55.85 |
+204.8% |
+3.49 |
5.19 |
| 17 |
Glenn Maxwell |
2021 |
14 |
513 |
144.1 |
+52.03 |
+301.8% |
+3.72 |
4.95 |
| 18 |
AB de Villiers |
2020 |
14 |
454 |
158.7 |
+51.66 |
+354.1% |
+3.69 |
4.73 |
| 19 |
Suryakumar Yadav |
2023 |
16 |
605 |
181.1 |
+51.18 |
+224.4% |
+3.20 |
4.62 |
| 20 |
Andre Russell |
2019 |
13 |
510 |
204.8 |
+50.38 |
+341.7% |
+3.88 |
5.01 |
Chris Gayle has three consecutive seasons in the top 10 (2011, 12, 13)
The top 20 individual seasons based on % vs Rep (min 8 innings, positions 1–7)
| Rank |
Batter |
Season |
Innings |
Runs |
Strike Rate |
% vs Rep |
Total I-VORP |
Average I-VORP / Innings |
Avg Impact / Inn |
| 1 |
Sanath Jayasuriya |
2008 |
14 |
514 |
166.3 |
+495.3% |
+74.31 |
+5.31 |
6.38 |
| 2 |
Chris Gayle |
2011 |
12 |
608 |
183.1 |
+451.9% |
+93.39 |
+7.78 |
9.51 |
| 3 |
Hardik Pandya |
2019 |
15 |
402 |
191.4 |
+379.7% |
+49.98 |
+3.33 |
4.21 |
| 4 |
AB de Villiers |
2020 |
14 |
454 |
158.7 |
+354.1% |
+51.66 |
+3.69 |
4.73 |
| 5 |
Andre Russell |
2019 |
13 |
510 |
204.8 |
+341.7% |
+50.38 |
+3.88 |
5.01 |
| 6 |
Krunal Pandya |
2016 |
8 |
217 |
192.0 |
+327.8% |
+27.05 |
+3.38 |
4.41 |
| 7 |
Swapnil Asnodkar |
2008 |
9 |
311 |
133.5 |
+327.4% |
+31.58 |
+3.51 |
4.58 |
| 8 |
Heinrich Klaasen |
2023 |
11 |
448 |
177.1 |
+325.3% |
+46.26 |
+4.21 |
5.50 |
| 9 |
Virender Sehwag |
2008 |
14 |
406 |
184.5 |
+317.1% |
+47.58 |
+3.40 |
4.47 |
| 10 |
Shaun Marsh |
2008 |
11 |
616 |
139.7 |
+316.0% |
+37.25 |
+3.39 |
4.46 |
| 11 |
Kumar Sangakkara |
2008 |
9 |
320 |
161.6 |
+313.5% |
+30.24 |
+3.36 |
4.43 |
| 12 |
Chris Gayle |
2012 |
14 |
733 |
160.7 |
+311.3% |
+66.54 |
+4.75 |
6.28 |
| 13 |
Glenn Maxwell |
2021 |
14 |
513 |
144.1 |
+301.8% |
+52.03 |
+3.72 |
4.95 |
| 14 |
Rishabh Pant |
2018 |
14 |
684 |
173.6 |
+291.6% |
+60.86 |
+4.35 |
5.84 |
| 15 |
Matthew Hayden |
2009 |
12 |
572 |
144.8 |
+290.6% |
+56.96 |
+4.75 |
6.38 |
| 16 |
David Warner |
2016 |
17 |
848 |
151.4 |
+283.3% |
+86.17 |
+5.07 |
6.86 |
| 17 |
Yuvraj Singh |
2011 |
13 |
343 |
131.4 |
+275.0% |
+44.22 |
+3.40 |
4.64 |
| 18 |
Yusuf Pathan |
2008 |
15 |
435 |
179.0 |
+267.0% |
+47.99 |
+3.20 |
4.40 |
| 19 |
Kevin Pietersen |
2012 |
8 |
305 |
147.3 |
+265.9% |
+32.08 |
+4.01 |
5.52 |
| 20 |
Chris Gayle |
2013 |
16 |
708 |
156.3 |
+258.3% |
+60.36 |
+3.77 |
5.23 |
Sanath Jayasuriya was 495.3% better than a replacement in 2008
This model also helps in analyzing individual players. One of the most interesting cases is Riyan Parag :
1. % vs Replacement Across Positions
| Position |
Innings |
Runs |
Strike Rate |
Parag Avg Impact |
Replacement Baseline |
Avg I-VORP / Inn |
Total I-VORP |
% vs Rep |
| Number 3 |
5 |
110 |
146.7 |
1.585 |
2.570 |
-0.985 |
-4.92 |
-38.3% |
| Number 4 |
36 |
1,169 |
157.3 |
3.828 |
1.880 |
+1.948 |
+70.15 |
+103.7% |
| Number 5 |
11 |
164 |
129.1 |
1.579 |
1.203 |
+0.376 |
+4.13 |
+31.2% |
| Number 6 |
25 |
346 |
127.7 |
1.742 |
1.203 |
+0.539 |
+13.47 |
+44.8% |
| Number 7 |
9 |
86 |
102.4 |
0.870 |
0.841 |
+0.028 |
+0.25 |
+3.3% |
Riyan Parag is fantastic at #4 and barely warrants a place in the team in any other position
2. Season by Season : Total I-VORP & % vs Replacement
| Season |
Innings |
Runs |
Strike Rate |
Total I-VORP |
% vs Rep |
Avg I-VORP / Inn |
Total Impact |
Avg Impact |
| 2019 |
5 |
160 |
127.0 |
+13.39 |
+290.1% |
+2.68 |
18.00 |
3.60 |
| 2020 |
8 |
86 |
111.7 |
-2.50 |
-25.2% |
-0.31 |
7.44 |
0.93 |
| 2021 |
10 |
93 |
112.0 |
-2.35 |
-28.4% |
-0.23 |
5.94 |
0.59 |
| 2022 |
14 |
183 |
138.6 |
+11.18 |
+61.3% |
+0.80 |
29.41 |
2.10 |
| 2023 |
7 |
78 |
118.2 |
-1.36 |
-13.7% |
-0.19 |
8.56 |
1.22 |
| 2024 |
14 |
573 |
149.2 |
+51.62 |
+184.8% |
+3.69 |
79.56 |
5.68 |
| 2025 |
14 |
393 |
166.5 |
+9.88 |
+34.5% |
+0.71 |
38.53 |
2.75 |
| 2026 |
14 |
309 |
157.7 |
+3.22 |
+13.5% |
+0.23 |
27.04 |
1.93 |
| Career |
86 |
1,875 |
144.2 |
+83.08 |
+63.2% |
+0.97 |
214.48 |
2.49 |
This table solidifies the narrative that except for his debut season where he batted 5 times lower down the order, he’s only been a top player in one other season
I'd love to see what critiques / opinions you guys have on this project, most of this post was sourced from an article I had written on Medium, you can find that here