Fernandez L. vs Tjen J.
Match & Event
| Field | Value |
|---|---|
| Tournament / Tier | Australian Open / Grand Slam |
| Round / Court / Time | TBD / TBD / 2026-01-20 00:00 UTC |
| Format | Best of 3, Standard TB rules |
| Surface / Pace | All-surface data / Unknown |
| Conditions | Unknown |
Executive Summary
Totals
| Metric | Value |
|---|---|
| Model Fair Line | N/A (Insufficient Data) |
| Market Line | O/U 20.5 |
| Lean | PASS |
| Edge | N/A |
| Confidence | PASS |
| Stake | 0.0 units |
Game Spread
| Metric | Value |
|---|---|
| Model Fair Line | N/A (Insufficient Data) |
| Market Line | L. Fernandez -4.5 |
| Lean | PASS |
| Edge | N/A |
| Confidence | PASS |
| Stake | 0.0 units |
Key Risks: CRITICAL DATA LIMITATION - Player 1 (Fernandez L.) statistics are MISSING/INVALID. Data scraper matched to retired player “Mary Joe Fernandez” with 0 matches played. Cannot perform hold/break analysis without valid Player 1 data.
CRITICAL DATA QUALITY ISSUE
DATA COLLECTION ERROR DETECTED:
The briefing data for Player 1 (Fernandez L.) is completely invalid:
- Player matched: Mary Joe Fernandez (RETIRED PLAYER)
- Matches played: 0
- Hold %: 0%
- Break %: 0%
- All statistics: 0 or missing
Root Cause: The data scraper likely matched “Fernandez L.” to the wrong player in the database. Mary Joe Fernandez is a retired American player (career: 1985-2000), not the current active player “Fernandez L.” (likely Leylah Fernandez).
Impact on Analysis:
- Cannot calculate expected hold/break rates for Player 1
- Cannot model game distributions
- Cannot calculate expected total games
- Cannot calculate expected game margin
- Both totals and spread markets are unanalyzable
Recommendation:
- PASS on all markets for this match
- Fix data scraper to correctly identify active “Fernandez L.” player
- Re-collect briefing data before attempting analysis
- Verify player name matching logic in stats_scraper.py
Fernandez L. - Complete Profile
INVALID DATA WARNING
All statistics below are INVALID (matched to retired player Mary Joe Fernandez):
Rankings & Form
| Metric | Value | Percentile |
|---|---|---|
| WTA Rank | Unknown | - |
| Career High | Unknown | - |
| Form Rating | N/A - 0 matches | - |
| Recent Form | No data (0 matches) | - |
| Win % (Last 12m) | 0% (0-0) | - |
| Win % (Career) | 0% (0-0) | - |
Surface Performance (All Surfaces)
| Metric | Value | Percentile |
|---|---|---|
| Win % on Surface | 0% (0-0) | - |
| Avg Total Games | 0.0 games/match | - |
| Breaks Per Match | 0.0 breaks | - |
Hold/Break Analysis
| Category | Stat | Value | Percentile |
|---|---|---|---|
| Hold % | Service Games Held | 0% | - |
| Break % | Return Games Won | 0% | - |
| Tiebreak | TB Frequency | 0% | - |
| TB Win Rate | 0% (n=0) | - |
Game Distribution Metrics
| Metric | Value | Context |
|---|---|---|
| Avg Total Games | 0.0 | NO DATA AVAILABLE |
| Avg Games Won | 0.0 | NO DATA AVAILABLE |
| Straight Sets Win % | N/A | NO DATA AVAILABLE |
| P(Over 22.5 games) | N/A | NO DATA AVAILABLE |
Serve Statistics
| Metric | Value | Percentile |
|---|---|---|
| Aces/Match | N/A | - |
| Double Faults/Match | N/A | - |
| 1st Serve In % | N/A | - |
| 1st Serve Won % | N/A | - |
| 2nd Serve Won % | N/A | - |
Return Statistics
| Metric | Value | Percentile |
|---|---|---|
| vs 1st Serve % | N/A | - |
| vs 2nd Serve % | N/A | - |
| BPs Created/Return Game | N/A | - |
Physical & Context
| Factor | Value |
|---|---|
| Age / Height / Weight | Unknown |
| Handedness | Unknown |
| Rest Days | Unknown |
| Sets Last 7d | Unknown |
Tjen J. - Complete Profile
Rankings & Form
| Metric | Value | Percentile |
|---|---|---|
| WTA Rank | Unknown | - |
| Career High | Unknown | - |
| Form Rating | N/A | - |
| Recent Form | 7-2 (Last 9 matches) | - |
| Win % (Last 12m) | 71.4% (10-4) | - |
| Win % (Career) | 71.4% (10-4 from L52W) | - |
Surface Performance (All Surfaces)
| Metric | Value | Percentile |
|---|---|---|
| Win % on Surface | 71.4% (10-4) | - |
| Avg Total Games | 22.2 games/match | - |
| Breaks Per Match | 30.1% break rate | - |
Hold/Break Analysis
| Category | Stat | Value | Percentile |
|---|---|---|---|
| Hold % | Service Games Held | 78.5% | - |
| Break % | Return Games Won | 30.1% | - |
| Tiebreak | TB Frequency | 42.9% (6 TBs in 14 matches) | - |
| TB Win Rate | 83.3% (n=6) | - |
Game Distribution Metrics
| Metric | Value | Context |
|---|---|---|
| Avg Total Games | 22.2 | Last 52 weeks |
| Avg Games Won | 12.1 (169 / 14 matches) | - |
| Avg Games Lost | 10.1 (142 / 14 matches) | - |
| Straight Sets Win % | ~44% (based on 3-set% = 55.6%) | - |
| P(Over 22.5 games) | N/A | - |
Serve Statistics
| Metric | Value | Percentile |
|---|---|---|
| Aces/Match | N/A | - |
| Double Faults/Match | N/A | - |
| 1st Serve In % | 61.1% | - |
| 1st Serve Won % | 70.1% | - |
| 2nd Serve Won % | 51.4% | - |
Return Statistics
| Metric | Value | Percentile |
|---|---|---|
| vs 1st Serve % | N/A | - |
| vs 2nd Serve % | N/A | - |
| BPs Created/Return Game | N/A | - |
Physical & Context
| Factor | Value |
|---|---|
| Age / Height / Weight | Unknown |
| Handedness | Unknown |
| Rest Days | Unknown |
| Sets Last 7d | Unknown |
Recent Form Analysis
| Metric | Value |
|---|---|
| Last N Record | 7-2 |
| Avg Games/Match | 25.0 (recent form) |
| Three-Set % | 55.6% |
| Form Trend | Improving |
Clutch Statistics
| Metric | Value | Context |
|---|---|---|
| BP Conversion | 45.5% | Above tour avg (~40%) |
| BP Saved | 60.0% | At tour avg (~60%) |
Playing Style
| Metric | Value | Classification |
|---|---|---|
| Winner/UFE Ratio | 0.91 | Error-Prone |
| Style | Error-Prone | More errors than winners |
Matchup Quality Assessment
ANALYSIS NOT POSSIBLE
Cannot assess matchup quality without valid Player 1 data.
Available Player 2 Context:
- Janice Tjen has valid L52W statistics (14 matches, 78.5% hold, 30.1% break)
- Recent form is improving (7-2 in last 9)
- Playing style is error-prone (W/UFE ratio 0.91)
- Tiebreak performance is strong (83.3% win rate, but small sample n=6)
Missing Player 1 Context:
- Cannot determine Elo comparison
- Cannot determine form advantage
- Cannot determine hold/break differential
- Cannot model expected game distributions
Game Distribution Analysis
MODELING NOT POSSIBLE
Set Score Probabilities: Cannot calculate without Player 1 hold/break data
Match Structure: Cannot calculate without Player 1 statistics
Total Games Distribution: Cannot model without both players’ data
Totals Analysis
| Metric | Value |
|---|---|
| Expected Total Games | N/A |
| 95% Confidence Interval | N/A |
| Fair Line | N/A |
| Market Line | O/U 20.5 |
| P(Over) | Cannot calculate |
| P(Under) | Cannot calculate |
Market Analysis
Market Implied Probabilities (No-Vig):
- P(Over 20.5): 52.1%
- P(Under 20.5): 47.9%
Market Lean: Slight Over lean (market line 20.5 with Over juice)
Model Cannot Validate: Without Player 1 hold/break data, cannot determine if this line is accurate or if edge exists.
Factors Driving Total (If Data Were Available)
Player 2 Context (Tjen J.):
- Hold rate: 78.5% (moderate - suggests competitive service games)
- Break rate: 30.1% (decent return game)
- Avg total: 22.2 games
- Three-set frequency: 55.6% (competitive matches)
- Recent form avg: 25.0 games (trending higher)
Expected Pattern (Speculative): If Player 1 has similar hold/break rates (~75-80% hold), expect:
- Moderate hold rates → 10-11 games per set
- Low tiebreak probability
- Competitive sets → likely 2-1 outcome
- Total games estimate: 21-24 games range
But this is pure speculation without Player 1 data.
Handicap Analysis
| Metric | Value |
|---|---|
| Expected Game Margin | N/A |
| 95% Confidence Interval | N/A |
| Fair Spread | N/A |
Spread Coverage Probabilities
| Line | P(Fernandez Covers) | P(Tjen Covers) | Edge |
|---|---|---|---|
| Fernandez -4.5 | Cannot calculate | Cannot calculate | N/A |
Market Analysis
Market Line: L. Fernandez -4.5 (implied favorite)
- Fernandez -4.5 @ 1.86 (No-vig: 49.7%)
- Tjen +4.5 @ 1.84 (No-vig: 50.3%)
Market Implication: Nearly even spread market (close to pick’em on -4.5 spread)
Model Cannot Validate: Without Player 1 data, cannot determine expected game margin or spread edge.
Head-to-Head (Game Context)
| Metric | Value |
|---|---|
| Total H2H Matches | Unknown |
| Avg Total Games in H2H | Unknown |
| Avg Game Margin | Unknown |
| TBs in H2H | Unknown |
| 3-Setters in H2H | Unknown |
No H2H data available in briefing.
Market Comparison
Totals
| Source | Line | Over | Under | Vig | Edge |
|---|---|---|---|---|---|
| Model | N/A | N/A | N/A | 0% | N/A |
| Sportsbet.io | O/U 20.5 | 1.80 (52.6%) | 1.96 (48.3%) | 0.9% | N/A |
| No-Vig | O/U 20.5 | 52.1% | 47.9% | - | N/A |
Game Spread
| Source | Line | Fav | Dog | Vig | Edge |
|---|---|---|---|---|---|
| Model | N/A | N/A | N/A | 0% | N/A |
| Sportsbet.io | Fernandez -4.5 | 1.86 (51.0%) | 1.84 (51.6%) | 2.6% | N/A |
| No-Vig | Fernandez -4.5 | 49.7% | 50.3% | - | N/A |
Market Vig Analysis:
- Totals vig: 0.9% (fair market)
- Spread vig: 2.6% (typical market)
Cannot calculate edges without model probabilities.
Recommendations
Totals Recommendation
| Field | Value |
|---|---|
| Market | Total Games |
| Selection | PASS |
| Target Price | N/A |
| Edge | N/A |
| Confidence | PASS |
| Stake | 0.0 units |
Rationale: Cannot analyze totals market without valid hold/break statistics for Player 1 (Fernandez L.). Data scraper matched to retired player “Mary Joe Fernandez” with 0 matches played. PASS recommendation is mandatory when critical data is missing.
Game Spread Recommendation
| Field | Value |
|---|---|
| Market | Game Handicap |
| Selection | PASS |
| Target Price | N/A |
| Edge | N/A |
| Confidence | PASS |
| Stake | 0.0 units |
Rationale: Cannot model expected game margin without Player 1 hold/break statistics. The -4.5 spread market implies a close match, but we cannot validate this without calculating hold/break differentials. PASS is the only responsible recommendation.
Pass Conditions
- PRIMARY: Missing critical hold/break data for Player 1
- Data collection error (wrong player matched)
- Cannot model game distributions
- Cannot calculate expected totals or game margins
- Edge calculation impossible without model probabilities
Action Required:
- Fix data scraper player matching logic
- Re-collect briefing for correct “Fernandez L.” player (likely Leylah Fernandez)
- Re-run analysis with valid data
- Only then can totals/spread edges be calculated
Confidence Calculation
Base Confidence (from edge size)
| Edge Range | Base Level |
|---|---|
| N/A | PASS |
Base Confidence: PASS (no edge calculable due to missing data)
Adjustments Applied
| Factor | Assessment | Adjustment | Applied |
|---|---|---|---|
| Form Trend | Cannot assess (P1 data missing) | N/A | No |
| Elo Gap | Cannot assess (P1 data missing) | N/A | No |
| Clutch Advantage | Cannot assess (P1 data missing) | N/A | No |
| Data Quality | LOW (Player 1 invalid) | -100% | Yes |
| Style Volatility | Cannot assess (P1 data missing) | N/A | No |
| Empirical Alignment | Cannot assess (no model) | N/A | No |
Data Quality Impact:
- Player 1 completeness: INVALID (0 matches, wrong player)
- Player 2 completeness: HIGH (14 matches, valid stats)
- Overall completeness: LOW
- Confidence multiplier: 0.0 (cannot proceed)
Final Confidence
| Metric | Value |
|---|---|
| Base Level | PASS |
| Net Adjustment | -100% (invalid data) |
| Final Confidence | PASS |
| Confidence Justification | Data collection error invalidates all analysis. Player 1 matched to retired player with 0 matches. Cannot calculate hold/break rates, game distributions, or edges. |
Key Supporting Factors:
- None (data invalid)
Key Risk Factors:
- CRITICAL: Player 1 statistics completely invalid (matched to retired player)
- Cannot model expected game distributions without both players’ hold/break data
- Missing data = cannot calculate edge = mandatory PASS per methodology (2.5% minimum edge)
Risk & Unknowns
Variance Drivers
- Data Collection Failure: Primary risk is invalid data, not market variance
- Player Identification Error: Scraper matched “Fernandez L.” to wrong player
- Cannot Assess Market Variance: Without model, cannot determine if market is tight or wide
Data Limitations
CRITICAL LIMITATIONS:
- Player 1 (Fernandez L.) hold % = 0% (INVALID)
- Player 1 break % = 0% (INVALID)
- Player 1 matches played = 0 (INVALID - matched to retired player)
- Player 1 tiebreak data = 0 TBs (INVALID)
- Player 1 recent form = No data (INVALID)
- Player 1 all statistics = Missing/Invalid
Player 2 Data Quality:
- Tjen J. statistics appear valid (14 matches, reasonable percentages)
- Small sample size (n=14 matches) but sufficient for baseline analysis
- Tiebreak sample small (n=6 TBs) but above minimum threshold (>5)
Technical Issues to Resolve
Data Scraper Issues:
- Player name matching logic needs improvement
- “Fernandez L.” matched to “Mary Joe Fernandez” (retired 2000)
- Should match to active “Leylah Fernandez” (or other active L. Fernandez)
- Add validation: Flag if matches_played = 0
- Add validation: Flag if player last match > 5 years ago
Recommended Fixes:
# In stats_scraper.py - add validation
if player_stats['matches_played'] == 0:
logger.warning(f"Player {player_name} has 0 matches - likely wrong player match")
# Add recency check
if player_stats['last_match_date'] < (today - 365 days):
logger.warning(f"Player {player_name} last match was >1 year ago - verify active status")
Correlation Notes
- Cannot assess correlation without model probabilities
- If analysis were possible, totals and spread would be correlated:
- Higher total → more games → spread less meaningful
- Lower total → fewer games → spread more decisive
Sources
- TennisAbstract.com - Player statistics attempted (Last 52 Weeks Tour-Level Splits)
- Player 1 ERROR: Matched to Mary Joe Fernandez (retired) instead of active player
- Player 2 VALID: Janice Tjen statistics appear accurate (14 matches)
- Sportsbet.io - Match odds (totals: O/U 20.5, spread: Fernandez -4.5)
- Briefing File:
fernandez_l_vs_tjen_j_briefing.json(collected 2026-01-19T08:22:28Z)
Verification Checklist
Core Statistics
- Hold % collected for both players (surface-adjusted) - FAILED (P1 invalid)
- Break % collected for both players (opponent-adjusted) - FAILED (P1 invalid)
- Tiebreak statistics collected (with sample size) - FAILED (P1 invalid)
- Game distribution modeled - FAILED (cannot model)
- Expected total games calculated with 95% CI - FAILED (cannot calculate)
- Expected game margin calculated with 95% CI - FAILED (cannot calculate)
- Totals line compared to market - FAILED (no model line)
- Spread line compared to market - FAILED (no model line)
- Edge ≥ 2.5% for any recommendations - N/A (no edges calculated)
- Confidence intervals appropriately wide - N/A (no modeling)
- NO moneyline analysis included - PASSED
Enhanced Analysis (New)
- Elo ratings extracted (overall + surface-specific) - FAILED (P1 missing)
- Recent form data included (last 10 record, trend, dominance ratio) - PARTIAL (P2 only)
- Clutch stats analyzed (BP conversion, BP saved, TB serve/return) - PARTIAL (P2 only)
- Key games metrics reviewed (consolidation, breakback, sv_for_set/match) - FAILED (P1 missing)
- Playing style assessed (winner/UFE ratio, style classification) - PARTIAL (P2 only)
- Matchup Quality Assessment section completed - FAILED (P1 missing)
- Clutch Performance section completed - FAILED (P1 missing)
- Set Closure Patterns section completed - FAILED (P1 missing)
- Playing Style Analysis section completed - FAILED (P1 missing)
- Confidence Calculation section with all adjustment factors - PASSED (PASS recommendation)
Data Quality Issues
- Data limitation clearly documented in report
- PASS recommendation issued for both totals and spread
- Root cause identified (player matching error)
- Recommended fixes outlined
- Report explains why analysis cannot proceed
Overall Verification Status: INCOMPLETE - Data collection error prevents analysis. PASS recommendation is appropriate and well-justified.
Appendix: Technical Notes for Development Team
Data Scraper Improvements Needed
Issue: stats_scraper.py matched “Fernandez L.” to retired player “Mary Joe Fernandez”
Likely Cause:
- Search query “Fernandez L.” returned multiple results
- Scraper selected first/wrong result without validation
- No recency check on player activity
Recommended Solutions:
- Add Active Player Filter:
# Filter to players with matches in last 52 weeks if player_stats['matches_played'] == 0: logger.warning("Player has 0 matches - trying alternative search") # Try more specific search or request manual confirmation - Add Disambiguation Logic:
# If multiple "Fernandez L." results: # - Prioritize players with recent matches (last 12 months) # - Check tour (ATP vs WTA) against match metadata # - Verify ranking/Elo is reasonable (not 0) - Add Data Validation:
def validate_player_stats(stats, player_name): if stats['matches_played'] == 0: raise ValueError(f"{player_name}: 0 matches played - likely wrong player") if stats['hold_pct'] == 0 and stats['break_pct'] == 0: raise ValueError(f"{player_name}: All stats are 0 - data collection failed") return True - Use Full Name When Available:
- If briefing metadata can provide full first name, use it
- “Leylah Fernandez” vs “L. Fernandez” improves matching accuracy
- Manual Verification Mode:
- For ambiguous players, output options and request selection
- Cache correct player mappings for future matches
Testing:
- Test with other common surnames: Williams, Djokovic, Zverev
- Test with abbreviated first names: A. Zverev (Alexander vs Mischa)
- Test with retired vs active players of same name