u/Aggravating_Medium55

I built a men's Tennis stats website focused on a new scoring system that adjusts for draw quality and perfomance dominance.

I've been working on this for a while: alltimetennis.com, an all-time career ranking for men's tennis built around a custom scoring formula rather than summed ATP points.

Posting here because the methodology is the interesting part, not just the output.

For the Front End side I used Claude AI to help me structure this beta version of the website, since I'm more a backend engineer and not a web developer.

The core problem with ATP points as a career metric

  • The ATP point system has changed multiple times since the 90s — summing across eras creates era noise unrelated to performance
  • It resets every 52 weeks by design — it was never built for career comparison
  • Volume bias: more tournaments entered and more points accumulated, regardless of depth of runs

The formula

Career Score = Prestige Points × SPS_cumulative × Set_Multiplier_avg

Three components:

Prestige Points — fixed weights per tournament tier and round, independent of ATP's official values and never adjusted between seasons. Grand Slam win = 2,000. Masters win = 1,000. Era-stable by construction.

Minimum thresholds apply: R16 for Slams and Masters 1000s, SF for ATP 500s, F for ATP 250s. Results below threshold don't score.

SPS (Seed Presence Score) — draw quality multiplier, calculated per round per opponent using a continuous logarithmic formula (I'll explain in detail elsewhere). Surviving deeper into a draw is penalized less since the field has already been filtered. SPS_cumulative = average of sps_round across all matches won on the path. The exit match is excluded for non-winners (if you lose the final) , that match doesn't inflate your draw quality score.

Set Multiplier — measures match dominance independently of opponent quality. Applied per round and averaged across the path.

Worked example — Sinner, US Open 2025 finalist

Matches won: R32, R16, QF, SF (final excluded, lost it)
SPS per round: 0.6426, 0.6332, 0.7092,W 0.6650
SPS_cumulative = 0.6625
Score = 1,200 (Slam final Prestige) × 0.6625 = 795

The atp assigned points per round represent the ceiling score.

Scope

  • Men's singles, 1990–present (pre-1990: inconsistent data, different tour structure)
  • Grand Slams, Masters 1000, ATP 500, ATP 250, ATP Finals
  • Pre-2000: SPS defaults to 0.80 — opponent ranking granularity insufficient before that year
  • Team events excluded (Davis Cup, Laver Cup, United Cup)

What's live and what's coming

Beta is live at alltimetennis.com Rankings update weekly. In the pipeline: player profile pages with SPS distribution, comparison tool, tournament explorer.

If you spot a methodological issue I haven't accounted for, genuinely interested in the feedback, that's exactly why I'm posting here.

Also I'm warmly open to collaborators (developer or sports content/marketing background) if anyone finds the project interesting.

reddit.com
u/Aggravating_Medium55 — 3 days ago