How TenAceIQ calculates dynamic ratings.
TenAceIQ uses an Elo-based rating system tuned for recreational tennis. Every match updates a player's rating based on who they played, what the expected outcome was, how dominant the win or loss was, and how recently it happened. This page explains each part of that calculation.
The rating scale
Ratings run from 1.5 to 7.0 and align with NTRP levels. Bands are spaced 0.5 apart (1.5, 2.0, 2.5 ... 6.5, 7.0). The default starting rating for a new player is 3.5. The level-up meter on a player profile shows progress from the current band floor to the next band ceiling.
Two independent tracks
Every player carries two parallel sets of dynamic ratings: a TIQ track that updates from all matches regardless of source, and a USTA track that updates only from reviewed USTA/TennisLink league results added through Data Assist or admin review. TIQ ratings reflect full competitive activity across all leagues; USTA ratings mirror what a USTA-only result set would produce. Both tracks maintain separate singles, doubles, and overall ratings -- six dynamic values per player in total.
Expected score and the Elo formula
Before each match the system computes an expected win probability for each player:
expected = 1 / (1 + 10 ^ ((opponent_rating - your_rating) / 0.45))
A player rated 4.0 facing a 3.5 opponent has roughly a 78% expected win chance. That expectation anchors how much the result moves each player’s rating -- beating a heavily favored opponent moves the needle more than beating someone you were expected to beat. The Win% column on a player’s match history shows this pre-match probability.
K-factors
The K-factor controls how much a single match can shift a rating. TenAceIQ uses three separate K values: 0.12 for singles, 0.107 for doubles, and 0.052 for the overall rating. A win moves a rating by roughly K x (1 - expected), and a loss by K x (0 - expected).
New players are in a provisional phase where the K-factor is temporarily multiplied to help them converge to their true level faster:
- Matches 1-9: 2x K (fast calibration)
- Matches 10-19: 1.5x K
- Matches 20-29: 1.2x K
- Match 30+: 1x K (stable)
The confidence level shown on a player profile -- Low, Medium, or High -- reflects these phases directly. A Low confidence rating is still moving quickly toward equilibrium.
Score quality multiplier
A 6-0 6-0 win and a 7-6 7-6 win are not the same signal. The system applies a score multiplier (ranging from 0.82 to 2.02) based on what the scoreline says about how dominant the win was:
- Dominance ratio -- games won by the winner as a share of all games played. Higher ratio produces a larger multiplier.
- Straight-sets win -- small bonus for winning without dropping a set.
- Bagel (6-0) or breadstick (6-1) set -- additional bonus per shutout set won.
- Tiebreak sets -- slight reduction; a tiebreak signals a close set.
- Deciding (third) set -- slight reduction; both players won a set.
- Close sets (margin <= 2 games) -- minor reduction per non-tiebreak close set.
Upset wins receive an additional boost: if the lower-rated player wins, their multiplier scales up based on the rating gap, rewarding results the algorithm did not expect.
Recency weighting
When ratings are recalculated, matches are weighted by how recently they were played. A match played today carries full weight (1.12x); a match played two or more years ago carries reduced weight (0.88x), with a linear scale in between. A player’s recent form therefore has more influence on their current rating than results from seasons ago.
Inactivity decay
Ratings do not freeze permanently when a player stops competing. After 90 days of inactivity, dynamic ratings begin a slow regression toward 3.5 at 2% of the gap per month. A player rated 4.5 who stops playing for one year decays to roughly 4.33; after two years, roughly 4.15. Players who return to competition re-enter the provisional K phase, which helps them re-calibrate quickly. A staleness indicator appears on a player profile when the last recorded match was more than 90 days ago.
Score parsing and edge cases
Scores are normalized before processing. Tiebreak notation like 7-6(3) has the point score stripped, leaving 7-6. Match tiebreaks stored without brackets (e.g. 10-8) are excluded from the set-level calculation to avoid inflating game counts. A 7-5 set is treated as a regular close set, not a tiebreak. Retirements and walkovers produce a neutral multiplier of 1.0 -- the result counts but the margin does not.