Yes. I double-checked **Sets Won end-to-end**, and...
創建於:2026年9月15日
使用 GPT-5.6 Thinking 回答 Chat01
創建於:2026年9月15日
使用 GPT-5.6 Thinking 回答 Chat01
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,
2+ sets = 67.2%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:
PASS | 2+ SETS 67.2% | MATCH WINNER EQUIVALENT | winner betting status not officialLEAN 1+ SET | 61.9% | MEDIUMElina'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+) − 1The v1167 BO3 activation fix, q blend, P2/P3 calculation, Match Winner, Total Games, and BO5 logic are unchanged.
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:
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:
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:
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:
📈 STRONG LEANS:
🟡 LOW CONFIDENCE:
🚫 NO BETS:
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):
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%
textsupposedly 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
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:
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%.
From your displayed PMF:
As a standalone unconditional sportsbook market:
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:
Therefore:
and:
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)
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?”
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.