Nikunj Agarwal
Featured project
The Toss Myth: A 289K Ball-by-Ball Analysis of IPL Match Winners
Every IPL season, 500M+ viewers hear the same recycled opinions: "Toss is everything," "Batting wins T20s," "Middle overs don't matter." But when I looked for actual statistical evidence, I found almost none — analysts quote win percentages without a single hypothesis test. I wanted to know: which widely-held IPL beliefs actually hold up when you throw 289,673 ball-by-ball records and proper statistical methods at them? The gap wasn't data — Cricsheet provides excellent public datasets — the gap was rigorous, reproducible analysis that goes beyond bar charts. Process I chose Python over Tableau because I needed programmatic control over statistical tests and ML models. My first attempt used raw team names from the CSV — this broke everything because "Deccan Chargers" and "Sunrisers Hyderabad" are the same franchise. I built a normalization layer mapping 20+ names to 15 teams before anything worked. For toss, I initially just computed win percentages (50.5%). But I ran a Chi-squared test (p=0.731) to prove it's statistically a coin flip. For phase importance, correlation analysis couldn't handle categorical win/loss data, so I switched to Logistic Regression — giving clean weights: Death 47.3%, Powerplay 46.2%, Middle 6.5%. I chose a standalone HTML/CSS/JS dashboard over Jupyter because it's more shareable and doesn't require Python to view. Results Toss myth quantifiably debunked: 50.5% win rate, Chi-squared p=0.731 — statistically no better than a coin flip. Phase analysis revealed a 7.3x gap between Death overs (47.3%) and Middle overs (6.5%) in predicting match outcome. The biggest surprise: winning teams take 42% more wickets per ball in death overs than losing teams — death-over bowling, not batting, is the strongest hidden predictor of victory. The final dashboard renders 22 charts across 5 analytical sections, processing 1,218 matches spanning 18 seasons (2007/08–2026). Reflection Honestly, my biggest miss was not incorporating venue-level context — dew factor, pitch type, ground dimensions — which heavily influence toss decisions and phase outcomes. My current model treats all venues equally, which is an oversimplification. I also relied on team-level aggregates; individual batter-vs-bowler matchup data would have made the phase analysis much richer. If I had more time, I'd add an interactive filter system to the dashboard so users could slice by season, team, or venue themselves instead of viewing pre-computed charts.