{
 "generated": "2026-11-03",
 "tolerance_pct_pts": 0.5,
 "vectors": [
  {
   "input": {
    "tour": "atp",
    "p1": "ruud c",
    "p2": "jodar r",
    "tournament": "Paris Masters",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": 23,
    "rank2": 10,
    "odds1": 2.56,
    "odds2": 1.51,
    "games_calib": "market",
    "spread_line": 2.5,
    "spread_odds1": 1.91,
    "spread_odds2": 1.8,
    "total_line": 22.5,
    "over_odds": 1.8,
    "under_odds": 1.93
   },
   "expected": {
    "best_of": 3,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.611 vs Pinnacle 0.600",
    "indoor": 1,
    "p1_model": 0.337,
    "p1_market_novig": 0.371,
    "fair_odds1": 2.97,
    "fair_odds2": 1.51,
    "edge1": -0.137,
    "edge2": 0.001,
    "court_speed_z": 0.55,
    "final_set": "tb7",
    "p1_serve_pt": 0.62,
    "p2_serve_pt": 0.655,
    "exp_total": 24.09,
    "exp_margin1": -1.41,
    "fair_total": 22.5,
    "fair_spread1": 2.5,
    "spread_line1": 2.5,
    "spread_odds1": 1.91,
    "spread_odds2": 1.8,
    "p_cover1": 0.485,
    "p_cover2": 0.515,
    "spread_edge1": -0.074,
    "spread_edge2": -0.072,
    "total_line": 22.5,
    "over_odds": 1.8,
    "under_odds": 1.93,
    "p_over": 0.502,
    "p_under": 0.498,
    "over_edge": -0.096,
    "under_edge": -0.039,
    "features": {
     "elo": -0.397717,
     "ranking": -0.832909,
     "best_of_5_x_elo": -0.0,
     "deciding_set_record": -0.04902,
     "fatigue_sets7d": -2.0,
     "rest_days": 0.0,
     "breakback_proxy_return_games_won": -0.073854,
     "h2h": -0.2,
     "form": -0.115367,
     "agg_spw": 0.000949,
     "age": 7.734428,
     "age_sq": -3.180592,
     "surface_change": 0.0,
     "log_days_since_surface": 0.0,
     "elo_traj_365d": -0.163688,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": 0.060649,
     "indoor_x_elo": -0.397717,
     "ace_rate": 0.006666,
     "df_rate": 0.005763,
     "returning": 0.0,
     "long_layoff": 0.0,
     "first_in": 0.037507,
     "first_won": 0.001508,
     "second_won": 0.018444,
     "rgw_adj": 0.072176
    }
   },
   "names": [
    "Casper Ruud",
    "Rafael Jodar"
   ]
  },
  {
   "input": {
    "tour": "atp",
    "p1": "ruud c",
    "p2": "jodar r",
    "tournament": "Paris Masters",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": 23,
    "rank2": 10,
    "odds1": 2.56,
    "odds2": 1.51,
    "games_calib": "model",
    "spread_line": 2.5,
    "spread_odds1": 1.91,
    "spread_odds2": 1.8,
    "total_line": 22.5,
    "over_odds": 1.8,
    "under_odds": 1.93
   },
   "expected": {
    "best_of": 3,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.611 vs Pinnacle 0.600",
    "indoor": 1,
    "p1_model": 0.337,
    "p1_market_novig": 0.371,
    "fair_odds1": 2.97,
    "fair_odds2": 1.51,
    "edge1": -0.137,
    "edge2": 0.001,
    "court_speed_z": 0.55,
    "final_set": "tb7",
    "p1_serve_pt": 0.615,
    "p2_serve_pt": 0.66,
    "exp_total": 23.93,
    "exp_margin1": -1.79,
    "fair_total": 22.5,
    "fair_spread1": 3.5,
    "spread_line1": 2.5,
    "spread_odds1": 1.91,
    "spread_odds2": 1.8,
    "p_cover1": 0.449,
    "p_cover2": 0.551,
    "spread_edge1": -0.143,
    "spread_edge2": -0.008,
    "total_line": 22.5,
    "over_odds": 1.8,
    "under_odds": 1.93,
    "p_over": 0.491,
    "p_under": 0.509,
    "over_edge": -0.116,
    "under_edge": -0.017,
    "features": {
     "elo": -0.397717,
     "ranking": -0.832909,
     "best_of_5_x_elo": -0.0,
     "deciding_set_record": -0.04902,
     "fatigue_sets7d": -2.0,
     "rest_days": 0.0,
     "breakback_proxy_return_games_won": -0.073854,
     "h2h": -0.2,
     "form": -0.115367,
     "agg_spw": 0.000949,
     "age": 7.734428,
     "age_sq": -3.180592,
     "surface_change": 0.0,
     "log_days_since_surface": 0.0,
     "elo_traj_365d": -0.163688,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": 0.060649,
     "indoor_x_elo": -0.397717,
     "ace_rate": 0.006666,
     "df_rate": 0.005763,
     "returning": 0.0,
     "long_layoff": 0.0,
     "first_in": 0.037507,
     "first_won": 0.001508,
     "second_won": 0.018444,
     "rgw_adj": 0.072176
    }
   },
   "names": [
    "Casper Ruud",
    "Rafael Jodar"
   ]
  },
  {
   "input": {
    "tour": "atp",
    "p1": "shelton b",
    "p2": "norrie c",
    "tournament": "Paris Masters",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": 4,
    "rank2": 45,
    "odds1": 1.35,
    "odds2": 3.19,
    "games_calib": "market",
    "spread_line": -3.5,
    "spread_odds1": 1.9,
    "spread_odds2": 1.9,
    "total_line": 21.5,
    "over_odds": 1.87,
    "under_odds": 1.87
   },
   "expected": {
    "best_of": 3,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.611 vs Pinnacle 0.600",
    "indoor": 1,
    "p1_model": 0.772,
    "p1_market_novig": 0.703,
    "fair_odds1": 1.3,
    "fair_odds2": 4.39,
    "edge1": 0.042,
    "edge2": -0.273,
    "court_speed_z": 0.55,
    "final_set": "tb7",
    "p1_serve_pt": 0.731,
    "p2_serve_pt": 0.674,
    "exp_total": 25.76,
    "exp_margin1": 1.81,
    "fair_total": 23.5,
    "fair_spread1": -2.5,
    "spread_line1": -3.5,
    "spread_odds1": 1.9,
    "spread_odds2": 1.9,
    "p_cover1": 0.391,
    "p_cover2": 0.609,
    "spread_edge1": -0.257,
    "spread_edge2": 0.157,
    "total_line": 21.5,
    "over_odds": 1.87,
    "under_odds": 1.87,
    "p_over": 0.701,
    "p_under": 0.299,
    "over_edge": 0.311,
    "under_edge": -0.441,
    "features": {
     "elo": 0.987107,
     "ranking": 2.420368,
     "best_of_5_x_elo": 0.0,
     "deciding_set_record": -6.1e-05,
     "fatigue_sets7d": -2.0,
     "rest_days": 4.0,
     "breakback_proxy_return_games_won": -0.084141,
     "h2h": -0.2,
     "form": 0.041209,
     "agg_spw": 0.039838,
     "age": -7.126626,
     "age_sq": -2.251643,
     "surface_change": 0.0,
     "log_days_since_surface": 1.098612,
     "elo_traj_365d": 0.214717,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": 0.1401,
     "indoor_x_elo": 0.987107,
     "ace_rate": 0.12003,
     "df_rate": 0.022378,
     "returning": 0.0,
     "long_layoff": 0.0,
     "first_in": 0.017197,
     "first_won": 0.038066,
     "second_won": 0.00507,
     "rgw_adj": -0.009882
    }
   },
   "names": [
    "Ben Shelton",
    "Cameron Norrie"
   ]
  },
  {
   "input": {
    "tour": "atp",
    "p1": "djokovic n",
    "p2": "vacherot v",
    "tournament": "Paris Masters",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": 11,
    "rank2": 27,
    "odds1": 1.43,
    "odds2": 2.79,
    "games_calib": "market"
   },
   "expected": {
    "best_of": 3,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.611 vs Pinnacle 0.600",
    "indoor": 1,
    "p1_model": 0.673,
    "p1_market_novig": 0.661,
    "fair_odds1": 1.49,
    "fair_odds2": 3.06,
    "edge1": -0.038,
    "edge2": -0.087,
    "court_speed_z": 0.55,
    "final_set": "tb7",
    "p1_serve_pt": 0.694,
    "p2_serve_pt": 0.65,
    "exp_total": 24.93,
    "exp_margin1": 1.6,
    "fair_total": 23.5,
    "fair_spread1": -2.5,
    "features": {
     "elo": 1.079159,
     "ranking": 0.897942,
     "best_of_5_x_elo": 0.0,
     "deciding_set_record": 0.09824,
     "fatigue_sets7d": -5.0,
     "rest_days": 3.0,
     "breakback_proxy_return_games_won": 0.078757,
     "h2h": -0.2,
     "form": -0.374301,
     "agg_spw": 0.066398,
     "age": 11.485284,
     "age_sq": 17.577752,
     "surface_change": 0.0,
     "log_days_since_surface": 0.693147,
     "elo_traj_365d": -0.769035,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": 0.400736,
     "indoor_x_elo": 1.079159,
     "ace_rate": -0.008913,
     "df_rate": -0.007074,
     "returning": 0.0,
     "long_layoff": 0.0,
     "first_in": 0.011027,
     "first_won": 0.063586,
     "second_won": 0.12859,
     "rgw_adj": 0.181319
    }
   },
   "names": [
    "Novak Djokovic",
    "Valentin Vacherot"
   ]
  },
  {
   "input": {
    "tour": "atp",
    "p1": "rinderknech a",
    "p2": "cerundolo f",
    "tournament": "Paris Masters",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": 68,
    "rank2": 20,
    "odds1": 2.44,
    "odds2": 1.55,
    "games_calib": "market",
    "total_line": 22.5,
    "over_odds": 1.83,
    "under_odds": 1.91
   },
   "expected": {
    "best_of": 3,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.611 vs Pinnacle 0.600",
    "indoor": 1,
    "p1_model": 0.358,
    "p1_market_novig": 0.388,
    "fair_odds1": 2.79,
    "fair_odds2": 1.56,
    "edge1": -0.126,
    "edge2": -0.006,
    "court_speed_z": 0.55,
    "final_set": "tb7",
    "p1_serve_pt": 0.628,
    "p2_serve_pt": 0.658,
    "exp_total": 24.3,
    "exp_margin1": -1.2,
    "fair_total": 22.5,
    "fair_spread1": 2.5,
    "total_line": 22.5,
    "over_odds": 1.83,
    "under_odds": 1.91,
    "p_over": 0.514,
    "p_under": 0.486,
    "over_edge": -0.059,
    "under_edge": -0.072,
    "features": {
     "elo": -0.430263,
     "ranking": -1.223775,
     "best_of_5_x_elo": -0.0,
     "deciding_set_record": 0.020393,
     "fatigue_sets7d": 0.0,
     "rest_days": 0.0,
     "breakback_proxy_return_games_won": -0.128092,
     "h2h": 0.0,
     "form": -0.022711,
     "agg_spw": -0.024415,
     "age": 3.058179,
     "age_sq": 2.260666,
     "surface_change": 0.0,
     "log_days_since_surface": 0.0,
     "elo_traj_365d": -0.672452,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": -0.104855,
     "indoor_x_elo": -0.430263,
     "ace_rate": 0.051817,
     "df_rate": -0.008508,
     "returning": 0.0,
     "long_layoff": 0.0,
     "first_in": 0.040872,
     "first_won": 0.010697,
     "second_won": -0.10558,
     "rgw_adj": -0.037057
    }
   },
   "names": [
    "Arthur Rinderknech",
    "Francisco Cerundolo"
   ]
  },
  {
   "input": {
    "tour": "atp",
    "p1": "etcheverry t",
    "p2": "rublev a",
    "tournament": "Paris Masters",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": 31,
    "rank2": 22,
    "odds1": 2.93,
    "odds2": 1.4,
    "games_calib": "market"
   },
   "expected": {
    "best_of": 3,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.611 vs Pinnacle 0.600",
    "indoor": 1,
    "p1_model": 0.387,
    "p1_market_novig": 0.323,
    "fair_odds1": 2.58,
    "fair_odds2": 1.63,
    "edge1": 0.134,
    "edge2": -0.142,
    "court_speed_z": 0.55,
    "final_set": "tb7",
    "p1_serve_pt": 0.644,
    "p2_serve_pt": 0.692,
    "exp_total": 24.72,
    "exp_margin1": -1.78,
    "fair_total": 22.5,
    "fair_spread1": 2.5,
    "features": {
     "elo": -0.805954,
     "ranking": -0.342945,
     "best_of_5_x_elo": -0.0,
     "deciding_set_record": -0.124471,
     "fatigue_sets7d": -2.0,
     "rest_days": 1.0,
     "breakback_proxy_return_games_won": 0.01219,
     "h2h": 0.0,
     "form": -0.068688,
     "agg_spw": -0.031492,
     "age": -1.741273,
     "age_sq": -0.736555,
     "surface_change": 0.0,
     "log_days_since_surface": 0.117783,
     "elo_traj_365d": -0.15797,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": -0.178048,
     "indoor_x_elo": -0.805954,
     "ace_rate": -0.006703,
     "df_rate": -0.007957,
     "returning": 0.0,
     "long_layoff": 0.0,
     "first_in": 0.030448,
     "first_won": -0.067903,
     "second_won": -0.009137,
     "rgw_adj": -0.070053
    }
   },
   "names": [
    "Tomas Martin Etcheverry",
    "Andrey Rublev"
   ]
  },
  {
   "input": {
    "tour": "atp",
    "p1": "sinner j",
    "p2": "alcaraz c",
    "tournament": "Paris Masters",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": null,
    "rank2": null,
    "odds1": 1.85,
    "odds2": 2.0,
    "games_calib": "market",
    "spread_line": -1.5,
    "spread_odds1": 1.95,
    "spread_odds2": 1.85,
    "total_line": 23.5,
    "over_odds": 1.9,
    "under_odds": 1.9
   },
   "expected": {
    "best_of": 3,
    "confidence": "limited evidence",
    "confidence_reasons": "Sinner J.: 114 days since last match",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.584 vs Pinnacle 0.539",
    "indoor": 1,
    "p1_model": 0.491,
    "p1_market_novig": 0.519,
    "fair_odds1": 2.04,
    "fair_odds2": 1.96,
    "edge1": -0.092,
    "edge2": 0.019,
    "court_speed_z": 0.55,
    "final_set": "tb7",
    "p1_serve_pt": 0.655,
    "p2_serve_pt": 0.65,
    "exp_total": 24.74,
    "exp_margin1": 0.2,
    "fair_total": 23.5,
    "fair_spread1": -0.5,
    "spread_line1": -1.5,
    "spread_odds1": 1.95,
    "spread_odds2": 1.85,
    "p_cover1": 0.459,
    "p_cover2": 0.541,
    "spread_edge1": -0.104,
    "spread_edge2": 0.0,
    "total_line": 23.5,
    "over_odds": 1.9,
    "under_odds": 1.9,
    "p_over": 0.474,
    "p_under": 0.526,
    "over_edge": -0.099,
    "under_edge": -0.001,
    "features": {
     "elo": 0.571315,
     "ranking": 0.405465,
     "best_of_5_x_elo": 0.0,
     "deciding_set_record": -0.049749,
     "fatigue_sets7d": -10.0,
     "rest_days": 28.0,
     "breakback_proxy_return_games_won": -0.02681,
     "h2h": -0.142857,
     "form": 0.005378,
     "agg_spw": 0.057635,
     "age": 1.716632,
     "age_sq": -0.581846,
     "surface_change": 0.0,
     "log_days_since_surface": 4.295015,
     "elo_traj_365d": 0.477679,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": 0.234656,
     "indoor_x_elo": 0.571315,
     "ace_rate": 0.021616,
     "df_rate": -0.021361,
     "returning": 1.0,
     "long_layoff": 4.442651,
     "first_in": -0.015572,
     "first_won": 0.067711,
     "second_won": 0.035089,
     "rgw_adj": 0.040932
    }
   },
   "names": [
    "Jannik Sinner",
    "Carlos Alcaraz"
   ]
  },
  {
   "input": {
    "tour": "atp",
    "p1": "sinner j",
    "p2": "zverev a",
    "tournament": "Tour Finals",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": null,
    "rank2": null,
    "odds1": 1.3,
    "odds2": 3.6,
    "games_calib": "model"
   },
   "expected": {
    "best_of": 3,
    "confidence": "limited evidence",
    "confidence_reasons": "Sinner J.: 114 days since last match",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.584 vs Pinnacle 0.539",
    "indoor": 1,
    "p1_model": 0.666,
    "p1_market_novig": 0.735,
    "fair_odds1": 1.5,
    "fair_odds2": 2.99,
    "edge1": -0.134,
    "edge2": 0.202,
    "court_speed_z": 0.97,
    "final_set": "tb7",
    "p1_serve_pt": 0.717,
    "p2_serve_pt": 0.671,
    "exp_total": 25.66,
    "exp_margin1": 1.52,
    "fair_total": 23.5,
    "fair_spread1": -2.5,
    "features": {
     "elo": 1.451996,
     "ranking": -0.693147,
     "best_of_5_x_elo": 0.0,
     "deciding_set_record": 0.052952,
     "fatigue_sets7d": -10.0,
     "rest_days": 27.0,
     "breakback_proxy_return_games_won": 0.04388,
     "h2h": 0.368421,
     "form": 0.065065,
     "agg_spw": 0.082779,
     "age": -4.323066,
     "age_sq": -1.145716,
     "surface_change": 0.0,
     "log_days_since_surface": 4.007333,
     "elo_traj_365d": -0.03097,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": 0.414383,
     "indoor_x_elo": 1.451996,
     "ace_rate": 0.019377,
     "df_rate": -0.040165,
     "returning": 1.0,
     "long_layoff": 4.442651,
     "first_in": -0.058508,
     "first_won": 0.108347,
     "second_won": 0.08961,
     "rgw_adj": 0.075712
    }
   },
   "names": [
    "Jannik Sinner",
    "Alexander Zverev"
   ]
  },
  {
   "input": {
    "tour": "atp",
    "p1": "alcaraz c",
    "p2": "zverev a",
    "tournament": "Australian Open",
    "best_of": 5,
    "date": "2026-11-03",
    "rank1": null,
    "rank2": null,
    "odds1": 1.4,
    "odds2": 3.0,
    "games_calib": "market",
    "total_line": 38.5,
    "over_odds": 1.9,
    "under_odds": 1.9
   },
   "expected": {
    "best_of": 5,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.611 vs Pinnacle 0.600",
    "indoor": 0,
    "p1_model": 0.689,
    "p1_market_novig": 0.682,
    "fair_odds1": 1.45,
    "fair_odds2": 3.22,
    "edge1": -0.035,
    "edge2": -0.068,
    "court_speed_z": 0.95,
    "final_set": "tb10",
    "p1_serve_pt": 0.678,
    "p2_serve_pt": 0.634,
    "exp_total": 39.31,
    "exp_margin1": 2.64,
    "fair_total": 38.5,
    "fair_spread1": -4.5,
    "total_line": 38.5,
    "over_odds": 1.9,
    "under_odds": 1.9,
    "p_over": 0.51,
    "p_under": 0.49,
    "over_edge": -0.031,
    "under_edge": -0.069,
    "features": {
     "elo": 0.880681,
     "ranking": -1.098612,
     "best_of_5_x_elo": 0.880681,
     "deciding_set_record": 0.102701,
     "fatigue_sets7d": 0.0,
     "rest_days": -1.0,
     "breakback_proxy_return_games_won": 0.07069,
     "h2h": 0.058824,
     "form": 0.059687,
     "agg_spw": 0.03064,
     "age": -6.039699,
     "age_sq": -0.563871,
     "surface_change": 0.0,
     "log_days_since_surface": -0.287682,
     "elo_traj_365d": -0.508649,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": 0.199163,
     "indoor_x_elo": 0.0,
     "ace_rate": -0.008952,
     "df_rate": -0.023465,
     "returning": 0.0,
     "long_layoff": 0.0,
     "first_in": -0.042941,
     "first_won": 0.052224,
     "second_won": 0.054792,
     "rgw_adj": 0.045261
    }
   },
   "names": [
    "Carlos Alcaraz",
    "Alexander Zverev"
   ]
  },
  {
   "input": {
    "tour": "atp",
    "p1": "fritz t",
    "p2": "minaur a",
    "tournament": "Wimbledon",
    "best_of": 5,
    "date": "2026-11-03",
    "rank1": null,
    "rank2": null,
    "odds1": 1.7,
    "odds2": 2.2,
    "games_calib": "model"
   },
   "expected": {
    "best_of": 5,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.611 vs Pinnacle 0.600",
    "indoor": 0,
    "p1_model": 0.482,
    "p1_market_novig": 0.564,
    "fair_odds1": 2.07,
    "fair_odds2": 1.93,
    "edge1": -0.18,
    "edge2": 0.139,
    "court_speed_z": 1.36,
    "final_set": "tb10",
    "p1_serve_pt": 0.678,
    "p2_serve_pt": 0.682,
    "exp_total": 41.45,
    "exp_margin1": -0.23,
    "fair_total": 41.5,
    "fair_spread1": 0.5,
    "features": {
     "elo": 0.166132,
     "ranking": -0.287682,
     "best_of_5_x_elo": 0.166132,
     "deciding_set_record": -0.00102,
     "fatigue_sets7d": -2.0,
     "rest_days": 1.0,
     "breakback_proxy_return_games_won": -0.063178,
     "h2h": -0.166667,
     "form": -0.192129,
     "agg_spw": -0.014134,
     "age": 1.305955,
     "age_sq": 0.603546,
     "surface_change": 0.0,
     "log_days_since_surface": -0.016667,
     "elo_traj_365d": -0.065286,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": -0.043394,
     "indoor_x_elo": 0.0,
     "ace_rate": 0.07325,
     "df_rate": -0.017383,
     "returning": 0.0,
     "long_layoff": 0.0,
     "first_in": 0.064665,
     "first_won": 0.001618,
     "second_won": -0.067632,
     "rgw_adj": -0.016949
    }
   },
   "names": [
    "Taylor Harry Fritz",
    "Alex De Minaur"
   ]
  },
  {
   "input": {
    "tour": "wta",
    "p1": "sabalenka a",
    "p2": "swiatek i",
    "tournament": "Riyadh Finals",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": null,
    "rank2": null,
    "odds1": 1.65,
    "odds2": 2.3,
    "games_calib": "market",
    "spread_line": -2.5,
    "spread_odds1": 1.95,
    "spread_odds2": 1.85,
    "total_line": 21.5,
    "over_odds": 1.85,
    "under_odds": 1.95
   },
   "expected": {
    "best_of": 3,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.614 vs Pinnacle 0.600",
    "indoor": 1,
    "p1_model": 0.563,
    "p1_market_novig": 0.582,
    "fair_odds1": 1.78,
    "fair_odds2": 2.29,
    "edge1": -0.072,
    "edge2": 0.006,
    "court_speed_z": 0.73,
    "final_set": "tb7",
    "p1_serve_pt": 0.605,
    "p2_serve_pt": 0.581,
    "exp_total": 22.91,
    "exp_margin1": 1.03,
    "fair_total": 21.5,
    "fair_spread1": -2.5,
    "spread_line1": -2.5,
    "spread_odds1": 1.95,
    "spread_odds2": 1.85,
    "p_cover1": 0.494,
    "p_cover2": 0.506,
    "spread_edge1": -0.037,
    "spread_edge2": -0.063,
    "total_line": 21.5,
    "over_odds": 1.85,
    "under_odds": 1.95,
    "p_over": 0.505,
    "p_under": 0.495,
    "over_edge": -0.065,
    "under_edge": -0.035,
    "features": {
     "elo": 0.345777,
     "ranking": 1.504077,
     "deciding_set_record": -0.035556,
     "fatigue_sets7d": 0.0,
     "rest_days": 3.0,
     "tournament_history": -0.034088,
     "h2h_surface": 0.0,
     "agg_spw": 0.005614,
     "returning": 0.0,
     "long_layoff": 0.0,
     "s3": 0.0,
     "s14": 0.0,
     "elo_x_uncertainty": 0.151941,
     "age": 3.069131,
     "age_sq": 0.557947,
     "min3": 0.0,
     "min7": 0.0,
     "min14": 0.0,
     "surface_change": 0.0,
     "log_days_since_surface": 0.154151,
     "log_days_since_any": 0.154151,
     "g3": 0.0,
     "g7": 0.0,
     "g14": 0.0,
     "travel_km": 0.0,
     "travel_tz": 0.0,
     "indoor_x_elo": 0.345777
    }
   },
   "names": [
    "Aryna Sabalenka",
    "Iga Swiatek"
   ]
  },
  {
   "input": {
    "tour": "wta",
    "p1": "gauff c",
    "p2": "rybakina e",
    "tournament": "Riyadh Finals",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": null,
    "rank2": null,
    "odds1": 2.1,
    "odds2": 1.75,
    "games_calib": "model"
   },
   "expected": {
    "best_of": 3,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.614 vs Pinnacle 0.600",
    "indoor": 1,
    "p1_model": 0.286,
    "p1_market_novig": 0.455,
    "fair_odds1": 3.5,
    "fair_odds2": 1.4,
    "edge1": -0.4,
    "edge2": 0.25,
    "court_speed_z": 0.73,
    "final_set": "tb7",
    "p1_serve_pt": 0.552,
    "p2_serve_pt": 0.617,
    "exp_total": 22.14,
    "exp_margin1": -2.77,
    "fair_total": 20.5,
    "fair_spread1": 4.5,
    "features": {
     "elo": -0.346439,
     "ranking": -1.386294,
     "deciding_set_record": 0.046455,
     "fatigue_sets7d": -2.0,
     "rest_days": 22.0,
     "tournament_history": -0.120758,
     "h2h_surface": -0.166667,
     "agg_spw": -0.042843,
     "returning": 0.0,
     "long_layoff": 0.0,
     "s3": 0.0,
     "s14": -10.0,
     "elo_x_uncertainty": -0.16549,
     "age": -4.73922,
     "age_sq": 0.983526,
     "min3": 0.0,
     "min7": -1.350556,
     "min14": -6.514444,
     "surface_change": 0.0,
     "log_days_since_surface": 1.540445,
     "log_days_since_any": 1.540445,
     "g3": 0.0,
     "g7": -1.7,
     "g14": -8.2,
     "travel_km": -8.689344,
     "travel_tz": -6.0,
     "indoor_x_elo": -0.346439
    }
   },
   "names": [
    "Cori Gauff",
    "Elena Rybakina"
   ]
  },
  {
   "input": {
    "tour": "wta",
    "p1": "swiatek i",
    "p2": "pegula j",
    "tournament": "Roland Garros",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": 2,
    "rank2": 5,
    "odds1": 1.25,
    "odds2": 4.2,
    "games_calib": "market"
   },
   "expected": {
    "best_of": 3,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.614 vs Pinnacle 0.600",
    "indoor": 0,
    "p1_model": 0.673,
    "p1_market_novig": 0.771,
    "fair_odds1": 1.49,
    "fair_odds2": 3.06,
    "edge1": -0.159,
    "edge2": 0.373,
    "court_speed_z": -1.2,
    "final_set": "tb10",
    "p1_serve_pt": 0.623,
    "p2_serve_pt": 0.538,
    "exp_total": 21.61,
    "exp_margin1": 3.57,
    "fair_total": 19.5,
    "fair_spread1": -4.5,
    "features": {
     "elo": 0.215931,
     "ranking": 0.916291,
     "deciding_set_record": -0.025745,
     "fatigue_sets7d": 0.0,
     "rest_days": -3.0,
     "tournament_history": 0.152183,
     "h2h_surface": 0.4,
     "agg_spw": 0.049909,
     "returning": 0.0,
     "long_layoff": 0.0,
     "s3": 0.0,
     "s14": 0.0,
     "elo_x_uncertainty": 0.096212,
     "age": -7.26078,
     "age_sq": -4.363426,
     "min3": 0.0,
     "min7": 0.0,
     "min14": 0.0,
     "surface_change": 0.0,
     "log_days_since_surface": -0.031351,
     "log_days_since_any": -0.154151,
     "g3": 0.0,
     "g7": 0.0,
     "g14": 0.0,
     "travel_km": 0.0,
     "travel_tz": 0.0,
     "indoor_x_elo": 0.0
    }
   },
   "names": [
    "Iga Swiatek",
    "Jessica Pegula"
   ]
  },
  {
   "input": {
    "tour": "atp",
    "p1": "zverev a",
    "p2": "fritz t",
    "tournament": "Tour Finals",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": null,
    "rank2": null,
    "odds1": 1.8,
    "odds2": 2.05,
    "games_calib": "market"
   },
   "expected": {
    "best_of": 3,
    "confidence": "good",
    "confidence_reasons": "",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.611 vs Pinnacle 0.600",
    "indoor": 1,
    "p1_model": 0.732,
    "p1_market_novig": 0.532,
    "fair_odds1": 1.37,
    "fair_odds2": 3.72,
    "edge1": 0.317,
    "edge2": -0.45,
    "court_speed_z": 0.97,
    "final_set": "tb7",
    "p1_serve_pt": 0.707,
    "p2_serve_pt": 0.698,
    "exp_total": 26.39,
    "exp_margin1": 0.28,
    "fair_total": 25.5,
    "fair_spread1": -0.5,
    "features": {
     "elo": 0.792854,
     "ranking": 2.484907,
     "best_of_5_x_elo": 0.0,
     "deciding_set_record": 0.049222,
     "fatigue_sets7d": 3.0,
     "rest_days": 0.0,
     "breakback_proxy_return_games_won": 0.039155,
     "h2h": -0.125,
     "form": 0.025389,
     "agg_spw": 0.05026,
     "age": 0.52293,
     "age_sq": 0.337309,
     "surface_change": 0.0,
     "log_days_since_surface": 0.0,
     "elo_traj_365d": 0.57462,
     "qual_matches7": 0.0,
     "qual_hours7": 0.0,
     "comp_spw": 0.128264,
     "indoor_x_elo": 0.792854,
     "ace_rate": -0.026654,
     "df_rate": 0.041032,
     "returning": 0.0,
     "long_layoff": 0.0,
     "first_in": 0.056787,
     "first_won": -0.003015,
     "second_won": 0.049902,
     "rgw_adj": 0.028923
    }
   },
   "names": [
    "Alexander Zverev",
    "Taylor Harry Fritz"
   ]
  },
  {
   "input": {
    "tour": "wta",
    "p1": "anisimova a",
    "p2": "paolini j",
    "tournament": "Riyadh Finals",
    "best_of": 3,
    "date": "2026-11-03",
    "rank1": null,
    "rank2": null,
    "odds1": 1.6,
    "odds2": 2.4,
    "games_calib": "model"
   },
   "expected": {
    "best_of": 3,
    "confidence": "moderate",
    "confidence_reasons": "Anisimova A.: 59 days since last match",
    "confidence_backtest": "2024-26 test, this tier: model log loss 0.628 vs Pinnacle 0.630",
    "indoor": 1,
    "p1_model": 0.635,
    "p1_market_novig": 0.6,
    "fair_odds1": 1.57,
    "fair_odds2": 2.74,
    "edge1": 0.016,
    "edge2": -0.124,
    "court_speed_z": 0.73,
    "final_set": "tb7",
    "p1_serve_pt": 0.578,
    "p2_serve_pt": 0.538,
    "exp_total": 22.23,
    "exp_margin1": 1.79,
    "fair_total": 20.5,
    "fair_spread1": -3.5,
    "features": {
     "elo": 0.761344,
     "ranking": 0.464306,
     "deciding_set_record": -0.075851,
     "fatigue_sets7d": -2.0,
     "rest_days": 23.0,
     "tournament_history": 0.14376,
     "h2h_surface": 0.25,
     "agg_spw": 0.071841,
     "returning": 0.0,
     "long_layoff": 3.401197,
     "s3": 0.0,
     "s14": -6.0,
     "elo_x_uncertainty": 0.370356,
     "age": -5.659138,
     "age_sq": -2.209426,
     "min3": 0.0,
     "min7": -1.747778,
     "min14": -4.846111,
     "surface_change": 0.0,
     "log_days_since_surface": 2.014903,
     "log_days_since_any": 2.014903,
     "g3": 0.0,
     "g7": -2.2,
     "g14": -6.1,
     "travel_km": -8.689344,
     "travel_tz": -6.0,
     "indoor_x_elo": 0.761344
    }
   },
   "names": [
    "Amanda Anisimova",
    "Jasmine Paolini"
   ]
  }
 ]
}