{
  "schema": "ki.report.v2",
  "date": "2026-11-01",
  "generated_at": "2026-11-01T06:07:24.990886Z",
  "model": {
    "version": "goals_v7_cal",
    "trained_at": "2026-08-21T19:15:54.520701Z",
    "promoted_at": "2026-08-21T19:18:08.330088Z"
  },
  "coverage": {
    "fixtures_in_scope": 34,
    "fixtures_with_predictions": 34,
    "fixtures_rated_1x2": 34,
    "competitions": [
      "bundesliga",
      "eredivisie",
      "la-liga",
      "laliga-2",
      "league-one",
      "ligue-1",
      "premier-league",
      "primeira-liga",
      "scottish-prem",
      "serie-a",
      "super-lig"
    ],
    "note": "fixtures_in_scope counts publishable competitions kicking off on this date; a fixture can be in scope and unrated when the model has too little history for one of the clubs"
  },
  "reliability": {
    "measure": "forward reliability of the published 1X2 legs since the live model was promoted; lower is better",
    "threshold": 0.001,
    "legs_settled": 3303,
    "minimum_sample": 2000,
    "value": 0.000867,
    "status": "WITHIN THRESHOLD"
  },
  "uncertainty": {
    "numeric_intervals": null,
    "why_no_numeric_intervals": "KI does not publish confidence intervals on its probabilities. The model is a pair of gradient-boosted Poisson rates followed by a fitted calibrator; it has no posterior from which an interval follows, and no interval KI could construct has had its empirical coverage measured. An unvalidated interval invites exactly the over-reading it appears to guard against, so none is given.",
    "what_is_given_instead": "per-fixture data_quality facts about the inputs, and the measured reliability of the published probabilities by band below",
    "empirical_calibration_1x2": [
      {
        "band": "0.0-0.1",
        "legs": 92,
        "mean_predicted": 0.0719,
        "observed_frequency": 0.0326,
        "difference": -0.0393
      },
      {
        "band": "0.1-0.2",
        "legs": 397,
        "mean_predicted": 0.1589,
        "observed_frequency": 0.1889,
        "difference": 0.03
      },
      {
        "band": "0.2-0.3",
        "legs": 1514,
        "mean_predicted": 0.2601,
        "observed_frequency": 0.2483,
        "difference": -0.0118
      },
      {
        "band": "0.3-0.4",
        "legs": 645,
        "mean_predicted": 0.3428,
        "observed_frequency": 0.3504,
        "difference": 0.0076
      },
      {
        "band": "0.4-0.5",
        "legs": 485,
        "mean_predicted": 0.4464,
        "observed_frequency": 0.4268,
        "difference": -0.0196
      },
      {
        "band": "0.5-0.6",
        "legs": 263,
        "mean_predicted": 0.5429,
        "observed_frequency": 0.5817,
        "difference": 0.0388
      },
      {
        "band": "0.6-0.7",
        "legs": 134,
        "mean_predicted": 0.6466,
        "observed_frequency": 0.6567,
        "difference": 0.0102
      },
      {
        "band": "0.7-0.8",
        "legs": 81,
        "mean_predicted": 0.7464,
        "observed_frequency": 0.8025,
        "difference": 0.0561
      }
    ],
    "empirical_calibration_note": "settled live 1X2 legs across every model version, bucketed by published probability. One rating per leg \u2014 superseded revisions and ratings voided by a moved kickoff are excluded. Bands with fewer than 30 legs are omitted rather than shown as noise. This pools model versions, so it describes the published record rather than the current model alone; /evaluation.json breaks it down per version.",
    "full_evaluation": "/evaluation.json",
    "known_biases": [
      "Over/under 2.5 under-predicts overs. Measured on the current model: the published probability of over 2.5 sits about 5 percentage points below the realised rate. The bookmakers' own prices are biased in the same direction by a similar amount over the same fixtures, so this is a shift in scoring that neither has tracked, not a defect unique to KI.",
      "Scoring-regime changes reach the rates slowly. Measured over a 274-fixture out-of-sample window: realised goals per match moved +0.440 while the model's own expected-goals total moved +0.120, about 41% of what its inputs implied. Roughly 45% of the shortfall is the inputs lagging and 55% the mapping from inputs to rates lagging.",
      "A monthly retrain does not fix the above: refitting on data up to the window's start reduced the bias by 4.8%, against a pre-registered 25% bar."
    ],
    "minimum_sample_for_a_reliability_claim": 2000
  },
  "team_strength_conventions": {
    "rating": "Elo",
    "source": "internal \u2014 KI computes this from match results it holds; it is not an externally sourced rating",
    "is_model_input": true,
    "scale": "conventional Elo. The population mean sits near 1535 and a 100-point edge is a large one; the figure is only meaningful as a difference, not as an absolute.",
    "point_in_time": "the rating as it stood at the prediction horizon for that fixture, not today's rating",
    "known_limitation": "cross-league Elo is UNCALIBRATED (E23). Ratings are built from results within a largely separate fixture pool per competition, so 1600 in one league does not mean the same strength as 1600 in another. Comparing two clubs in different competitions \u2014 a Champions League tie, for instance \u2014 is not supported by any measurement KI has made.",
    "relationship_to_expected_goals": "Elo is one input among 93. Its share of a given fixture's expected-goals estimate is published per fixture in the distribution endpoint under the team_rating_elo family."
  },
  "market_conventions": {
    "margin_removal": {
      "method": "proportional",
      "formula": "p_i = raw_implied_i / sum(raw_implied)",
      "note": "Also called basic or multiplicative normalisation. It is the simplest de-vigging method and it is known to be biased: it distributes the bookmaker's margin evenly across selections, which understates favourites and overstates longshots relative to a Shin or logarithmic removal. It is reported here because it is the method KI actually uses everywhere else, so the feed and the model agree.",
      "applied_to": "1x2 across the three legs; over/under across the two sides of one line"
    },
    "price_types": {
      "executable_retail": "a price the two readers of this report could actually have taken (bet365)",
      "benchmark": "a sharper price used for comparison, not generally available at stake (pinnacle)",
      "aggregate": "a maximum or average across books; not a quotable price"
    },
    "comparison_price_note": "the market block's 1x2 and ou25 figures come from whichever book the feature view selected, which prefers pinnacle over bet365. price_type names which it is, so a benchmark price is not read as an executable one.",
    "snapshot_scope": "1X2 and over/under 2.5 and 4.5 from bet365 and pinnacle \u2014 the markets KI rates. Other markets and books are stored but not served here."
  },
  "schema_history": {
    "ki.report.v1": "fixtures, calibrated 1x2/ou25/ou45, market comparison, coverage, reliability",
    "ki.report.v2": "adds expected_goals, the scoreline distribution and its divergence from the published marginals, timestamped bookmaker snapshots, per-fixture data_quality, prediction revision history, and an uncertainty block"
  },
  "notes": [
    "Probabilities are calibrated. The 1X2 legs and over/under 2.5 are calibrated separately and renormalised, so they are independently calibrated marginals rather than two readings of one scoreline distribution.",
    "prediction_at is when the rating was published, and is always before kickoff.",
    "Market probabilities are margin-removed bookmaker prices, shown for comparison. They are not model inputs.",
    "expected_goals is the model's own pre-match estimate \u2014 the two Poisson rates the rating was built from. It is not an observed xG figure and is not derived backwards from the published probabilities.",
    "distribution.derived_uncalibrated is what the scoreline grid itself implies. It differs from the published probabilities, which are separately calibrated marginals; published_minus_derived states the difference per leg rather than hiding it by forcing the two to agree.",
    "Where expected_goals is null the reason is given. It is never filled in with a figure recomputed today, which would not be the estimate that was served.",
    "market.snapshots carry raw decimal odds and the exact observation time, so a consumer can apply its own margin removal instead of inheriting KI's proportional method. available_at_prediction says whether a price existed before the rating was made; a closing price did not."
  ],
  "fixtures": [
    {
      "fixture_id": 1584448,
      "competition": {
        "code": "super-lig",
        "id": 203
      },
      "kickoff_utc": "2026-11-01T10:30:00Z",
      "home": {
        "id": 3579,
        "name": "Amed"
      },
      "away": {
        "id": 3588,
        "name": "Ey\u00fcpspor"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.634138885358973,
          "draw": 0.2282680013422596,
          "away": 0.13759311329876744
        },
        "ou25": {
          "over": 0.5478228761411449,
          "under": 0.4521771238588551
        },
        "ou45": {
          "over": 0.15989536048275665,
          "under": 0.8401046395172433
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.7734340809363176,
          "draw": 0.14692896674322142,
          "away": 0.07963695232046103
        },
        "ou25": {
          "over": 0.6019900497512438,
          "under": 0.39800995024875624
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "away": 13.0,
                "draw": 6.5,
                "home": 1.2
              },
              "overround": 0.064103,
              "probability_margin_removed": {
                "away": 0.072289,
                "draw": 0.144578,
                "home": 0.783133
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "away": 13.0,
                "draw": 6.5,
                "home": 1.2
              },
              "overround": 0.064103,
              "probability_margin_removed": {
                "away": 0.072289,
                "draw": 0.144578,
                "home": 0.783133
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "away": 12.14,
                "draw": 6.58,
                "home": 1.25
              },
              "overround": 0.034348,
              "probability_margin_removed": {
                "away": 0.079637,
                "draw": 0.146929,
                "home": 0.773434
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "away": 12.14,
                "draw": 6.58,
                "home": 1.25
              },
              "overround": 0.034348,
              "probability_margin_removed": {
                "away": 0.079637,
                "draw": 0.146929,
                "home": 0.773434
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "under": 2.3,
                "over": 1.6
              },
              "overround": 0.059783,
              "probability_margin_removed": {
                "under": 0.410256,
                "over": 0.589744
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "under": 2.3,
                "over": 1.6
              },
              "overround": 0.059783,
              "probability_margin_removed": {
                "under": 0.410256,
                "over": 0.589744
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "under": 2.42,
                "over": 1.6
              },
              "overround": 0.038223,
              "probability_margin_removed": {
                "under": 0.39801,
                "over": 0.60199
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "under": 2.42,
                "over": 1.6
              },
              "overround": 0.038223,
              "probability_margin_removed": {
                "under": 0.39801,
                "over": 0.60199
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "under": 1.2,
                "over": 4.33
              },
              "overround": 0.06428,
              "probability_margin_removed": {
                "under": 0.783002,
                "over": 0.216998
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "under": 1.2,
                "over": 4.33
              },
              "overround": 0.06428,
              "probability_margin_removed": {
                "under": 0.783002,
                "over": 0.216998
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "under": 1.22,
                "over": 4.54
              },
              "overround": 0.039936,
              "probability_margin_removed": {
                "under": 0.788194,
                "over": 0.211806
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 4.492,
              "decimal_odds": {
                "under": 1.22,
                "over": 4.54
              },
              "overround": 0.039936,
              "probability_margin_removed": {
                "under": 0.788194,
                "over": 0.211806
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 85,
        "features_used_by_model": 93,
        "home_matches_in_history": 9,
        "away_matches_in_history": 79,
        "flags": [
          "limited_home_history",
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1673.59,
        "away_elo": 1516.31,
        "elo_difference": 157.29,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.994283,
        "away": 0.853885,
        "total": 2.848168,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.635969,
            "draw": 0.215397,
            "away": 0.148634
          },
          "ou25": {
            "over": 0.541945,
            "under": 0.458055
          },
          "ou45": {
            "over": 0.159895,
            "under": 0.840105
          },
          "btts": {
            "yes": 0.500028,
            "no": 0.499972
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.00183,
            "draw": 0.012871,
            "away": -0.011041
          },
          "ou25": {
            "over": 0.005878,
            "under": -0.005878
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1552212,
      "competition": {
        "code": "eredivisie",
        "id": 88
      },
      "kickoff_utc": "2026-11-01T11:15:00Z",
      "home": {
        "id": 193,
        "name": "PEC Zwolle"
      },
      "away": {
        "id": 198,
        "name": "ADO Den Haag"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.44393175947856905,
          "draw": 0.2651394953494524,
          "away": 0.29092874517197853
        },
        "ou25": {
          "over": 0.5771768739897187,
          "under": 0.42282312601028127
        },
        "ou45": {
          "over": 0.17516056193305685,
          "under": 0.8248394380669432
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.4180112514658077,
          "draw": 0.2565571702118185,
          "away": 0.32543157832237374
        },
        "ou25": {
          "over": 0.5879396984924623,
          "under": 0.41206030150753775
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "home": 2.25,
                "away": 3.0,
                "draw": 3.6
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "home": 0.421053,
                "away": 0.315789,
                "draw": 0.263158
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "home": 2.25,
                "away": 3.0,
                "draw": 3.6
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "home": 0.421053,
                "away": 0.315789,
                "draw": 0.263158
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "away": 2.98,
                "draw": 3.78,
                "home": 2.32
              },
              "overround": 0.031155,
              "probability_margin_removed": {
                "away": 0.325432,
                "draw": 0.256557,
                "home": 0.418011
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "away": 2.98,
                "draw": 3.78,
                "home": 2.32
              },
              "overround": 0.031155,
              "probability_margin_removed": {
                "away": 0.325432,
                "draw": 0.256557,
                "home": 0.418011
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "under": 2.3,
                "over": 1.6
              },
              "overround": 0.059783,
              "probability_margin_removed": {
                "under": 0.410256,
                "over": 0.589744
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "under": 2.3,
                "over": 1.6
              },
              "overround": 0.059783,
              "probability_margin_removed": {
                "under": 0.410256,
                "over": 0.589744
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "under": 2.34,
                "over": 1.64
              },
              "overround": 0.037107,
              "probability_margin_removed": {
                "under": 0.41206,
                "over": 0.58794
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "under": 2.34,
                "over": 1.64
              },
              "overround": 0.037107,
              "probability_margin_removed": {
                "under": 0.41206,
                "over": 0.58794
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "under": 1.2,
                "over": 4.33
              },
              "overround": 0.06428,
              "probability_margin_removed": {
                "under": 0.783002,
                "over": 0.216998
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "under": 1.2,
                "over": 4.33
              },
              "overround": 0.06428,
              "probability_margin_removed": {
                "under": 0.783002,
                "over": 0.216998
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "under": 1.22,
                "over": 4.49
              },
              "overround": 0.042389,
              "probability_margin_removed": {
                "under": 0.78634,
                "over": 0.21366
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.242,
              "decimal_odds": {
                "under": 1.22,
                "over": 4.49
              },
              "overround": 0.042389,
              "probability_margin_removed": {
                "under": 0.78634,
                "over": 0.21366
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 85,
        "features_used_by_model": 93,
        "home_matches_in_history": 448,
        "away_matches_in_history": 394,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1488.94,
        "away_elo": 1419.62,
        "elo_difference": 69.32,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.638314,
        "away": 1.30414,
        "total": 2.942454,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.448311,
            "draw": 0.250981,
            "away": 0.300708
          },
          "ou25": {
            "over": 0.563794,
            "under": 0.436206
          },
          "ou45": {
            "over": 0.175161,
            "under": 0.824839
          },
          "btts": {
            "yes": 0.59153,
            "no": 0.40847
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.004379,
            "draw": 0.014158,
            "away": -0.009779
          },
          "ou25": {
            "over": 0.013383,
            "under": -0.013383
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1550180,
      "competition": {
        "code": "serie-a",
        "id": 135
      },
      "kickoff_utc": "2026-11-01T11:30:00Z",
      "home": {
        "id": 895,
        "name": "Como"
      },
      "away": {
        "id": 517,
        "name": "Venezia"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.7476047365985636,
          "draw": 0.1643827925879363,
          "away": 0.08801247081350007
        },
        "ou25": {
          "over": 0.6341735889749455,
          "under": 0.36582641102505453
        },
        "ou45": {
          "over": 0.2866066840040957,
          "under": 0.7133933159959043
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.7280102768975288,
          "draw": 0.15821138370485513,
          "away": 0.11377833939761614
        },
        "ou25": {
          "over": 0.6905829596412556,
          "under": 0.30941704035874434
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "home": 1.3,
                "draw": 6.0,
                "away": 8.0
              },
              "overround": 0.060897,
              "probability_margin_removed": {
                "home": 0.725076,
                "draw": 0.1571,
                "away": 0.117825
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "home": 1.3,
                "draw": 6.0,
                "away": 8.0
              },
              "overround": 0.060897,
              "probability_margin_removed": {
                "home": 0.725076,
                "draw": 0.1571,
                "away": 0.117825
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "home": 1.33,
                "draw": 6.12,
                "away": 8.51
              },
              "overround": 0.032787,
              "probability_margin_removed": {
                "home": 0.72801,
                "draw": 0.158211,
                "away": 0.113778
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "home": 1.33,
                "draw": 6.12,
                "away": 8.51
              },
              "overround": 0.032787,
              "probability_margin_removed": {
                "home": 0.72801,
                "draw": 0.158211,
                "away": 0.113778
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "over": 1.4,
                "under": 3.0
              },
              "overround": 0.047619,
              "probability_margin_removed": {
                "over": 0.681818,
                "under": 0.318182
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "over": 1.4,
                "under": 3.0
              },
              "overround": 0.047619,
              "probability_margin_removed": {
                "over": 0.681818,
                "under": 0.318182
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "over": 1.38,
                "under": 3.08
              },
              "overround": 0.049313,
              "probability_margin_removed": {
                "over": 0.690583,
                "under": 0.309417
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "over": 1.38,
                "under": 3.08
              },
              "overround": 0.049313,
              "probability_margin_removed": {
                "over": 0.690583,
                "under": 0.309417
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "over": 3.2,
                "under": 1.36
              },
              "overround": 0.047794,
              "probability_margin_removed": {
                "over": 0.298246,
                "under": 0.701754
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "over": 3.2,
                "under": 1.36
              },
              "overround": 0.047794,
              "probability_margin_removed": {
                "over": 0.298246,
                "under": 0.701754
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "over": 3.4,
                "under": 1.33
              },
              "overround": 0.045997,
              "probability_margin_removed": {
                "over": 0.281184,
                "under": 0.718816
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 5.492,
              "decimal_odds": {
                "over": 3.4,
                "under": 1.33
              },
              "overround": 0.045997,
              "probability_margin_removed": {
                "over": 0.281184,
                "under": 0.718816
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 85,
        "away_matches_in_history": 85,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1741.68,
        "away_elo": 1454.46,
        "elo_difference": 287.22,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 2.673988,
        "away": 0.88998,
        "total": 3.563968,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.74885,
            "draw": 0.153595,
            "away": 0.097555
          },
          "ou25": {
            "over": 0.690788,
            "under": 0.309212
          },
          "ou45": {
            "over": 0.286607,
            "under": 0.713393
          },
          "btts": {
            "yes": 0.551378,
            "no": 0.448622
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.001245,
            "draw": 0.010788,
            "away": -0.009543
          },
          "ou25": {
            "over": -0.056614,
            "under": 0.056614
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1570438,
      "competition": {
        "code": "la-liga",
        "id": 140
      },
      "kickoff_utc": "2026-11-01T13:00:00Z",
      "home": {
        "id": 546,
        "name": "Getafe"
      },
      "away": {
        "id": 536,
        "name": "Sevilla"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.3502778946831571,
          "draw": 0.30734381070607003,
          "away": 0.34237829461077285
        },
        "ou25": {
          "over": 0.4139162706060258,
          "under": 0.5860837293939742
        },
        "ou45": {
          "over": 0.08605402878356301,
          "under": 0.913945971216437
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.2914759371520475,
          "draw": 0.3183224050476308,
          "away": 0.3902016578003217
        },
        "ou25": {
          "over": 0.35154394299287406,
          "under": 0.6484560570071258
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 3.25,
                "draw": 3.0,
                "away": 2.4
              },
              "overround": 0.057692,
              "probability_margin_removed": {
                "home": 0.290909,
                "draw": 0.315152,
                "away": 0.393939
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 3.25,
                "draw": 3.0,
                "away": 2.4
              },
              "overround": 0.057692,
              "probability_margin_removed": {
                "home": 0.290909,
                "draw": 0.315152,
                "away": 0.393939
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 3.32,
                "draw": 3.04,
                "away": 2.48
              },
              "overround": 0.033378,
              "probability_margin_removed": {
                "home": 0.291476,
                "draw": 0.318322,
                "away": 0.390202
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 3.32,
                "draw": 3.04,
                "away": 2.48
              },
              "overround": 0.033378,
              "probability_margin_removed": {
                "home": 0.291476,
                "draw": 0.318322,
                "away": 0.390202
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 2.62,
                "under": 1.5
              },
              "overround": 0.048346,
              "probability_margin_removed": {
                "over": 0.364078,
                "under": 0.635922
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 2.62,
                "under": 1.5
              },
              "overround": 0.048346,
              "probability_margin_removed": {
                "over": 0.364078,
                "under": 0.635922
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 2.73,
                "under": 1.48
              },
              "overround": 0.041976,
              "probability_margin_removed": {
                "over": 0.351544,
                "under": 0.648456
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 2.73,
                "under": 1.48
              },
              "overround": 0.041976,
              "probability_margin_removed": {
                "over": 0.351544,
                "under": 0.648456
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 11.0,
                "under": 1.05
              },
              "overround": 0.04329,
              "probability_margin_removed": {
                "over": 0.087137,
                "under": 0.912863
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 11.0,
                "under": 1.05
              },
              "overround": 0.04329,
              "probability_margin_removed": {
                "over": 0.087137,
                "under": 0.912863
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 626,
        "away_matches_in_history": 618,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1571.48,
        "away_elo": 1599.69,
        "elo_difference": -28.21,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.165353,
        "away": 1.15421,
        "total": 2.319563,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.356322,
            "draw": 0.292842,
            "away": 0.350836
          },
          "ou25": {
            "over": 0.409142,
            "under": 0.590858
          },
          "ou45": {
            "over": 0.086054,
            "under": 0.913946
          },
          "btts": {
            "yes": 0.476487,
            "no": 0.523513
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.006044,
            "draw": 0.014502,
            "away": -0.008458
          },
          "ou25": {
            "over": 0.004774,
            "under": -0.004774
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1569997,
      "competition": {
        "code": "laliga-2",
        "id": 141
      },
      "kickoff_utc": "2026-11-01T13:00:00Z",
      "home": {
        "id": 9692,
        "name": "Eldense"
      },
      "away": {
        "id": 715,
        "name": "Granada CF"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.39579978247631026,
          "draw": 0.27765892277209786,
          "away": 0.32654129475159194
        },
        "ou25": {
          "over": 0.5139207672608603,
          "under": 0.48607923273913967
        },
        "ou45": {
          "over": 0.1471522328073762,
          "under": 0.8528477671926238
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.40381133946519787,
          "draw": 0.2838556180358303,
          "away": 0.31233304249897187
        },
        "ou25": {
          "over": 0.4987080103359174,
          "under": 0.5012919896640827
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 2.3,
                "draw": 3.3,
                "away": 3.0
              },
              "overround": 0.071146,
              "probability_margin_removed": {
                "home": 0.405904,
                "draw": 0.282903,
                "away": 0.311193
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 2.3,
                "draw": 3.3,
                "away": 3.0
              },
              "overround": 0.071146,
              "probability_margin_removed": {
                "home": 0.405904,
                "draw": 0.282903,
                "away": 0.311193
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 2.39,
                "draw": 3.4,
                "away": 3.09
              },
              "overround": 0.036152,
              "probability_margin_removed": {
                "home": 0.403811,
                "draw": 0.283856,
                "away": 0.312333
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 2.39,
                "draw": 3.4,
                "away": 3.09
              },
              "overround": 0.036152,
              "probability_margin_removed": {
                "home": 0.403811,
                "draw": 0.283856,
                "away": 0.312333
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.9,
                "under": 1.9
              },
              "overround": 0.052632,
              "probability_margin_removed": {
                "over": 0.5,
                "under": 0.5
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.9,
                "under": 1.9
              },
              "overround": 0.052632,
              "probability_margin_removed": {
                "over": 0.5,
                "under": 0.5
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.94,
                "under": 1.93
              },
              "overround": 0.033599,
              "probability_margin_removed": {
                "over": 0.498708,
                "under": 0.501292
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.94,
                "under": 1.93
              },
              "overround": 0.033599,
              "probability_margin_removed": {
                "over": 0.498708,
                "under": 0.501292
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 6.5,
                "under": 1.11
              },
              "overround": 0.054747,
              "probability_margin_removed": {
                "over": 0.145861,
                "under": 0.854139
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 6.5,
                "under": 1.11
              },
              "overround": 0.054747,
              "probability_margin_removed": {
                "over": 0.145861,
                "under": 0.854139
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 6.67,
                "under": 1.12
              },
              "overround": 0.042782,
              "probability_margin_removed": {
                "over": 0.143774,
                "under": 0.856226
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 6.67,
                "under": 1.12
              },
              "overround": 0.042782,
              "probability_margin_removed": {
                "over": 0.143774,
                "under": 0.856226
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 85,
        "features_used_by_model": 93,
        "home_matches_in_history": 95,
        "away_matches_in_history": 601,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1411.97,
        "away_elo": 1458.45,
        "elo_difference": -46.48,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.455388,
        "away": 1.311166,
        "total": 2.766554,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.401148,
            "draw": 0.263408,
            "away": 0.335444
          },
          "ou25": {
            "over": 0.522535,
            "under": 0.477465
          },
          "ou45": {
            "over": 0.147152,
            "under": 0.852848
          },
          "btts": {
            "yes": 0.564862,
            "no": 0.435138
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.005348,
            "draw": 0.014251,
            "away": -0.008903
          },
          "ou25": {
            "over": -0.008614,
            "under": 0.008614
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1556695,
      "competition": {
        "code": "scottish-prem",
        "id": 179
      },
      "kickoff_utc": "2026-11-01T13:00:00Z",
      "home": {
        "id": 1389,
        "name": "Falkirk"
      },
      "away": {
        "id": 247,
        "name": "Celtic"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.1300742476941848,
          "draw": 0.18249450679384407,
          "away": 0.687431245511971
        },
        "ou25": {
          "over": 0.687283982523781,
          "under": 0.312716017476219
        },
        "ou45": {
          "over": 0.3077782433194742,
          "under": 0.6922217566805258
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.14714845450587724,
          "draw": 0.19068350021767522,
          "away": 0.6621680452764476
        },
        "ou25": {
          "over": 0.6452380952380953,
          "under": 0.3547619047619047
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 5.0,
                "draw": 5.5,
                "away": 1.45
              },
              "overround": 0.071473,
              "probability_margin_removed": {
                "home": 0.186659,
                "draw": 0.16969,
                "away": 0.643651
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 5.0,
                "draw": 5.5,
                "away": 1.45
              },
              "overround": 0.071473,
              "probability_margin_removed": {
                "home": 0.186659,
                "draw": 0.16969,
                "away": 0.643651
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 6.57,
                "draw": 5.07,
                "away": 1.46
              },
              "overround": 0.034377,
              "probability_margin_removed": {
                "home": 0.147148,
                "draw": 0.190684,
                "away": 0.662168
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 6.57,
                "draw": 5.07,
                "away": 1.46
              },
              "overround": 0.034377,
              "probability_margin_removed": {
                "home": 0.147148,
                "draw": 0.190684,
                "away": 0.662168
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.44,
                "under": 2.75
              },
              "overround": 0.058081,
              "probability_margin_removed": {
                "over": 0.656325,
                "under": 0.343675
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.44,
                "under": 2.75
              },
              "overround": 0.058081,
              "probability_margin_removed": {
                "over": 0.656325,
                "under": 0.343675
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.49,
                "under": 2.71
              },
              "overround": 0.040145,
              "probability_margin_removed": {
                "over": 0.645238,
                "under": 0.354762
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.49,
                "under": 2.71
              },
              "overround": 0.040145,
              "probability_margin_removed": {
                "over": 0.645238,
                "under": 0.354762
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 3.75,
                "under": 1.28
              },
              "overround": 0.047917,
              "probability_margin_removed": {
                "over": 0.254473,
                "under": 0.745527
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 3.75,
                "under": 1.28
              },
              "overround": 0.047917,
              "probability_margin_removed": {
                "over": 0.254473,
                "under": 0.745527
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 3.8,
                "under": 1.29
              },
              "overround": 0.038352,
              "probability_margin_removed": {
                "over": 0.253438,
                "under": 0.746562
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 3.8,
                "under": 1.29
              },
              "overround": 0.038352,
              "probability_margin_removed": {
                "over": 0.253438,
                "under": 0.746562
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 49,
        "away_matches_in_history": 606,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1542.02,
        "away_elo": 1803.88,
        "elo_difference": -261.85,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.096327,
        "away": 2.578024,
        "total": 3.674351,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.137632,
            "draw": 0.172529,
            "away": 0.689839
          },
          "ou25": {
            "over": 0.710177,
            "under": 0.289823
          },
          "ou45": {
            "over": 0.307778,
            "under": 0.692222
          },
          "btts": {
            "yes": 0.61821,
            "no": 0.38179
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.007558,
            "draw": 0.009966,
            "away": -0.002408
          },
          "ou25": {
            "over": -0.022893,
            "under": 0.022893
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1584449,
      "competition": {
        "code": "super-lig",
        "id": 203
      },
      "kickoff_utc": "2026-11-01T13:00:00Z",
      "home": {
        "id": 564,
        "name": "Ba\u015fak\u015fehir"
      },
      "away": {
        "id": 3603,
        "name": "Samsunspor"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.5064792957652103,
          "draw": 0.2712184209120834,
          "away": 0.2223022833227062
        },
        "ou25": {
          "over": 0.49783553004576314,
          "under": 0.5021644699542369
        },
        "ou45": {
          "over": 0.12880071396723047,
          "under": 0.8711992860327695
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.5379487084254118,
          "draw": 0.23601181080428607,
          "away": 0.22603948077030217
        },
        "ou25": {
          "over": 0.5985037406483791,
          "under": 0.401496259351621
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 1.8,
                "draw": 3.6,
                "away": 4.1
              },
              "overround": 0.077236,
              "probability_margin_removed": {
                "home": 0.515723,
                "draw": 0.257862,
                "away": 0.226415
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 1.8,
                "draw": 3.6,
                "away": 4.1
              },
              "overround": 0.077236,
              "probability_margin_removed": {
                "home": 0.515723,
                "draw": 0.257862,
                "away": 0.226415
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 1.79,
                "draw": 4.08,
                "away": 4.26
              },
              "overround": 0.038499,
              "probability_margin_removed": {
                "home": 0.537949,
                "draw": 0.236012,
                "away": 0.226039
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 1.79,
                "draw": 4.08,
                "away": 4.26
              },
              "overround": 0.038499,
              "probability_margin_removed": {
                "home": 0.537949,
                "draw": 0.236012,
                "away": 0.226039
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.6,
                "under": 2.3
              },
              "overround": 0.059783,
              "probability_margin_removed": {
                "over": 0.589744,
                "under": 0.410256
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.6,
                "under": 2.3
              },
              "overround": 0.059783,
              "probability_margin_removed": {
                "over": 0.589744,
                "under": 0.410256
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.61,
                "under": 2.4
              },
              "overround": 0.037785,
              "probability_margin_removed": {
                "over": 0.598504,
                "under": 0.401496
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.61,
                "under": 2.4
              },
              "overround": 0.037785,
              "probability_margin_removed": {
                "over": 0.598504,
                "under": 0.401496
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 4.33,
                "under": 1.2
              },
              "overround": 0.06428,
              "probability_margin_removed": {
                "over": 0.216998,
                "under": 0.783002
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 4.33,
                "under": 1.2
              },
              "overround": 0.06428,
              "probability_margin_removed": {
                "over": 0.216998,
                "under": 0.783002
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 4.51,
                "under": 1.21
              },
              "overround": 0.048176,
              "probability_margin_removed": {
                "over": 0.211538,
                "under": 0.788462
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 4.51,
                "under": 1.21
              },
              "overround": 0.048176,
              "probability_margin_removed": {
                "over": 0.211538,
                "under": 0.788462
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 89,
        "features_used_by_model": 93,
        "home_matches_in_history": 509,
        "away_matches_in_history": 151,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1677.27,
        "away_elo": 1599.33,
        "elo_difference": 77.94,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.623383,
        "away": 1.02013,
        "total": 2.643513,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.509669,
            "draw": 0.257017,
            "away": 0.233313
          },
          "ou25": {
            "over": 0.492438,
            "under": 0.507562
          },
          "ou45": {
            "over": 0.128801,
            "under": 0.871199
          },
          "btts": {
            "yes": 0.518043,
            "no": 0.481957
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.00319,
            "draw": 0.014201,
            "away": -0.011011
          },
          "ou25": {
            "over": 0.005398,
            "under": -0.005398
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1584456,
      "competition": {
        "code": "super-lig",
        "id": 203
      },
      "kickoff_utc": "2026-11-01T13:00:00Z",
      "home": {
        "id": 998,
        "name": "Trabzonspor"
      },
      "away": {
        "id": 3573,
        "name": "Gaziantep FK"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.6491030637969529,
          "draw": 0.2165188675006797,
          "away": 0.1343780687023674
        },
        "ou25": {
          "over": 0.5899456074456214,
          "under": 0.4100543925543786
        },
        "ou45": {
          "over": 0.1899968173225144,
          "under": 0.8100031826774856
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.7513005717172403,
          "draw": 0.1470435369721816,
          "away": 0.10165589131057796
        },
        "ou25": {
          "over": 0.6969026548672567,
          "under": 0.30309734513274333
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 1.3,
                "draw": 6.0,
                "away": 6.5
              },
              "overround": 0.089744,
              "probability_margin_removed": {
                "home": 0.705882,
                "draw": 0.152941,
                "away": 0.141176
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 1.3,
                "draw": 6.0,
                "away": 6.5
              },
              "overround": 0.089744,
              "probability_margin_removed": {
                "home": 0.705882,
                "draw": 0.152941,
                "away": 0.141176
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 1.28,
                "draw": 6.54,
                "away": 9.46
              },
              "overround": 0.039863,
              "probability_margin_removed": {
                "home": 0.751301,
                "draw": 0.147044,
                "away": 0.101656
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "home": 1.28,
                "draw": 6.54,
                "away": 9.46
              },
              "overround": 0.039863,
              "probability_margin_removed": {
                "home": 0.751301,
                "draw": 0.147044,
                "away": 0.101656
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.36,
                "under": 3.1
              },
              "overround": 0.057875,
              "probability_margin_removed": {
                "over": 0.695067,
                "under": 0.304933
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.36,
                "under": 3.1
              },
              "overround": 0.057875,
              "probability_margin_removed": {
                "over": 0.695067,
                "under": 0.304933
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.37,
                "under": 3.15
              },
              "overround": 0.047387,
              "probability_margin_removed": {
                "over": 0.696903,
                "under": 0.303097
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 1.37,
                "under": 3.15
              },
              "overround": 0.047387,
              "probability_margin_removed": {
                "over": 0.696903,
                "under": 0.303097
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 3.25,
                "under": 1.33
              },
              "overround": 0.059572,
              "probability_margin_removed": {
                "over": 0.290393,
                "under": 0.709607
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 3.25,
                "under": 1.33
              },
              "overround": 0.059572,
              "probability_margin_removed": {
                "over": 0.290393,
                "under": 0.709607
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 3.26,
                "under": 1.35
              },
              "overround": 0.047489,
              "probability_margin_removed": {
                "over": 0.292842,
                "under": 0.707158
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 6.992,
              "decimal_odds": {
                "over": 3.26,
                "under": 1.35
              },
              "overround": 0.047489,
              "probability_margin_removed": {
                "over": 0.292842,
                "under": 0.707158
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 89,
        "features_used_by_model": 93,
        "home_matches_in_history": 543,
        "away_matches_in_history": 265,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1755.83,
        "away_elo": 1529.6,
        "elo_difference": 226.23,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 2.126801,
        "away": 0.904412,
        "total": 3.031213,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.65071,
            "draw": 0.203924,
            "away": 0.145366
          },
          "ou25": {
            "over": 0.583761,
            "under": 0.416239
          },
          "ou45": {
            "over": 0.189997,
            "under": 0.810003
          },
          "btts": {
            "yes": 0.527971,
            "no": 0.472029
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.001607,
            "draw": 0.012595,
            "away": -0.010988
          },
          "ou25": {
            "over": 0.006185,
            "under": -0.006185
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1552213,
      "competition": {
        "code": "eredivisie",
        "id": 88
      },
      "kickoff_utc": "2026-11-01T13:30:00Z",
      "home": {
        "id": 196,
        "name": "Excelsior"
      },
      "away": {
        "id": 415,
        "name": "Twente"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.1778279983617222,
          "draw": 0.2243076062342061,
          "away": 0.5978643954040718
        },
        "ou25": {
          "over": 0.618911524679419,
          "under": 0.381088475320581
        },
        "ou45": {
          "over": 0.21722896480738904,
          "under": 0.7827710351926109
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.17377574862885806,
          "draw": 0.21470959163921124,
          "away": 0.6115146597319308
        },
        "ou25": {
          "over": 0.6378896882494006,
          "under": 0.36211031175059955
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "home": 5.5,
                "draw": 4.33,
                "away": 1.57
              },
              "overround": 0.049708,
              "probability_margin_removed": {
                "home": 0.173208,
                "draw": 0.220011,
                "away": 0.606781
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "home": 5.5,
                "draw": 4.33,
                "away": 1.57
              },
              "overround": 0.049708,
              "probability_margin_removed": {
                "home": 0.173208,
                "draw": 0.220011,
                "away": 0.606781
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "home": 5.56,
                "draw": 4.5,
                "away": 1.58
              },
              "overround": 0.03499,
              "probability_margin_removed": {
                "home": 0.173776,
                "draw": 0.21471,
                "away": 0.611515
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "home": 5.56,
                "draw": 4.5,
                "away": 1.58
              },
              "overround": 0.03499,
              "probability_margin_removed": {
                "home": 0.173776,
                "draw": 0.21471,
                "away": 0.611515
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 1.48,
                "under": 2.6
              },
              "overround": 0.060291,
              "probability_margin_removed": {
                "over": 0.637255,
                "under": 0.362745
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 1.48,
                "under": 2.6
              },
              "overround": 0.060291,
              "probability_margin_removed": {
                "over": 0.637255,
                "under": 0.362745
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 1.51,
                "under": 2.66
              },
              "overround": 0.038192,
              "probability_margin_removed": {
                "over": 0.63789,
                "under": 0.36211
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 1.51,
                "under": 2.66
              },
              "overround": 0.038192,
              "probability_margin_removed": {
                "over": 0.63789,
                "under": 0.36211
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 3.75,
                "under": 1.25
              },
              "overround": 0.066667,
              "probability_margin_removed": {
                "over": 0.25,
                "under": 0.75
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 3.75,
                "under": 1.25
              },
              "overround": 0.066667,
              "probability_margin_removed": {
                "over": 0.25,
                "under": 0.75
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 3.82,
                "under": 1.28
              },
              "overround": 0.04303,
              "probability_margin_removed": {
                "over": 0.25098,
                "under": 0.74902
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 3.82,
                "under": 1.28
              },
              "overround": 0.04303,
              "probability_margin_removed": {
                "over": 0.25098,
                "under": 0.74902
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 360,
        "away_matches_in_history": 524,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1492.03,
        "away_elo": 1683.77,
        "elo_difference": -191.74,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.090534,
        "away": 2.097384,
        "total": 3.187918,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.186026,
            "draw": 0.213004,
            "away": 0.60097
          },
          "ou25": {
            "over": 0.617564,
            "under": 0.382436
          },
          "ou45": {
            "over": 0.217229,
            "under": 0.782771
          },
          "btts": {
            "yes": 0.586217,
            "no": 0.413783
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.008198,
            "draw": 0.011304,
            "away": -0.003106
          },
          "ou25": {
            "over": 0.001348,
            "under": -0.001348
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1552214,
      "competition": {
        "code": "eredivisie",
        "id": 88
      },
      "kickoff_utc": "2026-11-01T13:30:00Z",
      "home": {
        "id": 427,
        "name": "Telstar"
      },
      "away": {
        "id": 207,
        "name": "Utrecht"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.26147932473538027,
          "draw": 0.24614812236383446,
          "away": 0.49237255290078524
        },
        "ou25": {
          "over": 0.6218180339065371,
          "under": 0.3781819660934629
        },
        "ou45": {
          "over": 0.2204078997122159,
          "under": 0.7795921002877841
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.3280948795180723,
          "draw": 0.257914156626506,
          "away": 0.4139909638554217
        },
        "ou25": {
          "over": 0.624390243902439,
          "under": 0.375609756097561
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "home": 2.8,
                "draw": 3.8,
                "away": 2.3
              },
              "overround": 0.055083,
              "probability_margin_removed": {
                "home": 0.338497,
                "draw": 0.249419,
                "away": 0.412084
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "home": 2.8,
                "draw": 3.8,
                "away": 2.3
              },
              "overround": 0.055083,
              "probability_margin_removed": {
                "home": 0.338497,
                "draw": 0.249419,
                "away": 0.412084
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "home": 2.94,
                "draw": 3.74,
                "away": 2.33
              },
              "overround": 0.0367,
              "probability_margin_removed": {
                "home": 0.328095,
                "draw": 0.257914,
                "away": 0.413991
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "home": 2.94,
                "draw": 3.74,
                "away": 2.33
              },
              "overround": 0.0367,
              "probability_margin_removed": {
                "home": 0.328095,
                "draw": 0.257914,
                "away": 0.413991
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 1.53,
                "under": 2.4
              },
              "overround": 0.070261,
              "probability_margin_removed": {
                "over": 0.610687,
                "under": 0.389313
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 1.53,
                "under": 2.4
              },
              "overround": 0.070261,
              "probability_margin_removed": {
                "over": 0.610687,
                "under": 0.389313
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 1.54,
                "under": 2.56
              },
              "overround": 0.039976,
              "probability_margin_removed": {
                "over": 0.62439,
                "under": 0.37561
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 1.54,
                "under": 2.56
              },
              "overround": 0.039976,
              "probability_margin_removed": {
                "over": 0.62439,
                "under": 0.37561
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 4.0,
                "under": 1.22
              },
              "overround": 0.069672,
              "probability_margin_removed": {
                "over": 0.233716,
                "under": 0.766284
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 4.0,
                "under": 1.22
              },
              "overround": 0.069672,
              "probability_margin_removed": {
                "over": 0.233716,
                "under": 0.766284
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 3.97,
                "under": 1.26
              },
              "overround": 0.04554,
              "probability_margin_removed": {
                "over": 0.240918,
                "under": 0.759082
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.492,
              "decimal_odds": {
                "over": 3.97,
                "under": 1.26
              },
              "overround": 0.04554,
              "probability_margin_removed": {
                "over": 0.240918,
                "under": 0.759082
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 50,
        "away_matches_in_history": 575,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1517.08,
        "away_elo": 1634.04,
        "elo_difference": -116.96,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.33332,
        "away": 1.872426,
        "total": 3.205746,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.269418,
            "draw": 0.233501,
            "away": 0.497081
          },
          "ou25": {
            "over": 0.621292,
            "under": 0.378708
          },
          "ou45": {
            "over": 0.220408,
            "under": 0.779592
          },
          "btts": {
            "yes": 0.627225,
            "no": 0.372775
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.007939,
            "draw": 0.012647,
            "away": -0.004708
          },
          "ou25": {
            "over": 0.000526,
            "under": -0.000526
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1564399,
      "competition": {
        "code": "league-one",
        "id": 41
      },
      "kickoff_utc": "2026-11-01T14:00:00Z",
      "home": {
        "id": 74,
        "name": "Sheffield Wednesday"
      },
      "away": {
        "id": 1356,
        "name": "Blackpool"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.613738562353656,
          "draw": 0.22396695881558473,
          "away": 0.16229447883075937
        },
        "ou25": {
          "over": 0.6214801034575712,
          "under": 0.3785198965424288
        },
        "ou45": {
          "over": 0.20776864379759274,
          "under": 0.7922313562024073
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.5474833387776784,
          "draw": 0.22866249232957928,
          "away": 0.22385416889274234
        },
        "ou25": {
          "over": 0.6104218362282877,
          "under": 0.3895781637717121
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.7,
                "draw": 4.0,
                "away": 4.33
              },
              "overround": 0.069182,
              "probability_margin_removed": {
                "home": 0.550173,
                "draw": 0.233824,
                "away": 0.216003
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.7,
                "draw": 4.0,
                "away": 4.33
              },
              "overround": 0.069182,
              "probability_margin_removed": {
                "home": 0.550173,
                "draw": 0.233824,
                "away": 0.216003
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.75,
                "draw": 4.19,
                "away": 4.28
              },
              "overround": 0.043737,
              "probability_margin_removed": {
                "home": 0.547483,
                "draw": 0.228662,
                "away": 0.223854
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.75,
                "draw": 4.19,
                "away": 4.28
              },
              "overround": 0.043737,
              "probability_margin_removed": {
                "home": 0.547483,
                "draw": 0.228662,
                "away": 0.223854
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.57,
                "under": 2.35
              },
              "overround": 0.062475,
              "probability_margin_removed": {
                "over": 0.59949,
                "under": 0.40051
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.57,
                "under": 2.35
              },
              "overround": 0.062475,
              "probability_margin_removed": {
                "over": 0.59949,
                "under": 0.40051
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.57,
                "under": 2.46
              },
              "overround": 0.043447,
              "probability_margin_removed": {
                "over": 0.610422,
                "under": 0.389578
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.57,
                "under": 2.46
              },
              "overround": 0.043447,
              "probability_margin_removed": {
                "over": 0.610422,
                "under": 0.389578
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 4.0,
                "under": 1.22
              },
              "overround": 0.069672,
              "probability_margin_removed": {
                "over": 0.233716,
                "under": 0.766284
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 4.0,
                "under": 1.22
              },
              "overround": 0.069672,
              "probability_margin_removed": {
                "over": 0.233716,
                "under": 0.766284
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 4.22,
                "under": 1.23
              },
              "overround": 0.049975,
              "probability_margin_removed": {
                "over": 0.225688,
                "under": 0.774312
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 4.22,
                "under": 1.23
              },
              "overround": 0.049975,
              "probability_margin_removed": {
                "over": 0.225688,
                "under": 0.774312
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 712,
        "away_matches_in_history": 688,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1363.9,
        "away_elo": 1383.85,
        "elo_difference": -19.94,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 2.101918,
        "away": 1.032344,
        "total": 3.134262,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.61543,
            "draw": 0.210978,
            "away": 0.173592
          },
          "ou25": {
            "over": 0.606203,
            "under": 0.393797
          },
          "ou45": {
            "over": 0.207769,
            "under": 0.792231
          },
          "btts": {
            "yes": 0.568916,
            "no": 0.431084
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.001691,
            "draw": 0.012989,
            "away": -0.011298
          },
          "ou25": {
            "over": 0.015277,
            "under": -0.015277
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1552808,
      "competition": {
        "code": "ligue-1",
        "id": 61
      },
      "kickoff_utc": "2026-11-01T14:00:00Z",
      "home": {
        "id": 95,
        "name": "Strasbourg"
      },
      "away": {
        "id": 108,
        "name": "Auxerre"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.471931557999269,
          "draw": 0.2564933675426534,
          "away": 0.2715750744580776
        },
        "ou25": {
          "over": 0.5894387552344957,
          "under": 0.41056124476550426
        },
        "ou45": {
          "over": 0.19504610863705718,
          "under": 0.8049538913629428
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.524240086209645,
          "draw": 0.23817327373475236,
          "away": 0.23758664005560273
        },
        "ou25": {
          "over": 0.6098765432098766,
          "under": 0.3901234567901235
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.8,
                "draw": 3.9,
                "away": 4.2
              },
              "overround": 0.050061,
              "probability_margin_removed": {
                "home": 0.52907,
                "draw": 0.244186,
                "away": 0.226744
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.8,
                "draw": 3.9,
                "away": 4.2
              },
              "overround": 0.050061,
              "probability_margin_removed": {
                "home": 0.52907,
                "draw": 0.244186,
                "away": 0.226744
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.84,
                "draw": 4.05,
                "away": 4.06
              },
              "overround": 0.036697,
              "probability_margin_removed": {
                "home": 0.52424,
                "draw": 0.238173,
                "away": 0.237587
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.84,
                "draw": 4.05,
                "away": 4.06
              },
              "overround": 0.036697,
              "probability_margin_removed": {
                "home": 0.52424,
                "draw": 0.238173,
                "away": 0.237587
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.57,
                "under": 2.38
              },
              "overround": 0.057111,
              "probability_margin_removed": {
                "over": 0.602532,
                "under": 0.397468
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.57,
                "under": 2.38
              },
              "overround": 0.057111,
              "probability_margin_removed": {
                "over": 0.602532,
                "under": 0.397468
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.58,
                "under": 2.47
              },
              "overround": 0.03777,
              "probability_margin_removed": {
                "over": 0.609877,
                "under": 0.390123
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.58,
                "under": 2.47
              },
              "overround": 0.03777,
              "probability_margin_removed": {
                "over": 0.609877,
                "under": 0.390123
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 4.33,
                "under": 1.22
              },
              "overround": 0.050619,
              "probability_margin_removed": {
                "over": 0.21982,
                "under": 0.78018
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 4.33,
                "under": 1.22
              },
              "overround": 0.050619,
              "probability_margin_removed": {
                "over": 0.21982,
                "under": 0.78018
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 327,
        "away_matches_in_history": 192,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1604.54,
        "away_elo": 1528.21,
        "elo_difference": 76.33,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.754602,
        "away": 1.306162,
        "total": 3.060764,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.475749,
            "draw": 0.242467,
            "away": 0.281784
          },
          "ou25": {
            "over": 0.590284,
            "under": 0.409716
          },
          "ou45": {
            "over": 0.195046,
            "under": 0.804954
          },
          "btts": {
            "yes": 0.607313,
            "no": 0.392687
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.003817,
            "draw": 0.014026,
            "away": -0.010209
          },
          "ou25": {
            "over": -0.000845,
            "under": 0.000845
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1550181,
      "competition": {
        "code": "serie-a",
        "id": 135
      },
      "kickoff_utc": "2026-11-01T14:00:00Z",
      "home": {
        "id": 512,
        "name": "Frosinone"
      },
      "away": {
        "id": 503,
        "name": "Torino"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.4043363672130362,
          "draw": 0.2623668774115834,
          "away": 0.3332967553753805
        },
        "ou25": {
          "over": 0.5550122813730446,
          "under": 0.4449877186269554
        },
        "ou45": {
          "over": 0.19456893310558607,
          "under": 0.8054310668944139
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.4472120011321823,
          "draw": 0.24568355505236342,
          "away": 0.30710444381545426
        },
        "ou25": {
          "over": 0.6810933940774488,
          "under": 0.31890660592255127
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 2.1,
                "draw": 3.75,
                "away": 3.2
              },
              "overround": 0.055357,
              "probability_margin_removed": {
                "home": 0.451213,
                "draw": 0.252679,
                "away": 0.296108
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 2.1,
                "draw": 3.75,
                "away": 3.2
              },
              "overround": 0.055357,
              "probability_margin_removed": {
                "home": 0.451213,
                "draw": 0.252679,
                "away": 0.296108
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 2.17,
                "draw": 3.95,
                "away": 3.16
              },
              "overround": 0.03045,
              "probability_margin_removed": {
                "home": 0.447212,
                "draw": 0.245684,
                "away": 0.307104
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 2.17,
                "draw": 3.95,
                "away": 3.16
              },
              "overround": 0.03045,
              "probability_margin_removed": {
                "home": 0.447212,
                "draw": 0.245684,
                "away": 0.307104
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.4,
                "under": 3.0
              },
              "overround": 0.047619,
              "probability_margin_removed": {
                "over": 0.681818,
                "under": 0.318182
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.4,
                "under": 3.0
              },
              "overround": 0.047619,
              "probability_margin_removed": {
                "over": 0.681818,
                "under": 0.318182
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.4,
                "under": 2.99
              },
              "overround": 0.048734,
              "probability_margin_removed": {
                "over": 0.681093,
                "under": 0.318907
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.4,
                "under": 2.99
              },
              "overround": 0.048734,
              "probability_margin_removed": {
                "over": 0.681093,
                "under": 0.318907
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 3.4,
                "under": 1.33
              },
              "overround": 0.045997,
              "probability_margin_removed": {
                "over": 0.281184,
                "under": 0.718816
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 3.4,
                "under": 1.33
              },
              "overround": 0.045997,
              "probability_margin_removed": {
                "over": 0.281184,
                "under": 0.718816
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 123,
        "away_matches_in_history": 541,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1524.79,
        "away_elo": 1592.61,
        "elo_difference": -67.82,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.606524,
        "away": 1.451448,
        "total": 3.057972,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.409599,
            "draw": 0.248364,
            "away": 0.342038
          },
          "ou25": {
            "over": 0.589671,
            "under": 0.410329
          },
          "ou45": {
            "over": 0.194569,
            "under": 0.805431
          },
          "btts": {
            "yes": 0.61655,
            "no": 0.38345
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.005263,
            "draw": 0.014003,
            "away": -0.008741
          },
          "ou25": {
            "over": -0.034659,
            "under": 0.034659
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1550183,
      "competition": {
        "code": "serie-a",
        "id": 135
      },
      "kickoff_utc": "2026-11-01T14:00:00Z",
      "home": {
        "id": 487,
        "name": "Lazio"
      },
      "away": {
        "id": 490,
        "name": "Cagliari"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.7008270903369849,
          "draw": 0.19268043123814854,
          "away": 0.10649247842486671
        },
        "ou25": {
          "over": 0.5769228138696962,
          "under": 0.42307718613030376
        },
        "ou45": {
          "over": 0.2178073233674911,
          "under": 0.7821926766325089
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.6676152297842567,
          "draw": 0.202096468306299,
          "away": 0.13028830190944443
        },
        "ou25": {
          "over": 0.5370843989769821,
          "under": 0.4629156010230179
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.42,
                "draw": 4.75,
                "away": 7.0
              },
              "overround": 0.057609,
              "probability_margin_removed": {
                "home": 0.665866,
                "draw": 0.199059,
                "away": 0.135076
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.42,
                "draw": 4.75,
                "away": 7.0
              },
              "overround": 0.057609,
              "probability_margin_removed": {
                "home": 0.665866,
                "draw": 0.199059,
                "away": 0.135076
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.45,
                "draw": 4.79,
                "away": 7.43
              },
              "overround": 0.033013,
              "probability_margin_removed": {
                "home": 0.667615,
                "draw": 0.202096,
                "away": 0.130288
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "home": 1.45,
                "draw": 4.79,
                "away": 7.43
              },
              "overround": 0.033013,
              "probability_margin_removed": {
                "home": 0.667615,
                "draw": 0.202096,
                "away": 0.130288
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.8,
                "under": 2.0
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "over": 0.526316,
                "under": 0.473684
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.8,
                "under": 2.0
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "over": 0.526316,
                "under": 0.473684
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.81,
                "under": 2.1
              },
              "overround": 0.028677,
              "probability_margin_removed": {
                "over": 0.537084,
                "under": 0.462916
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 1.81,
                "under": 2.1
              },
              "overround": 0.028677,
              "probability_margin_removed": {
                "over": 0.537084,
                "under": 0.462916
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 5.5,
                "under": 1.14
              },
              "overround": 0.059011,
              "probability_margin_removed": {
                "over": 0.171687,
                "under": 0.828313
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 7.992,
              "decimal_odds": {
                "over": 5.5,
                "under": 1.14
              },
              "overround": 0.059011,
              "probability_margin_removed": {
                "over": 0.171687,
                "under": 0.828313
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 89,
        "features_used_by_model": 93,
        "home_matches_in_history": 617,
        "away_matches_in_history": 541,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1728.19,
        "away_elo": 1572.84,
        "elo_difference": 155.34,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 2.338017,
        "away": 0.85325,
        "total": 3.191267,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.702294,
            "draw": 0.180924,
            "away": 0.116783
          },
          "ou25": {
            "over": 0.618258,
            "under": 0.381742
          },
          "ou45": {
            "over": 0.217807,
            "under": 0.782193
          },
          "btts": {
            "yes": 0.521852,
            "no": 0.478148
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.001467,
            "draw": 0.011756,
            "away": -0.010291
          },
          "ou25": {
            "over": -0.041335,
            "under": 0.041335
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1575207,
      "competition": {
        "code": "bundesliga",
        "id": 78
      },
      "kickoff_utc": "2026-11-01T14:30:00Z",
      "home": {
        "id": 182,
        "name": "Union Berlin"
      },
      "away": {
        "id": 192,
        "name": "1. FC K\u00f6ln"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.33709470095160504,
          "draw": 0.2725652903752636,
          "away": 0.39034000867313134
        },
        "ou25": {
          "over": 0.5685622217708135,
          "under": 0.4314377782291865
        },
        "ou45": {
          "over": 0.1613442843420944,
          "under": 0.8386557156579055
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.3458723175347255,
          "draw": 0.2743463141918503,
          "away": 0.3797813682734241
        },
        "ou25": {
          "over": 0.5561224489795918,
          "under": 0.4438775510204082
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 8.492,
              "decimal_odds": {
                "home": 2.75,
                "draw": 3.4,
                "away": 2.5
              },
              "overround": 0.057754,
              "probability_margin_removed": {
                "home": 0.343782,
                "draw": 0.278059,
                "away": 0.37816
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 8.492,
              "decimal_odds": {
                "home": 2.75,
                "draw": 3.4,
                "away": 2.5
              },
              "overround": 0.057754,
              "probability_margin_removed": {
                "home": 0.343782,
                "draw": 0.278059,
                "away": 0.37816
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 8.492,
              "decimal_odds": {
                "home": 2.8,
                "draw": 3.53,
                "away": 2.55
              },
              "overround": 0.032586,
              "probability_margin_removed": {
                "home": 0.345872,
                "draw": 0.274346,
                "away": 0.379781
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 8.492,
              "decimal_odds": {
                "home": 2.8,
                "draw": 3.53,
                "away": 2.55
              },
              "overround": 0.032586,
              "probability_margin_removed": {
                "home": 0.345872,
                "draw": 0.274346,
                "away": 0.379781
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 8.492,
              "decimal_odds": {
                "over": 1.73,
                "under": 2.1
              },
              "overround": 0.054225,
              "probability_margin_removed": {
                "over": 0.548303,
                "under": 0.451697
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 8.492,
              "decimal_odds": {
                "over": 1.73,
                "under": 2.1
              },
              "overround": 0.054225,
              "probability_margin_removed": {
                "over": 0.548303,
                "under": 0.451697
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 8.492,
              "decimal_odds": {
                "over": 1.74,
                "under": 2.18
              },
              "overround": 0.033428,
              "probability_margin_removed": {
                "over": 0.556122,
                "under": 0.443878
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 8.492,
              "decimal_odds": {
                "over": 1.74,
                "under": 2.18
              },
              "overround": 0.033428,
              "probability_margin_removed": {
                "over": 0.556122,
                "under": 0.443878
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 8.492,
              "decimal_odds": {
                "over": 5.0,
                "under": 1.17
              },
              "overround": 0.054701,
              "probability_margin_removed": {
                "over": 0.189627,
                "under": 0.810373
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 8.492,
              "decimal_odds": {
                "over": 5.0,
                "under": 1.17
              },
              "overround": 0.054701,
              "probability_margin_removed": {
                "over": 0.189627,
                "under": 0.810373
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 247,
        "away_matches_in_history": 417,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1524.19,
        "away_elo": 1477.36,
        "elo_difference": 46.84,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.368639,
        "away": 1.488593,
        "total": 2.857232,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.343689,
            "draw": 0.258736,
            "away": 0.397576
          },
          "ou25": {
            "over": 0.544076,
            "under": 0.455924
          },
          "ou45": {
            "over": 0.161344,
            "under": 0.838656
          },
          "btts": {
            "yes": 0.581964,
            "no": 0.418036
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.006594,
            "draw": 0.013829,
            "away": -0.007236
          },
          "ou25": {
            "over": 0.024486,
            "under": -0.024486
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1570440,
      "competition": {
        "code": "la-liga",
        "id": 140
      },
      "kickoff_utc": "2026-11-01T15:15:00Z",
      "home": {
        "id": 4665,
        "name": "Racing Santander"
      },
      "away": {
        "id": 541,
        "name": "Real Madrid"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.18549823669022422,
          "draw": 0.22110633502346308,
          "away": 0.5933954282863128
        },
        "ou25": {
          "over": 0.6193251919881041,
          "under": 0.3806748080118959
        },
        "ou45": {
          "over": 0.2403398478053094,
          "under": 0.7596601521946906
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.09389868457878534,
          "draw": 0.1195074167366359,
          "away": 0.7865938986845789
        },
        "ou25": {
          "over": 0.7894736842105263,
          "under": 0.21052631578947367
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "away": 1.17,
                "draw": 9.0,
                "home": 11.0
              },
              "overround": 0.056721,
              "probability_margin_removed": {
                "away": 0.808824,
                "draw": 0.105147,
                "home": 0.086029
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "away": 1.17,
                "draw": 9.0,
                "home": 11.0
              },
              "overround": 0.056721,
              "probability_margin_removed": {
                "away": 0.808824,
                "draw": 0.105147,
                "home": 0.086029
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "home": 10.22,
                "draw": 8.03,
                "away": 1.22
              },
              "overround": 0.042052,
              "probability_margin_removed": {
                "home": 0.093899,
                "draw": 0.119507,
                "away": 0.786594
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "home": 10.22,
                "draw": 8.03,
                "away": 1.22
              },
              "overround": 0.042052,
              "probability_margin_removed": {
                "home": 0.093899,
                "draw": 0.119507,
                "away": 0.786594
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "under": 4.5,
                "over": 1.2
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "under": 0.210526,
                "over": 0.789474
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "under": 4.5,
                "over": 1.2
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "under": 0.210526,
                "over": 0.789474
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "over": 2.1,
                "under": 1.73
              },
              "overround": 0.054225,
              "probability_margin_removed": {
                "over": 0.451697,
                "under": 0.548303
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "over": 2.1,
                "under": 1.73
              },
              "overround": 0.054225,
              "probability_margin_removed": {
                "over": 0.451697,
                "under": 0.548303
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "over": 2.15,
                "under": 1.69
              },
              "overround": 0.056832,
              "probability_margin_removed": {
                "over": 0.440104,
                "under": 0.559896
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "over": 2.15,
                "under": 1.69
              },
              "overround": 0.056832,
              "probability_margin_removed": {
                "over": 0.440104,
                "under": 0.559896
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 298,
        "away_matches_in_history": 618,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1553.94,
        "away_elo": 1857.63,
        "elo_difference": -303.69,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.161679,
        "away": 2.15444,
        "total": 3.316119,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.193763,
            "draw": 0.209774,
            "away": 0.596463
          },
          "ou25": {
            "over": 0.643795,
            "under": 0.356205
          },
          "ou45": {
            "over": 0.24034,
            "under": 0.75966
          },
          "btts": {
            "yes": 0.610997,
            "no": 0.389003
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.008265,
            "draw": 0.011332,
            "away": -0.003068
          },
          "ou25": {
            "over": -0.02447,
            "under": 0.02447
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1569995,
      "competition": {
        "code": "laliga-2",
        "id": 141
      },
      "kickoff_utc": "2026-11-01T15:15:00Z",
      "home": {
        "id": 10139,
        "name": "AD Ceuta FC"
      },
      "away": {
        "id": 731,
        "name": "Sporting Gijon"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.40425255732704723,
          "draw": 0.28700931113690004,
          "away": 0.3087381315360528
        },
        "ou25": {
          "over": 0.4749529708109755,
          "under": 0.5250470291890246
        },
        "ou45": {
          "over": 0.12218355682033195,
          "under": 0.877816443179668
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.38135150098425197,
          "draw": 0.2665246678149606,
          "away": 0.3521238312007874
        },
        "ou25": {
          "over": 0.5142118863049095,
          "under": 0.4857881136950904
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "away": 2.7,
                "draw": 3.3,
                "home": 2.6
              },
              "overround": 0.058016,
              "probability_margin_removed": {
                "away": 0.350061,
                "draw": 0.286414,
                "home": 0.363525
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "away": 2.7,
                "draw": 3.3,
                "home": 2.6
              },
              "overround": 0.058016,
              "probability_margin_removed": {
                "away": 0.350061,
                "draw": 0.286414,
                "home": 0.363525
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "home": 2.53,
                "away": 2.74,
                "draw": 3.62
              },
              "overround": 0.036464,
              "probability_margin_removed": {
                "home": 0.381352,
                "away": 0.352124,
                "draw": 0.266525
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "home": 2.53,
                "away": 2.74,
                "draw": 3.62
              },
              "overround": 0.036464,
              "probability_margin_removed": {
                "home": 0.381352,
                "away": 0.352124,
                "draw": 0.266525
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "over": 1.85,
                "under": 1.95
              },
              "overround": 0.053361,
              "probability_margin_removed": {
                "over": 0.513158,
                "under": 0.486842
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "over": 1.85,
                "under": 1.95
              },
              "overround": 0.053361,
              "probability_margin_removed": {
                "over": 0.513158,
                "under": 0.486842
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "under": 1.99,
                "over": 1.88
              },
              "overround": 0.034427,
              "probability_margin_removed": {
                "under": 0.485788,
                "over": 0.514212
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "under": 1.99,
                "over": 1.88
              },
              "overround": 0.034427,
              "probability_margin_removed": {
                "under": 0.485788,
                "over": 0.514212
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "under": 1.12,
                "over": 6.0
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "under": 0.842697,
                "over": 0.157303
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "under": 1.12,
                "over": 6.0
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "under": 0.842697,
                "over": 0.157303
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "under": 1.14,
                "over": 5.99
              },
              "overround": 0.044138,
              "probability_margin_removed": {
                "under": 0.840112,
                "over": 0.159888
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.242,
              "decimal_odds": {
                "under": 1.14,
                "over": 5.99
              },
              "overround": 0.044138,
              "probability_margin_removed": {
                "under": 0.840112,
                "over": 0.159888
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 53,
        "away_matches_in_history": 545,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1411.58,
        "away_elo": 1473.86,
        "elo_difference": -62.28,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.396137,
        "away": 1.201084,
        "total": 2.597221,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.409358,
            "draw": 0.272574,
            "away": 0.318068
          },
          "ou25": {
            "over": 0.480872,
            "under": 0.519128
          },
          "ou45": {
            "over": 0.122184,
            "under": 0.877816
          },
          "btts": {
            "yes": 0.531057,
            "no": 0.468943
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.005105,
            "draw": 0.014435,
            "away": -0.00933
          },
          "ou25": {
            "over": -0.005919,
            "under": 0.005919
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1575528,
      "competition": {
        "code": "primeira-liga",
        "id": 94
      },
      "kickoff_utc": "2026-11-01T15:30:00Z",
      "home": {
        "id": 240,
        "name": "Arouca"
      },
      "away": {
        "id": 225,
        "name": "Nacional"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.5651550135756791,
          "draw": 0.264112555407724,
          "away": 0.17073243101659694
        },
        "ou25": {
          "over": 0.46947037892547794,
          "under": 0.5305296210745221
        },
        "ou45": {
          "over": 0.11133421784093823,
          "under": 0.8886657821590618
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.5472404115996258,
          "draw": 0.24695977549111317,
          "away": 0.20579981290926094
        },
        "ou25": {
          "over": 0.5219638242894057,
          "under": 0.4780361757105944
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "draw": 3.8,
                "home": 1.73,
                "away": 4.5
              },
              "overround": 0.063415,
              "probability_margin_removed": {
                "draw": 0.247465,
                "home": 0.543565,
                "away": 0.20897
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "draw": 3.8,
                "home": 1.73,
                "away": 4.5
              },
              "overround": 0.063415,
              "probability_margin_removed": {
                "draw": 0.247465,
                "home": 0.543565,
                "away": 0.20897
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "home": 1.76,
                "draw": 3.9,
                "away": 4.68
              },
              "overround": 0.038267,
              "probability_margin_removed": {
                "home": 0.54724,
                "draw": 0.24696,
                "away": 0.2058
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "home": 1.76,
                "draw": 3.9,
                "away": 4.68
              },
              "overround": 0.038267,
              "probability_margin_removed": {
                "home": 0.54724,
                "draw": 0.24696,
                "away": 0.2058
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "over": 1.85,
                "under": 1.95
              },
              "overround": 0.053361,
              "probability_margin_removed": {
                "over": 0.513158,
                "under": 0.486842
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "over": 1.85,
                "under": 1.95
              },
              "overround": 0.053361,
              "probability_margin_removed": {
                "over": 0.513158,
                "under": 0.486842
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "over": 1.85,
                "under": 2.02
              },
              "overround": 0.03559,
              "probability_margin_removed": {
                "over": 0.521964,
                "under": 0.478036
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "over": 1.85,
                "under": 2.02
              },
              "overround": 0.03559,
              "probability_margin_removed": {
                "over": 0.521964,
                "under": 0.478036
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "over": 6.0,
                "under": 1.12
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "over": 0.157303,
                "under": 0.842697
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "over": 6.0,
                "under": 1.12
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "over": 0.157303,
                "under": 0.842697
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "under": 1.15,
                "over": 5.78
              },
              "overround": 0.042576,
              "probability_margin_removed": {
                "under": 0.834055,
                "over": 0.165945
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.492,
              "decimal_odds": {
                "under": 1.15,
                "over": 5.78
              },
              "overround": 0.042576,
              "probability_margin_removed": {
                "under": 0.834055,
                "over": 0.165945
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 313,
        "away_matches_in_history": 367,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1616.71,
        "away_elo": 1469.8,
        "elo_difference": 146.91,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.67765,
        "away": 0.84106,
        "total": 2.51871,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.567659,
            "draw": 0.250306,
            "away": 0.182035
          },
          "ou25": {
            "over": 0.460976,
            "under": 0.539024
          },
          "ou45": {
            "over": 0.111334,
            "under": 0.888666
          },
          "btts": {
            "yes": 0.467045,
            "no": 0.532955
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.002504,
            "draw": 0.013807,
            "away": -0.011303
          },
          "ou25": {
            "over": 0.008494,
            "under": -0.008494
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1552215,
      "competition": {
        "code": "eredivisie",
        "id": 88
      },
      "kickoff_utc": "2026-11-01T15:45:00Z",
      "home": {
        "id": 202,
        "name": "Groningen"
      },
      "away": {
        "id": 426,
        "name": "Sparta Rotterdam"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.47717161095536303,
          "draw": 0.24057009414685684,
          "away": 0.2822582948977802
        },
        "ou25": {
          "over": 0.6577471122768793,
          "under": 0.3422528877231207
        },
        "ou45": {
          "over": 0.26244262939612184,
          "under": 0.7375573706038782
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.5411864344367935,
          "draw": 0.22612954302758034,
          "away": 0.23268402253562617
        },
        "ou25": {
          "over": 0.6674418604651163,
          "under": 0.33255813953488367
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "away": 4.0,
                "home": 1.75,
                "draw": 4.2
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "away": 0.235955,
                "home": 0.539326,
                "draw": 0.224719
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "away": 4.0,
                "home": 1.75,
                "draw": 4.2
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "away": 0.235955,
                "home": 0.539326,
                "draw": 0.224719
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "draw": 4.26,
                "away": 4.14,
                "home": 1.78
              },
              "overround": 0.038085,
              "probability_margin_removed": {
                "draw": 0.22613,
                "away": 0.232684,
                "home": 0.541186
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "draw": 4.26,
                "away": 4.14,
                "home": 1.78
              },
              "overround": 0.038085,
              "probability_margin_removed": {
                "draw": 0.22613,
                "away": 0.232684,
                "home": 0.541186
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "over": 1.44,
                "under": 2.7
              },
              "overround": 0.064815,
              "probability_margin_removed": {
                "over": 0.652174,
                "under": 0.347826
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "over": 1.44,
                "under": 2.7
              },
              "overround": 0.064815,
              "probability_margin_removed": {
                "over": 0.652174,
                "under": 0.347826
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "over": 1.43,
                "under": 2.87
              },
              "overround": 0.047733,
              "probability_margin_removed": {
                "over": 0.667442,
                "under": 0.332558
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "over": 1.43,
                "under": 2.87
              },
              "overround": 0.047733,
              "probability_margin_removed": {
                "over": 0.667442,
                "under": 0.332558
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "over": 3.4,
                "under": 1.3
              },
              "overround": 0.063348,
              "probability_margin_removed": {
                "over": 0.276596,
                "under": 0.723404
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "over": 3.4,
                "under": 1.3
              },
              "overround": 0.063348,
              "probability_margin_removed": {
                "over": 0.276596,
                "under": 0.723404
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "over": 3.5,
                "under": 1.32
              },
              "overround": 0.04329,
              "probability_margin_removed": {
                "over": 0.273859,
                "under": 0.726141
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.742,
              "decimal_odds": {
                "over": 3.5,
                "under": 1.32
              },
              "overround": 0.04329,
              "probability_margin_removed": {
                "over": 0.273859,
                "under": 0.726141
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 530,
        "away_matches_in_history": 314,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1545.14,
        "away_elo": 1515.52,
        "elo_difference": 29.63,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.947522,
        "away": 1.488045,
        "total": 3.435567,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.480904,
            "draw": 0.226849,
            "away": 0.292248
          },
          "ou25": {
            "over": 0.667068,
            "under": 0.332932
          },
          "ou45": {
            "over": 0.262443,
            "under": 0.737557
          },
          "btts": {
            "yes": 0.667499,
            "no": 0.332501
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.003732,
            "draw": 0.013721,
            "away": -0.00999
          },
          "ou25": {
            "over": -0.009321,
            "under": 0.009321
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1584453,
      "competition": {
        "code": "super-lig",
        "id": 203
      },
      "kickoff_utc": "2026-11-01T16:00:00Z",
      "home": {
        "id": 1004,
        "name": "Kas\u0131mpa\u015fa"
      },
      "away": {
        "id": 549,
        "name": "Be\u015fikta\u015f"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.2919027392956568,
          "draw": 0.27759267434737,
          "away": 0.43050458635697325
        },
        "ou25": {
          "over": 0.513900017223479,
          "under": 0.486099982776521
        },
        "ou45": {
          "over": 0.13828609599037606,
          "under": 0.861713904009624
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.16881678700584105,
          "draw": 0.22043203452716717,
          "away": 0.6107511784669918
        },
        "ou25": {
          "over": 0.5725190839694657,
          "under": 0.4274809160305344
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "home": 4.75,
                "draw": 4.33,
                "away": 1.57
              },
              "overround": 0.078416,
              "probability_margin_removed": {
                "home": 0.195218,
                "draw": 0.214154,
                "away": 0.590628
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "home": 4.75,
                "draw": 4.33,
                "away": 1.57
              },
              "overround": 0.078416,
              "probability_margin_removed": {
                "home": 0.195218,
                "draw": 0.214154,
                "away": 0.590628
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "home": 5.68,
                "draw": 4.35,
                "away": 1.57
              },
              "overround": 0.042884,
              "probability_margin_removed": {
                "home": 0.168817,
                "draw": 0.220432,
                "away": 0.610751
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "home": 5.68,
                "draw": 4.35,
                "away": 1.57
              },
              "overround": 0.042884,
              "probability_margin_removed": {
                "home": 0.168817,
                "draw": 0.220432,
                "away": 0.610751
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "over": 1.67,
                "under": 2.15
              },
              "overround": 0.063919,
              "probability_margin_removed": {
                "over": 0.562827,
                "under": 0.437173
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "over": 1.67,
                "under": 2.15
              },
              "overround": 0.063919,
              "probability_margin_removed": {
                "over": 0.562827,
                "under": 0.437173
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "over": 1.68,
                "under": 2.25
              },
              "overround": 0.039683,
              "probability_margin_removed": {
                "over": 0.572519,
                "under": 0.427481
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "over": 1.68,
                "under": 2.25
              },
              "overround": 0.039683,
              "probability_margin_removed": {
                "over": 0.572519,
                "under": 0.427481
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "over": 5.0,
                "under": 1.17
              },
              "overround": 0.054701,
              "probability_margin_removed": {
                "over": 0.189627,
                "under": 0.810373
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "over": 5.0,
                "under": 1.17
              },
              "overround": 0.054701,
              "probability_margin_removed": {
                "over": 0.189627,
                "under": 0.810373
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "over": 4.91,
                "under": 1.19
              },
              "overround": 0.044002,
              "probability_margin_removed": {
                "over": 0.195082,
                "under": 0.804918
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 9.992,
              "decimal_odds": {
                "over": 4.91,
                "under": 1.19
              },
              "overround": 0.044002,
              "probability_margin_removed": {
                "over": 0.195082,
                "under": 0.804918
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 89,
        "features_used_by_model": 93,
        "home_matches_in_history": 503,
        "away_matches_in_history": 543,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1624.79,
        "away_elo": 1722.72,
        "elo_difference": -97.92,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.20407,
        "away": 1.503941,
        "total": 2.708011,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.299222,
            "draw": 0.264047,
            "away": 0.436731
          },
          "ou25": {
            "over": 0.508336,
            "under": 0.491664
          },
          "ou45": {
            "over": 0.138286,
            "under": 0.861714
          },
          "btts": {
            "yes": 0.549275,
            "no": 0.450725
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.007319,
            "draw": 0.013546,
            "away": -0.006226
          },
          "ou25": {
            "over": 0.005564,
            "under": -0.005564
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1552804,
      "competition": {
        "code": "ligue-1",
        "id": 61
      },
      "kickoff_utc": "2026-11-01T16:15:00Z",
      "home": {
        "id": 80,
        "name": "Lyon"
      },
      "away": {
        "id": 77,
        "name": "Angers"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.6518620423220559,
          "draw": 0.21559150117567263,
          "away": 0.13254645650227156
        },
        "ou25": {
          "over": 0.5831886285750411,
          "under": 0.41681137142495894
        },
        "ou45": {
          "over": 0.18995996246035746,
          "under": 0.8100400375396426
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.6884347263426485,
          "draw": 0.1828858855559218,
          "away": 0.12867938810142962
        },
        "ou25": {
          "over": 0.6176470588235294,
          "under": 0.3823529411764706
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "draw": 5.0,
                "home": 1.4,
                "away": 7.0
              },
              "overround": 0.057143,
              "probability_margin_removed": {
                "draw": 0.189189,
                "home": 0.675676,
                "away": 0.135135
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "draw": 5.0,
                "home": 1.4,
                "away": 7.0
              },
              "overround": 0.057143,
              "probability_margin_removed": {
                "draw": 0.189189,
                "home": 0.675676,
                "away": 0.135135
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "home": 1.4,
                "draw": 5.27,
                "away": 7.49
              },
              "overround": 0.03755,
              "probability_margin_removed": {
                "home": 0.688435,
                "draw": 0.182886,
                "away": 0.128679
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "home": 1.4,
                "draw": 5.27,
                "away": 7.49
              },
              "overround": 0.03755,
              "probability_margin_removed": {
                "home": 0.688435,
                "draw": 0.182886,
                "away": 0.128679
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "over": 1.53,
                "under": 2.5
              },
              "overround": 0.053595,
              "probability_margin_removed": {
                "over": 0.620347,
                "under": 0.379653
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "over": 1.53,
                "under": 2.5
              },
              "overround": 0.053595,
              "probability_margin_removed": {
                "over": 0.620347,
                "under": 0.379653
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "over": 1.56,
                "under": 2.52
              },
              "overround": 0.037851,
              "probability_margin_removed": {
                "over": 0.617647,
                "under": 0.382353
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "over": 1.56,
                "under": 2.52
              },
              "overround": 0.037851,
              "probability_margin_removed": {
                "over": 0.617647,
                "under": 0.382353
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "over": 4.0,
                "under": 1.25
              },
              "overround": 0.05,
              "probability_margin_removed": {
                "over": 0.238095,
                "under": 0.761905
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "over": 4.0,
                "under": 1.25
              },
              "overround": 0.05,
              "probability_margin_removed": {
                "over": 0.238095,
                "under": 0.761905
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 594,
        "away_matches_in_history": 370,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1668.21,
        "away_elo": 1472.02,
        "elo_difference": 196.18,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 2.132986,
        "away": 0.898013,
        "total": 3.030999,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.653464,
            "draw": 0.203035,
            "away": 0.143501
          },
          "ou25": {
            "over": 0.583713,
            "under": 0.416287
          },
          "ou45": {
            "over": 0.18996,
            "under": 0.81004
          },
          "btts": {
            "yes": 0.526103,
            "no": 0.473897
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.001602,
            "draw": 0.012557,
            "away": -0.010955
          },
          "ou25": {
            "over": -0.000524,
            "under": 0.000524
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1552807,
      "competition": {
        "code": "ligue-1",
        "id": 61
      },
      "kickoff_utc": "2026-11-01T16:15:00Z",
      "home": {
        "id": 114,
        "name": "Paris FC"
      },
      "away": {
        "id": 91,
        "name": "Monaco"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.3661021541936899,
          "draw": 0.28909929270285994,
          "away": 0.34479855310345026
        },
        "ou25": {
          "over": 0.48261197525516825,
          "under": 0.5173880247448317
        },
        "ou45": {
          "over": 0.12052133861384748,
          "under": 0.8794786613861525
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.38257347204661013,
          "draw": 0.27419571792575737,
          "away": 0.34323081002763245
        },
        "ou25": {
          "over": 0.5256410256410255,
          "under": 0.4743589743589744
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "away": 2.8,
                "home": 2.45,
                "draw": 3.5
              },
              "overround": 0.05102,
              "probability_margin_removed": {
                "away": 0.339806,
                "home": 0.38835,
                "draw": 0.271845
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "away": 2.8,
                "home": 2.45,
                "draw": 3.5
              },
              "overround": 0.05102,
              "probability_margin_removed": {
                "away": 0.339806,
                "home": 0.38835,
                "draw": 0.271845
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "home": 2.53,
                "draw": 3.53,
                "away": 2.82
              },
              "overround": 0.033153,
              "probability_margin_removed": {
                "home": 0.382573,
                "draw": 0.274196,
                "away": 0.343231
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "home": 2.53,
                "draw": 3.53,
                "away": 2.82
              },
              "overround": 0.033153,
              "probability_margin_removed": {
                "home": 0.382573,
                "draw": 0.274196,
                "away": 0.343231
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "under": 2.0,
                "over": 1.8
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "under": 0.473684,
                "over": 0.526316
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "under": 2.0,
                "over": 1.8
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "under": 0.473684,
                "over": 0.526316
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "over": 1.85,
                "under": 2.05
              },
              "overround": 0.028345,
              "probability_margin_removed": {
                "over": 0.525641,
                "under": 0.474359
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "over": 1.85,
                "under": 2.05
              },
              "overround": 0.028345,
              "probability_margin_removed": {
                "over": 0.525641,
                "under": 0.474359
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "under": 1.14,
                "over": 5.5
              },
              "overround": 0.059011,
              "probability_margin_removed": {
                "under": 0.828313,
                "over": 0.171687
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.242,
              "decimal_odds": {
                "under": 1.14,
                "over": 5.5
              },
              "overround": 0.059011,
              "probability_margin_removed": {
                "under": 0.828313,
                "over": 0.171687
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 42,
        "away_matches_in_history": 518,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1613.61,
        "away_elo": 1676.22,
        "elo_difference": -62.61,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.312681,
        "away": 1.272731,
        "total": 2.585412,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.371986,
            "draw": 0.274793,
            "away": 0.353222
          },
          "ou25": {
            "over": 0.477902,
            "under": 0.522098
          },
          "ou45": {
            "over": 0.120521,
            "under": 0.879479
          },
          "btts": {
            "yes": 0.531238,
            "no": 0.468762
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.005884,
            "draw": 0.014306,
            "away": -0.008423
          },
          "ou25": {
            "over": 0.00471,
            "under": -0.00471
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1575205,
      "competition": {
        "code": "bundesliga",
        "id": 78
      },
      "kickoff_utc": "2026-11-01T16:30:00Z",
      "home": {
        "id": 169,
        "name": "Eintracht Frankfurt"
      },
      "away": {
        "id": 175,
        "name": "Hamburger SV"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.5595690291624604,
          "draw": 0.25303645921912493,
          "away": 0.1873945116184146
        },
        "ou25": {
          "over": 0.5505328229395865,
          "under": 0.4494671770604135
        },
        "ou45": {
          "over": 0.14840391631165575,
          "under": 0.8515960836883443
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.6222338241750418,
          "draw": 0.20304472157290837,
          "away": 0.17472145425204982
        },
        "ou25": {
          "over": 0.675115207373272,
          "under": 0.3248847926267281
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "draw": 4.75,
                "away": 5.25,
                "home": 1.55
              },
              "overround": 0.046164,
              "probability_margin_removed": {
                "draw": 0.201236,
                "away": 0.182071,
                "home": 0.616692
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "draw": 4.75,
                "away": 5.25,
                "home": 1.55
              },
              "overround": 0.046164,
              "probability_margin_removed": {
                "draw": 0.201236,
                "away": 0.182071,
                "home": 0.616692
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "draw": 4.75,
                "away": 5.52,
                "home": 1.55
              },
              "overround": 0.036847,
              "probability_margin_removed": {
                "draw": 0.203045,
                "away": 0.174721,
                "home": 0.622234
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "draw": 4.75,
                "away": 5.52,
                "home": 1.55
              },
              "overround": 0.036847,
              "probability_margin_removed": {
                "draw": 0.203045,
                "away": 0.174721,
                "home": 0.622234
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "over": 1.4,
                "under": 3.0
              },
              "overround": 0.047619,
              "probability_margin_removed": {
                "over": 0.681818,
                "under": 0.318182
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "over": 1.4,
                "under": 3.0
              },
              "overround": 0.047619,
              "probability_margin_removed": {
                "over": 0.681818,
                "under": 0.318182
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "under": 2.93,
                "over": 1.41
              },
              "overround": 0.050517,
              "probability_margin_removed": {
                "under": 0.324885,
                "over": 0.675115
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "under": 2.93,
                "over": 1.41
              },
              "overround": 0.050517,
              "probability_margin_removed": {
                "under": 0.324885,
                "over": 0.675115
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "over": 3.4,
                "under": 1.33
              },
              "overround": 0.045997,
              "probability_margin_removed": {
                "over": 0.281184,
                "under": 0.718816
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "over": 3.4,
                "under": 1.33
              },
              "overround": 0.045997,
              "probability_margin_removed": {
                "over": 0.281184,
                "under": 0.718816
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 517,
        "away_matches_in_history": 317,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1580.8,
        "away_elo": 1505.75,
        "elo_difference": 75.05,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.797338,
        "away": 0.977371,
        "total": 2.774709,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.561992,
            "draw": 0.239305,
            "away": 0.198702
          },
          "ou25": {
            "over": 0.524494,
            "under": 0.475506
          },
          "ou45": {
            "over": 0.148404,
            "under": 0.851596
          },
          "btts": {
            "yes": 0.524711,
            "no": 0.475289
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.002423,
            "draw": 0.013731,
            "away": -0.011307
          },
          "ou25": {
            "over": 0.026039,
            "under": -0.026039
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1557453,
      "competition": {
        "code": "premier-league",
        "id": 39
      },
      "kickoff_utc": "2026-11-01T16:30:00Z",
      "home": {
        "id": 40,
        "name": "Liverpool"
      },
      "away": {
        "id": 42,
        "name": "Arsenal"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.28004082251290535,
          "draw": 0.27563677017321414,
          "away": 0.44432240731388056
        },
        "ou25": {
          "over": 0.540296442513804,
          "under": 0.45970355748619596
        },
        "ou45": {
          "over": 0.13937414933995848,
          "under": 0.8606258506600415
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.32743797592729057,
          "draw": 0.28174895603045935,
          "away": 0.3908130680422501
        },
        "ou25": {
          "over": 0.5128865979381443,
          "under": 0.48711340206185555
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "home": 2.88,
                "draw": 3.4,
                "away": 2.45
              },
              "overround": 0.049503,
              "probability_margin_removed": {
                "home": 0.330844,
                "draw": 0.280245,
                "away": 0.388911
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "home": 2.88,
                "draw": 3.4,
                "away": 2.45
              },
              "overround": 0.049503,
              "probability_margin_removed": {
                "home": 0.330844,
                "draw": 0.280245,
                "away": 0.388911
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "draw": 3.44,
                "away": 2.48,
                "home": 2.96
              },
              "overround": 0.031761,
              "probability_margin_removed": {
                "draw": 0.281749,
                "away": 0.390813,
                "home": 0.327438
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "draw": 3.44,
                "away": 2.48,
                "home": 2.96
              },
              "overround": 0.031761,
              "probability_margin_removed": {
                "draw": 0.281749,
                "away": 0.390813,
                "home": 0.327438
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "over": 1.91,
                "under": 1.91
              },
              "overround": 0.04712,
              "probability_margin_removed": {
                "over": 0.5,
                "under": 0.5
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "over": 1.91,
                "under": 1.91
              },
              "overround": 0.04712,
              "probability_margin_removed": {
                "over": 0.5,
                "under": 0.5
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "under": 1.99,
                "over": 1.89
              },
              "overround": 0.031613,
              "probability_margin_removed": {
                "under": 0.487113,
                "over": 0.512887
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "under": 1.99,
                "over": 1.89
              },
              "overround": 0.031613,
              "probability_margin_removed": {
                "under": 0.487113,
                "over": 0.512887
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "under": 1.12,
                "over": 6.0
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "under": 0.842697,
                "over": 0.157303
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.492,
              "decimal_odds": {
                "under": 1.12,
                "over": 6.0
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "under": 0.842697,
                "over": 0.157303
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 616,
        "away_matches_in_history": 616,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1828.94,
        "away_elo": 1940.65,
        "elo_difference": -111.71,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.179787,
        "away": 1.535496,
        "total": 2.715283,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.287541,
            "draw": 0.262242,
            "away": 0.450217
          },
          "ou25": {
            "over": 0.510111,
            "under": 0.489889
          },
          "ou45": {
            "over": 0.139374,
            "under": 0.860626
          },
          "btts": {
            "yes": 0.548289,
            "no": 0.451711
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.0075,
            "draw": 0.013395,
            "away": -0.005895
          },
          "ou25": {
            "over": 0.030185,
            "under": -0.030185
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1550184,
      "competition": {
        "code": "serie-a",
        "id": 135
      },
      "kickoff_utc": "2026-11-01T17:00:00Z",
      "home": {
        "id": 867,
        "name": "Lecce"
      },
      "away": {
        "id": 495,
        "name": "Genoa"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.3945052373296875,
          "draw": 0.28243899565947905,
          "away": 0.3230557670108335
        },
        "ou25": {
          "over": 0.4892800066381319,
          "under": 0.510719993361868
        },
        "ou45": {
          "over": 0.13460693499549148,
          "under": 0.8653930650045085
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.27468223666037256,
          "draw": 0.3179109165282345,
          "away": 0.4074068468113929
        },
        "ou25": {
          "over": 0.39303482587064675,
          "under": 0.6069651741293531
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.992,
              "decimal_odds": {
                "home": 3.5,
                "draw": 3.0,
                "away": 2.3
              },
              "overround": 0.05383,
              "probability_margin_removed": {
                "home": 0.27112,
                "draw": 0.316306,
                "away": 0.412574
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.992,
              "decimal_odds": {
                "home": 3.5,
                "draw": 3.0,
                "away": 2.3
              },
              "overround": 0.05383,
              "probability_margin_removed": {
                "home": 0.27112,
                "draw": 0.316306,
                "away": 0.412574
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.992,
              "decimal_odds": {
                "home": 3.53,
                "draw": 3.05,
                "away": 2.38
              },
              "overround": 0.031323,
              "probability_margin_removed": {
                "home": 0.274682,
                "draw": 0.317911,
                "away": 0.407407
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.992,
              "decimal_odds": {
                "home": 3.53,
                "draw": 3.05,
                "away": 2.38
              },
              "overround": 0.031323,
              "probability_margin_removed": {
                "home": 0.274682,
                "draw": 0.317911,
                "away": 0.407407
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.992,
              "decimal_odds": {
                "over": 2.38,
                "under": 1.57
              },
              "overround": 0.057111,
              "probability_margin_removed": {
                "over": 0.397468,
                "under": 0.602532
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.992,
              "decimal_odds": {
                "over": 2.38,
                "under": 1.57
              },
              "overround": 0.057111,
              "probability_margin_removed": {
                "over": 0.397468,
                "under": 0.602532
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.992,
              "decimal_odds": {
                "over": 2.44,
                "under": 1.58
              },
              "overround": 0.042747,
              "probability_margin_removed": {
                "over": 0.393035,
                "under": 0.606965
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.992,
              "decimal_odds": {
                "over": 2.44,
                "under": 1.58
              },
              "overround": 0.042747,
              "probability_margin_removed": {
                "over": 0.393035,
                "under": 0.606965
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.992,
              "decimal_odds": {
                "over": 10.0,
                "under": 1.06
              },
              "overround": 0.043396,
              "probability_margin_removed": {
                "over": 0.095841,
                "under": 0.904159
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 10.992,
              "decimal_odds": {
                "over": 10.0,
                "under": 1.06
              },
              "overround": 0.043396,
              "probability_margin_removed": {
                "over": 0.095841,
                "under": 0.904159
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 89,
        "features_used_by_model": 93,
        "home_matches_in_history": 275,
        "away_matches_in_history": 579,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1520.13,
        "away_elo": 1565.83,
        "elo_difference": -45.7,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.415045,
        "away": 1.26819,
        "total": 2.683235,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.399847,
            "draw": 0.268112,
            "away": 0.332041
          },
          "ou25": {
            "over": 0.50226,
            "under": 0.49774
          },
          "ou45": {
            "over": 0.134607,
            "under": 0.865393
          },
          "btts": {
            "yes": 0.548992,
            "no": 0.451008
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.005342,
            "draw": 0.014327,
            "away": -0.008985
          },
          "ou25": {
            "over": -0.01298,
            "under": 0.01298
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1570437,
      "competition": {
        "code": "la-liga",
        "id": 140
      },
      "kickoff_utc": "2026-11-01T17:30:00Z",
      "home": {
        "id": 797,
        "name": "Elche"
      },
      "away": {
        "id": 532,
        "name": "Valencia"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.3732799605053725,
          "draw": 0.2848414279254047,
          "away": 0.34187861156922283
        },
        "ou25": {
          "over": 0.48852568863201234,
          "under": 0.5114743113679876
        },
        "ou45": {
          "over": 0.1302355079849406,
          "under": 0.8697644920150593
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.4101635944437903,
          "draw": 0.28057567619923046,
          "away": 0.30926072935697924
        },
        "ou25": {
          "over": 0.4922680412371133,
          "under": 0.5077319587628866
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "home": 2.25,
                "draw": 3.4,
                "away": 3.2
              },
              "overround": 0.051062,
              "probability_margin_removed": {
                "home": 0.422853,
                "draw": 0.279829,
                "away": 0.297318
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "home": 2.25,
                "draw": 3.4,
                "away": 3.2
              },
              "overround": 0.051062,
              "probability_margin_removed": {
                "home": 0.422853,
                "draw": 0.279829,
                "away": 0.297318
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "home": 2.36,
                "draw": 3.45,
                "away": 3.13
              },
              "overround": 0.033073,
              "probability_margin_removed": {
                "home": 0.410164,
                "draw": 0.280576,
                "away": 0.309261
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "home": 2.36,
                "draw": 3.45,
                "away": 3.13
              },
              "overround": 0.033073,
              "probability_margin_removed": {
                "home": 0.410164,
                "draw": 0.280576,
                "away": 0.309261
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 1.91,
                "under": 1.91
              },
              "overround": 0.04712,
              "probability_margin_removed": {
                "over": 0.5,
                "under": 0.5
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 1.91,
                "under": 1.91
              },
              "overround": 0.04712,
              "probability_margin_removed": {
                "over": 0.5,
                "under": 0.5
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 1.97,
                "under": 1.91
              },
              "overround": 0.031174,
              "probability_margin_removed": {
                "over": 0.492268,
                "under": 0.507732
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 1.97,
                "under": 1.91
              },
              "overround": 0.031174,
              "probability_margin_removed": {
                "over": 0.492268,
                "under": 0.507732
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 6.0,
                "under": 1.12
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "over": 0.157303,
                "under": 0.842697
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 6.0,
                "under": 1.12
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "over": 0.157303,
                "under": 0.842697
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 452,
        "away_matches_in_history": 618,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1576.31,
        "away_elo": 1580.95,
        "elo_difference": -4.64,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.35757,
        "away": 1.29583,
        "total": 2.6534,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.37905,
            "draw": 0.270568,
            "away": 0.350382
          },
          "ou25": {
            "over": 0.494892,
            "under": 0.505108
          },
          "ou45": {
            "over": 0.130236,
            "under": 0.869764
          },
          "btts": {
            "yes": 0.54441,
            "no": 0.45559
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.00577,
            "draw": 0.014273,
            "away": -0.008503
          },
          "ou25": {
            "over": -0.006366,
            "under": 0.006366
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1569993,
      "competition": {
        "code": "laliga-2",
        "id": 141
      },
      "kickoff_utc": "2026-11-01T17:30:00Z",
      "home": {
        "id": 9580,
        "name": "Burgos"
      },
      "away": {
        "id": 5254,
        "name": "Castell\u00f3n"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.3491916524985449,
          "draw": 0.2777000297817302,
          "away": 0.3731083177197249
        },
        "ou25": {
          "over": 0.5154655181136909,
          "under": 0.4845344818863091
        },
        "ou45": {
          "over": 0.14820684575832943,
          "under": 0.8517931542416706
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.2504400301734976,
          "draw": 0.29041991450842347,
          "away": 0.45914005531807894
        },
        "ou25": {
          "over": 0.5142118863049095,
          "under": 0.4857881136950904
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "home": 3.5,
                "draw": 3.4,
                "away": 2.05
              },
              "overround": 0.067637,
              "probability_margin_removed": {
                "home": 0.267614,
                "draw": 0.275485,
                "away": 0.456902
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "home": 3.5,
                "draw": 3.4,
                "away": 2.05
              },
              "overround": 0.067637,
              "probability_margin_removed": {
                "home": 0.267614,
                "draw": 0.275485,
                "away": 0.456902
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "home": 3.85,
                "draw": 3.32,
                "away": 2.1
              },
              "overround": 0.037136,
              "probability_margin_removed": {
                "home": 0.25044,
                "draw": 0.29042,
                "away": 0.45914
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "home": 3.85,
                "draw": 3.32,
                "away": 2.1
              },
              "overround": 0.037136,
              "probability_margin_removed": {
                "home": 0.25044,
                "draw": 0.29042,
                "away": 0.45914
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 1.85,
                "under": 1.95
              },
              "overround": 0.053361,
              "probability_margin_removed": {
                "over": 0.513158,
                "under": 0.486842
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 1.85,
                "under": 1.95
              },
              "overround": 0.053361,
              "probability_margin_removed": {
                "over": 0.513158,
                "under": 0.486842
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 1.88,
                "under": 1.99
              },
              "overround": 0.034427,
              "probability_margin_removed": {
                "over": 0.514212,
                "under": 0.485788
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 1.88,
                "under": 1.99
              },
              "overround": 0.034427,
              "probability_margin_removed": {
                "over": 0.514212,
                "under": 0.485788
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 6.0,
                "under": 1.12
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "over": 0.157303,
                "under": 0.842697
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 6.0,
                "under": 1.12
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "over": 0.157303,
                "under": 0.842697
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 6.13,
                "under": 1.14
              },
              "overround": 0.040325,
              "probability_margin_removed": {
                "over": 0.156809,
                "under": 0.843191
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.492,
              "decimal_odds": {
                "over": 6.13,
                "under": 1.14
              },
              "overround": 0.040325,
              "probability_margin_removed": {
                "over": 0.156809,
                "under": 0.843191
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 221,
        "away_matches_in_history": 139,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1532.15,
        "away_elo": 1550.8,
        "elo_difference": -18.65,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.35894,
        "away": 1.414475,
        "total": 2.773415,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.355508,
            "draw": 0.263693,
            "away": 0.380799
          },
          "ou25": {
            "over": 0.524185,
            "under": 0.475815
          },
          "ou45": {
            "over": 0.148207,
            "under": 0.851793
          },
          "btts": {
            "yes": 0.567264,
            "no": 0.432736
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.006316,
            "draw": 0.014007,
            "away": -0.007691
          },
          "ou25": {
            "over": -0.008719,
            "under": 0.008719
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1575527,
      "competition": {
        "code": "primeira-liga",
        "id": 94
      },
      "kickoff_utc": "2026-11-01T18:00:00Z",
      "home": {
        "id": 238,
        "name": "Academico Viseu"
      },
      "away": {
        "id": 226,
        "name": "Rio Ave"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.5108812847122464,
          "draw": 0.27191582027872335,
          "away": 0.21720289500903012
        },
        "ou25": {
          "over": 0.4965818832478933,
          "under": 0.5034181167521067
        },
        "ou45": {
          "over": 0.12458117707377352,
          "under": 0.8754188229262265
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.5098216656994188,
          "draw": 0.2639898488142195,
          "away": 0.2261884854863618
        },
        "ou25": {
          "over": 0.5167958656330749,
          "under": 0.4832041343669251
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "home": 1.85,
                "draw": 3.6,
                "away": 4.0
              },
              "overround": 0.068318,
              "probability_margin_removed": {
                "home": 0.505973,
                "draw": 0.260014,
                "away": 0.234013
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "home": 1.85,
                "draw": 3.6,
                "away": 4.0
              },
              "overround": 0.068318,
              "probability_margin_removed": {
                "home": 0.505973,
                "draw": 0.260014,
                "away": 0.234013
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "home": 1.89,
                "draw": 3.65,
                "away": 4.26
              },
              "overround": 0.037815,
              "probability_margin_removed": {
                "home": 0.509822,
                "draw": 0.26399,
                "away": 0.226188
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "home": 1.89,
                "draw": 3.65,
                "away": 4.26
              },
              "overround": 0.037815,
              "probability_margin_removed": {
                "home": 0.509822,
                "draw": 0.26399,
                "away": 0.226188
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 1.85,
                "under": 1.95
              },
              "overround": 0.053361,
              "probability_margin_removed": {
                "over": 0.513158,
                "under": 0.486842
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 1.85,
                "under": 1.95
              },
              "overround": 0.053361,
              "probability_margin_removed": {
                "over": 0.513158,
                "under": 0.486842
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 1.87,
                "under": 2.0
              },
              "overround": 0.034759,
              "probability_margin_removed": {
                "over": 0.516796,
                "under": 0.483204
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 1.87,
                "under": 2.0
              },
              "overround": 0.034759,
              "probability_margin_removed": {
                "over": 0.516796,
                "under": 0.483204
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 6.0,
                "under": 1.12
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "over": 0.157303,
                "under": 0.842697
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 6.0,
                "under": 1.12
              },
              "overround": 0.059524,
              "probability_margin_removed": {
                "over": 0.157303,
                "under": 0.842697
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 6.09,
                "under": 1.14
              },
              "overround": 0.041397,
              "probability_margin_removed": {
                "over": 0.157676,
                "under": 0.842324
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 6.09,
                "under": 1.14
              },
              "overround": 0.041397,
              "probability_margin_removed": {
                "over": 0.157676,
                "under": 0.842324
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 83,
        "features_used_by_model": 93,
        "home_matches_in_history": 9,
        "away_matches_in_history": 505,
        "flags": [
          "limited_home_history",
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1654.07,
        "away_elo": 1522.18,
        "elo_difference": 131.89,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.617728,
        "away": 0.9964,
        "total": 2.614128,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.514007,
            "draw": 0.257722,
            "away": 0.228271
          },
          "ou25": {
            "over": 0.485111,
            "under": 0.514889
          },
          "ou45": {
            "over": 0.124581,
            "under": 0.875419
          },
          "btts": {
            "yes": 0.510398,
            "no": 0.489602
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.003126,
            "draw": 0.014194,
            "away": -0.011068
          },
          "ou25": {
            "over": 0.011471,
            "under": -0.011471
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1575534,
      "competition": {
        "code": "primeira-liga",
        "id": 94
      },
      "kickoff_utc": "2026-11-01T18:00:00Z",
      "home": {
        "id": 214,
        "name": "Maritimo"
      },
      "away": {
        "id": 227,
        "name": "Santa Clara"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.30324360711694276,
          "draw": 0.3029484055056098,
          "away": 0.39380798737744754
        },
        "ou25": {
          "over": 0.4208554926388301,
          "under": 0.5791445073611698
        },
        "ou45": {
          "over": 0.08996154853308772,
          "under": 0.9100384514669123
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.2599577103721862,
          "draw": 0.31517748545124535,
          "away": 0.4248648041765686
        },
        "ou25": {
          "over": 0.3789731051344743,
          "under": 0.6210268948655256
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "home": 3.4,
                "draw": 3.2,
                "away": 2.2
              },
              "overround": 0.061163,
              "probability_margin_removed": {
                "home": 0.277165,
                "draw": 0.294488,
                "away": 0.428346
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "home": 3.4,
                "draw": 3.2,
                "away": 2.2
              },
              "overround": 0.061163,
              "probability_margin_removed": {
                "home": 0.277165,
                "draw": 0.294488,
                "away": 0.428346
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "home": 3.71,
                "draw": 3.06,
                "away": 2.27
              },
              "overround": 0.036868,
              "probability_margin_removed": {
                "home": 0.259958,
                "draw": 0.315177,
                "away": 0.424865
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "home": 3.71,
                "draw": 3.06,
                "away": 2.27
              },
              "overround": 0.036868,
              "probability_margin_removed": {
                "home": 0.259958,
                "draw": 0.315177,
                "away": 0.424865
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 2.4,
                "under": 1.53
              },
              "overround": 0.070261,
              "probability_margin_removed": {
                "over": 0.389313,
                "under": 0.610687
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 2.4,
                "under": 1.53
              },
              "overround": 0.070261,
              "probability_margin_removed": {
                "over": 0.389313,
                "under": 0.610687
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 2.54,
                "under": 1.55
              },
              "overround": 0.038862,
              "probability_margin_removed": {
                "over": 0.378973,
                "under": 0.621027
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 2.54,
                "under": 1.55
              },
              "overround": 0.038862,
              "probability_margin_removed": {
                "over": 0.378973,
                "under": 0.621027
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 11.0,
                "under": 1.05
              },
              "overround": 0.04329,
              "probability_margin_removed": {
                "over": 0.087137,
                "under": 0.912863
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 11.992,
              "decimal_odds": {
                "over": 11.0,
                "under": 1.05
              },
              "overround": 0.04329,
              "probability_margin_removed": {
                "over": 0.087137,
                "under": 0.912863
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 85,
        "features_used_by_model": 93,
        "home_matches_in_history": 437,
        "away_matches_in_history": 247,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1479.57,
        "away_elo": 1610.47,
        "elo_difference": -130.9,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.083138,
        "away": 1.268992,
        "total": 2.35213,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.310165,
            "draw": 0.288872,
            "away": 0.400964
          },
          "ou25": {
            "over": 0.417736,
            "under": 0.582264
          },
          "ou45": {
            "over": 0.089962,
            "under": 0.910038
          },
          "btts": {
            "yes": 0.480752,
            "no": 0.519248
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.006921,
            "draw": 0.014076,
            "away": -0.007156
          },
          "ou25": {
            "over": 0.003119,
            "under": -0.003119
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1552805,
      "competition": {
        "code": "ligue-1",
        "id": 61
      },
      "kickoff_utc": "2026-11-01T19:45:00Z",
      "home": {
        "id": 81,
        "name": "Marseille"
      },
      "away": {
        "id": 96,
        "name": "Toulouse"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.5001105136558142,
          "draw": 0.25368081013678484,
          "away": 0.24620867620740097
        },
        "ou25": {
          "over": 0.5834315439548516,
          "under": 0.41656845604514836
        },
        "ou45": {
          "over": 0.19016134549233438,
          "under": 0.8098386545076657
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.49255878660377994,
          "draw": 0.24075192562179767,
          "away": 0.2666892877744223
        },
        "ou25": {
          "over": 0.6151960784313726,
          "under": 0.3848039215686275
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "home": 1.91,
                "draw": 4.0,
                "away": 3.6
              },
              "overround": 0.051338,
              "probability_margin_removed": {
                "home": 0.497994,
                "draw": 0.237792,
                "away": 0.264214
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "home": 1.91,
                "draw": 4.0,
                "away": 3.6
              },
              "overround": 0.051338,
              "probability_margin_removed": {
                "home": 0.497994,
                "draw": 0.237792,
                "away": 0.264214
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "home": 1.96,
                "draw": 4.01,
                "away": 3.62
              },
              "overround": 0.035824,
              "probability_margin_removed": {
                "home": 0.492559,
                "draw": 0.240752,
                "away": 0.266689
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "home": 1.96,
                "draw": 4.01,
                "away": 3.62
              },
              "overround": 0.035824,
              "probability_margin_removed": {
                "home": 0.492559,
                "draw": 0.240752,
                "away": 0.266689
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 1.53,
                "under": 2.5
              },
              "overround": 0.053595,
              "probability_margin_removed": {
                "over": 0.620347,
                "under": 0.379653
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 1.53,
                "under": 2.5
              },
              "overround": 0.053595,
              "probability_margin_removed": {
                "over": 0.620347,
                "under": 0.379653
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 1.57,
                "under": 2.51
              },
              "overround": 0.035349,
              "probability_margin_removed": {
                "over": 0.615196,
                "under": 0.384804
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 1.57,
                "under": 2.51
              },
              "overround": 0.035349,
              "probability_margin_removed": {
                "over": 0.615196,
                "under": 0.384804
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 4.0,
                "under": 1.25
              },
              "overround": 0.05,
              "probability_margin_removed": {
                "over": 0.238095,
                "under": 0.761905
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 4.0,
                "under": 1.25
              },
              "overround": 0.05,
              "probability_margin_removed": {
                "over": 0.238095,
                "under": 0.761905
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 594,
        "away_matches_in_history": 520,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1645.49,
        "away_elo": 1572.35,
        "elo_difference": 73.14,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.80117,
        "away": 1.230959,
        "total": 3.032129,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.50338,
            "draw": 0.239723,
            "away": 0.256897
          },
          "ou25": {
            "over": 0.583968,
            "under": 0.416032
          },
          "ou45": {
            "over": 0.190161,
            "under": 0.809839
          },
          "btts": {
            "yes": 0.59537,
            "no": 0.40463
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.003269,
            "draw": 0.013958,
            "away": -0.010688
          },
          "ou25": {
            "over": -0.000536,
            "under": 0.000536
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1550182,
      "competition": {
        "code": "serie-a",
        "id": 135
      },
      "kickoff_utc": "2026-11-01T19:45:00Z",
      "home": {
        "id": 496,
        "name": "Juventus"
      },
      "away": {
        "id": 492,
        "name": "Napoli"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.39363079839712006,
          "draw": 0.2723553496992104,
          "away": 0.33401385190366967
        },
        "ou25": {
          "over": 0.5221515284494715,
          "under": 0.47784847155052845
        },
        "ou45": {
          "over": 0.16279478283678528,
          "under": 0.8372052171632147
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.4012321675015822,
          "draw": 0.2924644112511533,
          "away": 0.3063034212472646
        },
        "ou25": {
          "over": 0.4845360824742268,
          "under": 0.5154639175257731
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "home": 2.4,
                "draw": 3.2,
                "away": 3.1
              },
              "overround": 0.051747,
              "probability_margin_removed": {
                "home": 0.396166,
                "draw": 0.297125,
                "away": 0.306709
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "home": 2.4,
                "draw": 3.2,
                "away": 3.1
              },
              "overround": 0.051747,
              "probability_margin_removed": {
                "home": 0.396166,
                "draw": 0.297125,
                "away": 0.306709
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "home": 2.42,
                "draw": 3.32,
                "away": 3.17
              },
              "overround": 0.029885,
              "probability_margin_removed": {
                "home": 0.401232,
                "draw": 0.292464,
                "away": 0.306303
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "home": 2.42,
                "draw": 3.32,
                "away": 3.17
              },
              "overround": 0.029885,
              "probability_margin_removed": {
                "home": 0.401232,
                "draw": 0.292464,
                "away": 0.306303
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 2.0,
                "under": 1.8
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "over": 0.473684,
                "under": 0.526316
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 2.0,
                "under": 1.8
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "over": 0.473684,
                "under": 0.526316
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 2.0,
                "under": 1.88
              },
              "overround": 0.031915,
              "probability_margin_removed": {
                "over": 0.484536,
                "under": 0.515464
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 2.0,
                "under": 1.88
              },
              "overround": 0.031915,
              "probability_margin_removed": {
                "over": 0.484536,
                "under": 0.515464
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 6.5,
                "under": 1.11
              },
              "overround": 0.054747,
              "probability_margin_removed": {
                "over": 0.145861,
                "under": 0.854139
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.742,
              "decimal_odds": {
                "over": 6.5,
                "under": 1.11
              },
              "overround": 0.054747,
              "probability_margin_removed": {
                "over": 0.145861,
                "under": 0.854139
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 89,
        "features_used_by_model": 93,
        "home_matches_in_history": 617,
        "away_matches_in_history": 617,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1724.31,
        "away_elo": 1749.42,
        "elo_difference": -25.12,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.495945,
        "away": 1.370367,
        "total": 2.866312,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.399062,
            "draw": 0.258208,
            "away": 0.342731
          },
          "ou25": {
            "over": 0.546201,
            "under": 0.453799
          },
          "ou45": {
            "over": 0.162795,
            "under": 0.837205
          },
          "btts": {
            "yes": 0.583524,
            "no": 0.416476
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.005431,
            "draw": 0.014147,
            "away": -0.008717
          },
          "ou25": {
            "over": -0.024049,
            "under": 0.024049
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1570433,
      "competition": {
        "code": "la-liga",
        "id": 140
      },
      "kickoff_utc": "2026-11-01T20:00:00Z",
      "home": {
        "id": 531,
        "name": "Athletic Club"
      },
      "away": {
        "id": 548,
        "name": "Real Sociedad"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.5390154233623056,
          "draw": 0.24849320471702965,
          "away": 0.21249137192066478
        },
        "ou25": {
          "over": 0.5568957655509229,
          "under": 0.4431042344490771
        },
        "ou45": {
          "over": 0.18207941579692685,
          "under": 0.8179205842030731
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.4475502054854411,
          "draw": 0.26127255239150077,
          "away": 0.2911772421230581
        },
        "ou25": {
          "over": 0.5685279187817259,
          "under": 0.43147208121827413
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.992,
              "decimal_odds": {
                "home": 2.15,
                "draw": 3.7,
                "away": 3.2
              },
              "overround": 0.047887,
              "probability_margin_removed": {
                "home": 0.443861,
                "draw": 0.257919,
                "away": 0.298219
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.992,
              "decimal_odds": {
                "home": 2.15,
                "draw": 3.7,
                "away": 3.2
              },
              "overround": 0.047887,
              "probability_margin_removed": {
                "home": 0.443861,
                "draw": 0.257919,
                "away": 0.298219
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.992,
              "decimal_odds": {
                "home": 2.16,
                "draw": 3.7,
                "away": 3.32
              },
              "overround": 0.034438,
              "probability_margin_removed": {
                "home": 0.44755,
                "draw": 0.261273,
                "away": 0.291177
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.992,
              "decimal_odds": {
                "home": 2.16,
                "draw": 3.7,
                "away": 3.32
              },
              "overround": 0.034438,
              "probability_margin_removed": {
                "home": 0.44755,
                "draw": 0.261273,
                "away": 0.291177
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.992,
              "decimal_odds": {
                "over": 1.67,
                "under": 2.2
              },
              "overround": 0.053348,
              "probability_margin_removed": {
                "over": 0.568475,
                "under": 0.431525
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.992,
              "decimal_odds": {
                "over": 1.67,
                "under": 2.2
              },
              "overround": 0.053348,
              "probability_margin_removed": {
                "over": 0.568475,
                "under": 0.431525
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.992,
              "decimal_odds": {
                "over": 1.7,
                "under": 2.24
              },
              "overround": 0.034664,
              "probability_margin_removed": {
                "over": 0.568528,
                "under": 0.431472
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.992,
              "decimal_odds": {
                "over": 1.7,
                "under": 2.24
              },
              "overround": 0.034664,
              "probability_margin_removed": {
                "over": 0.568528,
                "under": 0.431472
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.992,
              "decimal_odds": {
                "over": 4.5,
                "under": 1.2
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "over": 0.210526,
                "under": 0.789474
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 13.992,
              "decimal_odds": {
                "over": 4.5,
                "under": 1.2
              },
              "overround": 0.055556,
              "probability_margin_removed": {
                "over": 0.210526,
                "under": 0.789474
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 617,
        "away_matches_in_history": 618,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1618.07,
        "away_elo": 1632.59,
        "elo_difference": -14.52,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.860445,
        "away": 1.123719,
        "total": 2.984164,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.541637,
            "draw": 0.234724,
            "away": 0.223639
          },
          "ou25": {
            "over": 0.573251,
            "under": 0.426749
          },
          "ou45": {
            "over": 0.182079,
            "under": 0.817921
          },
          "btts": {
            "yes": 0.574139,
            "no": 0.425861
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.002622,
            "draw": 0.013769,
            "away": -0.011148
          },
          "ou25": {
            "over": -0.016355,
            "under": 0.016355
          },
          "ou45": {
            "over": 0.0,
            "under": -0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1570001,
      "competition": {
        "code": "laliga-2",
        "id": 141
      },
      "kickoff_utc": "2026-11-01T20:00:00Z",
      "home": {
        "id": 719,
        "name": "Tenerife"
      },
      "away": {
        "id": 8157,
        "name": "FC Andorra"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.49915117483087285,
          "draw": 0.2822798014483202,
          "away": 0.21856902372080686
        },
        "ou25": {
          "over": 0.44481550591393654,
          "under": 0.5551844940860635
        },
        "ou45": {
          "over": 0.10491950222233346,
          "under": 0.8950804977776665
        }
      },
      "market": {
        "bookmaker": null,
        "price_type": "unknown",
        "phase": null,
        "1x2": {
          "home": null,
          "draw": null,
          "away": null
        },
        "ou25": {
          "over": null,
          "under": null
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": []
      },
      "data_quality": {
        "features_present": 85,
        "features_used_by_model": 93,
        "home_matches_in_history": 397,
        "away_matches_in_history": 136,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1405.9,
        "away_elo": 1412.16,
        "elo_difference": -6.26,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.524245,
        "away": 0.946288,
        "total": 2.470533,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.502474,
            "draw": 0.267923,
            "away": 0.229603
          },
          "ou25": {
            "over": 0.448606,
            "under": 0.551394
          },
          "ou45": {
            "over": 0.10492,
            "under": 0.89508
          },
          "btts": {
            "yes": 0.483452,
            "no": 0.516548
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.003323,
            "draw": 0.014357,
            "away": -0.011034
          },
          "ou25": {
            "over": -0.00379,
            "under": 0.00379
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    },
    {
      "fixture_id": 1575530,
      "competition": {
        "code": "primeira-liga",
        "id": 94
      },
      "kickoff_utc": "2026-11-01T20:30:00Z",
      "home": {
        "id": 217,
        "name": "SC Braga"
      },
      "away": {
        "id": 242,
        "name": "Famalicao"
      },
      "prediction_at": "2026-11-01T06:00:00Z",
      "model_version": "goals_v7_cal",
      "probabilities": {
        "1x2": {
          "home": 0.5799129172553803,
          "draw": 0.24624227891453687,
          "away": 0.17384480383008283
        },
        "ou25": {
          "over": 0.5497228973166997,
          "under": 0.45027710268330035
        },
        "ou45": {
          "over": 0.15366373757436416,
          "under": 0.8463362624256359
        }
      },
      "market": {
        "bookmaker": "pinnacle",
        "price_type": "benchmark",
        "phase": "pre_match",
        "1x2": {
          "home": 0.5561624154798691,
          "draw": 0.2643299392253224,
          "away": 0.17950764529480848
        },
        "ou25": {
          "over": 0.45360824742268036,
          "under": 0.5463917525773196
        },
        "is_model_input": false,
        "margin_removal": "see market_conventions.margin_removal",
        "snapshots": [
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 14.492,
              "decimal_odds": {
                "home": 1.73,
                "draw": 3.7,
                "away": 4.75
              },
              "overround": 0.058831,
              "probability_margin_removed": {
                "home": 0.545918,
                "draw": 0.255253,
                "away": 0.198829
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 14.492,
              "decimal_odds": {
                "home": 1.73,
                "draw": 3.7,
                "away": 4.75
              },
              "overround": 0.058831,
              "probability_margin_removed": {
                "home": 0.545918,
                "draw": 0.255253,
                "away": 0.198829
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "1x2",
            "line": null,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 14.492,
              "decimal_odds": {
                "home": 1.73,
                "draw": 3.64,
                "away": 5.36
              },
              "overround": 0.039327,
              "probability_margin_removed": {
                "home": 0.556162,
                "draw": 0.26433,
                "away": 0.179508
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 14.492,
              "decimal_odds": {
                "home": 1.73,
                "draw": 3.64,
                "away": 5.36
              },
              "overround": 0.039327,
              "probability_margin_removed": {
                "home": 0.556162,
                "draw": 0.26433,
                "away": 0.179508
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 14.492,
              "decimal_odds": {
                "over": 2.1,
                "under": 1.7
              },
              "overround": 0.064426,
              "probability_margin_removed": {
                "over": 0.447368,
                "under": 0.552632
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 14.492,
              "decimal_odds": {
                "over": 2.1,
                "under": 1.7
              },
              "overround": 0.064426,
              "probability_margin_removed": {
                "over": 0.447368,
                "under": 0.552632
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "pinnacle",
            "price_type": "benchmark",
            "market": "ou25",
            "line": 2.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 14.492,
              "decimal_odds": {
                "over": 2.12,
                "under": 1.76
              },
              "overround": 0.03988,
              "probability_margin_removed": {
                "over": 0.453608,
                "under": 0.546392
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 14.492,
              "decimal_odds": {
                "over": 2.12,
                "under": 1.76
              },
              "overround": 0.03988,
              "probability_margin_removed": {
                "over": 0.453608,
                "under": 0.546392
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          },
          {
            "bookmaker": "bet365",
            "price_type": "executable_retail",
            "market": "ou45",
            "line": 4.5,
            "looks_held": 1,
            "opening": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 14.492,
              "decimal_odds": {
                "over": 8.0,
                "under": 1.08
              },
              "overround": 0.050926,
              "probability_margin_removed": {
                "over": 0.118943,
                "under": 0.881057
              }
            },
            "at_prediction": null,
            "closing": {
              "observed_at": "2026-11-01T06:00:27.856798Z",
              "hours_to_kickoff": 14.492,
              "decimal_odds": {
                "over": 8.0,
                "under": 1.08
              },
              "overround": 0.050926,
              "probability_margin_removed": {
                "over": 0.118943,
                "under": 0.881057
              }
            },
            "available_at_prediction": false,
            "first_look_offset_seconds": 28,
            "note": "opening is KI's earliest look, not the bookmaker's true open; KI begins observing at the morning horizon. available_at_prediction compares against the declared 06:00 horizon exactly, and first_look_offset_seconds says by how much the first look missed it \u2014 typically under a minute, within the same run. closing carries information the model did not have. None of these prices is a model input."
          }
        ]
      },
      "data_quality": {
        "features_present": 87,
        "features_used_by_model": 93,
        "home_matches_in_history": 537,
        "away_matches_in_history": 247,
        "flags": [
          "incomplete_feature_row"
        ]
      },
      "team_strength": {
        "home_elo": 1694.64,
        "away_elo": 1635.62,
        "elo_difference": 59.01,
        "is_model_input": true,
        "source": "internal"
      },
      "expected_goals": {
        "home": 1.857275,
        "away": 0.951335,
        "total": 2.80861,
        "units": "goals in 90 minutes, excluding extra time and penalties",
        "basis": "the two Poisson rates this fixture's rating was built from; a pre-match estimate, not an observed xG figure",
        "provenance": "recorded",
        "model_version": "goals_v7_cal"
      },
      "distribution": {
        "max_goals": 10,
        "function": "bipois_dc_v1",
        "grid_endpoint": "/report/2026-11-01.distribution.json",
        "derived_uncalibrated": {
          "1x2": {
            "home": 0.582106,
            "draw": 0.232723,
            "away": 0.185172
          },
          "ou25": {
            "over": 0.532594,
            "under": 0.467406
          },
          "ou45": {
            "over": 0.153664,
            "under": 0.846336
          },
          "btts": {
            "yes": 0.522227,
            "no": 0.477773
          }
        },
        "published_minus_derived": {
          "1x2": {
            "home": -0.002193,
            "draw": 0.013519,
            "away": -0.011327
          },
          "ou25": {
            "over": 0.017129,
            "under": -0.017129
          },
          "ou45": {
            "over": -0.0,
            "under": 0.0
          }
        },
        "note": "derived_uncalibrated is the distribution's own reading. The published probabilities are separately calibrated marginals and are what the ship gate validated, so the two differ by design. ou45 and btts are uncalibrated in both places; only 1x2 and ou25 have calibrators fitted."
      }
    }
  ]
}
