Yes. I double-checked **Sets Won end-to-end**, and...

Creado el: 15 de septiembre de 2026

Respondido usando GPT-5.6 Thinking por Chat01

Pregunta

TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt

Yes. I double-checked Sets Won end-to-end, and the probability wiring is correct now.

v1167 is already feeding Sets Won from the same final exact-score PMF as Sets Played and Total Games. There is no second recent-form/q adjustment inside Sets Won, so no duplication. I ran 10,000 randomized BO3 PMFs across the key identities with 0 failures and max numerical error 3.33e-16.

I did find one separate publication bug: in your output,

  • Julia 2+ sets = 67.2%
  • Julia Match Winner = 67.2%

Those are literally the same event in BO3. Yet Sets Won was printing LEAN 2+ SETS while Match Winner correctly said NO BET. The Sets Won display helper was recomputing its own confidence and bypassing the Winner publication block.

I fixed only that in v1168. No probability model changed.

For this preview, v1168 should show approximately:

  • Julia Sets Won: PASS | 2+ SETS 67.2% | MATCH WINNER EQUIVALENT | winner betting status not official
  • Elina Sets Won: LEAN 1+ SET | 61.9% | MEDIUM

Elina's 61.9% remains independent because 1+ set is not Match Winner—it includes her 2-0, 2-1, and 1-2 paths.

The identities now enforced/verified are:

  • A 1+ = 1 − P(0-2)
  • B 1+ = 1 − P(2-0)
  • A 2+ = P(A wins)
  • B 2+ = P(B wins)
  • P3 = P(A 1+) + P(B 1+) − 1

The v1167 BO3 activation fix, q blend, P2/P3 calculation, Match Winner, Total Games, and BO5 logic are unchanged.

Download v1168 full script

Download v1167 → v1168 diff

Download Sets Won validation report

I double-checked the actual publisher. The key is that there is no entered Sets Won line here. When the line is absent, the script invents a display threshold from expected sets; for Elina that becomes 0.5, so LEAN 1+ SET 61.9% is an automatically generated marginal event, not the same statement as “the forecast loser steals a set if Julia wins.”

Worked for 35s

Yes — I checked it carefully, and the probabilities are coherent, but the wording can absolutely look contradictory.

From your final PMF:

  • Julia 2-0 = 38.1%
  • Julia 2-1 = 29.1%
  • Elina 2-0 = 13.3%
  • Elina 2-1 = 19.6%

So:

UNDER 2.5
= Julia 2-0 + Elina 2-0
= 38.1% + 13.3%
= 51.4%

But Elina 1+ set is:

= Julia 2-1 + Elina 2-0 + Elina 2-1
= 29.1% + 13.3% + 19.6%
61.9%

So both can be above 50% because they're overlapping events. In particular, Elina winning 2-0 simultaneously satisfies:

  • UNDER 2.5 sets
  • Elina wins 1+ set

The important distinction is this:

“Elina wins 1+ set” = 61.9% marginally.

But “Elina steals a set if forecast winner Julia wins” = 43.3%.

That second number is the one matching what you were thinking about when you said, “How can you lean the loser a set if we're UNDER?”

And I checked why it's printing LEAN 1+ SET: because there is no actual Sets Won prop line entered. The display function automatically chooses a threshold from expected Sets Won. For Elina it chooses Over 0.5 sets, then sees 61.9% and manufactures the LEAN 1+ SET display.

So my double-check conclusion is:

No probability bug. No duplicate calculation. No contradiction in the PMF.

But yes, the automatic wording is potentially misleading because LEAN 1+ SET sounds like “forecast loser takes one in the Julia-win scenario,” while mathematically it includes all Elina match-win outcomes too.

Your actual internally consistent directional picture is:

  • UNDER 2.5: 51.4%
  • Julia wins: 67.2%
  • If Julia wins, Elina takes a set: 43.3%
  • Elina 1+ set unconditionally: 61.9%

So I would not change anything from this check alone. The model math is behaving correctly; what you're noticing is the distinction between unconditional player set coverage and conditional loser-set-steal probability.

Maybe the math is wrong then
But Elina 1+ set is:

= Julia 2-1 + Elina 2-0 + Elina 2-1
= 29.1% + 13.3% + 19.6%
≈ 61.9%

So both can be above 50% because they're overlapping events. In particular, Elina winning 2-0 simultaneously satisfies:

UNDER 2.5 sets
Elina wins 1+ set
The important distinction is this:

“Elina wins 1+ set” = 61.9% marginally.

But “Elina steals a set if forecast winner Julia wins” = 43.3%.

That second number is the one matching what you were thinking about when you said, “How can you lean the loser a set if we're UNDER?”

And I checked why it's printing LEAN 1+ SET: because there is no actual Sets Won prop line entered. The display function automatically chooses a threshold from expected Sets Won. For Elina it chooses Over 0.5 sets, then sees 61.9% and manufactures the LEAN 1+ SET display.

So my double-check conclusion is:

No probability bug. No duplicate calculation. No contradiction in the PMF.

But yes, the automatic wording is potentially misleading because LEAN 1+ SET sounds like “forecast loser takes one in the Julia-win scenario,” while mathematically it includes all Elina match-win outcomes too.

Your actual internally consistent directional picture is:

UNDER 2.5: 51.4%
Julia wins: 67.2%
If Julia wins, Elina takes a set: 43.3%
Elina 1+ set unconditionally: 61.9%

We are trying to pick the correct picks not pick losing picks how can a lose be 61* ? Why doesn’t it say under 0.5?

In tennis it’s not logic to have a loser saying lean 1 set when the same match is predicting them to loser 2:0 it’s just not logical

════════════════════════════════════════
🎾 TENNISLOCKS 🔒
OFFICIAL MATCH MODEL
VERSION 3.0
GENERATED 3:03 AM | September 15, 2026
ENGINE Point • Game • Set Probability Model
════════════════════════════════════════

🎯 WTA 250 (OUTDOOR) | Best of 3 | Line: 21.5
Tour: WTA | Court speed (CPI): 38
Metadata confidence: HIGH

────────────────────────────────────────
Julia Riera vs Elina Avanesyan
────────────────────────────────────────

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

  • No official plays this match.

📈 STRONG LEANS:

  • Total Games 21.5: OVER 59.6% | MEDIUM confidence

🟡 LOW CONFIDENCE:

  • Sets 2.5: UNDER 51.4% | forecast only

🚫 NO BETS:

  • Match Winner: NO BET | forecast Julia Riera 67.2% | forecast side retained, but betting status is below OFFICIAL BET
    ────────────────────────────────────────

Match type: Both break more, one side clearly better. Shorter games. (RETURN_RETURN_UNEVEN)
Risk: 0.15 (LOW)
Pricing data quality: WEAK | opponent-rank samples 4/7 | trust 1.00

PLAYER INTEL
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
Julia Riera Elina Avanesyan
Rank 144 155
Elo 1619 1684
Avg Opp Rank 152 92
Schedule A: MID (trust 1.00, ranks 7) | B: SOLID (trust 1.00, ranks 7)
Serve Style ace 5.4% ace 2.7%
Momentum RECENT_RESULTS RECENT_RESULTS
Hold % 60.8% 52.6%
Recent-row SPW (raw) 56.4% 49.7%
Dominance Ratio 1.04 0.78
Recent Hold SD - 14.7%
Break Rate 47.4% 39.2%
1st Srv Win % 66.7% 55.2%
2nd Srv Win % 46.3% 45.1%
1st Srv In % 49.5% 62.9%

[WINNER STABILITY] official side A | profile central B | endpoint crosses 50 NO | window crosses 50 NO | surface Elo unavailable | official block NO

Signals: forecast side retained, but betting status is below OFFICIAL BET

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

🎲 SETS OUTLOOK
[SET RESEARCH REF] CANONICAL_POINT_ROOT | WTA/HARD/MAIN/CANONICAL_POINT_STATE_SET_COUNTS_V1144 | read-only, no live blend
[SET INPUTS] SPW A/B 54.4% / 51.1% | Hold A/B 60.8% / 52.6% | route UNIFIED_CURRENT_POINT_ROOT_V1113
[SET TB CAL] not applied | tree P(7-6) 12.2% | raw 12.2% | hist not measured | n null | CANONICAL_POINT_ROOT_NO_HISTORICAL_SET_TB_MUTATOR_V1144 | set-winner margin preserved by construction
[SET AUTHORITY] ACTIVE | BO3_POINT_STATE_RESPONSE_PLUS_TWO_SIDED_CONDITIONAL_COVERAGE_V1163 | BO3 length priced from player 1+ set coverage and reconciled to Match Winner
[BO3 COVERAGE MODEL] winner anchored | raw structural q -> point-state cross-set response -> optional two-sided conditional exact-score shrinkage | P3 = P(B wins)*qA + P(A wins)*qB | no raw-coverage blend | no corpus/population P3 target | no fixed P3 cap
[BO3 COVERAGE EFFECT] canonical P3 47.3% | response prior P3 58.7% | final P3 48.6% | response +11.4pp | recent -10.0pp
[BO3 PLAYER COVERAGE] A wins 1+ set 86.7% | B wins 1+ set 61.9% | identity 48.6%
[BO3 CONDITIONAL q] A raw/response/recent-paired/final 55.2% / 66.2% / 42.9% / 59.5% || B raw/response/recent-paired/final 43.4% / 55.0% / 14.3% / 43.3%
[BO3 ACTIVE POINT EXPOSURE] UNIFIED_CURRENT_POINT_ROOT_EXPOSURE_V1167 | structural W A/B 17.43 / 17.43 | form share A/B 28.7% / 28.7% | applied YES
[BO3 CONDITIONAL EVIDENCE] qA A-loss/B-win N 7.0 | qB B-loss/A-win N 7.0 | mirrored H2H dedup 0
[SET LENGTH ROOT] final Sets Won / Both Win a Set / Over 2.5 identity P3 48.6% | one exact-score PMF
[SET WINNER ALIGN] final winner error 0.0e+0 | final set-count margin error 0.0e+0
[SET EXACT PMF] 2-0 38.1% | 2-1 29.1% | 0-2 13.3% | 1-2 19.6% | final P3 48.6%
[SET ACTION] LOW FORECAST UNDER 2.5 | probability 51.4% | model fair odds -106 | forecast only
[SET BETTING GATE] final exact-score PMF direction always visible | HIGH >= 60.0% = official PICK | MID 55.0%-<60.0% = LEAN | LOW >50.0%-<55.0% = forecast only | no BO3 data-quality confidence cap
[SET FAIR PRICE] Over 2.5 +106 | Under 2.5 -106
[SET TREE DIAGNOSTIC] canonical P(2) 52.7% | canonical P(3) 47.3% | canonical point/game/set tree

📊 Player Stats (Current Live-Source Audit):

  • Serve/return diagnostic: ret2 A/B 57.1% / 54.7% | BP save A/B 49.7% / 52.3%
  • Visible target-surface row coverage: Julia Riera through 2026-09-07 [RATE_PLUS_SURFACE_BACKFILL] | Elina Avanesyan through 2026-02-01 [EXACT_POINT_DATE_BOUNDED] | CURRENT POINT INPUTS ELIGIBLE
  • Live row sources: Julia Riera [CURRENT_MULTIHOST_SEASONAL_SURFACE_BACKFILL_V1094 x3, TA_JSFRAG_RATE_ONLY_V939 x4] | Elina Avanesyan [CURRENT_EXACT_TML_V939 x7] | date precision A/B MATCH_DATE x4, TOURNEY_START_DATE x3 / TOURNEY_START_DATE x7
  • Surface SPW reference (HARD): Julia Riera (56.4% [2-2]) | Elina Avanesyan (No verified same-tour surface SPW rate) [A TA_RECENT_RESULTS_RATE_V935 | B TA_SURFACE_SPW_RATE_UNAVAILABLE]
  • Surface serve priors: Julia Riera Ace 5.4% / DF 8.4% / 1stIn 49.5% | Elina Avanesyan Ace - / DF - / 1stIn - [TA_RECENT_RESULTS_RATE_V935]
  • Julia Riera: Hold 60.8% (raw: 0.0%, serve vs this returner) [hold seed]
  • Elina Avanesyan: Hold 52.6% (raw: 48.1%, serve vs this returner) [hold seed]
  • Style: Julia Riera [ace 5.4% / ace 5.4%] | Elina Avanesyan [ace 2.7% / ace 2.7%]
  • Recent current-source results (audit): Julia Riera W-L 3-4, SS 2-3, Sets 7-9 ; Elina Avanesyan W-L 3-4, SS 1-4, Sets 6-10
  • 1st Srv Win: Julia Riera 66.7% | Elina Avanesyan 55.2%
  • 2nd Srv Win: Julia Riera 46.3% | Elina Avanesyan 45.1%
  • 1st Srv In: Julia Riera 49.5% | Elina Avanesyan 62.9%
  • Raw recent-row SPW: Julia Riera 56.4% | Elina Avanesyan 49.7% [diagnostic row aggregate; official pricing uses the exact-point posterior root]
  • Break Rate (from hold): Julia Riera 47.4% | Elina Avanesyan 39.2%
  • Dominance Ratio: Julia Riera 1.04 | Elina Avanesyan 0.78 [MISMATCH]
  • Recent Hold SD: Julia Riera not measured | Elina Avanesyan 14.7%
  • Elo (diagnostic only; not official serve authority): Julia Riera 40.8%
    Source: Elo_Lookup sheet (Julia Riera=1619, Elina Avanesyan=1684)
  • Serve vs this returner (Julia Riera): 67.2% | Elo 40.8% (calibrates official serve when induce fires)
  • Recent-row implied hold (diagnostic): No Data

Totals Fair Line (canonical structural threshold ref): 23.5 (CDF 50/50) | Full-dist median ref: 23.0
Full-dist range (pricing ref): P10=17 | P50=23 | P90=32
Totals EV (tree mean): 23.9 | Median: 23.0
Projected match duration: ~117 min | 2 sets ~90 min / 3 sets ~145 min | research projection only
Settlement full-dist mode: 18g | settlement density zone: 17-19g 20.4%
All-match median ref: 23.0g | Conditional totals (not picks): E[T|2 sets] 19.2 | E[T|3 sets] 29.0 | alternative 3-set probability 49%
Settlement PMF top exacts: 18g 7.1% | 19g 7.0% | 17g 6.3% | 20g 6.3% | 22g 6.1% | 29g 5.5% | 28g 5.5% | 30g 5.2% [canonical full-match mixture]

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

🎯 TOTAL GAMES
[TOTAL GAMES FORECAST] STRONG LEAN OVER 21.5 | 59.6% | 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 59.6% clears the full-pick probability threshold, but reliability/data-quality controls cap action at a MEDIUM strong lean.
At 21.5: Over 59.6% | Under 40.4%
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 21.5:
2-set lane: 51.4% match mass | P(Over | 2 sets) 21.9% | contributes 11.3pp raw Over mass
3-set lane: 48.6% match mass | P(Over | 3 sets) 99.4% | contributes 48.4pp raw Over mass
Combined no-push P(Over 21.5) = 59.6% from all lanes.
First-server sensitivity (diagnostic only): A serves first -> Over 59.5% | B serves first -> Over 59.7% | mean-total gap 0.02g
Projected total-games distribution: fair line 23.5 | mean 23.9 | median 23 | largest single exact bucket 18g (7.1%, not a majority and not the O/U authority)
Exact-total concentration: dominant 3-game cluster 17-19g = 20.4%.
Unconditional pricing distribution: 80% range 16-30 | SD 5.8 | mode 18g (7.1%) | leaders 18g 7.1% | 19g 7.0% | 17g 6.3% | 20g 6.3% | 22g 6.1%
########################################
🎯 PROP PROJECTIONS 🎯
########################################

📊 Julia Riera - Player Props:
Games Won: mean 13.0 | median 13 | mode 12 | full-match distribution
1st Set Games Won: 5.23 projected
Sets Won: PASS | 2+ SETS 67.2% | MATCH WINNER EQUIVALENT | winner betting status not official
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 39% | context only; official pricing uses the final match tree
Historical sample: 8.0 service games | projected Games Won CV: 24%

📊 Elina Avanesyan - Player Props:
Games Won: mean 11.0 | median 12 | mode 12 | full-match distribution
1st Set Games Won: 4.40 projected
Sets Won: LEAN 1+ SET | 61.9% | 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 45% | context only; official pricing uses the final match tree
Historical sample: 11.2 service games | projected Games Won CV: 38%

🎲 Match-Level Context:
Sets Played: LOW FORECAST UNDER 2.5 | P(2 sets) 51.4% / P(3 sets) 48.6% | expected 2.49 sets
3-set match / both players win a set: YES 48.6% | NO 51.4% | no betting action
Exact match-score paths: Julia Riera 2-0 38.1% | Julia Riera 2-1 29.1% | Elina Avanesyan 2-0 13.3% | Elina Avanesyan 2-1 19.6%
If forecast winner Julia Riera wins: straight sets 56.7% | Elina Avanesyan steals one set 43.3% conditional (29.1% of all match paths)
Individual win 1+ set: Julia Riera 86.7% | Elina Avanesyan 61.9% | marginal coverage only; NOT the BO3 3-set probability; includes paths where that player wins the match
Straight-set loss chance: Julia Riera 13.3% | Elina Avanesyan 38.1%
Games/aces/breaks use the full match tree, not a single 2-0 or 2-1 scoreline.
Surface: HARD | Tour ace reference 4.4% | double-fault reference 5.1%

text
supposedly fixed it for Elina 61% observed probability but I’m still seeing it

Pensamiento

Resource uri: /response/turn2 Showing 195 of 195 lines.

undefined

Pensamiento

Resource uri: /response/turn3 Showing 466 of 466 lines.

undefined

Pensamiento

Resource uri: /response/turn4 Showing 415 of 415 lines.

undefined

Pensamiento

Resource uri: /response/turn5 Showing 527 of 527 lines.

undefined

Pensamiento

Resource uri: /response/turn6 Showing 338 of 338 lines.

undefined

Pensamiento

Resource uri: /response/turn7 Showing 385 of 385 lines.

undefined

Pensamiento

Resource uri: /response/turn8 Showing 412 of 412 lines. Pagination: has_more=true, next_cursor="/response/turn8"

undefined

Pensamiento

Resource uri: /response/turn9 Showing 60 of 60 lines.

undefined

Pensamiento

Fixed set-won market detection and required explicit winning sets

Worked for 1m 32s

Respuesta

Yes — I found the problem. The 61.9% itself is not bad math, but it is being shown in the wrong mode for the situation you described.

For your PMF:

  • Julia 2-0 = 38.1%
  • Julia 2-1 = 29.1%
  • Elina 2-0 = 13.3%
  • Elina 2-1 = 19.6%

So an actual sportsbook Elina Over 0.5 Sets Won really is:

29.1+13.3+19.6=62.0%61.9%29.1 + 13.3 + 19.6 = 62.0\% \approx 61.9\%

And an actual Elina Under 0.5 bet is only Julia 2-0:

P(Elina U0.5)=38.1%P(\text{Elina U0.5}) = 38.1\%

So if there were a genuine Elina Sets Won 0.5 market entered, OVER 0.5 at 61.9% would mathematically be the correct side. You cannot price a real U/O 0.5 market conditional on Julia winning, because the bet also settles when Elina wins the match.

But that is not what should be happening when no Sets Won line is entered.

I found why you're still seeing LEAN 1+ SET 61.9%

v1172 contains the correct new no-line logic. Its own header explicitly says that with no BO3 Sets Won line, the forecast loser's 0.5-set projection should be conditioned on the forecast-winner row. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

And the implemented calculation is:

P(Elina steals setJulia wins)=P(Julia 2-1)P(Julia 2-0)+P(Julia 2-1)P(\text{Elina steals set}\mid\text{Julia wins}) = \frac{P(\text{Julia 2-1})} {P(\text{Julia 2-0})+P(\text{Julia 2-1})}

which gives:

29.138.1+29.1=43.3%\frac{29.1}{38.1+29.1} = 43.3\%

Therefore:

P(Elina 0 setsJulia wins)=56.7%P(\text{Elina 0 sets}\mid\text{Julia wins}) = 56.7\%

The code literally computes stealMass / winnerMass versus straightMass / winnerMass, then chooses 1+ SET or UNDER 0.5 SETS. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

So the correct no-line display for this match is:

Elina Sets Won: LEAN UNDER 0.5 SETS | 56.7% | MEDIUM | FORECAST WINNER CONDITIONAL

Not 61.9%.

The actual bug is upstream line detection

The Player Props publisher does this:

  • if _setsHasLineB is true → use the unconditional market settlement
  • otherwise → use _setsWonProjectionText_('B'), the new conditional v1172 thesis. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

Your exact output:

LEAN 1+ SET | 61.9% | MEDIUM

comes from the unconditional helper. That means at runtime _setsHasLineB is evaluating true. The script therefore believes an Elina Sets Won line exists. _setsHasLineB is set directly from the parsed setsWonB input. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

And I found the vulnerable part: the market-input reader scans the Match Inputs rows, and any row whose label contains “SETS WON” can be classified as setsWonA/B; any positive numeric value in that row's line cell can become the market line. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt) (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

It even scans the entire supplied Match Inputs range dynamically rather than using a dedicated Sets Won input location. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

So v1172 fixed the publisher, but it did not fully fix the input classification. A phantom/derived 0.5 is apparently still making _setsHasLineB=true, which sends Elina straight back into the old unconditional 61.9% route.

Bottom line

Your instinct about the display/thesis is correct.

For this match:

Actual unconditional market probabilities

  • Elina O0.5 = 61.9%
  • Elina U0.5 = 38.1%

But with no Sets Won market entered, the coherent match-thesis projection should be

  • Julia forecast winner = 67.2%
  • Julia straight sets conditional on Julia winning = 56.7%
  • Elina steals a set conditional on Julia winning = 43.3%
  • therefore displayed Elina Sets Won thesis = LEAN UNDER 0.5 SETS 56.7%

So don't change the PMF to force Elina below 50%. That would corrupt the actual probability model. The remaining fix is to stop the parser from falsely deciding a Sets Won 0.5 line was entered.

And importantly, the v1172 file you uploaded really does contain the intended conditional fix; this isn't me inferring it from the comments—the actual publisher implements it. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

Compartir este Q&A