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

Créé le : 15 septembre 2026

Répondu en utilisant GPT-5.6 Thinking par Chat01

Question

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

I entered 0.5 for Elina not sure why u keep saying no line entered that isn’t the problem lmao

Réflexion

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

undefined

Réflexion

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

undefined

Réflexion

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

undefined

Réflexion

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

undefined

Réflexion

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

undefined

Réflexion

Evaluated correlated market picks and found exact setsWon usage

Worked for 1m 23s

Réponse

Yes — I found the exact issue, and your 0.5 is being read. The previous explanation that “no Sets Won line was entered” was incorrect for this output.

v1172 explicitly does this:

  • No Sets Won line: use the new winner-conditioned thesis logic.
  • Explicit Sets Won line: keep using the old unconditional PMF settlement. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

And the display chooses the explicit-line branch whenever _setsHasLineB is true. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

So your entered Elina 0.5 is precisely why you're still seeing 61.9%.

The math itself

From your displayed PMF:

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

As a standalone unconditional sportsbook market:

P(Elina > 0.5 sets)=29.1+13.3+19.661.9%P(\text{Elina > 0.5 sets}) =29.1+13.3+19.6 \approx61.9\%

So mathematically, OVER 0.5 = 61.9% is correct.

But look at what creates that 61.9%:

32.8 percentage points come from Elina winning the entire match.

That is the part that clashes with your selected match thesis of Julia winning.

Once we say:

We are forecasting Julia to win. Within that Julia-win thesis, does Elina get a set?

then only these paths exist:

  • Julia 2-0 = 38.1
  • Julia 2-1 = 29.1

Therefore:

P(Elina 1+ setJulia wins)=29.138.1+29.1=43.3%P(\text{Elina 1+ set}\mid\text{Julia wins}) =\frac{29.1}{38.1+29.1} =43.3\%

and:

P(Elina UNDER 0.5Julia wins)=38.167.2=56.7%P(\text{Elina UNDER 0.5}\mid\text{Julia wins}) =\frac{38.1}{67.2} =56.7\%

That is the logical number you were expecting.

In fact, v1172 already contains that calculation for the no-line case: it divides the 2-1 lane by the forecast winner's total win mass, then compares it with the straight-set lane. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

So what is actually broken?

Not the PMF arithmetic.

The publication rule is still wrong for the objective you want.

v1172's comment literally says explicit lines remain unconditional. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt) And _tlSetEventDecision_ simply takes whichever unconditional side exceeds 50% and assigns confidence from that probability. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

That's why this happens:

Julia forecast winner 67.2%
UNDER 2.5 51.4%
Elina explicit O0.5 → LEAN 61.9%

The engine isn't asking, “does this pick agree with my Julia-win thesis?” It's asking only, “what is the unconditional probability that Elina wins at least one set?”

I would not simply change 61.9% into UNDER 0.5 56.7%

Because there's an important betting distinction.

If you actually place Elina Under 0.5 sets as a standalone bet, the PMF says its unconditional probability is only:

38.1%.

The 56.7% number means:

Elina Under 0.5 GIVEN Julia wins.

So presenting UNDER 0.5 = 56.7% as an unconditional sportsbook probability would be mathematically false.

The clean solution for TennisLocks is to separate market pricing from match-thesis publication.

For this match, I would want the card to say something like:

Elina Sets Won 0.5: PASS
Market probability: OVER 0.5 61.9% / UNDER 0.5 38.1%
Thesis check: If Julia wins, UNDER 0.5 = 56.7%
Marginal OVER conflicts with forecast-winner thesis — no Sets Won lean published.

That is much better than either blindly saying LEAN 1+ SET 61.9% or incorrectly turning the conditional 56.7% into a standalone Under probability.

And this also explains your intuition: the most coherent Julia-side picture is:

Julia wins 67.2% → within Julia wins, Julia 2-0 56.7% / Julia 2-1 43.3%.

So if TennisLocks is supposed to output a coherent collection of picks for one match thesis, then Elina LEAN 1+ SET should indeed be suppressed here.

The actual v1172 fix only repaired the no-line case; it explicitly did not repair the entered 0.5 case. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)

So you weren't imagining it — your 0.5 line is entered, recognized, and v1172 is deliberately routing it back to the 61.9% unconditional logic. That's the remaining bug in the publication design.

Partager cette Q&R