═════════════...

Created on: September 14, 2026

Answered using GPT-5.6 Thinking by Chat01

Question

TennisLocks_FINAL_v1145_BO3_NONIID_SET_TRANSITION_20260913.txt

════════════════════════════════════════
🎾 TENNISLOCKS 🔒
OFFICIAL MATCH MODEL
VERSION 3.0
GENERATED 8:03 PM | September 13, 2026
ENGINE Point • Game • Set Probability Model
════════════════════════════════════════

🎯 Challenger 75 (OUTDOOR) | Best of 3 | Line: 22.5
Tour: ATP-CH | Court speed (CPI): 38
Metadata confidence: HIGH

────────────────────────────────────────
Titouan Droguet vs Nicolai Budkov Kjaer
────────────────────────────────────────

────────────────────────────────────────
💰 MODEL PICKS:

  • TOP [MATCH WINNER] Titouan Droguet: probability 65.0% | model odds -186 | status OFFICIAL BET

📊 LEANS:

  • Total Games 22.5: OVER 54.3% | MEDIUM confidence
    ────────────────────────────────────────

Match type: Mixed serve and return, one side clearly better. (MIXED_UNEVEN)
Risk: 0.00 (LOW)
Pricing data quality: STRONG | opponent-rank samples 7/7 | trust -

PLAYER INTEL
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
Titouan Droguet Nicolai Budkov Kjaer
Rank 103 149
Elo 1776 1590
Avg Opp Rank 390 237
Schedule A: SOFT (trust -, ranks 0) | B: MID (trust -, ranks 0)
Serve Style ace 10.8% ace 6.1%
Momentum RECENT_RESULTS RECENT_RESULTS
Hold % 82.3% 76.7%
Recent-row SPW (raw) 64.5% 60.1%
Dominance Ratio 0.99 0.65
Recent Hold SD 9.7% 21.1%
Break Rate 23.3% 17.7%
1st Srv Win % 70.0% 65.3%
2nd Srv Win % 50.2% 50.0%
1st Srv In % 61.3% 62.9%
Recent-row implied hold82.0% (64.5% SPW) 73.8% (60.1% SPW)

Signals: official betting threshold cleared

════════════════════════════════════════

🎲 SETS OUTLOOK
[SET RESEARCH REF] CANONICAL_POINT_ROOT | CH/HARD/MAIN/CANONICAL_POINT_STATE_SET_COUNTS_V1144 | read-only, no live blend
[SET INPUTS] SPW A/B 64.6% / 61.5% | Hold A/B 82.3% / 76.7% | route UNIFIED_CURRENT_POINT_ROOT_V1113
[SET TB CAL] not applied | tree P(7-6) 20.8% | raw 20.8% | hist not measured | n null | CANONICAL_POINT_ROOT_NO_HISTORICAL_SET_TB_MUTATOR_V1144 | set-winner margin preserved by construction
[SET AUTHORITY] ACTIVE | BO3_NONIID_VISIBLE_SET_TRANSITION_V1145 | stationary point/game/set baseline plus explicit non-IID transition owner when evidence is usable
[SET HISTORY STORAGE] BO3 transition evidence is EPHEMERAL ONLY | current visible Match Inputs ordered scores | no save/load/cache/network promotion
[SET TRANSITION] APPLIED | visible transitions 19 | reversal 6 / stay 13 | effective log-odds contrast 0.447
[SET NON-IID P3] stationary baseline 47.9% | transition target 42.8% | delta -5.2pp | P3 is NOT capped at 50%
[SET LENGTH ROOT] raw point/game/set P3 47.9% | winner-aligned stationary P3 47.9% | final P3 42.8% | final Winner marginal preserved by IPF
[SET WINNER ALIGN] final winner error 1.1e-16 | final set-count margin error 1.1e-16
[SET EXACT PMF] 2-0 39.5% | 2-1 25.5% | 0-2 17.7% | 1-2 17.3% | final P3 42.8%
[SET ACTION] LEAN UNDER 2.5 | probability 57.2% | model fair odds -134 | MEDIUM | forecast only
[SET BETTING GATE] self-priced final exact-score PMF | HIGH >= 60.0% = official PICK | MID 55.0%-<60.0% = LEAN | below 55.0% = PASS | model fair odds never feed back into probability
[SET FAIR PRICE] Over 2.5 +134 | Under 2.5 -134
[SET TREE DIAGNOSTIC] canonical P(2) 52.1% | canonical P(3) 47.9% | canonical point/game/set tree

📊 Player Stats (Current Live-Source Audit):

  • Serve/return diagnostic: ret2 A/B 48.6% / 47.4% | BP save A/B 60.6% / 43.8%
  • Visible target-surface row coverage: Titouan Droguet through 2026-09-07 [UNVERIFIED] | Nicolai Budkov Kjaer through 2026-09-07 [UNVERIFIED] | CURRENT POINT INPUTS ELIGIBLE
  • Live row sources: Titouan Droguet [CURRENT_EXACT_TML_V939 x7] | Nicolai Budkov Kjaer [CURRENT_EXACT_TML_V939 x7] | date precision A/B TOURNEY_START_DATE x7 / TOURNEY_START_DATE x7
  • Surface SPW reference (HARD): Titouan Droguet (No verified same-tour surface SPW rate) | Nicolai Budkov Kjaer (No verified same-tour surface SPW rate) [TA_SURFACE_SPW_RATE_UNAVAILABLE]
  • Surface serve priors: Titouan Droguet Ace 11.4% / DF 2.1% / 1stIn 60.4% | Nicolai Budkov Kjaer Ace 6.7% / DF 3.4% / 1stIn 62.6% [AUTOFILL_CURRENT_EXACT_THIS_TOUR_364D_PERSISTED_V1076]
  • Titouan Droguet: Hold 82.3% [hold seed]
  • Nicolai Budkov Kjaer: Hold 76.7% (raw: 69.6%, serve vs this returner) [hold seed]
  • Style: Titouan Droguet [ace 10.8% / ace 10.8%] | Nicolai Budkov Kjaer [ace 6.1% / ace 6.1%]
  • Recent current-source results (audit): Titouan Droguet W-L 5-2, SS 3-0, Sets 12-6 ; Nicolai Budkov Kjaer W-L 4-3, SS 3-3, Sets 8-7
  • 1st Srv Win: Titouan Droguet 70.0% | Nicolai Budkov Kjaer 65.3%
  • 2nd Srv Win: Titouan Droguet 50.2% | Nicolai Budkov Kjaer 50.0%
  • 1st Srv In: Titouan Droguet 61.3% | Nicolai Budkov Kjaer 62.9%
  • Raw recent-row SPW: Titouan Droguet 64.5% | Nicolai Budkov Kjaer 60.1% [diagnostic row aggregate; official pricing uses the exact-point posterior root]
  • Break Rate (from hold): Titouan Droguet 23.3% | Nicolai Budkov Kjaer 17.7%
  • Dominance Ratio: Titouan Droguet 0.99 | Nicolai Budkov Kjaer 0.65 [MISMATCH]
  • Recent Hold SD: Titouan Droguet 9.7% | Nicolai Budkov Kjaer 21.1% | Match: 15.4%
  • Elo (diagnostic only; not official serve authority): Titouan Droguet 74.5%
    Source: Elo_Lookup sheet (Titouan Droguet=1776, Nicolai Budkov Kjaer=1590)
  • Serve vs this returner (Titouan Droguet): 65.0% | Elo 74.5% (calibrates official serve when induce fires)
  • Recent-row implied hold (diagnostic): Titouan Droguet 82.0% (SPW 64.5%) | Nicolai Budkov Kjaer 73.8% (SPW 60.1%) (small sample)

Totals Fair Line (canonical structural threshold ref): 23.5 (CDF 50/50) | Full-dist median ref: 23.0
Full-dist range (pricing ref): P10=18 | P50=23 | P90=33
Totals EV (tree mean): 24.6 | Median: 23.0
Projected match duration: not produced | BO3_MINUTES_CELL_THIN
Settlement full-dist mode: 22g | settlement density zone: 18-20g 22.6%
All-match median ref: 23.0g | Conditional totals (not picks): E[T|2 sets] 20.3 | E[T|3 sets] 30.5 | alternative 3-set probability 43%
Settlement PMF top exacts: 22g 8.7% | 19g 8.2% | 20g 8.0% | 23g 6.6% | 18g 6.5% | 21g 5.5% | 31g 5.1% | 17g 5.1% [canonical full-match mixture]

========================================

🎯 TOTAL GAMES
[TOTAL GAMES FORECAST] LEAN OVER 22.5 | 54.3% | MEDIUM confidence | forecast only
Pricing method: all legal full-match score paths are summed against your Total Games line. No single exact score controls the pick.
Decision reason: OVER 54.3% clears the CH Total Games lean threshold (53.4%+) but not the full-pick threshold (56.0%+).
At 22.5: Over 54.3% | Under 45.7%
Total Games probability authority: ONE canonical joint score+games PMF | no second threshold recalibration is applied after the current length root.
Set-count decomposition at 22.5:
2-set lane: 57.2% match mass | P(Over | 2 sets) 20.4% | contributes 11.7pp raw Over mass
3-set lane: 42.8% match mass | P(Over | 3 sets) 99.7% | contributes 42.7pp raw Over mass
Combined no-push P(Over 22.5) = 54.3% from all lanes.
First-server sensitivity (diagnostic only): A serves first -> Over 54.3% | B serves first -> Over 54.3% | mean-total gap 0.07g
Projected total-games distribution: fair line 23.5 | mean 24.6 | median 23 | largest single exact bucket 22g (8.7%, not a majority and not the O/U authority)
Exact-total concentration: dominant 3-game cluster 18-20g = 22.6%.
Unconditional pricing distribution: 80% range 17-31 | SD 5.8 | mode 22g (8.7%) | leaders 22g 8.7% | 19g 8.2% | 20g 8.0% | 23g 6.6% | 18g 6.5%
########################################
🎯 PROP PROJECTIONS 🎯
########################################

📊 Titouan Droguet - Player Props:
Games Won: mean 13.1 | median 13 | mode 12 | full-match distribution
1st Set Games Won: 5.39 projected
Sets Won: BET 2+ SETS | 65.0% | HIGH
Serve Games: not requested | enter a service prop line to price
Serve Points Played: not requested | enter a service prop line to price
Serve Points Won: not requested | enter a Serve Points Won line to price
Aces: not requested | enter a Aces line to price
Double Faults: not requested | enter a Double Faults line to price
Breaks Won: not requested | enter a Breaks Won line to price
Break Points Created: not requested | enter a Break Points line to price
BP Conversion: not requested | enter a Break Points line to price
Opp BP Save: not requested | enter a Break Points line to price
Opponent Matchup: opp return 26% | context only; official pricing uses the final match tree
Historical sample: 12.0 service games | projected Games Won CV: 24%

📊 Nicolai Budkov Kjaer - Player Props:
Games Won: mean 11.6 | median 12 | mode 13 | full-match distribution
1st Set Games Won: 4.76 projected
Sets Won: LEAN 1+ SET | 60.5% | MEDIUM
Serve Games: not requested | enter a service prop line to price
Serve Points Played: not requested | enter a service prop line to price
Serve Points Won: not requested | enter a Serve Points Won line to price
Aces: not requested | enter a Aces line to price
Double Faults: not requested | enter a Double Faults line to price
Breaks Won: not requested | enter a Breaks Won line to price
Break Points Created: not requested | enter a Break Points line to price
BP Conversion: not requested | enter a Break Points line to price
Opp BP Save: not requested | enter a Break Points line to price
Opponent Matchup: opp return 35% | context only; official pricing uses the final match tree
Historical sample: 10.6 service games | projected Games Won CV: 34%

🎲 Match-Level Context:
Sets Played: LEAN UNDER 2.5 | P(2 sets) 57.2% / P(3 sets) 42.8% | expected 2.43 sets
3-set match / both players win a set: YES 42.8% | NO 57.2% | no betting action
Exact match-score paths: Titouan Droguet 2-0 39.5% | Titouan Droguet 2-1 25.5% | Nicolai Budkov Kjaer 2-0 17.7% | Nicolai Budkov Kjaer 2-1 17.3%
If forecast winner Titouan Droguet wins: straight sets 60.7% | Nicolai Budkov Kjaer steals one set 39.3% conditional (25.5% of all match paths)
Individual win 1+ set: Titouan Droguet 82.3% | Nicolai Budkov Kjaer 60.5% | marginal coverage only; NOT the BO3 3-set probability; includes paths where that player wins the match
Straight-set loss chance: Titouan Droguet 17.7% | Nicolai Budkov Kjaer 39.5%
Games/aces/breaks use the full match tree, not a single 2-0 or 2-1 scoreline.
Surface: HARD | Tour ace reference 7.1% | double-fault reference 4.1%

text
new fix made the under 2.5 more instead of lean over 2.5

Python

python
import math p3=0.479 q=(1+math.sqrt(1-2*p3))/2 q 0.6024695076595961

Python

python
def logit(x): return math.log(x/(1-x)) def stationary(q,delta): eps=1e-9 lo=eps hi=1-eps if q>.5: lo=max(lo,(2*q-1)/q+eps) def q0(q1): return q*(1-q1)/(1-q) def f(q1): a=q1;b=q0(q1) return logit(a)-logit(b)-delta flo=f(lo);fhi=f(hi) if flo>=0:q1=lo elif fhi<=0:q1=hi else: for _ in range(80): mid=(lo+hi)/2 fm=f(mid) if fm>0: hi=mid else: lo=mid q1=(lo+hi)/2 return q1,q0(q1) q1,q0=stationary(q,0.447) iid=2*q*(1-q) non=q*(1-q1)+(1-q)*q0 q,q1,q0,iid,non,non-iid (0.6024695076595961, 0.6452116094910423, 0.5376925571038701, 0.479, 0.4274983739065445, -0.05150162609345549)

Python

python
for p3 in [0.479,0.428]: print(p3, (1-p3)*0.204+p3*0.997)

Thought

Calculated transition probabilities and diagnosed P3 unders adjustment behavior

Worked for 38s

Answer

Yes — I found why. v1145 is doing exactly what the new transition formula tells it to do, but that may not be the behavior you intended.

Your stationary point/game/set root had P(3 sets) = 47.9%. The new transition layer saw 19 transitions: 13 stays vs 6 reversals. In the code, a positive transition log-odds contrast means persistence: after a player wins a set, they are more likely to win the next set than after losing one. (TennisLocks_FINAL_v1145_BO3_NONIID_SET_TRANSITION_20260913.txt)

With your reported effective contrast of +0.447, the math works out almost exactly to the output:

  • stationary P3 ≈ 47.9%
  • implied first-set win probability ≈ 60.25%
  • persistence-adjusted P3 ≈ 42.75%
  • adjustment ≈ −5.15 percentage points
  • therefore P(2 sets) ≈ 57.25%
  • result: LEAN UNDER 2.5

So this is not an Under/Over publishing bug. The publisher simply takes whichever side of the finalized PMF is above 50%, with 55–60% becoming a lean. (TennisLocks_FINAL_v1145_BO3_NONIID_SET_TRANSITION_20260913.txt)

The important issue is what you intended v1145 to fix. The header says the patch was meant to remove the structural ceiling that prevented P3 from exceeding 50%, particularly when reversal evidence supports a longer match. (TennisLocks_FINAL_v1145_BO3_NONIID_SET_TRANSITION_20260913.txt) But the actual implementation is two-sided:

javascript
uplift = nonIidP3 - iidP3; target = p3 + uplift;

That means reversal history can raise P3, but persistence history can also lower P3 substantially. (TennisLocks_FINAL_v1145_BO3_NONIID_SET_TRANSITION_20260913.txt)

For this particular matchup, that change is also why your Total Games Over weakened. Using your displayed lane numbers, the stationary 47.9% P3 would imply roughly 58.4% Over 22.5; after v1145 cuts P3 to 42.8%, it becomes the displayed 54.3% Over.

If your intention was “remove the Over-2.5 ceiling only”

I would change v1145 to a one-sided correction: reversal evidence may increase P3, but persistence evidence does not push the clean canonical P3 downward.

Replace:

javascript
var iidP3=2*q*(1-q), nonIidP3=q*(1-tr.qAfterWin)+(1-q)*tr.qAfterLoss, uplift=nonIidP3-iidP3, target=Math.max(1e-6,Math.min(1-1e-6,p3+uplift));

with:

javascript
var iidP3=2*q*(1-q), nonIidP3=q*(1-tr.qAfterWin)+(1-q)*tr.qAfterLoss, rawUplift=nonIidP3-iidP3, uplift=Math.max(0,rawUplift), target=Math.max(1e-6,Math.min(1-1e-6,p3+uplift));

I would also expose both values in the audit:

javascript
rawP3Delta: rawUplift, p3Delta: target-p3, oneSidedTransitionFloorApplied: rawUplift < 0

Then this Droguet–Kjaer match would remain at the canonical ~47.9% P3 instead of being driven to 42.8%. It would therefore be PASS on Sets 2.5, not Lean Under. It would not automatically become Lean Over 2.5, because the original canonical root itself was still below 50%.

That's the key distinction: the old problem prevented legitimate Over probabilities above 50%; fixing that does not imply this particular match should become Over. Your current v1145 went further and introduced a new two-way historical modifier. The source itself notes that this patch “does not claim new forward validation,” which makes the new downward mutation especially worth treating cautiously. (TennisLocks_FINAL_v1145_BO3_NONIID_SET_TRANSITION_20260913.txt)

If your actual target is for the model to identify genuine Over 2.5 leans, I'd keep the ceiling removal but not manufacture an Over here; I would make the transition layer one-sided or diagnostic-only until the negative/persistence side has been separately validated.

Share this Q&A