Match + surface form, not one fake overall ladder

Official ATP/WTA rank is one overall list. Form is not. We keep a residual and last-15 per surface (clay / hard / grass / indoors). A Cincinnati match uses hard-court form as of that week’s list — not someone’s clay identity. Sitting out months rusts form (half-life 120 days off, 70 days off this surface). Switching hard→clay rusts clay and only bleeds a bit of current overall form. The number we bet with is the H2H row, not a single “world rank.”

Today + tomorrow — one row is one match

  • ATP/WTA rank is this week’s official ranking (the thing we used to call “the list”). It is shown as #97 vs #33 so you can see it.
  • Official favorite = whoever has more official ranking points this week. That is ATP/WTA, not us.
  • Our pick = whoever has more our form points on this surface (recent results + dates). Last-15 is a surprise sum with sample-size confidence: 10–5 in 15 matches beats 1–1 in 2. We do not multiply last-15 by official points anymore.
  • Disagree = official favorite and our pick are different people.
  • Click a name for who they actually played, on which surface, and those opponents’ form at the time.
  • Surface is joined from the tournament page (slug/year/league), never guessed from the event title. A clay challenger on a Cincinnati week is still clay. Missing = unknown, not hard.

Loading…

Our rank on a chosen surface vs the official overall list

Official rank does not change with surface. Ours does. Switch the surface. Gap = our surface rank − official overall rank. Thin samples (n<8) are blended toward overall form.

Why there is no single “true” overall rank

  • The ATP/WTA list is one number for all surfaces. That is their product, not ours.
  • We walk every match in date order and store separate residuals for clay, hard, grass, indoors, plus an overall residual.
  • Expected result at match T uses that week’s official points (join: latest Monday list ≤ match date). Written on every match row.
  • Then we update the residual for that match’s surface. A clay win does not move your grass residual the same way.
  • An H2H on hard in Cincinnati uses hard residual + hard last-15. Same two players on clay next month is a different our_points pair.
  • The “overall” board is only “if you forced one number.” Do not bet that. Bet the H2H row.

1. Week list on the match

week(player, match_date) = latest official list with ranking_date ≤ match_date p1_rank, p1_points = week(p1) p2_rank, p2_points = week(p2) Unranked that week → 50 points prior, blank rank.

2. Expected from that week’s official points

P(A beats B) = 1 / (1 + 10^( log10(B_points+50) − log10(A_points+50) ))

3. Surprise + surface residual

surprise = result − P result is 1 or 0 residual_surface += K × surprise and residual_overall too K base: slam 90 · 1000 55 · 500 35 · 250 25 · challenger 12 · ITF 5 · futures 2 K × 1.30 final · × 1.15 SF/QF · × 0.60 qualifying Walkovers / retirements skipped. If n_surface < 8: residual_used = (n/8)×residual_surface + (1−n/8)×residual_overall

4. Last-15 extra (on that surface)

l15 = official_week_points × 0.80 × mean(last 15 surprises on this surface) × confidence l50 = official_week_points × 0.25 × mean(last 50 surprises on this surface) × confidence confidence = min(1, n / max(4, N/2))

5. Dates are the formula

Every calendar day, residual decays — whether they play or not. residual_overall *= 0.5 ^ (days / 50) residual_surface *= 0.5 ^ (days / 32) Last-15 only counts matches in the last 120 days. A 13–2 hard tape from March is worth nothing on August 17. Official ranking points are a 10% prior, also faded if they have not played: prior = official_week_points × 0.10 × 0.5^(days_since_last_match / 50) our_points = prior + decayed residual + last-15 (only if those matches are recent) Hard residual rusts from the last HARD match, not the last clay match. Sinner playing last month on clay does not keep a 5-month-old hard identity. Sparseness: last-15 only counts matches in the last 120 days. If you have 0 recent hard matches, hard extras go to 0 and the official prior rusts on the hard clock. Career 175 hard matches do not count as a current sample. At every historical match we rust to THAT date first, then score the match.

6. Last-15 is a surprise SUM, not official points × W/L

last15_form = (sum of surprise in last 15 on this surface, last 120 days) × 70 × (n / 15) 10–5 in 15 matches → full confidence. 1–1 in 2 matches → confidence 2/15. It cannot outshout a real tape. our_points = official_pts × 0.04 × rust(days on this surface) + residual × 0.35 × (n/8) + last15_form We used to do official_pts × 0.80 × mean_surprise. That made a #33 with two matches louder than a #97 with fifteen. That is gone. H2H pick = whoever has more our_points on this surface. Official favorite = whoever has more ATP/WTA points this week.
Board surface:

ATP — list hotter than us on this surface

ATP — we have them higher on this surface

WTA — list hotter

WTA — we have them higher