{
  "match_info": {
    "home_team": "Málaga",
    "away_team": "Espanyol",
    "tournament": "LaLiga",
    "date": "20261009",
    "timezone": "America/New_York",
    "home_formation": "4-4-2",
    "away_formation": "4-2-3-1",
    "lineup_status": "unconfirmed_official",
    "lineup_source": "/matches/get-lineups",
    "lineup_confirmed": false,
    "lineup_confidence": 0.75
  },
  "prediction": {
    "most_likely_score": "0-1",
    "home_goals": 0,
    "away_goals": 1,
    "most_likely_score_probability": 0.1561,
    "match_resolution": "regulation",
    "predicted_winner": "Espanyol",
    "tiebreaker": {
      "applies": false,
      "method": "none",
      "regulation_draw_probability": 0.2664,
      "shootout_home_win_probability": null,
      "shootout_away_win_probability": null,
      "penalty_home_goals": null,
      "penalty_away_goals": null,
      "penalty_score": null,
      "penalty_winner": null,
      "penalty_winner_goals": null,
      "penalty_loser_goals": null,
      "penalty_result": null,
      "home_advance_probability": null,
      "away_advance_probability": null,
      "projected_winner": null,
      "projected_winner_probability": null,
      "final_score_after_penalties": null,
      "reason": "Tie-breaker not required for this match context."
    },
    "top_5_scorelines": [
      {
        "score": "0-1",
        "probability": 0.1561
      },
      {
        "score": "1-1",
        "probability": 0.1209
      },
      {
        "score": "0-2",
        "probability": 0.1159
      },
      {
        "score": "0-0",
        "probability": 0.1071
      },
      {
        "score": "1-2",
        "probability": 0.0887
      }
    ],
    "scoreline_probabilities": {
      "0-0": 0.1071,
      "0-1": 0.1561,
      "0-2": 0.1159,
      "0-3": 0.0571,
      "0-4": 0.0211,
      "0-5": 0.0062,
      "0-6": 0.0015,
      "1-0": 0.0805,
      "1-1": 0.1209,
      "1-2": 0.0887,
      "1-3": 0.0436,
      "1-4": 0.0161,
      "1-5": 0.0048,
      "1-6": 0.0012,
      "2-0": 0.0311,
      "2-1": 0.0459,
      "2-2": 0.0339,
      "2-3": 0.0167,
      "2-4": 0.0062,
      "2-5": 0.0018,
      "3-0": 0.0079,
      "3-1": 0.0117,
      "3-2": 0.0086,
      "3-3": 0.0043,
      "3-4": 0.0016,
      "4-0": 0.0015,
      "4-1": 0.0022,
      "4-2": 0.0017,
      "4-3": 0.0008
    },
    "outcome": {
      "home_win": 0.1931,
      "draw": 0.2664,
      "away_win": 0.5405
    },
    "markets": {
      "over_2_5_goals": 0.3885,
      "under_2_5_goals": 0.6115,
      "btts_yes": 0.4134,
      "btts_no": 0.5866,
      "home_clean_sheet": 0.2283,
      "away_clean_sheet": 0.4653
    },
    "home_ratings": {
      "DR": 6.78,
      "MCR": 6.85,
      "ATR": 6.75,
      "GK": 7.1
    },
    "away_ratings": {
      "DR": 6.76,
      "MCR": 6.84,
      "ATR": 6.89,
      "GK": 7.09
    },
    "insights": {
      "summary": "Antagonist matchup analysis for Málaga vs Espanyol. Most likely scoreline: 0-1. Lambdas derived from 6 home and 6 away individual player duels.",
      "key_player": "Projected scorer(s): Roberto Fernández",
      "tactical_analysis": "Tactical parity between 4-4-2 and 4-2-3-1. Match outcome driven primarily by individual player quality. Midfield is evenly contested — David Larrubia vs Gabriel Moscardo will be the pivotal duel. Total antagonist xG — Home: 0.63, Away: 1.24. Home danger zone: Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle. Away danger zone: Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle."
    },
    "confidence": 0.74,
    "home_lambda": 0.765,
    "away_lambda": 1.477,
    "modal_scoreline": null,
    "modal_scoreline_probability": null,
    "headline_policy": null
  },
  "pregame_baseline": {
    "fair_win_probability": {
      "home_win": 0.1931,
      "draw": 0.2664,
      "away_win": 0.5405
    },
    "favorite": "Espanyol",
    "favorite_win_probability": 0.5405,
    "fair_spread": -0.712,
    "fair_total": 2.242,
    "prop_estimates": [
      {
        "market": "team_total_goals",
        "selection": "Málaga",
        "estimate": 0.765,
        "probability": null,
        "unit": "goals"
      },
      {
        "market": "team_total_goals",
        "selection": "Espanyol",
        "estimate": 1.477,
        "probability": null,
        "unit": "goals"
      },
      {
        "market": "over_2_5_goals",
        "selection": "yes",
        "estimate": 2.5,
        "probability": 0.3885,
        "unit": "probability"
      },
      {
        "market": "both_teams_to_score",
        "selection": "yes",
        "estimate": 1.0,
        "probability": 0.4134,
        "unit": "probability"
      },
      {
        "market": "clean_sheet",
        "selection": "Málaga",
        "estimate": 1.0,
        "probability": 0.2283,
        "unit": "probability"
      },
      {
        "market": "clean_sheet",
        "selection": "Espanyol",
        "estimate": 1.0,
        "probability": 0.4653,
        "unit": "probability"
      },
      {
        "market": "anytime_goal",
        "selection": "Chupete (Málaga)",
        "estimate": 0.306,
        "probability": 0.2636,
        "unit": "xG"
      },
      {
        "market": "anytime_goal",
        "selection": "Roberto Fernández (Espanyol)",
        "estimate": 0.4701,
        "probability": 0.3751,
        "unit": "xG"
      },
      {
        "market": "assist",
        "selection": "Pablo Martínez (Málaga)",
        "estimate": 0.1309,
        "probability": 0.1227,
        "unit": "xA"
      },
      {
        "market": "assist",
        "selection": "Edu Expósito (Espanyol)",
        "estimate": 0.168,
        "probability": 0.1546,
        "unit": "xA"
      }
    ],
    "expected_pace": {
      "tempo": "balanced",
      "expected_total_goals": 2.242,
      "expected_total_shots": 25,
      "expected_total_passes": 765,
      "expected_pressing_actions_per_90": 12.4,
      "possession_home_pct": 50.0,
      "possession_away_pct": 50.0,
      "notes": "possession projects near even"
    },
    "expected_game_script": {
      "favorite": "Espanyol",
      "favorite_win_probability": 0.5405,
      "script": "Espanyol is the fair winner side, but the baseline remains narrow: fair spread -0.71 goals and fair total 2.24.",
      "first_half": "Expect balanced tempo while both sides test the matchup thesis; shot baseline is about 12 first-half attempts.",
      "second_half": "If level after halftime, midfield control and bench quality should decide territory; Málaga must keep the match inside one goal.",
      "late_game": "A Espanyol lead likely shifts toward control and counters; a draw state keeps set pieces and transition chances live."
    },
    "key_matchup_thesis": "Espanyol chance creation leans on Roberto Fernández against Ángel Recio, Fernando Calero in Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle; possession projects near even.",
    "expected_rotation_usage_behavior": [
      "Málaga: starters carry the main goal usage through the highest xG attackers; bench watchlist: Jens-Lys Cajuste, Adrián Niño, Juan Cruz.",
      "Espanyol: starters carry the main goal usage through Roberto Fernández; bench watchlist: Javi Puado, Cyril Ngonge.",
      "Assist usage should flow through Javier Hernández; late lineup changes should re-score these allocations."
    ],
    "pregame_play_by_play": [
      "0-15: Espanyol tries to establish the projected edge; track possession and first-shot share.",
      "15-45: Baseline expects balanced tempo, about 12 total first-half shots, and 1.12 first-half xG pace.",
      "45-70: If the match is level, watch midfield control and the listed bench watchlists for usage changes.",
      "70-90: If Málaga is chasing, transition and set-piece volume become the primary live deviation signal; a draw state keeps set pieces and transition chances live."
    ],
    "invalidation_triggers": [
      "Early red card, injury, or goalkeeper change for Espanyol.",
      "Málaga wins the midfield/territory battle beyond the possession baseline.",
      "Pace collapses: first 25 minutes fall well below the shot and box-entry baseline.",
      "Set pieces, penalties, or second balls create more danger than the open-play matchup thesis."
    ],
    "top_3_risk_factors": [
      {
        "factor": "Low-event scoring variance",
        "impact": "One penalty, deflection, or missed big chance can overwhelm the fair win probability."
      },
      {
        "factor": "Late lineup or role change",
        "impact": "A pregame XI, injury, or tactical role shift can invalidate player prop and usage estimates."
      },
      {
        "factor": "Discipline and set-piece volatility",
        "impact": "Cards, fouls in dangerous zones, and corner volume can change the expected game script quickly."
      }
    ]
  },
  "teams": {
    "Málaga": {
      "formation": "4-4-2",
      "players": {
        "Carlos Puga": {
          "player_id": 1164708,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 3,
          "height": 175,
          "market_value": 825000,
          "stats": {
            "interceptions": 1,
            "tackles": 2,
            "tackles_won": 1,
            "clearances": 2,
            "aerial_won": 1,
            "total_shots": 0,
            "rating": 6.755,
            "minutes": 79,
            "total_pass": 33,
            "accurate_pass": 27,
            "duels_won": 7,
            "total_long_balls": 2,
            "accurate_long_balls": 0,
            "total_own_half_passes": 13,
            "accurate_own_half_passes": 11,
            "total_opp_half_passes": 21,
            "accurate_opp_half_passes": 16,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 59,
            "possession_lost": 12.2223,
            "dispossessed": 0.9849,
            "duels_lost": 6,
            "aerial_lost": 0,
            "total_contest": 3,
            "won_contest": 2,
            "ball_recovery": 3,
            "challenges_lost": 2,
            "fouls": 2,
            "fouls_drawn": 1,
            "blocks": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "expected_goals": 0.0034,
            "expected_assists": 0.0232,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 10,
            "total_progression": 63,
            "progressive_carries": 2,
            "key_pass": 1,
            "shots_off_target": 0,
            "opponent_faced": "Marcos Fernández",
            "matchup_zone": "Shape fallback",
            "antagonist_source": "formation_fallback",
            "projected_goals": 0,
            "goal_probability": 0.0034,
            "projected_assists": 0,
            "assist_probability": 0.0229,
            "finishing_factor": 0.9346,
            "creation_factor": 0.8,
            "fifa_overall": 78.0
          },
          "latest_10_games": [
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 75,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0031,
                "total_shots": 0,
                "total_pass": 23,
                "accurate_pass": 16,
                "key_pass": 1,
                "tackles": 6,
                "tackles_won": 3,
                "interceptions": 1,
                "clearances": 4,
                "aerial_won": 1,
                "duels_won": 10,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 23,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0048,
                "total_shots": 0,
                "total_pass": 11,
                "accurate_pass": 11,
                "tackles": 1,
                "clearances": 2,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 23,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0088,
                "total_shots": 0,
                "total_pass": 22,
                "accurate_pass": 14,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "duels_won": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 60,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0073,
                "total_shots": 0,
                "total_pass": 29,
                "accurate_pass": 22,
                "tackles": 3,
                "tackles_won": 2,
                "clearances": 1,
                "duels_won": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0155,
                "expected_assists": 0.0737,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 60,
                "accurate_pass": 51,
                "tackles": 4,
                "tackles_won": 3,
                "interceptions": 1,
                "clearances": 2,
                "duels_won": 9,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 72,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0244,
                "total_shots": 0,
                "total_pass": 27,
                "accurate_pass": 23,
                "key_pass": 1,
                "interceptions": 3,
                "clearances": 3,
                "aerial_won": 1,
                "duels_won": 5,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 2198,
            "combined_rank_score": 1041.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 822.0,
            "sofascore_rating": 6.6,
            "sofascore_appearances": 3.0,
            "fifa_rank": 1260.0,
            "fifa_overall": 78.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 10,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.755,
            "source_file": "data/player_rankings.csv",
            "player_name": "Carlos Puga",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Jun-gyu Ahn",
                  "ranking": 2193
                },
                {
                  "player_name": "Khazrat Tursunkulov",
                  "ranking": 2194
                },
                {
                  "player_name": "Ferslev Anders Klynge",
                  "ranking": 2195
                },
                {
                  "player_name": "Kim Do-Yoon",
                  "ranking": 2196
                },
                {
                  "player_name": "Solly March",
                  "ranking": 2197
                }
              ],
              "lower": [
                {
                  "player_name": "Everton Galdino",
                  "ranking": 2199
                },
                {
                  "player_name": "Bektemir Abdumannonov",
                  "ranking": 2200
                },
                {
                  "player_name": "Darwin Machís",
                  "ranking": 2201
                },
                {
                  "player_name": "Freddy Góndola",
                  "ranking": 2202
                },
                {
                  "player_name": "Joseph Mora",
                  "ranking": 2203
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.625,
          "history_matches": 6,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 6,
            "data_confidence": 0.625,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "market_value_adjustment": 0.9908,
            "fbref_prior_metrics": null,
            "rationale": "XGBoost regressor (D_service) evaluated 6 historical appearances across 7 target models."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 1.0322,
                "tackles": 2.5008,
                "tackles_won": 1.4991,
                "clearances": 2.116,
                "aerial_won": 0.6538,
                "total_shots": 0.4618,
                "rating": 6.755,
                "minutes": 79.21,
                "total_pass": 33.7603,
                "accurate_pass": 26.885,
                "duels_won": 7.2092,
                "total_long_balls": 1.5991,
                "accurate_long_balls": 0.4194,
                "total_own_half_passes": 12.8949,
                "accurate_own_half_passes": 10.948,
                "total_opp_half_passes": 20.8654,
                "accurate_opp_half_passes": 15.937,
                "crosses_total": 0.4535,
                "crosses_accurate": 0.0,
                "touches": 59.765,
                "possession_lost": 12.3358,
                "dispossessed": 0.994,
                "duels_lost": 6.176,
                "aerial_lost": 0.4935,
                "total_contest": 2.6062,
                "won_contest": 1.8729,
                "ball_recovery": 2.5321,
                "challenges_lost": 1.6075,
                "fouls": 2.3478,
                "fouls_drawn": 1.2398,
                "blocks": 1.0871,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0035,
                "expected_assists": 0.0243,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 10.0526,
                "total_progression": 63.5838,
                "progressive_carries": 1.6331,
                "key_pass": 0.5065,
                "shots_off_target": 0.4618
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 75.0,
                    "is_starting": true,
                    "weight": 0.2408,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 23.0,
                    "is_starting": false,
                    "weight": 0.2047,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 23.0,
                    "is_starting": false,
                    "weight": 0.174,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 60.0,
                    "is_starting": true,
                    "weight": 0.1479,
                    "rating": 6.2
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1257,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 72.0,
                    "is_starting": true,
                    "weight": 0.1069,
                    "rating": 6.6
                  }
                ],
                "feature_row": {
                  "history_matches": 6.0,
                  "is_starting_11": 1.0,
                  "totalClearance": 2.0926,
                  "aerialWon": 0.3477,
                  "totalClearance_p90": 3.632,
                  "totalTackle": 2.7702,
                  "totalPass": 26.3358
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 1.032165288925171,
                    "model_output": 1.0322,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1189
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.0458
                        },
                        {
                          "name": "interceptionWon_p90",
                          "contribution": 0.0346
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": 0.0269
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.0203
                        }
                      ],
                      "others": 0.02,
                      "total": 1.0322,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.129934
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.048046
                        },
                        {
                          "name": "interceptionWon_p90",
                          "margin": 0.0365
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": 0.027529
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.020253
                        }
                      ],
                      "others_margin": 0.019488
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 2.500807285308838,
                    "model_output": 2.5008,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.2209
                        },
                        {
                          "name": "totalTackle",
                          "contribution": 0.1801
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.1576
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": 0.114
                        },
                        {
                          "name": "challengeLost",
                          "contribution": 0.1012
                        }
                      ],
                      "others": 0.3331,
                      "total": 2.5008,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.147113
                        },
                        {
                          "name": "totalTackle",
                          "margin": 0.105751
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.084141
                        },
                        {
                          "name": "defensive_actions",
                          "margin": 0.056761
                        },
                        {
                          "name": "challengeLost",
                          "margin": 0.047795
                        }
                      ],
                      "others_margin": 0.142965
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 1.4991449117660522,
                    "model_output": 1.4991,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1297
                        },
                        {
                          "name": "totalTackle",
                          "contribution": 0.0901
                        },
                        {
                          "name": "challengeLost",
                          "contribution": 0.0849
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": 0.0909
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.0638
                        }
                      ],
                      "others": 0.1853,
                      "total": 1.4991,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.141326
                        },
                        {
                          "name": "totalTackle",
                          "margin": 0.087594
                        },
                        {
                          "name": "challengeLost",
                          "margin": 0.076092
                        },
                        {
                          "name": "defensive_actions",
                          "margin": 0.075478
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.049786
                        }
                      ],
                      "others_margin": 0.132032
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 2.1160166263580322,
                    "model_output": 2.116,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "totalClearance",
                          "contribution": -0.5704
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.4049
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": -0.328
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.2551
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.1701
                        }
                      ],
                      "others": -0.4167,
                      "total": 2.116,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "totalClearance",
                          "margin": -0.180637
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.131493
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": -0.105161
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.090203
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.065022
                        }
                      ],
                      "others_margin": -0.179718
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 0.6538463830947876,
                    "model_output": 0.6538,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "aerialWon",
                          "contribution": -0.5185
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1132
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.0874
                        },
                        {
                          "name": "aerialLost",
                          "contribution": -0.0637
                        },
                        {
                          "name": "minutesPlayed",
                          "contribution": 0.0444
                        }
                      ],
                      "others": -0.2162,
                      "total": 0.6538,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "aerialWon",
                          "margin": -0.470331
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.123214
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.093773
                        },
                        {
                          "name": "aerialLost",
                          "margin": -0.074328
                        },
                        {
                          "name": "minutesPlayed",
                          "margin": 0.052425
                        }
                      ],
                      "others_margin": -0.285643
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.46177276968955994,
                    "model_output": 0.4618,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.1173
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0533
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": 0.0251
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "contribution": 0.0163
                        },
                        {
                          "name": "dispossessed",
                          "contribution": 0.0152
                        }
                      ],
                      "others": -0.0019,
                      "total": 0.4618,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.117297
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.0533
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": 0.025104
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "margin": 0.016349
                        },
                        {
                          "name": "dispossessed",
                          "margin": 0.015233
                        }
                      ],
                      "others_margin": -0.002048
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.7549896240234375,
                    "model_output": 6.755,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "touches_p90",
                          "contribution": 0.0559
                        },
                        {
                          "name": "accuratePass",
                          "contribution": -0.0183
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0169
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.0128
                        },
                        {
                          "name": "rating",
                          "contribution": 0.0121
                        }
                      ],
                      "others": -0.0501,
                      "total": 6.755,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "touches_p90",
                          "margin": 0.055939
                        },
                        {
                          "name": "accuratePass",
                          "margin": -0.018252
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.016876
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.012828
                        },
                        {
                          "name": "rating",
                          "margin": 0.012144
                        }
                      ],
                      "others_margin": -0.050271
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 6,
                  "role_matches": 4,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9908, quality 0.437)",
              "stats": {
                "interceptions": 1.0227,
                "tackles": 2.4778,
                "tackles_won": 1.4854,
                "clearances": 2.0965,
                "aerial_won": 0.6478,
                "total_shots": 0.4576,
                "rating": 6.755,
                "minutes": 79.21,
                "total_pass": 33.4497,
                "accurate_pass": 26.6377,
                "duels_won": 7.1429,
                "total_long_balls": 1.5844,
                "accurate_long_balls": 0.4155,
                "total_own_half_passes": 12.7763,
                "accurate_own_half_passes": 10.8473,
                "total_opp_half_passes": 20.6734,
                "accurate_opp_half_passes": 15.7904,
                "crosses_total": 0.4493,
                "crosses_accurate": 0.0,
                "touches": 59.2152,
                "possession_lost": 12.2223,
                "dispossessed": 0.9849,
                "duels_lost": 6.1192,
                "aerial_lost": 0.489,
                "total_contest": 2.5822,
                "won_contest": 1.8557,
                "ball_recovery": 2.5088,
                "challenges_lost": 1.5927,
                "fouls": 2.3262,
                "fouls_drawn": 1.2284,
                "blocks": 1.0771,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0035,
                "expected_assists": 0.0241,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.9601,
                "total_progression": 62.9988,
                "progressive_carries": 1.6181,
                "key_pass": 0.5018,
                "shots_off_target": 0.4576
              },
              "params": {
                "market_value_eur": 825000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9908,
                "reference_quality": 0.505,
                "history_matches": 6,
                "history_shrink": 0.4545,
                "market_value_known": true
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 1.0227,
                "tackles": 2.4778,
                "tackles_won": 1.4854,
                "clearances": 2.0965,
                "aerial_won": 0.6478,
                "total_shots": 0.4576,
                "rating": 6.755,
                "minutes": 79.21,
                "total_pass": 33.4497,
                "accurate_pass": 26.6377,
                "duels_won": 7.1429,
                "total_long_balls": 1.5844,
                "accurate_long_balls": 0.4155,
                "total_own_half_passes": 12.7763,
                "accurate_own_half_passes": 10.8473,
                "total_opp_half_passes": 20.6734,
                "accurate_opp_half_passes": 15.7904,
                "crosses_total": 0.4493,
                "crosses_accurate": 0.0,
                "touches": 59.2152,
                "possession_lost": 12.2223,
                "dispossessed": 0.9849,
                "duels_lost": 6.1192,
                "aerial_lost": 0.489,
                "total_contest": 2.5822,
                "won_contest": 1.8557,
                "ball_recovery": 2.5088,
                "challenges_lost": 1.5927,
                "fouls": 2.3262,
                "fouls_drawn": 1.2284,
                "blocks": 1.0771,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0035,
                "expected_assists": 0.0241,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.9601,
                "total_progression": 62.9988,
                "progressive_carries": 1.6181,
                "key_pass": 0.5018,
                "shots_off_target": 0.4576
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "interceptions": 1.0227,
                "tackles": 2.4778,
                "tackles_won": 1.4854,
                "clearances": 2.0965,
                "aerial_won": 0.6478,
                "total_shots": 0.4576,
                "rating": 6.755,
                "minutes": 79.21,
                "total_pass": 33.4497,
                "accurate_pass": 26.6377,
                "duels_won": 7.1429,
                "total_long_balls": 1.5844,
                "accurate_long_balls": 0.4155,
                "total_own_half_passes": 12.7763,
                "accurate_own_half_passes": 10.8473,
                "total_opp_half_passes": 20.6734,
                "accurate_opp_half_passes": 15.7904,
                "crosses_total": 0.4493,
                "crosses_accurate": 0.0,
                "touches": 59.2152,
                "possession_lost": 12.2223,
                "dispossessed": 0.9849,
                "duels_lost": 6.1192,
                "aerial_lost": 0.489,
                "total_contest": 2.5822,
                "won_contest": 1.8557,
                "ball_recovery": 2.5088,
                "challenges_lost": 1.5927,
                "fouls": 2.3262,
                "fouls_drawn": 1.2284,
                "blocks": 1.0771,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0035,
                "expected_assists": 0.0241,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.9601,
                "total_progression": 62.9988,
                "progressive_carries": 1.6181,
                "key_pass": 0.5018,
                "shots_off_target": 0.4576,
                "opponent_faced": "Marcos Fernández",
                "matchup_zone": "Shape fallback",
                "antagonist_source": "formation_fallback"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Marcos Fernández",
                  "matchup_zone": "Shape fallback"
                }
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "interceptions": 1.0227,
                "tackles": 2.4778,
                "tackles_won": 1.4854,
                "clearances": 2.0965,
                "aerial_won": 0.6478,
                "total_shots": 0.4576,
                "rating": 6.755,
                "minutes": 79.21,
                "total_pass": 33.4497,
                "accurate_pass": 26.6377,
                "duels_won": 7.1429,
                "total_long_balls": 1.5844,
                "accurate_long_balls": 0.4155,
                "total_own_half_passes": 12.7763,
                "accurate_own_half_passes": 10.8473,
                "total_opp_half_passes": 20.6734,
                "accurate_opp_half_passes": 15.7904,
                "crosses_total": 0.4493,
                "crosses_accurate": 0.0,
                "touches": 59.2152,
                "possession_lost": 12.2223,
                "dispossessed": 0.9849,
                "duels_lost": 6.1192,
                "aerial_lost": 0.489,
                "total_contest": 2.5822,
                "won_contest": 1.8557,
                "ball_recovery": 2.5088,
                "challenges_lost": 1.5927,
                "fouls": 2.3262,
                "fouls_drawn": 1.2284,
                "blocks": 1.0771,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0034,
                "expected_assists": 0.0232,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.9601,
                "total_progression": 62.9988,
                "progressive_carries": 1.6181,
                "key_pass": 0.5018,
                "shots_off_target": 0.4576,
                "opponent_faced": "Marcos Fernández",
                "matchup_zone": "Shape fallback",
                "antagonist_source": "formation_fallback",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9346,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 10 by projected rating, fifa_overall 78.0; not used by the projection)",
              "stats": {
                "interceptions": 1.0227,
                "tackles": 2.4778,
                "tackles_won": 1.4854,
                "clearances": 2.0965,
                "aerial_won": 0.6478,
                "total_shots": 0.4576,
                "rating": 6.755,
                "minutes": 79.21,
                "total_pass": 33.4497,
                "accurate_pass": 26.6377,
                "duels_won": 7.1429,
                "total_long_balls": 1.5844,
                "accurate_long_balls": 0.4155,
                "total_own_half_passes": 12.7763,
                "accurate_own_half_passes": 10.8473,
                "total_opp_half_passes": 20.6734,
                "accurate_opp_half_passes": 15.7904,
                "crosses_total": 0.4493,
                "crosses_accurate": 0.0,
                "touches": 59.2152,
                "possession_lost": 12.2223,
                "dispossessed": 0.9849,
                "duels_lost": 6.1192,
                "aerial_lost": 0.489,
                "total_contest": 2.5822,
                "won_contest": 1.8557,
                "ball_recovery": 2.5088,
                "challenges_lost": 1.5927,
                "fouls": 2.3262,
                "fouls_drawn": 1.2284,
                "blocks": 1.0771,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0034,
                "expected_assists": 0.0232,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.9601,
                "total_progression": 62.9988,
                "progressive_carries": 1.6181,
                "key_pass": 0.5018,
                "shots_off_target": 0.4576,
                "opponent_faced": "Marcos Fernández",
                "matchup_zone": "Shape fallback",
                "antagonist_source": "formation_fallback",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9346,
                "creation_factor": 0.8,
                "fifa_overall": 78.0
              },
              "params": {
                "match_squad_rank": 10,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 2198,
                "fifa_rank": 1260.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 78.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "interceptions": 1.0227,
                "tackles": 2.4778,
                "tackles_won": 1.4854,
                "clearances": 2.0965,
                "aerial_won": 0.6478,
                "total_shots": 0.4576,
                "rating": 6.755,
                "minutes": 79.21,
                "total_pass": 33.4497,
                "accurate_pass": 26.6377,
                "duels_won": 7.1429,
                "total_long_balls": 1.5844,
                "accurate_long_balls": 0.4155,
                "total_own_half_passes": 12.7763,
                "accurate_own_half_passes": 10.8473,
                "total_opp_half_passes": 20.6734,
                "accurate_opp_half_passes": 15.7904,
                "crosses_total": 0.4493,
                "crosses_accurate": 0.0,
                "touches": 59.2152,
                "possession_lost": 12.2223,
                "dispossessed": 0.9849,
                "duels_lost": 6.1192,
                "aerial_lost": 0.489,
                "total_contest": 2.5822,
                "won_contest": 1.8557,
                "ball_recovery": 2.5088,
                "challenges_lost": 1.5927,
                "fouls": 2.3262,
                "fouls_drawn": 1.2284,
                "blocks": 1.0771,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0034,
                "expected_assists": 0.0232,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.9601,
                "total_progression": 62.9988,
                "progressive_carries": 1.6181,
                "key_pass": 0.5018,
                "shots_off_target": 0.4576,
                "opponent_faced": "Marcos Fernández",
                "matchup_zone": "Shape fallback",
                "antagonist_source": "formation_fallback",
                "projected_goals": 0,
                "goal_probability": 0.0034,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9346,
                "creation_factor": 0.8,
                "fifa_overall": 78.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0034,
                "scorer_weight": 0.0032,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0038,
                "finishing_factor": 0.9346,
                "appearance_weight": 1.0,
                "weight_rank": 12,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "interceptions": 1.0227,
                "tackles": 2.4778,
                "tackles_won": 1.4854,
                "clearances": 2.0965,
                "aerial_won": 0.6478,
                "total_shots": 0.4576,
                "rating": 6.755,
                "minutes": 79.21,
                "total_pass": 33.4497,
                "accurate_pass": 26.6377,
                "duels_won": 7.1429,
                "total_long_balls": 1.5844,
                "accurate_long_balls": 0.4155,
                "total_own_half_passes": 12.7763,
                "accurate_own_half_passes": 10.8473,
                "total_opp_half_passes": 20.6734,
                "accurate_opp_half_passes": 15.7904,
                "crosses_total": 0.4493,
                "crosses_accurate": 0.0,
                "touches": 59.2152,
                "possession_lost": 12.2223,
                "dispossessed": 0.9849,
                "duels_lost": 6.1192,
                "aerial_lost": 0.489,
                "total_contest": 2.5822,
                "won_contest": 1.8557,
                "ball_recovery": 2.5088,
                "challenges_lost": 1.5927,
                "fouls": 2.3262,
                "fouls_drawn": 1.2284,
                "blocks": 1.0771,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0034,
                "expected_assists": 0.0232,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.9601,
                "total_progression": 62.9988,
                "progressive_carries": 1.6181,
                "key_pass": 0.5018,
                "shots_off_target": 0.4576,
                "opponent_faced": "Marcos Fernández",
                "matchup_zone": "Shape fallback",
                "antagonist_source": "formation_fallback",
                "projected_goals": 0,
                "goal_probability": 0.0034,
                "projected_assists": 0,
                "assist_probability": 0.0229,
                "finishing_factor": 0.9346,
                "creation_factor": 0.8,
                "fifa_overall": 78.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0229,
                "provider_weight": 0.0186,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0316,
                "creation_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 8,
                "eligible_players": 13
              }
            }
          ]
        },
        "Alfonso Herrero": {
          "player_id": 96371,
          "position": "G",
          "position_depth": "G",
          "is_starter": true,
          "shirt_number": 1,
          "height": 180,
          "market_value": 420000,
          "stats": {
            "saves": 3,
            "goals_prevented": -0.0226,
            "rating": 7.0979,
            "minutes": 90,
            "total_pass": 39,
            "accurate_pass": 28,
            "total_long_balls": 18,
            "accurate_long_balls": 7,
            "touches": 50,
            "clearances": 1,
            "ball_recovery": 8,
            "high_claims": 0,
            "punches": 1.2561,
            "aerial_won": 0,
            "sweeper_actions": 1,
            "sweeper_accurate": 1,
            "saves_inside_box": 2,
            "possession_lost": 10.9086,
            "duels_won": 1,
            "duels_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "total_own_half_passes": 27,
            "accurate_own_half_passes": 25,
            "gk_engine_opponent_lambda": 1.4767,
            "shots_faced": 14.0,
            "expected_saves": 3.42,
            "high_pressure_saves": 1.18,
            "opponent_faced": "Roberto Fernández, Marcos Fernández",
            "matchup_zone": "Goalkeeper shot-stopping context",
            "antagonist_source": "formation_fallback",
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "finishing_factor": 1.0,
            "creation_factor": 1.0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 90,
                "rating": 7.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0018,
                "total_shots": 0,
                "total_pass": 30,
                "accurate_pass": 21,
                "duels_won": 1,
                "ball_recovery": 7,
                "saves": 6,
                "goals_prevented": 0.2423
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 90,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0008,
                "total_shots": 0,
                "total_pass": 38,
                "accurate_pass": 24,
                "clearances": 1,
                "ball_recovery": 7,
                "saves": 3,
                "goals_prevented": -0.2258
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 90,
                "rating": 8.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0112,
                "total_shots": 0,
                "total_pass": 63,
                "accurate_pass": 45,
                "clearances": 3,
                "duels_won": 1,
                "ball_recovery": 14,
                "saves": 4,
                "goals_prevented": 0.3644
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 8.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0001,
                "total_shots": 0,
                "total_pass": 46,
                "accurate_pass": 34,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 5,
                "saves": 3,
                "goals_prevented": 0.8332
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 7.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0001,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 18,
                "clearances": 1,
                "ball_recovery": 7,
                "saves": 4,
                "goals_prevented": -0.7359
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0023,
                "total_shots": 0,
                "total_pass": 31,
                "accurate_pass": 28,
                "clearances": 1,
                "ball_recovery": 7,
                "saves": 4,
                "goals_prevented": 0.1734
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 90,
                "rating": 7.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0027,
                "total_shots": 0,
                "total_pass": 47,
                "accurate_pass": 32,
                "ball_recovery": 9,
                "saves": 4,
                "goals_prevented": 0.6449
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 3276,
            "combined_rank_score": 1220.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 44.0,
            "sofascore_rating": 7.8,
            "sofascore_appearances": 1.0,
            "fifa_rank": 2397.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 1,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 7.0979,
            "source_file": "data/player_rankings.csv",
            "player_name": "Alfonso Herrero",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Federico Viñas",
                  "ranking": 3271
                },
                {
                  "player_name": "Marco Reus",
                  "ranking": 3272
                },
                {
                  "player_name": "Santiago Bueno",
                  "ranking": 3273
                },
                {
                  "player_name": "Hany Mukhtar",
                  "ranking": 3274
                },
                {
                  "player_name": "Aleksey Miranchuk",
                  "ranking": 3275
                }
              ],
              "lower": [
                {
                  "player_name": "Tim Iroegbunam",
                  "ranking": 3277
                },
                {
                  "player_name": "Jaminton Campaz",
                  "ranking": 3278
                },
                {
                  "player_name": "Miguel Merentiel",
                  "ranking": 3279
                },
                {
                  "player_name": "Pep Biel",
                  "ranking": 3280
                },
                {
                  "player_name": "Beñat Prados",
                  "ranking": 3281
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.718,
          "history_matches": 7,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "G_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "accurateLongBalls",
              "totalOwnHalfPasses",
              "accurateOwnHalfPasses",
              "saves",
              "savedShotsFromInsideTheBox",
              "goodHighClaim",
              "punches",
              "aerialWon",
              "totalKeeperSweeper",
              "accurateKeeperSweeper",
              "totalClearance",
              "ballRecovery",
              "touches",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "goalkeeperValueNormalized",
              "goalsPrevented",
              "rating",
              "pass_accuracy",
              "long_ball_accuracy",
              "save_contribution",
              "inside_box_save_rate",
              "sweeper_accuracy",
              "sweeper_actions_p90",
              "distribution_accuracy",
              "commanding_index",
              "history_matches"
            ],
            "targets_predicted": [
              "saves",
              "goalsPrevented",
              "rating"
            ],
            "history_matches": 7,
            "data_confidence": 0.718,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9916,
            "fbref_prior_metrics": {
              "squad": "Málaga",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "minutes": 270.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 0.0,
              "prior_reliability": 0.2
            },
            "rationale": "XGBoost regressor (G_service) evaluated 7 historical appearances across 3 target models; FBref 2026-2027 prior blended (La Liga, Málaga, rel: 0.20, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost G_service raw output over 3 target models",
              "stats": {
                "saves": 3.0125,
                "goals_prevented": -0.0228,
                "rating": 7.0979,
                "minutes": 90.0,
                "total_pass": 39.4107,
                "accurate_pass": 28.4097,
                "total_long_balls": 17.6704,
                "accurate_long_balls": 6.857,
                "touches": 50.7193,
                "clearances": 1.1506,
                "ball_recovery": 8.0119,
                "high_claims": 0.4913,
                "punches": 1.2667,
                "aerial_won": 0.1356,
                "sweeper_actions": 0.5471,
                "sweeper_accurate": 0.5471,
                "saves_inside_box": 2.4307,
                "possession_lost": 11.001,
                "duels_won": 0.5159,
                "duels_lost": 0.2856,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.1877,
                "fouls_drawn": 0.3803,
                "total_own_half_passes": 27.3121,
                "accurate_own_half_passes": 25.5441
              },
              "trace": {
                "model": {
                  "position_service": "G",
                  "schema_version": 5,
                  "trained_at": "2026-10-09T10:02:40.828652+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 199,
                    "rows": 6796
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.2208,
                    "rating": 7.7
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1877,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1595,
                    "rating": 8.1
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1356,
                    "rating": 8.1
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1152,
                    "rating": 7.1
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.098,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0833,
                    "rating": 7.8
                  }
                ],
                "feature_row": {
                  "history_matches": 7.0,
                  "is_starting_11": 1.0,
                  "sweeper_actions_p90": 0.4304,
                  "distribution_accuracy": 0.9387,
                  "sweeper_accuracy": 0.4304,
                  "goalkeeperValueNormalized": 0.4427,
                  "save_contribution": 4.2864,
                  "accurateKeeperSweeper": 0.5471
                },
                "per_target": [
                  {
                    "target": "saves",
                    "predicted": 3.012462854385376,
                    "model_output": 3.0125,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "distribution_accuracy",
                        "importance": 0.0415
                      },
                      {
                        "name": "sweeper_actions_p90",
                        "importance": 0.0394
                      },
                      {
                        "name": "pass_accuracy",
                        "importance": 0.0368
                      },
                      {
                        "name": "accurateOwnHalfPasses",
                        "importance": 0.0362
                      },
                      {
                        "name": "sweeper_accuracy",
                        "importance": 0.0362
                      }
                    ],
                    "decomposition": {
                      "base": 2.9286,
                      "items": [
                        {
                          "name": "saves",
                          "contribution": 0.0392
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": 0.0328
                        },
                        {
                          "name": "sweeper_accuracy",
                          "contribution": -0.0218
                        },
                        {
                          "name": "accurateLongBalls",
                          "contribution": 0.019
                        },
                        {
                          "name": "accurateKeeperSweeper",
                          "contribution": -0.0123
                        }
                      ],
                      "others": 0.027,
                      "total": 3.0125,
                      "log_link": true,
                      "margin_base": 1.074537,
                      "item_margins": [
                        {
                          "name": "saves",
                          "margin": 0.013308
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": 0.010977
                        },
                        {
                          "name": "sweeper_accuracy",
                          "margin": -0.007285
                        },
                        {
                          "name": "accurateLongBalls",
                          "margin": 0.006351
                        },
                        {
                          "name": "accurateKeeperSweeper",
                          "margin": -0.004107
                        }
                      ],
                      "others_margin": 0.008976
                    }
                  },
                  {
                    "target": "goalsPrevented",
                    "predicted": -0.022824062034487724,
                    "model_output": -0.0228,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "punches",
                        "importance": 0.041
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0398
                      },
                      {
                        "name": "sweeper_accuracy",
                        "importance": 0.0385
                      },
                      {
                        "name": "goalkeeperValueNormalized",
                        "importance": 0.0374
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0356
                      }
                    ],
                    "decomposition": {
                      "base": -0.0166,
                      "items": [
                        {
                          "name": "saves",
                          "contribution": -0.0208
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": 0.018
                        },
                        {
                          "name": "sweeper_accuracy",
                          "contribution": -0.0135
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0115
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0108
                        }
                      ],
                      "others": 0.0324,
                      "total": -0.0228,
                      "log_link": false,
                      "margin_base": -0.016613,
                      "item_margins": [
                        {
                          "name": "saves",
                          "margin": -0.020803
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": 0.018014
                        },
                        {
                          "name": "sweeper_accuracy",
                          "margin": -0.013486
                        },
                        {
                          "name": "rating",
                          "margin": -0.011466
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.010829
                        }
                      ],
                      "others_margin": 0.032359
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 7.09787654876709,
                    "model_output": 7.0979,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "sweeper_actions_p90",
                        "importance": 0.0429
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0382
                      },
                      {
                        "name": "distribution_accuracy",
                        "importance": 0.0371
                      },
                      {
                        "name": "goalkeeperValueNormalized",
                        "importance": 0.036
                      },
                      {
                        "name": "accurateOwnHalfPasses",
                        "importance": 0.0359
                      }
                    ],
                    "decomposition": {
                      "base": 7.0091,
                      "items": [
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": 0.0324
                        },
                        {
                          "name": "totalPass",
                          "contribution": 0.0227
                        },
                        {
                          "name": "savedShotsFromInsideTheBox",
                          "contribution": 0.0161
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.0158
                        },
                        {
                          "name": "accurateKeeperSweeper",
                          "contribution": -0.0154
                        }
                      ],
                      "others": 0.0172,
                      "total": 7.0979,
                      "log_link": false,
                      "margin_base": 7.009122,
                      "item_margins": [
                        {
                          "name": "defensiveValueNormalized",
                          "margin": 0.032421
                        },
                        {
                          "name": "totalPass",
                          "margin": 0.022678
                        },
                        {
                          "name": "savedShotsFromInsideTheBox",
                          "margin": 0.016095
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.015802
                        },
                        {
                          "name": "accurateKeeperSweeper",
                          "margin": -0.015351
                        }
                      ],
                      "others_margin": 0.017109
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 7,
                  "role_matches": 7,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9916, quality 0.437)",
              "stats": {
                "saves": 2.9872,
                "goals_prevented": -0.0226,
                "rating": 7.0979,
                "minutes": 90.0,
                "total_pass": 39.0797,
                "accurate_pass": 28.1711,
                "total_long_balls": 17.522,
                "accurate_long_balls": 6.7994,
                "touches": 50.2933,
                "clearances": 1.1409,
                "ball_recovery": 7.9446,
                "high_claims": 0.4872,
                "punches": 1.2561,
                "aerial_won": 0.1345,
                "sweeper_actions": 0.5425,
                "sweeper_accurate": 0.5425,
                "saves_inside_box": 2.4103,
                "possession_lost": 10.9086,
                "duels_won": 0.5116,
                "duels_lost": 0.2832,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.1861,
                "fouls_drawn": 0.3771,
                "total_own_half_passes": 27.0827,
                "accurate_own_half_passes": 25.3295
              },
              "params": {
                "market_value_eur": 420000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9916,
                "reference_quality": 0.505,
                "history_matches": 7,
                "history_shrink": 0.4167,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0542)",
              "stats": {
                "saves": 3.0421,
                "goals_prevented": -0.0226,
                "rating": 7.0979,
                "minutes": 90.0,
                "total_pass": 39.0797,
                "accurate_pass": 28.1711,
                "total_long_balls": 17.522,
                "accurate_long_balls": 6.7994,
                "touches": 50.2933,
                "clearances": 1.1409,
                "ball_recovery": 7.9446,
                "high_claims": 0.4872,
                "punches": 1.2561,
                "aerial_won": 0.1345,
                "sweeper_actions": 0.5425,
                "sweeper_accurate": 0.5425,
                "saves_inside_box": 2.4103,
                "possession_lost": 10.9086,
                "duels_won": 0.5116,
                "duels_lost": 0.2832,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.176,
                "fouls_drawn": 0.3567,
                "total_own_half_passes": 27.0827,
                "accurate_own_half_passes": 25.3295
              },
              "params": {
                "blend_weight": 0.0542,
                "history_matches": 7,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 1.0,
                "prior_reliability": 0.2,
                "competition": "La Liga",
                "squad": "Málaga"
              },
              "changes": [
                {
                  "stat": "saves",
                  "before": 2.9872,
                  "after": 3.0421
                },
                {
                  "stat": "wasFouled",
                  "before": 0.3771,
                  "after": 0.3567
                },
                {
                  "stat": "fouls",
                  "before": 0.1861,
                  "after": 0.176
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "saves": 3.0421,
                "goals_prevented": -0.0226,
                "rating": 7.0979,
                "minutes": 90.0,
                "total_pass": 39.0797,
                "accurate_pass": 28.1711,
                "total_long_balls": 17.522,
                "accurate_long_balls": 6.7994,
                "touches": 50.2933,
                "clearances": 1.1409,
                "ball_recovery": 7.9446,
                "high_claims": 0.4872,
                "punches": 1.2561,
                "aerial_won": 0.1345,
                "sweeper_actions": 0.5425,
                "sweeper_accurate": 0.5425,
                "saves_inside_box": 2.4103,
                "possession_lost": 10.9086,
                "duels_won": 0.5116,
                "duels_lost": 0.2832,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.176,
                "fouls_drawn": 0.3567,
                "total_own_half_passes": 27.0827,
                "accurate_own_half_passes": 25.3295
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "saves": 3.0421,
                "goals_prevented": -0.0226,
                "rating": 7.0979,
                "minutes": 90.0,
                "total_pass": 39.0797,
                "accurate_pass": 28.1711,
                "total_long_balls": 17.522,
                "accurate_long_balls": 6.7994,
                "touches": 50.2933,
                "clearances": 1.1409,
                "ball_recovery": 7.9446,
                "high_claims": 0.4872,
                "punches": 1.2561,
                "aerial_won": 0.1345,
                "sweeper_actions": 0.5425,
                "sweeper_accurate": 0.5425,
                "saves_inside_box": 2.4103,
                "possession_lost": 10.9086,
                "duels_won": 0.5116,
                "duels_lost": 0.2832,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.176,
                "fouls_drawn": 0.3567,
                "total_own_half_passes": 27.0827,
                "accurate_own_half_passes": 25.3295,
                "gk_engine_opponent_lambda": 1.4767,
                "shots_faced": 14.0,
                "expected_saves": 3.42,
                "high_pressure_saves": 1.18,
                "opponent_faced": "Roberto Fernández, Marcos Fernández",
                "matchup_zone": "Goalkeeper shot-stopping context",
                "antagonist_source": "formation_fallback"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Roberto Fernández, Marcos Fernández",
                  "matchup_zone": "Goalkeeper shot-stopping context",
                  "opponent_lambda": 1.4767
                }
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "saves": 3.0421,
                "goals_prevented": -0.0226,
                "rating": 7.0979,
                "minutes": 90.0,
                "total_pass": 39.0797,
                "accurate_pass": 28.1711,
                "total_long_balls": 17.522,
                "accurate_long_balls": 6.7994,
                "touches": 50.2933,
                "clearances": 1.1409,
                "ball_recovery": 7.9446,
                "high_claims": 0.4872,
                "punches": 1.2561,
                "aerial_won": 0.1345,
                "sweeper_actions": 0.5425,
                "sweeper_accurate": 0.5425,
                "saves_inside_box": 2.4103,
                "possession_lost": 10.9086,
                "duels_won": 0.5116,
                "duels_lost": 0.2832,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.176,
                "fouls_drawn": 0.3567,
                "total_own_half_passes": 27.0827,
                "accurate_own_half_passes": 25.3295,
                "gk_engine_opponent_lambda": 1.4767,
                "shots_faced": 14.0,
                "expected_saves": 3.42,
                "high_pressure_saves": 1.18,
                "opponent_faced": "Roberto Fernández, Marcos Fernández",
                "matchup_zone": "Goalkeeper shot-stopping context",
                "antagonist_source": "formation_fallback",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 1.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 1 by projected rating, fifa_overall 75.0; not used by the projection)",
              "stats": {
                "saves": 3.0421,
                "goals_prevented": -0.0226,
                "rating": 7.0979,
                "minutes": 90.0,
                "total_pass": 39.0797,
                "accurate_pass": 28.1711,
                "total_long_balls": 17.522,
                "accurate_long_balls": 6.7994,
                "touches": 50.2933,
                "clearances": 1.1409,
                "ball_recovery": 7.9446,
                "high_claims": 0.4872,
                "punches": 1.2561,
                "aerial_won": 0.1345,
                "sweeper_actions": 0.5425,
                "sweeper_accurate": 0.5425,
                "saves_inside_box": 2.4103,
                "possession_lost": 10.9086,
                "duels_won": 0.5116,
                "duels_lost": 0.2832,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.176,
                "fouls_drawn": 0.3567,
                "total_own_half_passes": 27.0827,
                "accurate_own_half_passes": 25.3295,
                "gk_engine_opponent_lambda": 1.4767,
                "shots_faced": 14.0,
                "expected_saves": 3.42,
                "high_pressure_saves": 1.18,
                "opponent_faced": "Roberto Fernández, Marcos Fernández",
                "matchup_zone": "Goalkeeper shot-stopping context",
                "antagonist_source": "formation_fallback",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 1.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0,
                "fifa_overall": 75.0
              },
              "params": {
                "match_squad_rank": 1,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3276,
                "fifa_rank": 2397.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 75.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "saves": 3.0421,
                "goals_prevented": -0.0226,
                "rating": 7.0979,
                "minutes": 90.0,
                "total_pass": 39.0797,
                "accurate_pass": 28.1711,
                "total_long_balls": 17.522,
                "accurate_long_balls": 6.7994,
                "touches": 50.2933,
                "clearances": 1.1409,
                "ball_recovery": 7.9446,
                "high_claims": 0.4872,
                "punches": 1.2561,
                "aerial_won": 0.1345,
                "sweeper_actions": 0.5425,
                "sweeper_accurate": 0.5425,
                "saves_inside_box": 2.4103,
                "possession_lost": 10.9086,
                "duels_won": 0.5116,
                "duels_lost": 0.2832,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.176,
                "fouls_drawn": 0.3567,
                "total_own_half_passes": 27.0827,
                "accurate_own_half_passes": 25.3295,
                "gk_engine_opponent_lambda": 1.4767,
                "shots_faced": 14.0,
                "expected_saves": 3.42,
                "high_pressure_saves": 1.18,
                "opponent_faced": "Roberto Fernández, Marcos Fernández",
                "matchup_zone": "Goalkeeper shot-stopping context",
                "antagonist_source": "formation_fallback",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 1.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0,
                "fifa_overall": 75.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0,
                "scorer_weight": 0.0,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0,
                "finishing_factor": 1.0,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "saves": 3.0421,
                "goals_prevented": -0.0226,
                "rating": 7.0979,
                "minutes": 90.0,
                "total_pass": 39.0797,
                "accurate_pass": 28.1711,
                "total_long_balls": 17.522,
                "accurate_long_balls": 6.7994,
                "touches": 50.2933,
                "clearances": 1.1409,
                "ball_recovery": 7.9446,
                "high_claims": 0.4872,
                "punches": 1.2561,
                "aerial_won": 0.1345,
                "sweeper_actions": 0.5425,
                "sweeper_accurate": 0.5425,
                "saves_inside_box": 2.4103,
                "possession_lost": 10.9086,
                "duels_won": 0.5116,
                "duels_lost": 0.2832,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.176,
                "fouls_drawn": 0.3567,
                "total_own_half_passes": 27.0827,
                "accurate_own_half_passes": 25.3295,
                "gk_engine_opponent_lambda": 1.4767,
                "shots_faced": 14.0,
                "expected_saves": 3.42,
                "high_pressure_saves": 1.18,
                "opponent_faced": "Roberto Fernández, Marcos Fernández",
                "matchup_zone": "Goalkeeper shot-stopping context",
                "antagonist_source": "formation_fallback",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 1.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0,
                "fifa_overall": 75.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0,
                "provider_weight": 0.0,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0,
                "creation_factor": 1.0,
                "appearance_weight": 1.0
              }
            }
          ]
        },
        "Fernando Calero": {
          "player_id": 857205,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 20,
          "height": 183,
          "market_value": 2100000,
          "stats": {
            "interceptions": 1,
            "tackles": 1,
            "tackles_won": 1,
            "clearances": 5,
            "aerial_won": 2,
            "total_shots": 0,
            "rating": 6.7933,
            "minutes": 86,
            "total_pass": 48,
            "accurate_pass": 42,
            "duels_won": 3,
            "total_long_balls": 5,
            "accurate_long_balls": 3,
            "total_own_half_passes": 34,
            "accurate_own_half_passes": 33,
            "total_opp_half_passes": 13,
            "accurate_opp_half_passes": 9,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 59,
            "possession_lost": 6.5048,
            "dispossessed": 0.0,
            "duels_lost": 3,
            "aerial_lost": 2,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 4,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 0,
            "blocks": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "expected_goals": 0.031,
            "expected_assists": 0.0074,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0003,
            "ball_carries": 13,
            "total_progression": 41,
            "progressive_carries": 0,
            "key_pass": 0,
            "shots_off_target": 0,
            "tackles_in_zone": 1.0,
            "tackles_won_in_zone": 0.8,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.6,
            "defensive_success_rate": 0.7,
            "opponent_faced": "Roberto Fernández",
            "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "antagonist_source": "defensive_duel",
            "projected_goals": 0,
            "goal_probability": 0.0305,
            "projected_assists": 0,
            "assist_probability": 0.0074,
            "finishing_factor": 0.8,
            "creation_factor": 0.8666,
            "fifa_overall": 81.0
          },
          "latest_10_games": [
            {
              "match_id": 14083719,
              "match_date": "2026-05-23",
              "home_team": "Espanyol",
              "away_team": "Real Sociedad",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0087,
                "total_shots": 0,
                "total_pass": 71,
                "accurate_pass": 66,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 1,
                "duels_won": 2,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083696,
              "match_date": "2026-05-17",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 26,
                "rating": 7.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.001,
                "total_shots": 0,
                "total_pass": 5,
                "accurate_pass": 4,
                "tackles": 1,
                "interceptions": 1,
                "clearances": 2,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083587,
              "match_date": "2026-05-09",
              "home_team": "Sevilla",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0387,
                "expected_assists": 0.0013,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 25,
                "accurate_pass": 17,
                "interceptions": 1,
                "clearances": 6,
                "aerial_won": 3,
                "duels_won": 4,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083422,
              "match_date": "2026-05-03",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0293,
                "total_shots": 0,
                "total_pass": 39,
                "accurate_pass": 37,
                "interceptions": 2,
                "clearances": 7,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 9
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083221,
              "match_date": "2026-04-27",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0064,
                "total_shots": 0,
                "total_pass": 68,
                "accurate_pass": 59,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 3,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083330,
              "match_date": "2026-04-23",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 78,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0052,
                "total_shots": 0,
                "total_pass": 29,
                "accurate_pass": 23,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 2,
                "duels_won": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083113,
              "match_date": "2026-04-11",
              "home_team": "FC Barcelona",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "FC Barcelona",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1459,
                "expected_assists": 0.0018,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 26,
                "accurate_pass": 22,
                "tackles": 3,
                "tackles_won": 2,
                "interceptions": 1,
                "clearances": 3,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14081800,
              "match_date": "2026-03-09",
              "home_team": "Espanyol",
              "away_team": "Real Oviedo",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Real Oviedo",
              "stats": {
                "minutes": 11,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0003,
                "total_shots": 0,
                "total_pass": 7,
                "accurate_pass": 7,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083561,
              "match_date": "2026-02-21",
              "home_team": "Atlético Madrid",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0038,
                "total_shots": 0,
                "total_pass": 47,
                "accurate_pass": 44,
                "tackles": 2,
                "tackles_won": 2,
                "interceptions": 1,
                "clearances": 6,
                "aerial_won": 2,
                "duels_won": 4,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083303,
              "match_date": "2026-02-09",
              "home_team": "Villarreal",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 45,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0026,
                "total_shots": 0,
                "total_pass": 40,
                "accurate_pass": 35,
                "clearances": 4,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 1185,
            "combined_rank_score": 513.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 522.0,
            "sofascore_rating": 6.8393,
            "sofascore_appearances": 28.0,
            "fifa_rank": 504.0,
            "fifa_overall": 81.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 9,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7933,
            "source_file": "data/player_rankings.csv",
            "player_name": "Fernando Calero",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Sebastián Díaz",
                  "ranking": 1180
                },
                {
                  "player_name": "Jesse Lingard",
                  "ranking": 1181
                },
                {
                  "player_name": "Ilkhomzhon Abduganiev",
                  "ranking": 1182
                },
                {
                  "player_name": "Pijus Širvys",
                  "ranking": 1183
                },
                {
                  "player_name": "Olivier Thill",
                  "ranking": 1184
                }
              ],
              "lower": [
                {
                  "player_name": "Diego Rubio",
                  "ranking": 1186
                },
                {
                  "player_name": "Ismaïla Sarr",
                  "ranking": 1187
                },
                {
                  "player_name": "Kevin Danso",
                  "ranking": 1188
                },
                {
                  "player_name": "Folarin Balogun",
                  "ranking": 1189
                },
                {
                  "player_name": "Jonathan David",
                  "ranking": 1190
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.75,
          "history_matches": 28,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 28,
            "data_confidence": 0.75,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "market_value_adjustment": 0.9969,
            "fbref_prior_metrics": null,
            "rationale": "XGBoost regressor (D_service) evaluated 28 historical appearances across 7 target models."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 0.9646,
                "tackles": 1.353,
                "tackles_won": 0.8337,
                "clearances": 5.0771,
                "aerial_won": 1.6638,
                "total_shots": 0.3643,
                "rating": 6.7933,
                "minutes": 86.26,
                "total_pass": 47.7163,
                "accurate_pass": 42.1249,
                "duels_won": 2.9642,
                "total_long_balls": 5.4677,
                "accurate_long_balls": 2.6208,
                "total_own_half_passes": 34.4021,
                "accurate_own_half_passes": 33.1594,
                "total_opp_half_passes": 13.3143,
                "accurate_opp_half_passes": 8.9656,
                "crosses_total": 0.1188,
                "crosses_accurate": 0.0,
                "touches": 59.0193,
                "possession_lost": 6.525,
                "dispossessed": 0.0,
                "duels_lost": 3.2608,
                "aerial_lost": 1.6593,
                "total_contest": 0.203,
                "won_contest": 0.0255,
                "ball_recovery": 3.9541,
                "challenges_lost": 0.5339,
                "fouls": 0.89,
                "fouls_drawn": 0.4891,
                "blocks": 0.5564,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0323,
                "expected_assists": 0.0077,
                "shots_on_target": 0.0185,
                "big_chances_created": 0.0306,
                "xgot": 0.0003,
                "ball_carries": 13.065,
                "total_progression": 40.6529,
                "progressive_carries": 0.0,
                "key_pass": 0.0769,
                "shots_off_target": 0.3458
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-05-23",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1516,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Osasuna",
                    "minutes": 26.0,
                    "is_starting": false,
                    "weight": 0.1289,
                    "rating": 7.4
                  },
                  {
                    "match_date": "2026-05-09",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1095,
                    "rating": 6.2
                  },
                  {
                    "match_date": "2026-05-03",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0931,
                    "rating": 6.2
                  },
                  {
                    "match_date": "2026-04-27",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0791,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-04-23",
                    "opponent": "Rayo Vallecano",
                    "minutes": 78.0,
                    "is_starting": true,
                    "weight": 0.0673,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-04-11",
                    "opponent": "FC Barcelona",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0572,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-03-09",
                    "opponent": "Real Oviedo",
                    "minutes": 11.0,
                    "is_starting": false,
                    "weight": 0.0486,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-02-21",
                    "opponent": "Atlético Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0413,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-02-09",
                    "opponent": "Villarreal",
                    "minutes": 45.0,
                    "is_starting": true,
                    "weight": 0.0351,
                    "rating": 6.3
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 1.0,
                  "totalClearance": 3.7119,
                  "aerialWon": 1.1876,
                  "totalClearance_p90": 4.5812,
                  "totalTackle": 0.9761,
                  "totalPass": 40.3091
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 0.9645546078681946,
                    "model_output": 0.9646,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1002
                        },
                        {
                          "name": "interceptionWon_p90",
                          "contribution": 0.0215
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0133
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0097
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": -0.008
                        }
                      ],
                      "others": -0.01,
                      "total": 0.9646,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.11057
                        },
                        {
                          "name": "interceptionWon_p90",
                          "margin": 0.022244
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.013491
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.009797
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": -0.00815
                        }
                      ],
                      "others_margin": -0.010447
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 1.3530263900756836,
                    "model_output": 1.353,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1779
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": -0.0832
                        },
                        {
                          "name": "press_vulnerability",
                          "contribution": -0.0438
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.0419
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.0317
                        }
                      ],
                      "others": -0.0182,
                      "total": 1.353,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.12009
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": -0.054371
                        },
                        {
                          "name": "press_vulnerability",
                          "margin": -0.02987
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.029405
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.022856
                        }
                      ],
                      "others_margin": -0.013333
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 0.8336682915687561,
                    "model_output": 0.8337,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.103
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.038
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.0291
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": -0.0221
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0182
                        }
                      ],
                      "others": -0.0163,
                      "total": 0.8337,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.113864
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.040541
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.032203
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": -0.025189
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.021212
                        }
                      ],
                      "others_margin": -0.019225
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 5.077072620391846,
                    "model_output": 5.0771,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.4683
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.3609
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.3157
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.2113
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.1499
                        }
                      ],
                      "others": 0.1196,
                      "total": 5.0771,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.127236
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.088088
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.071157
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.044949
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.030708
                        }
                      ],
                      "others_margin": 0.023813
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 1.6637736558914185,
                    "model_output": 1.6638,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "aerialWon",
                          "contribution": -0.1877
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1652
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0854
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0706
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": 0.0429
                        }
                      ],
                      "others": 0.1054,
                      "total": 1.6638,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "aerialWon",
                          "margin": -0.145942
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.129537
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.06091
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.047718
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": 0.02791
                        }
                      ],
                      "others_margin": 0.065401
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.36429131031036377,
                    "model_output": 0.3643,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.0638
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0543
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0143
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": -0.01
                        },
                        {
                          "name": "dispossessed",
                          "contribution": -0.01
                        }
                      ],
                      "others": -0.063,
                      "total": 0.3643,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.063788
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.054337
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.01431
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": -0.010023
                        },
                        {
                          "name": "dispossessed",
                          "margin": -0.009971
                        }
                      ],
                      "others_margin": -0.063085
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.793262481689453,
                    "model_output": 6.7933,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "totalClearance",
                          "contribution": 0.0112
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0101
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0097
                        },
                        {
                          "name": "touches",
                          "contribution": 0.0096
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0091
                        }
                      ],
                      "others": 0.0163,
                      "total": 6.7933,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "totalClearance",
                          "margin": 0.01121
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.010084
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.009733
                        },
                        {
                          "name": "touches",
                          "margin": 0.009606
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.009089
                        }
                      ],
                      "others_margin": 0.016221
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 28,
                  "role_matches": 24,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9969, quality 0.437)",
              "stats": {
                "interceptions": 0.9616,
                "tackles": 1.3488,
                "tackles_won": 0.8311,
                "clearances": 5.0613,
                "aerial_won": 1.6586,
                "total_shots": 0.3632,
                "rating": 6.7933,
                "minutes": 86.26,
                "total_pass": 47.5684,
                "accurate_pass": 41.9943,
                "duels_won": 2.955,
                "total_long_balls": 5.4508,
                "accurate_long_balls": 2.6127,
                "total_own_half_passes": 34.2955,
                "accurate_own_half_passes": 33.0566,
                "total_opp_half_passes": 13.273,
                "accurate_opp_half_passes": 8.9378,
                "crosses_total": 0.1184,
                "crosses_accurate": 0.0,
                "touches": 58.8363,
                "possession_lost": 6.5048,
                "dispossessed": 0.0,
                "duels_lost": 3.2507,
                "aerial_lost": 1.6542,
                "total_contest": 0.2024,
                "won_contest": 0.0254,
                "ball_recovery": 3.9418,
                "challenges_lost": 0.5322,
                "fouls": 0.8872,
                "fouls_drawn": 0.4876,
                "blocks": 0.5547,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0322,
                "expected_assists": 0.0077,
                "shots_on_target": 0.0184,
                "big_chances_created": 0.0305,
                "xgot": 0.0003,
                "ball_carries": 13.0245,
                "total_progression": 40.5269,
                "progressive_carries": 0.0,
                "key_pass": 0.0767,
                "shots_off_target": 0.3447
              },
              "params": {
                "market_value_eur": 2100000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9969,
                "reference_quality": 0.505,
                "history_matches": 28,
                "history_shrink": 0.1515,
                "market_value_known": true
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 0.9616,
                "tackles": 1.3488,
                "tackles_won": 0.8311,
                "clearances": 5.0613,
                "aerial_won": 1.6586,
                "total_shots": 0.3632,
                "rating": 6.7933,
                "minutes": 86.26,
                "total_pass": 47.5684,
                "accurate_pass": 41.9943,
                "duels_won": 2.955,
                "total_long_balls": 5.4508,
                "accurate_long_balls": 2.6127,
                "total_own_half_passes": 34.2955,
                "accurate_own_half_passes": 33.0566,
                "total_opp_half_passes": 13.273,
                "accurate_opp_half_passes": 8.9378,
                "crosses_total": 0.1184,
                "crosses_accurate": 0.0,
                "touches": 58.8363,
                "possession_lost": 6.5048,
                "dispossessed": 0.0,
                "duels_lost": 3.2507,
                "aerial_lost": 1.6542,
                "total_contest": 0.2024,
                "won_contest": 0.0254,
                "ball_recovery": 3.9418,
                "challenges_lost": 0.5322,
                "fouls": 0.8872,
                "fouls_drawn": 0.4876,
                "blocks": 0.5547,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0322,
                "expected_assists": 0.0077,
                "shots_on_target": 0.0184,
                "big_chances_created": 0.0305,
                "xgot": 0.0003,
                "ball_carries": 13.0245,
                "total_progression": 40.5269,
                "progressive_carries": 0.0,
                "key_pass": 0.0767,
                "shots_off_target": 0.3447
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "interceptions": 0.9616,
                "tackles": 1.3488,
                "tackles_won": 0.8311,
                "clearances": 5.0613,
                "aerial_won": 1.6586,
                "total_shots": 0.3632,
                "rating": 6.7933,
                "minutes": 86.26,
                "total_pass": 47.5684,
                "accurate_pass": 41.9943,
                "duels_won": 2.955,
                "total_long_balls": 5.4508,
                "accurate_long_balls": 2.6127,
                "total_own_half_passes": 34.2955,
                "accurate_own_half_passes": 33.0566,
                "total_opp_half_passes": 13.273,
                "accurate_opp_half_passes": 8.9378,
                "crosses_total": 0.1184,
                "crosses_accurate": 0.0,
                "touches": 58.8363,
                "possession_lost": 6.5048,
                "dispossessed": 0.0,
                "duels_lost": 3.2507,
                "aerial_lost": 1.6542,
                "total_contest": 0.2024,
                "won_contest": 0.0254,
                "ball_recovery": 3.9418,
                "challenges_lost": 0.5322,
                "fouls": 0.8872,
                "fouls_drawn": 0.4876,
                "blocks": 0.5547,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0322,
                "expected_assists": 0.0077,
                "shots_on_target": 0.0184,
                "big_chances_created": 0.0305,
                "xgot": 0.0003,
                "ball_carries": 13.0245,
                "total_progression": 40.5269,
                "progressive_carries": 0.0,
                "key_pass": 0.0767,
                "shots_off_target": 0.3447,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.8,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.7,
                "opponent_faced": "Roberto Fernández",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Roberto Fernández",
                  "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle"
                }
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "interceptions": 0.9616,
                "tackles": 1.3488,
                "tackles_won": 0.8311,
                "clearances": 5.0613,
                "aerial_won": 1.6586,
                "total_shots": 0.3632,
                "rating": 6.7933,
                "minutes": 86.26,
                "total_pass": 47.5684,
                "accurate_pass": 41.9943,
                "duels_won": 2.955,
                "total_long_balls": 5.4508,
                "accurate_long_balls": 2.6127,
                "total_own_half_passes": 34.2955,
                "accurate_own_half_passes": 33.0566,
                "total_opp_half_passes": 13.273,
                "accurate_opp_half_passes": 8.9378,
                "crosses_total": 0.1184,
                "crosses_accurate": 0.0,
                "touches": 58.8363,
                "possession_lost": 6.5048,
                "dispossessed": 0.0,
                "duels_lost": 3.2507,
                "aerial_lost": 1.6542,
                "total_contest": 0.2024,
                "won_contest": 0.0254,
                "ball_recovery": 3.9418,
                "challenges_lost": 0.5322,
                "fouls": 0.8872,
                "fouls_drawn": 0.4876,
                "blocks": 0.5547,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.031,
                "expected_assists": 0.0074,
                "shots_on_target": 0.0184,
                "big_chances_created": 0.0305,
                "xgot": 0.0003,
                "ball_carries": 13.0245,
                "total_progression": 40.5269,
                "progressive_carries": 0.0,
                "key_pass": 0.0767,
                "shots_off_target": 0.3447,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.8,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.7,
                "opponent_faced": "Roberto Fernández",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 0.8666
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 9 by projected rating, fifa_overall 81.0; not used by the projection)",
              "stats": {
                "interceptions": 0.9616,
                "tackles": 1.3488,
                "tackles_won": 0.8311,
                "clearances": 5.0613,
                "aerial_won": 1.6586,
                "total_shots": 0.3632,
                "rating": 6.7933,
                "minutes": 86.26,
                "total_pass": 47.5684,
                "accurate_pass": 41.9943,
                "duels_won": 2.955,
                "total_long_balls": 5.4508,
                "accurate_long_balls": 2.6127,
                "total_own_half_passes": 34.2955,
                "accurate_own_half_passes": 33.0566,
                "total_opp_half_passes": 13.273,
                "accurate_opp_half_passes": 8.9378,
                "crosses_total": 0.1184,
                "crosses_accurate": 0.0,
                "touches": 58.8363,
                "possession_lost": 6.5048,
                "dispossessed": 0.0,
                "duels_lost": 3.2507,
                "aerial_lost": 1.6542,
                "total_contest": 0.2024,
                "won_contest": 0.0254,
                "ball_recovery": 3.9418,
                "challenges_lost": 0.5322,
                "fouls": 0.8872,
                "fouls_drawn": 0.4876,
                "blocks": 0.5547,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.031,
                "expected_assists": 0.0074,
                "shots_on_target": 0.0184,
                "big_chances_created": 0.0305,
                "xgot": 0.0003,
                "ball_carries": 13.0245,
                "total_progression": 40.5269,
                "progressive_carries": 0.0,
                "key_pass": 0.0767,
                "shots_off_target": 0.3447,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.8,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.7,
                "opponent_faced": "Roberto Fernández",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 0.8666,
                "fifa_overall": 81.0
              },
              "params": {
                "match_squad_rank": 9,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 1185,
                "fifa_rank": 504.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 81.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "interceptions": 0.9616,
                "tackles": 1.3488,
                "tackles_won": 0.8311,
                "clearances": 5.0613,
                "aerial_won": 1.6586,
                "total_shots": 0.3632,
                "rating": 6.7933,
                "minutes": 86.26,
                "total_pass": 47.5684,
                "accurate_pass": 41.9943,
                "duels_won": 2.955,
                "total_long_balls": 5.4508,
                "accurate_long_balls": 2.6127,
                "total_own_half_passes": 34.2955,
                "accurate_own_half_passes": 33.0566,
                "total_opp_half_passes": 13.273,
                "accurate_opp_half_passes": 8.9378,
                "crosses_total": 0.1184,
                "crosses_accurate": 0.0,
                "touches": 58.8363,
                "possession_lost": 6.5048,
                "dispossessed": 0.0,
                "duels_lost": 3.2507,
                "aerial_lost": 1.6542,
                "total_contest": 0.2024,
                "won_contest": 0.0254,
                "ball_recovery": 3.9418,
                "challenges_lost": 0.5322,
                "fouls": 0.8872,
                "fouls_drawn": 0.4876,
                "blocks": 0.5547,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.031,
                "expected_assists": 0.0074,
                "shots_on_target": 0.0184,
                "big_chances_created": 0.0305,
                "xgot": 0.0003,
                "ball_carries": 13.0245,
                "total_progression": 40.5269,
                "progressive_carries": 0.0,
                "key_pass": 0.0767,
                "shots_off_target": 0.3447,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.8,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.7,
                "opponent_faced": "Roberto Fernández",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0305,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 0.8666,
                "fifa_overall": 81.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0305,
                "scorer_weight": 0.0248,
                "squad_weight_total": 0.8264,
                "weight_share": 0.03,
                "finishing_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 9,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "interceptions": 0.9616,
                "tackles": 1.3488,
                "tackles_won": 0.8311,
                "clearances": 5.0613,
                "aerial_won": 1.6586,
                "total_shots": 0.3632,
                "rating": 6.7933,
                "minutes": 86.26,
                "total_pass": 47.5684,
                "accurate_pass": 41.9943,
                "duels_won": 2.955,
                "total_long_balls": 5.4508,
                "accurate_long_balls": 2.6127,
                "total_own_half_passes": 34.2955,
                "accurate_own_half_passes": 33.0566,
                "total_opp_half_passes": 13.273,
                "accurate_opp_half_passes": 8.9378,
                "crosses_total": 0.1184,
                "crosses_accurate": 0.0,
                "touches": 58.8363,
                "possession_lost": 6.5048,
                "dispossessed": 0.0,
                "duels_lost": 3.2507,
                "aerial_lost": 1.6542,
                "total_contest": 0.2024,
                "won_contest": 0.0254,
                "ball_recovery": 3.9418,
                "challenges_lost": 0.5322,
                "fouls": 0.8872,
                "fouls_drawn": 0.4876,
                "blocks": 0.5547,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.031,
                "expected_assists": 0.0074,
                "shots_on_target": 0.0184,
                "big_chances_created": 0.0305,
                "xgot": 0.0003,
                "ball_carries": 13.0245,
                "total_progression": 40.5269,
                "progressive_carries": 0.0,
                "key_pass": 0.0767,
                "shots_off_target": 0.3447,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.8,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.7,
                "opponent_faced": "Roberto Fernández",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0305,
                "projected_assists": 0,
                "assist_probability": 0.0074,
                "finishing_factor": 0.8,
                "creation_factor": 0.8666,
                "fifa_overall": 81.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0074,
                "provider_weight": 0.0064,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0109,
                "creation_factor": 0.8666,
                "appearance_weight": 1.0,
                "weight_rank": 13,
                "eligible_players": 13
              }
            }
          ]
        },
        "Ángel Recio": {
          "player_id": 1123218,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 15,
          "height": 185,
          "market_value": 315000,
          "stats": {
            "interceptions": 1,
            "tackles": 1,
            "tackles_won": 1,
            "clearances": 4,
            "aerial_won": 1,
            "total_shots": 1,
            "rating": 6.8506,
            "minutes": 90,
            "total_pass": 58,
            "accurate_pass": 54,
            "duels_won": 2,
            "total_long_balls": 5,
            "accurate_long_balls": 2,
            "total_own_half_passes": 36,
            "accurate_own_half_passes": 35,
            "total_opp_half_passes": 22,
            "accurate_opp_half_passes": 19,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 67,
            "possession_lost": 4.6641,
            "dispossessed": 0.0,
            "duels_lost": 3,
            "aerial_lost": 1,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 4,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 0,
            "blocks": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "expected_goals": 0.018,
            "expected_assists": 0.0079,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.008,
            "ball_carries": 20,
            "total_progression": 70,
            "progressive_carries": 0,
            "key_pass": 0,
            "shots_off_target": 0,
            "tackles_in_zone": 1.0,
            "tackles_won_in_zone": 0.8,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.6,
            "defensive_success_rate": 0.7,
            "opponent_faced": "Roberto Fernández",
            "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "antagonist_source": "defensive_duel",
            "projected_goals": 0,
            "goal_probability": 0.0178,
            "projected_assists": 0,
            "assist_probability": 0.0079,
            "finishing_factor": 0.8,
            "creation_factor": 0.8591,
            "fifa_overall": 65.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 90,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0262,
                "expected_assists": 0.0051,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 58,
                "accurate_pass": 52,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 4,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 90,
                "rating": 8.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0026,
                "total_shots": 0,
                "total_pass": 34,
                "accurate_pass": 33,
                "tackles": 3,
                "tackles_won": 3,
                "clearances": 2,
                "duels_won": 3,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 90,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.069,
                "expected_assists": 0.012,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 67,
                "accurate_pass": 65,
                "interceptions": 2,
                "clearances": 2,
                "aerial_won": 2,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0155,
                "expected_assists": 0.0173,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 102,
                "accurate_pass": 96,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 3,
                "aerial_won": 2,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0073,
                "total_shots": 0,
                "total_pass": 40,
                "accurate_pass": 33,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 6,
                "duels_won": 3,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 90,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0082,
                "total_shots": 0,
                "total_pass": 59,
                "accurate_pass": 56,
                "key_pass": 1,
                "clearances": 4,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0098,
                "total_shots": 0,
                "total_pass": 57,
                "accurate_pass": 50,
                "tackles": 1,
                "interceptions": 2,
                "clearances": 3,
                "duels_won": 1,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 7921,
            "combined_rank_score": 6392.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 983.0,
            "sofascore_rating": 6.2333,
            "sofascore_appearances": 3.0,
            "fifa_rank": 11802.0,
            "fifa_overall": 65.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 6,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.8506,
            "source_file": "data/player_rankings.csv",
            "player_name": "Ángel Recio",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Fabian Schleusener",
                  "ranking": 7916
                },
                {
                  "player_name": "Johannes Schenk",
                  "ranking": 7917
                },
                {
                  "player_name": "Tim Oberdorf",
                  "ranking": 7918
                },
                {
                  "player_name": "Pablo Santos",
                  "ranking": 7919
                },
                {
                  "player_name": "Khalid Eissa",
                  "ranking": 7920
                }
              ],
              "lower": [
                {
                  "player_name": "Ramón Martínez",
                  "ranking": 7922
                },
                {
                  "player_name": "Adis Jašić",
                  "ranking": 7923
                },
                {
                  "player_name": "Chan Kim",
                  "ranking": 7924
                },
                {
                  "player_name": "Juan Manuel Zapata",
                  "ranking": 7925
                },
                {
                  "player_name": "Loïs Diony",
                  "ranking": 7926
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.688,
          "history_matches": 7,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 7,
            "data_confidence": 0.688,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "market_value_adjustment": 0.9916,
            "fbref_prior_metrics": null,
            "rationale": "XGBoost regressor (D_service) evaluated 7 historical appearances across 7 target models."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 0.9273,
                "tackles": 1.2349,
                "tackles_won": 0.7733,
                "clearances": 4.2415,
                "aerial_won": 1.2664,
                "total_shots": 0.529,
                "rating": 6.8506,
                "minutes": 90.0,
                "total_pass": 58.8377,
                "accurate_pass": 54.5094,
                "duels_won": 2.3801,
                "total_long_balls": 5.3898,
                "accurate_long_balls": 2.3551,
                "total_own_half_passes": 36.7157,
                "accurate_own_half_passes": 35.4531,
                "total_opp_half_passes": 22.122,
                "accurate_opp_half_passes": 19.0563,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 67.5494,
                "possession_lost": 4.7036,
                "dispossessed": 0.0,
                "duels_lost": 2.8118,
                "aerial_lost": 1.3778,
                "total_contest": 0.2208,
                "won_contest": 0.2208,
                "ball_recovery": 3.6088,
                "challenges_lost": 0.5994,
                "fouls": 0.8346,
                "fouls_drawn": 0.1152,
                "blocks": 0.6058,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0189,
                "expected_assists": 0.0083,
                "shots_on_target": 0.1356,
                "big_chances_created": 0.0,
                "xgot": 0.0084,
                "ball_carries": 19.9027,
                "total_progression": 70.5165,
                "progressive_carries": 0.1595,
                "key_pass": 0.098,
                "shots_off_target": 0.3934
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.2208,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1877,
                    "rating": 8.0
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1595,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1356,
                    "rating": 7.3
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1152,
                    "rating": 6.2
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.098,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0833,
                    "rating": 6.0
                  }
                ],
                "feature_row": {
                  "history_matches": 7.0,
                  "is_starting_11": 1.0,
                  "totalClearance": 3.3173,
                  "aerialWon": 0.811,
                  "totalClearance_p90": 3.3173,
                  "totalTackle": 1.2331,
                  "totalPass": 58.8377
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 0.9272691011428833,
                    "model_output": 0.9273,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.112
                        },
                        {
                          "name": "interceptionWon_p90",
                          "contribution": -0.0292
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.0123
                        },
                        {
                          "name": "duelWon_p90",
                          "contribution": -0.0119
                        },
                        {
                          "name": "touches",
                          "contribution": 0.0097
                        }
                      ],
                      "others": 0.0017,
                      "total": 0.9273,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.122836
                        },
                        {
                          "name": "interceptionWon_p90",
                          "margin": -0.030585
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.013215
                        },
                        {
                          "name": "duelWon_p90",
                          "margin": -0.012894
                        },
                        {
                          "name": "touches",
                          "margin": 0.010491
                        }
                      ],
                      "others_margin": 0.001855
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 1.2348726987838745,
                    "model_output": 1.2349,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1446
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": -0.0989
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.0413
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.0397
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.0357
                        }
                      ],
                      "others": -0.088,
                      "total": 1.2349,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.098706
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": -0.066437
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.029106
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.028807
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.026653
                        }
                      ],
                      "others_margin": -0.068825
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 0.7732832431793213,
                    "model_output": 0.7733,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0944
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": -0.0487
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.025
                        },
                        {
                          "name": "accuratePass",
                          "contribution": -0.0233
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.0213
                        }
                      ],
                      "others": -0.0572,
                      "total": 0.7733,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.104836
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": -0.052709
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.028182
                        },
                        {
                          "name": "accuratePass",
                          "margin": -0.026954
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.025306
                        }
                      ],
                      "others_margin": -0.071382
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 4.241535186767578,
                    "model_output": 4.2415,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.4661
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": 0.3121
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.3224
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.2743
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.1336
                        }
                      ],
                      "others": -0.1698,
                      "total": 4.2415,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.126673
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": 0.076661
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.073457
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.062143
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.030754
                        }
                      ],
                      "others_margin": -0.039259
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 1.2663861513137817,
                    "model_output": 1.2664,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "aerialWon",
                          "contribution": -0.2791
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1651
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.0679
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0675
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.0429
                        }
                      ],
                      "others": -0.0441,
                      "total": 1.2664,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "aerialWon",
                          "margin": -0.225549
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.139514
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.055025
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.054692
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.033283
                        }
                      ],
                      "others_margin": -0.0343
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.5290409326553345,
                    "model_output": 0.529,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0643
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0344
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": 0.0264
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0166
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.0076
                        }
                      ],
                      "others": -0.043,
                      "total": 0.529,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.064311
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.034396
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": 0.026436
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.016609
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.007639
                        }
                      ],
                      "others_margin": -0.042987
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.850620746612549,
                    "model_output": 6.8506,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.0258
                        },
                        {
                          "name": "accuratePass",
                          "contribution": 0.0231
                        },
                        {
                          "name": "totalPass",
                          "contribution": 0.0195
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0118
                        },
                        {
                          "name": "touches",
                          "contribution": 0.008
                        }
                      ],
                      "others": 0.0009,
                      "total": 6.8506,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.02576
                        },
                        {
                          "name": "accuratePass",
                          "margin": 0.023126
                        },
                        {
                          "name": "totalPass",
                          "margin": 0.019506
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.011801
                        },
                        {
                          "name": "touches",
                          "margin": 0.008046
                        }
                      ],
                      "others_margin": 0.000852
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 7,
                  "role_matches": 7,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9916, quality 0.437)",
              "stats": {
                "interceptions": 0.9195,
                "tackles": 1.2245,
                "tackles_won": 0.7668,
                "clearances": 4.2059,
                "aerial_won": 1.2557,
                "total_shots": 0.5246,
                "rating": 6.8506,
                "minutes": 90.0,
                "total_pass": 58.3435,
                "accurate_pass": 54.0515,
                "duels_won": 2.3601,
                "total_long_balls": 5.3445,
                "accurate_long_balls": 2.3353,
                "total_own_half_passes": 36.4073,
                "accurate_own_half_passes": 35.1553,
                "total_opp_half_passes": 21.9362,
                "accurate_opp_half_passes": 18.8962,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 66.982,
                "possession_lost": 4.6641,
                "dispossessed": 0.0,
                "duels_lost": 2.7882,
                "aerial_lost": 1.3662,
                "total_contest": 0.2189,
                "won_contest": 0.2189,
                "ball_recovery": 3.5785,
                "challenges_lost": 0.5944,
                "fouls": 0.8276,
                "fouls_drawn": 0.1142,
                "blocks": 0.6007,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0187,
                "expected_assists": 0.0082,
                "shots_on_target": 0.1345,
                "big_chances_created": 0.0,
                "xgot": 0.0083,
                "ball_carries": 19.7355,
                "total_progression": 69.9242,
                "progressive_carries": 0.1582,
                "key_pass": 0.0972,
                "shots_off_target": 0.3901
              },
              "params": {
                "market_value_eur": 315000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9916,
                "reference_quality": 0.505,
                "history_matches": 7,
                "history_shrink": 0.4167,
                "market_value_known": true
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 0.9195,
                "tackles": 1.2245,
                "tackles_won": 0.7668,
                "clearances": 4.2059,
                "aerial_won": 1.2557,
                "total_shots": 0.5246,
                "rating": 6.8506,
                "minutes": 90.0,
                "total_pass": 58.3435,
                "accurate_pass": 54.0515,
                "duels_won": 2.3601,
                "total_long_balls": 5.3445,
                "accurate_long_balls": 2.3353,
                "total_own_half_passes": 36.4073,
                "accurate_own_half_passes": 35.1553,
                "total_opp_half_passes": 21.9362,
                "accurate_opp_half_passes": 18.8962,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 66.982,
                "possession_lost": 4.6641,
                "dispossessed": 0.0,
                "duels_lost": 2.7882,
                "aerial_lost": 1.3662,
                "total_contest": 0.2189,
                "won_contest": 0.2189,
                "ball_recovery": 3.5785,
                "challenges_lost": 0.5944,
                "fouls": 0.8276,
                "fouls_drawn": 0.1142,
                "blocks": 0.6007,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0187,
                "expected_assists": 0.0082,
                "shots_on_target": 0.1345,
                "big_chances_created": 0.0,
                "xgot": 0.0083,
                "ball_carries": 19.7355,
                "total_progression": 69.9242,
                "progressive_carries": 0.1582,
                "key_pass": 0.0972,
                "shots_off_target": 0.3901
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "interceptions": 0.9195,
                "tackles": 1.2245,
                "tackles_won": 0.7668,
                "clearances": 4.2059,
                "aerial_won": 1.2557,
                "total_shots": 0.5246,
                "rating": 6.8506,
                "minutes": 90.0,
                "total_pass": 58.3435,
                "accurate_pass": 54.0515,
                "duels_won": 2.3601,
                "total_long_balls": 5.3445,
                "accurate_long_balls": 2.3353,
                "total_own_half_passes": 36.4073,
                "accurate_own_half_passes": 35.1553,
                "total_opp_half_passes": 21.9362,
                "accurate_opp_half_passes": 18.8962,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 66.982,
                "possession_lost": 4.6641,
                "dispossessed": 0.0,
                "duels_lost": 2.7882,
                "aerial_lost": 1.3662,
                "total_contest": 0.2189,
                "won_contest": 0.2189,
                "ball_recovery": 3.5785,
                "challenges_lost": 0.5944,
                "fouls": 0.8276,
                "fouls_drawn": 0.1142,
                "blocks": 0.6007,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0187,
                "expected_assists": 0.0082,
                "shots_on_target": 0.1345,
                "big_chances_created": 0.0,
                "xgot": 0.0083,
                "ball_carries": 19.7355,
                "total_progression": 69.9242,
                "progressive_carries": 0.1582,
                "key_pass": 0.0972,
                "shots_off_target": 0.3901,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.8,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.7,
                "opponent_faced": "Roberto Fernández",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Roberto Fernández",
                  "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle"
                }
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "interceptions": 0.9195,
                "tackles": 1.2245,
                "tackles_won": 0.7668,
                "clearances": 4.2059,
                "aerial_won": 1.2557,
                "total_shots": 0.5246,
                "rating": 6.8506,
                "minutes": 90.0,
                "total_pass": 58.3435,
                "accurate_pass": 54.0515,
                "duels_won": 2.3601,
                "total_long_balls": 5.3445,
                "accurate_long_balls": 2.3353,
                "total_own_half_passes": 36.4073,
                "accurate_own_half_passes": 35.1553,
                "total_opp_half_passes": 21.9362,
                "accurate_opp_half_passes": 18.8962,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 66.982,
                "possession_lost": 4.6641,
                "dispossessed": 0.0,
                "duels_lost": 2.7882,
                "aerial_lost": 1.3662,
                "total_contest": 0.2189,
                "won_contest": 0.2189,
                "ball_recovery": 3.5785,
                "challenges_lost": 0.5944,
                "fouls": 0.8276,
                "fouls_drawn": 0.1142,
                "blocks": 0.6007,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.018,
                "expected_assists": 0.0079,
                "shots_on_target": 0.1345,
                "big_chances_created": 0.0,
                "xgot": 0.008,
                "ball_carries": 19.7355,
                "total_progression": 69.9242,
                "progressive_carries": 0.1582,
                "key_pass": 0.0972,
                "shots_off_target": 0.3901,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.8,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.7,
                "opponent_faced": "Roberto Fernández",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 0.8591
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 6 by projected rating, fifa_overall 65.0; not used by the projection)",
              "stats": {
                "interceptions": 0.9195,
                "tackles": 1.2245,
                "tackles_won": 0.7668,
                "clearances": 4.2059,
                "aerial_won": 1.2557,
                "total_shots": 0.5246,
                "rating": 6.8506,
                "minutes": 90.0,
                "total_pass": 58.3435,
                "accurate_pass": 54.0515,
                "duels_won": 2.3601,
                "total_long_balls": 5.3445,
                "accurate_long_balls": 2.3353,
                "total_own_half_passes": 36.4073,
                "accurate_own_half_passes": 35.1553,
                "total_opp_half_passes": 21.9362,
                "accurate_opp_half_passes": 18.8962,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 66.982,
                "possession_lost": 4.6641,
                "dispossessed": 0.0,
                "duels_lost": 2.7882,
                "aerial_lost": 1.3662,
                "total_contest": 0.2189,
                "won_contest": 0.2189,
                "ball_recovery": 3.5785,
                "challenges_lost": 0.5944,
                "fouls": 0.8276,
                "fouls_drawn": 0.1142,
                "blocks": 0.6007,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.018,
                "expected_assists": 0.0079,
                "shots_on_target": 0.1345,
                "big_chances_created": 0.0,
                "xgot": 0.008,
                "ball_carries": 19.7355,
                "total_progression": 69.9242,
                "progressive_carries": 0.1582,
                "key_pass": 0.0972,
                "shots_off_target": 0.3901,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.8,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.7,
                "opponent_faced": "Roberto Fernández",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 0.8591,
                "fifa_overall": 65.0
              },
              "params": {
                "match_squad_rank": 6,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 7921,
                "fifa_rank": 11802.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 65.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "interceptions": 0.9195,
                "tackles": 1.2245,
                "tackles_won": 0.7668,
                "clearances": 4.2059,
                "aerial_won": 1.2557,
                "total_shots": 0.5246,
                "rating": 6.8506,
                "minutes": 90.0,
                "total_pass": 58.3435,
                "accurate_pass": 54.0515,
                "duels_won": 2.3601,
                "total_long_balls": 5.3445,
                "accurate_long_balls": 2.3353,
                "total_own_half_passes": 36.4073,
                "accurate_own_half_passes": 35.1553,
                "total_opp_half_passes": 21.9362,
                "accurate_opp_half_passes": 18.8962,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 66.982,
                "possession_lost": 4.6641,
                "dispossessed": 0.0,
                "duels_lost": 2.7882,
                "aerial_lost": 1.3662,
                "total_contest": 0.2189,
                "won_contest": 0.2189,
                "ball_recovery": 3.5785,
                "challenges_lost": 0.5944,
                "fouls": 0.8276,
                "fouls_drawn": 0.1142,
                "blocks": 0.6007,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.018,
                "expected_assists": 0.0079,
                "shots_on_target": 0.1345,
                "big_chances_created": 0.0,
                "xgot": 0.008,
                "ball_carries": 19.7355,
                "total_progression": 69.9242,
                "progressive_carries": 0.1582,
                "key_pass": 0.0972,
                "shots_off_target": 0.3901,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.8,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.7,
                "opponent_faced": "Roberto Fernández",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0178,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 0.8591,
                "fifa_overall": 65.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0178,
                "scorer_weight": 0.0144,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0174,
                "finishing_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 11,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "interceptions": 0.9195,
                "tackles": 1.2245,
                "tackles_won": 0.7668,
                "clearances": 4.2059,
                "aerial_won": 1.2557,
                "total_shots": 0.5246,
                "rating": 6.8506,
                "minutes": 90.0,
                "total_pass": 58.3435,
                "accurate_pass": 54.0515,
                "duels_won": 2.3601,
                "total_long_balls": 5.3445,
                "accurate_long_balls": 2.3353,
                "total_own_half_passes": 36.4073,
                "accurate_own_half_passes": 35.1553,
                "total_opp_half_passes": 21.9362,
                "accurate_opp_half_passes": 18.8962,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 66.982,
                "possession_lost": 4.6641,
                "dispossessed": 0.0,
                "duels_lost": 2.7882,
                "aerial_lost": 1.3662,
                "total_contest": 0.2189,
                "won_contest": 0.2189,
                "ball_recovery": 3.5785,
                "challenges_lost": 0.5944,
                "fouls": 0.8276,
                "fouls_drawn": 0.1142,
                "blocks": 0.6007,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.018,
                "expected_assists": 0.0079,
                "shots_on_target": 0.1345,
                "big_chances_created": 0.0,
                "xgot": 0.008,
                "ball_carries": 19.7355,
                "total_progression": 69.9242,
                "progressive_carries": 0.1582,
                "key_pass": 0.0972,
                "shots_off_target": 0.3901,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.8,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.7,
                "opponent_faced": "Roberto Fernández",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0178,
                "projected_assists": 0,
                "assist_probability": 0.0079,
                "finishing_factor": 0.8,
                "creation_factor": 0.8591,
                "fifa_overall": 65.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0079,
                "provider_weight": 0.0068,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0116,
                "creation_factor": 0.8591,
                "appearance_weight": 1.0,
                "weight_rank": 12,
                "eligible_players": 13
              }
            }
          ]
        },
        "David Larrubia": {
          "player_id": 1002405,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 10,
          "height": 172,
          "market_value": 5300000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.1099,
            "assist_rate": 0.0883,
            "assists": 0,
            "expected_goals": 0.0756,
            "goal_rate": 0.1122,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "rating": 6.7988,
            "minutes": 89,
            "total_pass": 28,
            "accurate_pass": 23,
            "duels_won": 5,
            "total_long_balls": 2,
            "accurate_long_balls": 1,
            "total_own_half_passes": 8,
            "accurate_own_half_passes": 6,
            "total_opp_half_passes": 20,
            "accurate_opp_half_passes": 17,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 52,
            "possession_lost": 15.6451,
            "dispossessed": 1.892,
            "duels_lost": 10,
            "aerial_won": 1,
            "aerial_lost": 0,
            "interceptions": 1,
            "tackles_won": 1,
            "tackles": 2,
            "clearances": 0,
            "total_contest": 7,
            "won_contest": 2,
            "challenges_lost": 2,
            "fouls": 1,
            "fouls_drawn": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0067,
            "ball_carries": 18,
            "total_progression": 122,
            "progressive_carries": 4,
            "shots_off_target": 1,
            "duel_xg_multiplier": 0.9001,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.7,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.382,
            "pressing_faced": "LOW",
            "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
            "numerical_situation": "1v1",
            "opponent_defenders": "Gabriel Moscardo",
            "opponent_faced": "Gabriel Moscardo",
            "antagonist_source": "attacking_duel, defensive_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.0728,
            "projected_assists": 0,
            "assist_probability": 0.1041,
            "finishing_factor": 1.25,
            "creation_factor": 0.8433,
            "fifa_overall": 81.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 90,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0453,
                "expected_assists": 0.122,
                "total_shots": 1,
                "total_pass": 38,
                "accurate_pass": 31,
                "key_pass": 2,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0093,
                "total_shots": 0,
                "total_pass": 23,
                "accurate_pass": 17,
                "key_pass": 1,
                "tackles": 3,
                "tackles_won": 1,
                "interceptions": 1,
                "duels_won": 7,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 90,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0735,
                "expected_assists": 0.0404,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 28,
                "accurate_pass": 24,
                "key_pass": 1,
                "tackles": 1,
                "interceptions": 2,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1965,
                "expected_assists": 0.1804,
                "total_shots": 2,
                "shots_off_target": 1,
                "total_pass": 22,
                "accurate_pass": 18,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 5,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1257,
                "expected_assists": 0.1173,
                "total_shots": 4,
                "shots_on_target": 1,
                "total_pass": 31,
                "accurate_pass": 26,
                "key_pass": 4,
                "tackles": 3,
                "tackles_won": 1,
                "duels_won": 9,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 34,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.028,
                "expected_assists": 0.0527,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 16,
                "accurate_pass": 9,
                "key_pass": 1,
                "tackles": 6,
                "tackles_won": 3,
                "interceptions": 2,
                "duels_won": 10,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0414,
                "expected_assists": 0.0262,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 23,
                "accurate_pass": 21,
                "tackles": 5,
                "tackles_won": 3,
                "duels_won": 6,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 1361,
            "combined_rank_score": 577.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 578.0,
            "sofascore_rating": 6.8,
            "sofascore_appearances": 3.0,
            "fifa_rank": 577.0,
            "fifa_overall": 81.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 8,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7988,
            "source_file": "data/player_rankings.csv",
            "player_name": "David Larrubia",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Marko Bakić",
                  "ranking": 1356
                },
                {
                  "player_name": "Nika Gagnidze",
                  "ranking": 1357
                },
                {
                  "player_name": "Francisco Geraldes",
                  "ranking": 1358
                },
                {
                  "player_name": "Fernando Niño",
                  "ranking": 1359
                },
                {
                  "player_name": "Iñigo Arguibide",
                  "ranking": 1360
                }
              ],
              "lower": [
                {
                  "player_name": "John Edwin Montaño",
                  "ranking": 1362
                },
                {
                  "player_name": "Samuel Xavier",
                  "ranking": 1363
                },
                {
                  "player_name": "Laziz Mirzaev",
                  "ranking": 1364
                },
                {
                  "player_name": "Shamar Nicholson",
                  "ranking": 1365
                },
                {
                  "player_name": "Juan Fernando Quintero",
                  "ranking": 1366
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.712,
          "history_matches": 7,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 7,
            "data_confidence": 0.712,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9951,
            "fbref_prior_metrics": {
              "squad": "Málaga",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 2.0,
              "minutes": 215.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 2.93,
              "shots_on_target_pct": 28.6,
              "prior_reliability": 0.16
            },
            "rationale": "XGBoost regressor (M_service) evaluated 7 historical appearances across 8 target models; FBref 2026-2027 prior blended (La Liga, Málaga, rel: 0.16, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 1.2901,
                "expected_assists": 0.1145,
                "assists": 0.0927,
                "assist_rate": 0.0927,
                "expected_goals": 0.0876,
                "goals": 0.1308,
                "goal_rate": 0.1308,
                "shots_on_target": 0.3873,
                "total_shots": 1.1544,
                "rating": 6.7988,
                "minutes": 89.0,
                "total_pass": 28.3402,
                "accurate_pass": 23.2963,
                "duels_won": 5.4303,
                "total_long_balls": 1.6472,
                "accurate_long_balls": 1.2946,
                "total_own_half_passes": 7.8125,
                "accurate_own_half_passes": 6.1127,
                "total_opp_half_passes": 20.5278,
                "accurate_opp_half_passes": 17.1837,
                "crosses_total": 0.5266,
                "crosses_accurate": 0.0,
                "touches": 52.1575,
                "possession_lost": 15.7221,
                "dispossessed": 1.9013,
                "duels_lost": 9.5548,
                "aerial_won": 0.2408,
                "aerial_lost": 0.3219,
                "interceptions": 0.7935,
                "tackles_won": 1.0397,
                "tackles": 2.0883,
                "clearances": 0.2408,
                "total_contest": 6.5327,
                "won_contest": 1.9672,
                "challenges_lost": 1.875,
                "fouls": 1.1319,
                "fouls_drawn": 1.134,
                "blocks": 0.1069,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0077,
                "ball_carries": 17.9014,
                "total_progression": 122.2132,
                "progressive_carries": 4.0033,
                "shots_off_target": 0.767
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.2208,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1877,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1595,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1356,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1152,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 34.0,
                    "is_starting": false,
                    "weight": 0.098,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0833,
                    "rating": 6.2
                  }
                ],
                "feature_row": {
                  "history_matches": 7.0,
                  "is_starting_11": 1.0,
                  "totalShots": 1.5364,
                  "creative_index": 0.6416,
                  "expectedGoals": 0.069,
                  "expectedAssists": 0.0805,
                  "onTargetScoringAttempt": 0.1985
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 1.2900874614715576,
                    "model_output": 1.2901,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "creative_index",
                          "contribution": 0.1286
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1373
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": 0.1213
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0643
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.057
                        }
                      ],
                      "others": 0.024,
                      "total": 1.2901,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "creative_index",
                          "margin": 0.135518
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.126917
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": 0.100108
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.051812
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.046062
                        }
                      ],
                      "others_margin": 0.018732
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.11453258991241455,
                    "model_output": 0.1145,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0115
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0114
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0068
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": 0.0066
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0067
                        }
                      ],
                      "others": 0.0085,
                      "total": 0.1145,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.125965
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.124125
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.076252
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": 0.069103
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.065661
                        }
                      ],
                      "others_margin": 0.076295
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.09274768829345703,
                    "model_output": 0.0927,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "totalCross",
                          "contribution": -0.0098
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0074
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.0081
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0078
                        },
                        {
                          "name": "creative_index",
                          "contribution": 0.0052
                        }
                      ],
                      "others": -0.0112,
                      "total": 0.0927,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "totalCross",
                          "margin": -0.122069
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.093491
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.093156
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.082323
                        },
                        {
                          "name": "creative_index",
                          "margin": 0.051458
                        }
                      ],
                      "others_margin": -0.113824
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.08756139874458313,
                    "model_output": 0.0876,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0112
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0109
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0105
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0079
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0066
                        }
                      ],
                      "others": -0.0157,
                      "total": 0.0876,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "expectedGoals",
                          "margin": -0.125819
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.123545
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.105845
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.077927
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.066111
                        }
                      ],
                      "others_margin": -0.167254
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.1307922750711441,
                    "model_output": 0.1308,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.0362
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0155
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.012
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0119
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0091
                        }
                      ],
                      "others": 0.0217,
                      "total": 0.1308,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.315301
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.123014
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.107016
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.106246
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.080333
                        }
                      ],
                      "others_margin": 0.181084
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.38734155893325806,
                    "model_output": 0.3873,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.0635
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.0484
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0414
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.039
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0274
                        }
                      ],
                      "others": 0.0232,
                      "total": 0.3873,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.179049
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.133383
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.130287
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.123246
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.078281
                        }
                      ],
                      "others_margin": 0.061684
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 1.154351830482483,
                    "model_output": 1.1544,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.238
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1413
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0769
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.0757
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0752
                        }
                      ],
                      "others": 0.0124,
                      "total": 1.1544,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.238048
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.141315
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.076914
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.075673
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.075169
                        }
                      ],
                      "others_margin": 0.012279
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.7988200187683105,
                    "model_output": 6.7988,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "rating",
                          "contribution": -0.0413
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0367
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0331
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": 0.031
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "contribution": 0.0241
                        }
                      ],
                      "others": -0.0603,
                      "total": 6.7988,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "rating",
                          "margin": -0.041255
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.036668
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.033125
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": 0.031031
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "margin": 0.024054
                        }
                      ],
                      "others_margin": -0.060339
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 7,
                  "role_matches": 6,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9951, quality 0.466)",
              "stats": {
                "key_pass": 1.2838,
                "expected_assists": 0.114,
                "assists": 0.0923,
                "assist_rate": 0.0923,
                "expected_goals": 0.0871,
                "goals": 0.1302,
                "goal_rate": 0.1302,
                "shots_on_target": 0.3854,
                "total_shots": 1.1487,
                "rating": 6.7988,
                "minutes": 89.0,
                "total_pass": 28.2013,
                "accurate_pass": 23.1821,
                "duels_won": 5.4037,
                "total_long_balls": 1.6391,
                "accurate_long_balls": 1.2883,
                "total_own_half_passes": 7.7742,
                "accurate_own_half_passes": 6.0827,
                "total_opp_half_passes": 20.4272,
                "accurate_opp_half_passes": 17.0995,
                "crosses_total": 0.524,
                "crosses_accurate": 0.0,
                "touches": 51.9019,
                "possession_lost": 15.6451,
                "dispossessed": 1.892,
                "duels_lost": 9.508,
                "aerial_won": 0.2396,
                "aerial_lost": 0.3203,
                "interceptions": 0.7896,
                "tackles_won": 1.0346,
                "tackles": 2.0781,
                "clearances": 0.2396,
                "total_contest": 6.5007,
                "won_contest": 1.9576,
                "challenges_lost": 1.8658,
                "fouls": 1.1264,
                "fouls_drawn": 1.1284,
                "blocks": 0.1064,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0077,
                "ball_carries": 17.8137,
                "total_progression": 121.6144,
                "progressive_carries": 3.9837,
                "shots_off_target": 0.7632
              },
              "params": {
                "market_value_eur": 5300000,
                "quality_factor": 0.4659,
                "boost_factor": 0.9951,
                "reference_quality": 0.505,
                "history_matches": 7,
                "history_shrink": 0.4167,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0433)",
              "stats": {
                "key_pass": 1.2838,
                "expected_assists": 0.114,
                "assists": 0.0883,
                "assist_rate": 0.0883,
                "expected_goals": 0.0871,
                "goals": 0.1246,
                "goal_rate": 0.1246,
                "shots_on_target": 0.4047,
                "total_shots": 1.2245,
                "rating": 6.7988,
                "minutes": 89.0,
                "total_pass": 28.2013,
                "accurate_pass": 23.1821,
                "duels_won": 5.4037,
                "total_long_balls": 1.6391,
                "accurate_long_balls": 1.2883,
                "total_own_half_passes": 7.7742,
                "accurate_own_half_passes": 6.0827,
                "total_opp_half_passes": 20.4272,
                "accurate_opp_half_passes": 17.0995,
                "crosses_total": 0.5013,
                "crosses_accurate": 0.0,
                "touches": 51.9019,
                "possession_lost": 15.6451,
                "dispossessed": 1.892,
                "duels_lost": 9.508,
                "aerial_won": 0.2396,
                "aerial_lost": 0.3203,
                "interceptions": 0.7911,
                "tackles_won": 1.1148,
                "tackles": 2.0781,
                "clearances": 0.2396,
                "total_contest": 6.5007,
                "won_contest": 1.9576,
                "challenges_lost": 1.8658,
                "fouls": 1.0954,
                "fouls_drawn": 1.1152,
                "blocks": 0.1064,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0077,
                "ball_carries": 17.8137,
                "total_progression": 121.6144,
                "progressive_carries": 3.9837,
                "shots_off_target": 0.7632
              },
              "params": {
                "blend_weight": 0.0433,
                "history_matches": 7,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.9889,
                "prior_reliability": 0.16,
                "competition": "La Liga",
                "squad": "Málaga"
              },
              "changes": [
                {
                  "stat": "wonTackle",
                  "before": 1.0346,
                  "after": 1.1148
                },
                {
                  "stat": "totalShots",
                  "before": 1.1487,
                  "after": 1.2245
                },
                {
                  "stat": "fouls",
                  "before": 1.1264,
                  "after": 1.0954
                },
                {
                  "stat": "totalCross",
                  "before": 0.524,
                  "after": 0.5013
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.3854,
                  "after": 0.4047
                },
                {
                  "stat": "wasFouled",
                  "before": 1.1284,
                  "after": 1.1152
                },
                {
                  "stat": "goals",
                  "before": 0.1302,
                  "after": 0.1246
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 1.2838,
                "expected_assists": 0.114,
                "assists": 0.0883,
                "assist_rate": 0.0883,
                "expected_goals": 0.0871,
                "goals": 0.1246,
                "goal_rate": 0.1246,
                "shots_on_target": 0.4047,
                "total_shots": 1.2245,
                "rating": 6.7988,
                "minutes": 89.0,
                "total_pass": 28.2013,
                "accurate_pass": 23.1821,
                "duels_won": 5.4037,
                "total_long_balls": 1.6391,
                "accurate_long_balls": 1.2883,
                "total_own_half_passes": 7.7742,
                "accurate_own_half_passes": 6.0827,
                "total_opp_half_passes": 20.4272,
                "accurate_opp_half_passes": 17.0995,
                "crosses_total": 0.5013,
                "crosses_accurate": 0.0,
                "touches": 51.9019,
                "possession_lost": 15.6451,
                "dispossessed": 1.892,
                "duels_lost": 9.508,
                "aerial_won": 0.2396,
                "aerial_lost": 0.3203,
                "interceptions": 0.7911,
                "tackles_won": 1.1148,
                "tackles": 2.0781,
                "clearances": 0.2396,
                "total_contest": 6.5007,
                "won_contest": 1.9576,
                "challenges_lost": 1.8658,
                "fouls": 1.0954,
                "fouls_drawn": 1.1152,
                "blocks": 0.1064,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0077,
                "ball_carries": 17.8137,
                "total_progression": 121.6144,
                "progressive_carries": 3.9837,
                "shots_off_target": 0.7632
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "key_pass": 1.2838,
                "expected_assists": 0.114,
                "assists": 0.0883,
                "assist_rate": 0.0883,
                "expected_goals": 0.0784,
                "goals": 0.1122,
                "goal_rate": 0.1122,
                "shots_on_target": 0.3643,
                "total_shots": 1.1022,
                "rating": 6.7988,
                "minutes": 89.0,
                "total_pass": 28.2013,
                "accurate_pass": 23.1821,
                "duels_won": 5.4037,
                "total_long_balls": 1.6391,
                "accurate_long_balls": 1.2883,
                "total_own_half_passes": 7.7742,
                "accurate_own_half_passes": 6.0827,
                "total_opp_half_passes": 20.4272,
                "accurate_opp_half_passes": 17.0995,
                "crosses_total": 0.5013,
                "crosses_accurate": 0.0,
                "touches": 51.9019,
                "possession_lost": 15.6451,
                "dispossessed": 1.892,
                "duels_lost": 9.508,
                "aerial_won": 0.8,
                "aerial_lost": 0.3203,
                "interceptions": 0.7911,
                "tackles_won": 1.1148,
                "tackles": 2.0781,
                "clearances": 0.2396,
                "total_contest": 6.5007,
                "won_contest": 1.9576,
                "challenges_lost": 1.8658,
                "fouls": 1.0954,
                "fouls_drawn": 1.1152,
                "blocks": 0.1064,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0069,
                "ball_carries": 17.8137,
                "total_progression": 121.6144,
                "progressive_carries": 3.9837,
                "shots_off_target": 0.687,
                "duel_xg_multiplier": 0.9001,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.382,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, defensive_duel, midfield_pairing"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Gabriel Moscardo",
                  "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                  "duel_win_rate": 0.382,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v1",
                  "xg_multiplier": 0.9001,
                  "skill_edge": -0.016,
                  "height_edge": -0.052,
                  "attacker_skill": 0.4731,
                  "defender_skill": 0.5085,
                  "attacker_role": "CM",
                  "attacker_mv_price_index": 0.9,
                  "defender_adjusted_parts": [
                    {
                      "player": "Gabriel Moscardo",
                      "market_value": 7500000,
                      "role": "CDM",
                      "price_index": 0.85,
                      "adjusted_quality": 0.5085
                    }
                  ],
                  "xg_override": 0.0784
                }
              },
              "changes": [
                {
                  "stat": "aerialWon",
                  "before": 0.2396,
                  "after": 0.8
                },
                {
                  "stat": "totalShots",
                  "before": 1.2245,
                  "after": 1.1022
                },
                {
                  "stat": "shotOffTarget",
                  "before": 0.7632,
                  "after": 0.687
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.4047,
                  "after": 0.3643
                },
                {
                  "stat": "goals",
                  "before": 0.1246,
                  "after": 0.1122
                },
                {
                  "stat": "expectedGoals",
                  "before": 0.0871,
                  "after": 0.0784
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "key_pass": 1.2838,
                "expected_assists": 0.1099,
                "assist_rate": 0.0883,
                "assists": 0,
                "expected_goals": 0.0756,
                "goal_rate": 0.1122,
                "goals": 0,
                "shots_on_target": 0.3643,
                "total_shots": 1.1022,
                "rating": 6.7988,
                "minutes": 89.0,
                "total_pass": 28.2013,
                "accurate_pass": 23.1821,
                "duels_won": 5.4037,
                "total_long_balls": 1.6391,
                "accurate_long_balls": 1.2883,
                "total_own_half_passes": 7.7742,
                "accurate_own_half_passes": 6.0827,
                "total_opp_half_passes": 20.4272,
                "accurate_opp_half_passes": 17.0995,
                "crosses_total": 0.5013,
                "crosses_accurate": 0.0,
                "touches": 51.9019,
                "possession_lost": 15.6451,
                "dispossessed": 1.892,
                "duels_lost": 9.508,
                "aerial_won": 0.8,
                "aerial_lost": 0.3203,
                "interceptions": 0.7911,
                "tackles_won": 1.1148,
                "tackles": 2.0781,
                "clearances": 0.2396,
                "total_contest": 6.5007,
                "won_contest": 1.9576,
                "challenges_lost": 1.8658,
                "fouls": 1.0954,
                "fouls_drawn": 1.1152,
                "blocks": 0.1064,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0067,
                "ball_carries": 17.8137,
                "total_progression": 121.6144,
                "progressive_carries": 3.9837,
                "shots_off_target": 0.687,
                "duel_xg_multiplier": 0.9001,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.382,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, defensive_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 0.8433
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 8 by projected rating, fifa_overall 81.0; not used by the projection)",
              "stats": {
                "key_pass": 1.2838,
                "expected_assists": 0.1099,
                "assist_rate": 0.0883,
                "assists": 0,
                "expected_goals": 0.0756,
                "goal_rate": 0.1122,
                "goals": 0,
                "shots_on_target": 0.3643,
                "total_shots": 1.1022,
                "rating": 6.7988,
                "minutes": 89.0,
                "total_pass": 28.2013,
                "accurate_pass": 23.1821,
                "duels_won": 5.4037,
                "total_long_balls": 1.6391,
                "accurate_long_balls": 1.2883,
                "total_own_half_passes": 7.7742,
                "accurate_own_half_passes": 6.0827,
                "total_opp_half_passes": 20.4272,
                "accurate_opp_half_passes": 17.0995,
                "crosses_total": 0.5013,
                "crosses_accurate": 0.0,
                "touches": 51.9019,
                "possession_lost": 15.6451,
                "dispossessed": 1.892,
                "duels_lost": 9.508,
                "aerial_won": 0.8,
                "aerial_lost": 0.3203,
                "interceptions": 0.7911,
                "tackles_won": 1.1148,
                "tackles": 2.0781,
                "clearances": 0.2396,
                "total_contest": 6.5007,
                "won_contest": 1.9576,
                "challenges_lost": 1.8658,
                "fouls": 1.0954,
                "fouls_drawn": 1.1152,
                "blocks": 0.1064,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0067,
                "ball_carries": 17.8137,
                "total_progression": 121.6144,
                "progressive_carries": 3.9837,
                "shots_off_target": 0.687,
                "duel_xg_multiplier": 0.9001,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.382,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, defensive_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 0.8433,
                "fifa_overall": 81.0
              },
              "params": {
                "match_squad_rank": 8,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 1361,
                "fifa_rank": 577.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 81.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "key_pass": 1.2838,
                "expected_assists": 0.1099,
                "assist_rate": 0.0883,
                "assists": 0,
                "expected_goals": 0.0756,
                "goal_rate": 0.1122,
                "goals": 0,
                "shots_on_target": 0.3643,
                "total_shots": 1.1022,
                "rating": 6.7988,
                "minutes": 89.0,
                "total_pass": 28.2013,
                "accurate_pass": 23.1821,
                "duels_won": 5.4037,
                "total_long_balls": 1.6391,
                "accurate_long_balls": 1.2883,
                "total_own_half_passes": 7.7742,
                "accurate_own_half_passes": 6.0827,
                "total_opp_half_passes": 20.4272,
                "accurate_opp_half_passes": 17.0995,
                "crosses_total": 0.5013,
                "crosses_accurate": 0.0,
                "touches": 51.9019,
                "possession_lost": 15.6451,
                "dispossessed": 1.892,
                "duels_lost": 9.508,
                "aerial_won": 0.8,
                "aerial_lost": 0.3203,
                "interceptions": 0.7911,
                "tackles_won": 1.1148,
                "tackles": 2.0781,
                "clearances": 0.2396,
                "total_contest": 6.5007,
                "won_contest": 1.9576,
                "challenges_lost": 1.8658,
                "fouls": 1.0954,
                "fouls_drawn": 1.1152,
                "blocks": 0.1064,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0067,
                "ball_carries": 17.8137,
                "total_progression": 121.6144,
                "progressive_carries": 3.9837,
                "shots_off_target": 0.687,
                "duel_xg_multiplier": 0.9001,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.382,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, defensive_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0728,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 0.8433,
                "fifa_overall": 81.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0728,
                "scorer_weight": 0.0945,
                "squad_weight_total": 0.8264,
                "weight_share": 0.1143,
                "finishing_factor": 1.25,
                "appearance_weight": 1.0,
                "weight_rank": 2,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "key_pass": 1.2838,
                "expected_assists": 0.1099,
                "assist_rate": 0.0883,
                "assists": 0,
                "expected_goals": 0.0756,
                "goal_rate": 0.1122,
                "goals": 0,
                "shots_on_target": 0.3643,
                "total_shots": 1.1022,
                "rating": 6.7988,
                "minutes": 89.0,
                "total_pass": 28.2013,
                "accurate_pass": 23.1821,
                "duels_won": 5.4037,
                "total_long_balls": 1.6391,
                "accurate_long_balls": 1.2883,
                "total_own_half_passes": 7.7742,
                "accurate_own_half_passes": 6.0827,
                "total_opp_half_passes": 20.4272,
                "accurate_opp_half_passes": 17.0995,
                "crosses_total": 0.5013,
                "crosses_accurate": 0.0,
                "touches": 51.9019,
                "possession_lost": 15.6451,
                "dispossessed": 1.892,
                "duels_lost": 9.508,
                "aerial_won": 0.8,
                "aerial_lost": 0.3203,
                "interceptions": 0.7911,
                "tackles_won": 1.1148,
                "tackles": 2.0781,
                "clearances": 0.2396,
                "total_contest": 6.5007,
                "won_contest": 1.9576,
                "challenges_lost": 1.8658,
                "fouls": 1.0954,
                "fouls_drawn": 1.1152,
                "blocks": 0.1064,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0067,
                "ball_carries": 17.8137,
                "total_progression": 121.6144,
                "progressive_carries": 3.9837,
                "shots_off_target": 0.687,
                "duel_xg_multiplier": 0.9001,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.382,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, defensive_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0728,
                "projected_assists": 0,
                "assist_probability": 0.1041,
                "finishing_factor": 1.25,
                "creation_factor": 0.8433,
                "fifa_overall": 81.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.1041,
                "provider_weight": 0.0927,
                "squad_weight_total": 0.5871,
                "weight_share": 0.1579,
                "creation_factor": 0.8433,
                "appearance_weight": 1.0,
                "weight_rank": 3,
                "eligible_players": 13
              }
            }
          ]
        },
        "Rafa Garrido": {
          "player_id": 1595666,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 31,
          "height": 170,
          "market_value": 1400000,
          "stats": {
            "interceptions": 1,
            "tackles": 2,
            "tackles_won": 1,
            "clearances": 2,
            "aerial_won": 1,
            "total_shots": 0,
            "rating": 6.7215,
            "minutes": 87,
            "total_pass": 44,
            "accurate_pass": 40,
            "duels_won": 4,
            "total_long_balls": 2,
            "accurate_long_balls": 1,
            "total_own_half_passes": 22,
            "accurate_own_half_passes": 20,
            "total_opp_half_passes": 22,
            "accurate_opp_half_passes": 19,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 65,
            "possession_lost": 8.5219,
            "dispossessed": 0.1725,
            "duels_lost": 3,
            "aerial_lost": 1,
            "total_contest": 2,
            "won_contest": 2,
            "ball_recovery": 5,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 2,
            "blocks": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "expected_goals": 0.0031,
            "expected_assists": 0.015,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 17,
            "total_progression": 67,
            "progressive_carries": 2,
            "key_pass": 0,
            "shots_off_target": 0,
            "tackles_in_zone": 1.9,
            "tackles_won_in_zone": 1.5,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.5,
            "opponent_faced": "Javier Hernández",
            "pressing_zone": "Left Wing vs Right Back — Flank Battle",
            "matchup_zone": "Left Wing vs Right Back — Flank Battle",
            "antagonist_source": "defensive_duel",
            "projected_goals": 0,
            "goal_probability": 0.0031,
            "projected_assists": 0,
            "assist_probability": 0.0149,
            "finishing_factor": 0.9398,
            "creation_factor": 0.8,
            "fifa_overall": 79.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0137,
                "total_shots": 0,
                "total_pass": 45,
                "accurate_pass": 37,
                "key_pass": 1,
                "tackles": 2,
                "interceptions": 1,
                "clearances": 2,
                "duels_won": 6,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 45,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0046,
                "total_shots": 0,
                "total_pass": 19,
                "accurate_pass": 17,
                "tackles": 2,
                "tackles_won": 2,
                "interceptions": 2,
                "clearances": 2,
                "duels_won": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 90,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.018,
                "total_shots": 0,
                "total_pass": 54,
                "accurate_pass": 51,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 1,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 67,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0179,
                "total_shots": 0,
                "total_pass": 27,
                "accurate_pass": 26,
                "clearances": 2,
                "duels_won": 3,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0174,
                "total_shots": 0,
                "total_pass": 56,
                "accurate_pass": 52,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 1,
                "duels_won": 4,
                "ball_recovery": 9
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0121,
                "total_shots": 0,
                "total_pass": 43,
                "accurate_pass": 38,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 2,
                "duels_won": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0301,
                "expected_assists": 0.0137,
                "total_shots": 1,
                "total_pass": 39,
                "accurate_pass": 34,
                "interceptions": 3,
                "clearances": 7,
                "aerial_won": 3,
                "duels_won": 8,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 1375,
            "combined_rank_score": 713.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 578.0,
            "sofascore_rating": 6.8,
            "sofascore_appearances": 1.0,
            "fifa_rank": 848.0,
            "fifa_overall": 79.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 13,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7215,
            "source_file": "data/player_rankings.csv",
            "player_name": "Rafa Garrido",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Vitão",
                  "ranking": 1370
                },
                {
                  "player_name": "Jemmes",
                  "ranking": 1371
                },
                {
                  "player_name": "Samandar Muratbaev",
                  "ranking": 1372
                },
                {
                  "player_name": "Kyeong-jae Kim",
                  "ranking": 1373
                },
                {
                  "player_name": "Jung-min Lee",
                  "ranking": 1374
                }
              ],
              "lower": [
                {
                  "player_name": "Rodrigo Mendoza",
                  "ranking": 1376
                },
                {
                  "player_name": "Peque Fernández",
                  "ranking": 1377
                },
                {
                  "player_name": "Javi Morcillo",
                  "ranking": 1378
                },
                {
                  "player_name": "Luis Pacheco",
                  "ranking": 1379
                },
                {
                  "player_name": "Fredy Noguera",
                  "ranking": 1380
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.688,
          "history_matches": 7,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 7,
            "data_confidence": 0.688,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "market_value_adjustment": 0.9916,
            "fbref_prior_metrics": null,
            "rationale": "XGBoost regressor (D_service) evaluated 7 historical appearances across 7 target models."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 0.972,
                "tackles": 1.7478,
                "tackles_won": 1.0613,
                "clearances": 1.9659,
                "aerial_won": 0.6529,
                "total_shots": 0.38,
                "rating": 6.7215,
                "minutes": 87.0,
                "total_pass": 44.4447,
                "accurate_pass": 39.9755,
                "duels_won": 4.5304,
                "total_long_balls": 1.7761,
                "accurate_long_balls": 0.5802,
                "total_own_half_passes": 21.9647,
                "accurate_own_half_passes": 20.3455,
                "total_opp_half_passes": 22.48,
                "accurate_opp_half_passes": 19.63,
                "crosses_total": 1.4771,
                "crosses_accurate": 0.0,
                "touches": 65.464,
                "possession_lost": 8.5941,
                "dispossessed": 0.174,
                "duels_lost": 2.8384,
                "aerial_lost": 0.8988,
                "total_contest": 1.9396,
                "won_contest": 1.5181,
                "ball_recovery": 4.551,
                "challenges_lost": 0.6195,
                "fouls": 0.7246,
                "fouls_drawn": 1.606,
                "blocks": 0.9822,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0032,
                "expected_assists": 0.0157,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 16.8206,
                "total_progression": 67.2278,
                "progressive_carries": 2.2749,
                "key_pass": 0.2408,
                "shots_off_target": 0.38
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.2208,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.1877,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1595,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.1356,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1152,
                    "rating": 6.0
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.098,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0833,
                    "rating": 6.8
                  }
                ],
                "feature_row": {
                  "history_matches": 7.0,
                  "is_starting_11": 1.0,
                  "totalClearance": 2.1416,
                  "aerialWon": 0.2498,
                  "totalClearance_p90": 2.61,
                  "totalTackle": 1.2875,
                  "totalPass": 39.6881
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 0.972013533115387,
                    "model_output": 0.972,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1141
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.0451
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0388
                        },
                        {
                          "name": "interceptionWon_p90",
                          "contribution": 0.0347
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.0319
                        }
                      ],
                      "others": 0.0041,
                      "total": 0.972,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.124944
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.04757
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.041067
                        },
                        {
                          "name": "interceptionWon_p90",
                          "margin": 0.035369
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.03241
                        }
                      ],
                      "others_margin": 0.004213
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 1.7477765083312988,
                    "model_output": 1.7478,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.186
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.0707
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0491
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.044
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.0312
                        }
                      ],
                      "others": 0.1233,
                      "total": 1.7478,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.125279
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.043764
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.029336
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.026204
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.019009
                        }
                      ],
                      "others_margin": 0.07309
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 1.0613031387329102,
                    "model_output": 1.0613,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1102
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.0374
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.0295
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0293
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.0208
                        }
                      ],
                      "others": 0.0803,
                      "total": 1.0613,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.121313
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.038003
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.029851
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.029666
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.02096
                        }
                      ],
                      "others_margin": 0.07874
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 1.9658915996551514,
                    "model_output": 1.9659,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "totalClearance",
                          "contribution": -0.5517
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.3937
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": -0.3118
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.2562
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.2014
                        }
                      ],
                      "others": -0.5581,
                      "total": 1.9659,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "totalClearance",
                          "margin": -0.174188
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.127317
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": -0.099455
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.089838
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.076754
                        }
                      ],
                      "others_margin": -0.249919
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 0.6529253721237183,
                    "model_output": 0.6529,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "aerialWon",
                          "contribution": -0.5081
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1152
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.087
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.0645
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": -0.0418
                        }
                      ],
                      "others": -0.1429,
                      "total": 0.6529,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "aerialWon",
                          "margin": -0.458268
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.123797
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.092051
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.074216
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": -0.051224
                        }
                      ],
                      "others_margin": -0.197883
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.38000980019569397,
                    "model_output": 0.38,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.131
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0497
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": 0.0255
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0164
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "contribution": 0.0154
                        }
                      ],
                      "others": -0.0671,
                      "total": 0.38,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.130995
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.049666
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": 0.025486
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.016392
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "margin": 0.015439
                        }
                      ],
                      "others_margin": -0.067111
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.7215166091918945,
                    "model_output": 6.7215,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "rating",
                          "contribution": -0.0189
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0132
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0127
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.0109
                        },
                        {
                          "name": "touches",
                          "contribution": 0.0093
                        }
                      ],
                      "others": -0.0172,
                      "total": 6.7215,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "rating",
                          "margin": -0.018853
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.013197
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.012749
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.01088
                        },
                        {
                          "name": "touches",
                          "margin": 0.009319
                        }
                      ],
                      "others_margin": -0.017256
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 7,
                  "role_matches": 6,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9916, quality 0.437)",
              "stats": {
                "interceptions": 0.9638,
                "tackles": 1.7331,
                "tackles_won": 1.0524,
                "clearances": 1.9494,
                "aerial_won": 0.6474,
                "total_shots": 0.3768,
                "rating": 6.7215,
                "minutes": 87.0,
                "total_pass": 44.0714,
                "accurate_pass": 39.6397,
                "duels_won": 4.4923,
                "total_long_balls": 1.7612,
                "accurate_long_balls": 0.5753,
                "total_own_half_passes": 21.7802,
                "accurate_own_half_passes": 20.1746,
                "total_opp_half_passes": 22.2912,
                "accurate_opp_half_passes": 19.4651,
                "crosses_total": 1.4647,
                "crosses_accurate": 0.0,
                "touches": 64.9141,
                "possession_lost": 8.5219,
                "dispossessed": 0.1725,
                "duels_lost": 2.8146,
                "aerial_lost": 0.8913,
                "total_contest": 1.9233,
                "won_contest": 1.5053,
                "ball_recovery": 4.5128,
                "challenges_lost": 0.6143,
                "fouls": 0.7185,
                "fouls_drawn": 1.5925,
                "blocks": 0.9739,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0032,
                "expected_assists": 0.0156,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 16.6793,
                "total_progression": 66.6631,
                "progressive_carries": 2.2558,
                "key_pass": 0.2388,
                "shots_off_target": 0.3768
              },
              "params": {
                "market_value_eur": 1400000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9916,
                "reference_quality": 0.505,
                "history_matches": 7,
                "history_shrink": 0.4167,
                "market_value_known": true
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 0.9638,
                "tackles": 1.7331,
                "tackles_won": 1.0524,
                "clearances": 1.9494,
                "aerial_won": 0.6474,
                "total_shots": 0.3768,
                "rating": 6.7215,
                "minutes": 87.0,
                "total_pass": 44.0714,
                "accurate_pass": 39.6397,
                "duels_won": 4.4923,
                "total_long_balls": 1.7612,
                "accurate_long_balls": 0.5753,
                "total_own_half_passes": 21.7802,
                "accurate_own_half_passes": 20.1746,
                "total_opp_half_passes": 22.2912,
                "accurate_opp_half_passes": 19.4651,
                "crosses_total": 1.4647,
                "crosses_accurate": 0.0,
                "touches": 64.9141,
                "possession_lost": 8.5219,
                "dispossessed": 0.1725,
                "duels_lost": 2.8146,
                "aerial_lost": 0.8913,
                "total_contest": 1.9233,
                "won_contest": 1.5053,
                "ball_recovery": 4.5128,
                "challenges_lost": 0.6143,
                "fouls": 0.7185,
                "fouls_drawn": 1.5925,
                "blocks": 0.9739,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0032,
                "expected_assists": 0.0156,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 16.6793,
                "total_progression": 66.6631,
                "progressive_carries": 2.2558,
                "key_pass": 0.2388,
                "shots_off_target": 0.3768
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "interceptions": 0.9638,
                "tackles": 1.7331,
                "tackles_won": 1.0524,
                "clearances": 1.9494,
                "aerial_won": 0.6474,
                "total_shots": 0.3768,
                "rating": 6.7215,
                "minutes": 87.0,
                "total_pass": 44.0714,
                "accurate_pass": 39.6397,
                "duels_won": 4.4923,
                "total_long_balls": 1.7612,
                "accurate_long_balls": 0.5753,
                "total_own_half_passes": 21.7802,
                "accurate_own_half_passes": 20.1746,
                "total_opp_half_passes": 22.2912,
                "accurate_opp_half_passes": 19.4651,
                "crosses_total": 1.4647,
                "crosses_accurate": 0.0,
                "touches": 64.9141,
                "possession_lost": 8.5219,
                "dispossessed": 0.1725,
                "duels_lost": 2.8146,
                "aerial_lost": 0.8913,
                "total_contest": 1.9233,
                "won_contest": 1.5053,
                "ball_recovery": 4.5128,
                "challenges_lost": 0.6143,
                "fouls": 0.7185,
                "fouls_drawn": 1.5925,
                "blocks": 0.9739,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0032,
                "expected_assists": 0.0156,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 16.6793,
                "total_progression": 66.6631,
                "progressive_carries": 2.2558,
                "key_pass": 0.2388,
                "shots_off_target": 0.3768,
                "tackles_in_zone": 1.9,
                "tackles_won_in_zone": 1.5,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 1.1,
                "defensive_success_rate": 0.5,
                "opponent_faced": "Javier Hernández",
                "pressing_zone": "Left Wing vs Right Back — Flank Battle",
                "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                "antagonist_source": "defensive_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Javier Hernández",
                  "matchup_zone": "Left Wing vs Right Back — Flank Battle"
                }
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "interceptions": 0.9638,
                "tackles": 1.7331,
                "tackles_won": 1.0524,
                "clearances": 1.9494,
                "aerial_won": 0.6474,
                "total_shots": 0.3768,
                "rating": 6.7215,
                "minutes": 87.0,
                "total_pass": 44.0714,
                "accurate_pass": 39.6397,
                "duels_won": 4.4923,
                "total_long_balls": 1.7612,
                "accurate_long_balls": 0.5753,
                "total_own_half_passes": 21.7802,
                "accurate_own_half_passes": 20.1746,
                "total_opp_half_passes": 22.2912,
                "accurate_opp_half_passes": 19.4651,
                "crosses_total": 1.4647,
                "crosses_accurate": 0.0,
                "touches": 64.9141,
                "possession_lost": 8.5219,
                "dispossessed": 0.1725,
                "duels_lost": 2.8146,
                "aerial_lost": 0.8913,
                "total_contest": 1.9233,
                "won_contest": 1.5053,
                "ball_recovery": 4.5128,
                "challenges_lost": 0.6143,
                "fouls": 0.7185,
                "fouls_drawn": 1.5925,
                "blocks": 0.9739,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0031,
                "expected_assists": 0.015,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 16.6793,
                "total_progression": 66.6631,
                "progressive_carries": 2.2558,
                "key_pass": 0.2388,
                "shots_off_target": 0.3768,
                "tackles_in_zone": 1.9,
                "tackles_won_in_zone": 1.5,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 1.1,
                "defensive_success_rate": 0.5,
                "opponent_faced": "Javier Hernández",
                "pressing_zone": "Left Wing vs Right Back — Flank Battle",
                "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9398,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 13 by projected rating, fifa_overall 79.0; not used by the projection)",
              "stats": {
                "interceptions": 0.9638,
                "tackles": 1.7331,
                "tackles_won": 1.0524,
                "clearances": 1.9494,
                "aerial_won": 0.6474,
                "total_shots": 0.3768,
                "rating": 6.7215,
                "minutes": 87.0,
                "total_pass": 44.0714,
                "accurate_pass": 39.6397,
                "duels_won": 4.4923,
                "total_long_balls": 1.7612,
                "accurate_long_balls": 0.5753,
                "total_own_half_passes": 21.7802,
                "accurate_own_half_passes": 20.1746,
                "total_opp_half_passes": 22.2912,
                "accurate_opp_half_passes": 19.4651,
                "crosses_total": 1.4647,
                "crosses_accurate": 0.0,
                "touches": 64.9141,
                "possession_lost": 8.5219,
                "dispossessed": 0.1725,
                "duels_lost": 2.8146,
                "aerial_lost": 0.8913,
                "total_contest": 1.9233,
                "won_contest": 1.5053,
                "ball_recovery": 4.5128,
                "challenges_lost": 0.6143,
                "fouls": 0.7185,
                "fouls_drawn": 1.5925,
                "blocks": 0.9739,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0031,
                "expected_assists": 0.015,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 16.6793,
                "total_progression": 66.6631,
                "progressive_carries": 2.2558,
                "key_pass": 0.2388,
                "shots_off_target": 0.3768,
                "tackles_in_zone": 1.9,
                "tackles_won_in_zone": 1.5,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 1.1,
                "defensive_success_rate": 0.5,
                "opponent_faced": "Javier Hernández",
                "pressing_zone": "Left Wing vs Right Back — Flank Battle",
                "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9398,
                "creation_factor": 0.8,
                "fifa_overall": 79.0
              },
              "params": {
                "match_squad_rank": 13,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 1375,
                "fifa_rank": 848.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 79.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "interceptions": 0.9638,
                "tackles": 1.7331,
                "tackles_won": 1.0524,
                "clearances": 1.9494,
                "aerial_won": 0.6474,
                "total_shots": 0.3768,
                "rating": 6.7215,
                "minutes": 87.0,
                "total_pass": 44.0714,
                "accurate_pass": 39.6397,
                "duels_won": 4.4923,
                "total_long_balls": 1.7612,
                "accurate_long_balls": 0.5753,
                "total_own_half_passes": 21.7802,
                "accurate_own_half_passes": 20.1746,
                "total_opp_half_passes": 22.2912,
                "accurate_opp_half_passes": 19.4651,
                "crosses_total": 1.4647,
                "crosses_accurate": 0.0,
                "touches": 64.9141,
                "possession_lost": 8.5219,
                "dispossessed": 0.1725,
                "duels_lost": 2.8146,
                "aerial_lost": 0.8913,
                "total_contest": 1.9233,
                "won_contest": 1.5053,
                "ball_recovery": 4.5128,
                "challenges_lost": 0.6143,
                "fouls": 0.7185,
                "fouls_drawn": 1.5925,
                "blocks": 0.9739,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0031,
                "expected_assists": 0.015,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 16.6793,
                "total_progression": 66.6631,
                "progressive_carries": 2.2558,
                "key_pass": 0.2388,
                "shots_off_target": 0.3768,
                "tackles_in_zone": 1.9,
                "tackles_won_in_zone": 1.5,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 1.1,
                "defensive_success_rate": 0.5,
                "opponent_faced": "Javier Hernández",
                "pressing_zone": "Left Wing vs Right Back — Flank Battle",
                "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0031,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9398,
                "creation_factor": 0.8,
                "fifa_overall": 79.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0031,
                "scorer_weight": 0.0029,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0035,
                "finishing_factor": 0.9398,
                "appearance_weight": 1.0,
                "weight_rank": 13,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "interceptions": 0.9638,
                "tackles": 1.7331,
                "tackles_won": 1.0524,
                "clearances": 1.9494,
                "aerial_won": 0.6474,
                "total_shots": 0.3768,
                "rating": 6.7215,
                "minutes": 87.0,
                "total_pass": 44.0714,
                "accurate_pass": 39.6397,
                "duels_won": 4.4923,
                "total_long_balls": 1.7612,
                "accurate_long_balls": 0.5753,
                "total_own_half_passes": 21.7802,
                "accurate_own_half_passes": 20.1746,
                "total_opp_half_passes": 22.2912,
                "accurate_opp_half_passes": 19.4651,
                "crosses_total": 1.4647,
                "crosses_accurate": 0.0,
                "touches": 64.9141,
                "possession_lost": 8.5219,
                "dispossessed": 0.1725,
                "duels_lost": 2.8146,
                "aerial_lost": 0.8913,
                "total_contest": 1.9233,
                "won_contest": 1.5053,
                "ball_recovery": 4.5128,
                "challenges_lost": 0.6143,
                "fouls": 0.7185,
                "fouls_drawn": 1.5925,
                "blocks": 0.9739,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0031,
                "expected_assists": 0.015,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 16.6793,
                "total_progression": 66.6631,
                "progressive_carries": 2.2558,
                "key_pass": 0.2388,
                "shots_off_target": 0.3768,
                "tackles_in_zone": 1.9,
                "tackles_won_in_zone": 1.5,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 1.1,
                "defensive_success_rate": 0.5,
                "opponent_faced": "Javier Hernández",
                "pressing_zone": "Left Wing vs Right Back — Flank Battle",
                "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0031,
                "projected_assists": 0,
                "assist_probability": 0.0149,
                "finishing_factor": 0.9398,
                "creation_factor": 0.8,
                "fifa_overall": 79.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0149,
                "provider_weight": 0.012,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0204,
                "creation_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 9,
                "eligible_players": 13
              }
            }
          ]
        },
        "Dani Lorenzo": {
          "player_id": 1465424,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 22,
          "height": 176,
          "market_value": 1400000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.052,
            "assist_rate": 0.0667,
            "assists": 0,
            "expected_goals": 0.0419,
            "goal_rate": 0.0436,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "rating": 6.897,
            "minutes": 76,
            "total_pass": 45,
            "accurate_pass": 41,
            "duels_won": 5,
            "total_long_balls": 3,
            "accurate_long_balls": 2,
            "total_own_half_passes": 21,
            "accurate_own_half_passes": 20,
            "total_opp_half_passes": 24,
            "accurate_opp_half_passes": 22,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 57,
            "possession_lost": 6.7508,
            "dispossessed": 1.2943,
            "duels_lost": 5,
            "aerial_won": 1,
            "aerial_lost": 0,
            "interceptions": 1,
            "tackles_won": 0,
            "tackles": 1,
            "clearances": 1,
            "total_contest": 3,
            "won_contest": 2,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 2,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 20,
            "total_progression": 73,
            "progressive_carries": 2,
            "shots_off_target": 0,
            "duel_xg_multiplier": 0.9,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.7,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.382,
            "pressing_faced": "LOW",
            "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
            "numerical_situation": "1v1",
            "opponent_defenders": "Gabriel Moscardo",
            "opponent_faced": "Gabriel Moscardo",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.041,
            "projected_assists": 0,
            "assist_probability": 0.0507,
            "finishing_factor": 1.0011,
            "creation_factor": 1.1221,
            "fifa_overall": 72.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 67,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0501,
                "expected_assists": 0.0468,
                "total_shots": 1,
                "total_pass": 29,
                "accurate_pass": 27,
                "key_pass": 1,
                "clearances": 3,
                "duels_won": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 45,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0056,
                "total_shots": 0,
                "total_pass": 28,
                "accurate_pass": 25,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "duels_won": 1,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 67,
                "rating": 6.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.009,
                "total_shots": 0,
                "total_pass": 42,
                "accurate_pass": 35,
                "key_pass": 1,
                "interceptions": 1,
                "duels_won": 2,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 67,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1761,
                "expected_assists": 0.0338,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 45,
                "accurate_pass": 44,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 6,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 85,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0369,
                "total_shots": 0,
                "total_pass": 71,
                "accurate_pass": 67,
                "tackles": 2,
                "tackles_won": 1,
                "duels_won": 7,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 80,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0761,
                "total_shots": 0,
                "total_pass": 50,
                "accurate_pass": 49,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 2,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 4238,
            "combined_rank_score": 2259.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 257.0,
            "sofascore_rating": 7.1,
            "sofascore_appearances": 2.0,
            "fifa_rank": 4261.0,
            "fifa_overall": 72.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 4,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.897,
            "source_file": "data/player_rankings.csv",
            "player_name": "Dani Lorenzo",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Raúl de Tomás",
                  "ranking": 4233
                },
                {
                  "player_name": "Romain Faivre",
                  "ranking": 4234
                },
                {
                  "player_name": "Matt Targett",
                  "ranking": 4235
                },
                {
                  "player_name": "Matías Arezo",
                  "ranking": 4236
                },
                {
                  "player_name": "Montassar Talbi",
                  "ranking": 4237
                }
              ],
              "lower": [
                {
                  "player_name": "Himad Abdelli",
                  "ranking": 4239
                },
                {
                  "player_name": "Luciano Boggio",
                  "ranking": 4240
                },
                {
                  "player_name": "José Florentín",
                  "ranking": 4241
                },
                {
                  "player_name": "John Souttar",
                  "ranking": 4242
                },
                {
                  "player_name": "Osame Sahraoui",
                  "ranking": 4243
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.643,
          "history_matches": 6,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 6,
            "data_confidence": 0.643,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9908,
            "fbref_prior_metrics": {
              "squad": "Málaga",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 2.0,
              "starts": 2.0,
              "minutes": 163.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 0.0,
              "prior_reliability": 0.12
            },
            "rationale": "XGBoost regressor (M_service) evaluated 6 historical appearances across 8 target models; FBref 2026-2027 prior blended (La Liga, Málaga, rel: 0.12, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 0.7264,
                "expected_assists": 0.0545,
                "assists": 0.0698,
                "assist_rate": 0.0698,
                "expected_goals": 0.0487,
                "goals": 0.0506,
                "goal_rate": 0.0506,
                "shots_on_target": 0.1774,
                "total_shots": 0.6489,
                "rating": 6.897,
                "minutes": 75.86,
                "total_pass": 45.0074,
                "accurate_pass": 41.8658,
                "duels_won": 4.5688,
                "total_long_balls": 2.9334,
                "accurate_long_balls": 2.1282,
                "total_own_half_passes": 21.2093,
                "accurate_own_half_passes": 19.9845,
                "total_opp_half_passes": 23.7981,
                "accurate_opp_half_passes": 21.8813,
                "crosses_total": 0.2696,
                "crosses_accurate": 0.0,
                "touches": 57.5819,
                "possession_lost": 6.8135,
                "dispossessed": 1.3063,
                "duels_lost": 4.5702,
                "aerial_won": 0.0,
                "aerial_lost": 0.424,
                "interceptions": 0.5107,
                "tackles_won": 0.5012,
                "tackles": 0.8075,
                "clearances": 0.8089,
                "total_contest": 2.8728,
                "won_contest": 2.1312,
                "challenges_lost": 0.8997,
                "fouls": 1.1986,
                "fouls_drawn": 1.6301,
                "blocks": 0.1656,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2667,
                "xgot": 0.0,
                "ball_carries": 20.4702,
                "total_progression": 73.6256,
                "progressive_carries": 2.0901,
                "shots_off_target": 0.4715
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.2408,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.2047,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.174,
                    "rating": 6.0
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.1479,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 85.0,
                    "is_starting": true,
                    "weight": 0.1257,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 80.0,
                    "is_starting": true,
                    "weight": 0.1069,
                    "rating": 7.0
                  }
                ],
                "feature_row": {
                  "history_matches": 6.0,
                  "is_starting_11": 1.0,
                  "totalShots": 0.3887,
                  "creative_index": 0.2869,
                  "expectedGoals": 0.0381,
                  "expectedAssists": 0.0318,
                  "onTargetScoringAttempt": 0.0
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 0.7264267206192017,
                    "model_output": 0.7264,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1053
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.1028
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0741
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0663
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": 0.0353
                        }
                      ],
                      "others": -0.0572,
                      "total": 0.7264,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.112255
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.109421
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.087095
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.084847
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": 0.0461
                        }
                      ],
                      "others_margin": -0.075793
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.05453301966190338,
                    "model_output": 0.0545,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "totalCross",
                          "contribution": -0.0165
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0108
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0087
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0077
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": 0.0043
                        }
                      ],
                      "others": -0.0093,
                      "total": 0.0545,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "totalCross",
                          "margin": -0.213733
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.16965
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.139264
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.122457
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": 0.069158
                        }
                      ],
                      "others_margin": -0.155485
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.06981366127729416,
                    "model_output": 0.0698,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "totalCross",
                          "contribution": -0.0114
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0072
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0056
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "contribution": 0.0046
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0045
                        }
                      ],
                      "others": -0.0057,
                      "total": 0.0698,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "totalCross",
                          "margin": -0.143539
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.093518
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.071563
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "margin": 0.059114
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.058351
                        }
                      ],
                      "others_margin": -0.078699
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.04874805361032486,
                    "model_output": 0.0487,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.015
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0119
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.01
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0067
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0052
                        }
                      ],
                      "others": -0.0169,
                      "total": 0.0487,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.173586
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.16281
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.138555
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.091016
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.075858
                        }
                      ],
                      "others_margin": -0.296458
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.05064510181546211,
                    "model_output": 0.0506,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.0184
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.008
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0071
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0057
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0052
                        }
                      ],
                      "others": -0.014,
                      "total": 0.0506,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.209011
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.107058
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.10446
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.085306
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.077667
                        }
                      ],
                      "others_margin": -0.24361
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.1774432361125946,
                    "model_output": 0.1774,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.0801
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0407
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0259
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0158
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0081
                        }
                      ],
                      "others": -0.0278,
                      "total": 0.1774,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.283804
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.182724
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.120077
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.071396
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.03888
                        }
                      ],
                      "others_margin": -0.145338
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.6489460468292236,
                    "model_output": 0.6489,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.2408
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1197
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0577
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0413
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.0177
                        }
                      ],
                      "others": -0.1038,
                      "total": 0.6489,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.240756
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.119702
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.05774
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.041294
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.017687
                        }
                      ],
                      "others_margin": -0.103744
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.896968841552734,
                    "model_output": 6.897,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": 0.0649
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0346
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "contribution": 0.0285
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0232
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.0171
                        }
                      ],
                      "others": -0.0396,
                      "total": 6.897,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": 0.064917
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.03464
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "margin": 0.028459
                        },
                        {
                          "name": "rating",
                          "margin": -0.0232
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.01711
                        }
                      ],
                      "others_margin": -0.039607
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 6,
                  "role_matches": 5,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9908, quality 0.437)",
              "stats": {
                "key_pass": 0.7197,
                "expected_assists": 0.054,
                "assists": 0.0692,
                "assist_rate": 0.0692,
                "expected_goals": 0.0483,
                "goals": 0.0502,
                "goal_rate": 0.0502,
                "shots_on_target": 0.1758,
                "total_shots": 0.643,
                "rating": 6.897,
                "minutes": 75.86,
                "total_pass": 44.5933,
                "accurate_pass": 41.4806,
                "duels_won": 4.5268,
                "total_long_balls": 2.9064,
                "accurate_long_balls": 2.1086,
                "total_own_half_passes": 21.0142,
                "accurate_own_half_passes": 19.8006,
                "total_opp_half_passes": 23.5792,
                "accurate_opp_half_passes": 21.68,
                "crosses_total": 0.2671,
                "crosses_accurate": 0.0,
                "touches": 57.0521,
                "possession_lost": 6.7508,
                "dispossessed": 1.2943,
                "duels_lost": 4.5282,
                "aerial_won": 0.0,
                "aerial_lost": 0.4201,
                "interceptions": 0.506,
                "tackles_won": 0.4966,
                "tackles": 0.8001,
                "clearances": 0.8015,
                "total_contest": 2.8464,
                "won_contest": 2.1116,
                "challenges_lost": 0.8914,
                "fouls": 1.1876,
                "fouls_drawn": 1.6151,
                "blocks": 0.1641,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2642,
                "xgot": 0.0,
                "ball_carries": 20.2819,
                "total_progression": 72.9482,
                "progressive_carries": 2.0709,
                "shots_off_target": 0.4672
              },
              "params": {
                "market_value_eur": 1400000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9908,
                "reference_quality": 0.505,
                "history_matches": 6,
                "history_shrink": 0.4545,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0355)",
              "stats": {
                "key_pass": 0.7197,
                "expected_assists": 0.054,
                "assists": 0.0667,
                "assist_rate": 0.0667,
                "expected_goals": 0.0483,
                "goals": 0.0484,
                "goal_rate": 0.0484,
                "shots_on_target": 0.1696,
                "total_shots": 0.6202,
                "rating": 6.897,
                "minutes": 75.86,
                "total_pass": 44.5933,
                "accurate_pass": 41.4806,
                "duels_won": 4.5268,
                "total_long_balls": 2.9064,
                "accurate_long_balls": 2.1086,
                "total_own_half_passes": 21.0142,
                "accurate_own_half_passes": 19.8006,
                "total_opp_half_passes": 23.5792,
                "accurate_opp_half_passes": 21.68,
                "crosses_total": 0.2576,
                "crosses_accurate": 0.0,
                "touches": 57.0521,
                "possession_lost": 6.7508,
                "dispossessed": 1.2943,
                "duels_lost": 4.5282,
                "aerial_won": 0.0,
                "aerial_lost": 0.4201,
                "interceptions": 0.5213,
                "tackles_won": 0.4956,
                "tackles": 0.8001,
                "clearances": 0.8015,
                "total_contest": 2.8464,
                "won_contest": 2.1116,
                "challenges_lost": 0.8914,
                "fouls": 1.1455,
                "fouls_drawn": 1.6076,
                "blocks": 0.1641,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2642,
                "xgot": 0.0,
                "ball_carries": 20.2819,
                "total_progression": 72.9482,
                "progressive_carries": 2.0709,
                "shots_off_target": 0.4672
              },
              "params": {
                "blend_weight": 0.0355,
                "history_matches": 6,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.8429,
                "prior_reliability": 0.12,
                "competition": "La Liga",
                "squad": "Málaga"
              },
              "changes": [
                {
                  "stat": "fouls",
                  "before": 1.1876,
                  "after": 1.1455
                },
                {
                  "stat": "totalShots",
                  "before": 0.643,
                  "after": 0.6202
                },
                {
                  "stat": "interceptionWon",
                  "before": 0.506,
                  "after": 0.5213
                },
                {
                  "stat": "totalCross",
                  "before": 0.2671,
                  "after": 0.2576
                },
                {
                  "stat": "wasFouled",
                  "before": 1.6151,
                  "after": 1.6076
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.1758,
                  "after": 0.1696
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 0.7197,
                "expected_assists": 0.054,
                "assists": 0.0667,
                "assist_rate": 0.0667,
                "expected_goals": 0.0483,
                "goals": 0.0484,
                "goal_rate": 0.0484,
                "shots_on_target": 0.1696,
                "total_shots": 0.6368,
                "rating": 6.897,
                "minutes": 75.86,
                "total_pass": 44.5933,
                "accurate_pass": 41.4806,
                "duels_won": 4.5268,
                "total_long_balls": 2.9064,
                "accurate_long_balls": 2.1086,
                "total_own_half_passes": 21.0142,
                "accurate_own_half_passes": 19.8006,
                "total_opp_half_passes": 23.5792,
                "accurate_opp_half_passes": 21.68,
                "crosses_total": 0.2576,
                "crosses_accurate": 0.0,
                "touches": 57.0521,
                "possession_lost": 6.7508,
                "dispossessed": 1.2943,
                "duels_lost": 4.5282,
                "aerial_won": 0.0,
                "aerial_lost": 0.4201,
                "interceptions": 0.5213,
                "tackles_won": 0.4956,
                "tackles": 0.8001,
                "clearances": 0.8015,
                "total_contest": 2.8464,
                "won_contest": 2.1116,
                "challenges_lost": 0.8914,
                "fouls": 1.1455,
                "fouls_drawn": 1.6076,
                "blocks": 0.1641,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2642,
                "xgot": 0.0,
                "ball_carries": 20.2819,
                "total_progression": 72.9482,
                "progressive_carries": 2.0709,
                "shots_off_target": 0.4672
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "key_pass": 0.7197,
                "expected_assists": 0.054,
                "assists": 0.0667,
                "assist_rate": 0.0667,
                "expected_goals": 0.0435,
                "goals": 0.0436,
                "goal_rate": 0.0436,
                "shots_on_target": 0.1526,
                "total_shots": 0.5731,
                "rating": 6.897,
                "minutes": 75.86,
                "total_pass": 44.5933,
                "accurate_pass": 41.4806,
                "duels_won": 4.5268,
                "total_long_balls": 2.9064,
                "accurate_long_balls": 2.1086,
                "total_own_half_passes": 21.0142,
                "accurate_own_half_passes": 19.8006,
                "total_opp_half_passes": 23.5792,
                "accurate_opp_half_passes": 21.68,
                "crosses_total": 0.2576,
                "crosses_accurate": 0.0,
                "touches": 57.0521,
                "possession_lost": 6.7508,
                "dispossessed": 1.2943,
                "duels_lost": 4.5282,
                "aerial_won": 0.9,
                "aerial_lost": 0.4201,
                "interceptions": 0.5213,
                "tackles_won": 0.4956,
                "tackles": 0.8001,
                "clearances": 0.8015,
                "total_contest": 2.8464,
                "won_contest": 2.1116,
                "challenges_lost": 0.8914,
                "fouls": 1.1455,
                "fouls_drawn": 1.6076,
                "blocks": 0.1641,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2378,
                "xgot": 0.0,
                "ball_carries": 20.2819,
                "total_progression": 72.9482,
                "progressive_carries": 2.0709,
                "shots_off_target": 0.4205,
                "duel_xg_multiplier": 0.9,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.382,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, midfield_pairing"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Gabriel Moscardo",
                  "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                  "duel_win_rate": 0.382,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v1",
                  "xg_multiplier": 0.9,
                  "skill_edge": -0.032,
                  "height_edge": -0.036,
                  "attacker_skill": 0.4374,
                  "defender_skill": 0.5085,
                  "attacker_role": "CM",
                  "attacker_mv_price_index": 0.9,
                  "defender_adjusted_parts": [
                    {
                      "player": "Gabriel Moscardo",
                      "market_value": 7500000,
                      "role": "CDM",
                      "price_index": 0.85,
                      "adjusted_quality": 0.5085
                    }
                  ],
                  "xg_override": 0.0435
                }
              },
              "changes": [
                {
                  "stat": "aerialWon",
                  "before": 0.0,
                  "after": 0.9
                },
                {
                  "stat": "totalShots",
                  "before": 0.6368,
                  "after": 0.5731
                },
                {
                  "stat": "shotOffTarget",
                  "before": 0.4672,
                  "after": 0.4205
                },
                {
                  "stat": "bigChanceMissed",
                  "before": 0.2642,
                  "after": 0.2378
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.1696,
                  "after": 0.1526
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "key_pass": 0.7197,
                "expected_assists": 0.052,
                "assist_rate": 0.0667,
                "assists": 0,
                "expected_goals": 0.0419,
                "goal_rate": 0.0436,
                "goals": 0,
                "shots_on_target": 0.1526,
                "total_shots": 0.5731,
                "rating": 6.897,
                "minutes": 75.86,
                "total_pass": 44.5933,
                "accurate_pass": 41.4806,
                "duels_won": 4.5268,
                "total_long_balls": 2.9064,
                "accurate_long_balls": 2.1086,
                "total_own_half_passes": 21.0142,
                "accurate_own_half_passes": 19.8006,
                "total_opp_half_passes": 23.5792,
                "accurate_opp_half_passes": 21.68,
                "crosses_total": 0.2576,
                "crosses_accurate": 0.0,
                "touches": 57.0521,
                "possession_lost": 6.7508,
                "dispossessed": 1.2943,
                "duels_lost": 4.5282,
                "aerial_won": 0.9,
                "aerial_lost": 0.4201,
                "interceptions": 0.5213,
                "tackles_won": 0.4956,
                "tackles": 0.8001,
                "clearances": 0.8015,
                "total_contest": 2.8464,
                "won_contest": 2.1116,
                "challenges_lost": 0.8914,
                "fouls": 1.1455,
                "fouls_drawn": 1.6076,
                "blocks": 0.1641,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2378,
                "xgot": 0.0,
                "ball_carries": 20.2819,
                "total_progression": 72.9482,
                "progressive_carries": 2.0709,
                "shots_off_target": 0.4205,
                "duel_xg_multiplier": 0.9,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.382,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0011,
                "creation_factor": 1.1221
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 4 by projected rating, fifa_overall 72.0; not used by the projection)",
              "stats": {
                "key_pass": 0.7197,
                "expected_assists": 0.052,
                "assist_rate": 0.0667,
                "assists": 0,
                "expected_goals": 0.0419,
                "goal_rate": 0.0436,
                "goals": 0,
                "shots_on_target": 0.1526,
                "total_shots": 0.5731,
                "rating": 6.897,
                "minutes": 75.86,
                "total_pass": 44.5933,
                "accurate_pass": 41.4806,
                "duels_won": 4.5268,
                "total_long_balls": 2.9064,
                "accurate_long_balls": 2.1086,
                "total_own_half_passes": 21.0142,
                "accurate_own_half_passes": 19.8006,
                "total_opp_half_passes": 23.5792,
                "accurate_opp_half_passes": 21.68,
                "crosses_total": 0.2576,
                "crosses_accurate": 0.0,
                "touches": 57.0521,
                "possession_lost": 6.7508,
                "dispossessed": 1.2943,
                "duels_lost": 4.5282,
                "aerial_won": 0.9,
                "aerial_lost": 0.4201,
                "interceptions": 0.5213,
                "tackles_won": 0.4956,
                "tackles": 0.8001,
                "clearances": 0.8015,
                "total_contest": 2.8464,
                "won_contest": 2.1116,
                "challenges_lost": 0.8914,
                "fouls": 1.1455,
                "fouls_drawn": 1.6076,
                "blocks": 0.1641,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2378,
                "xgot": 0.0,
                "ball_carries": 20.2819,
                "total_progression": 72.9482,
                "progressive_carries": 2.0709,
                "shots_off_target": 0.4205,
                "duel_xg_multiplier": 0.9,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.382,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0011,
                "creation_factor": 1.1221,
                "fifa_overall": 72.0
              },
              "params": {
                "match_squad_rank": 4,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 4238,
                "fifa_rank": 4261.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 72.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "key_pass": 0.7197,
                "expected_assists": 0.052,
                "assist_rate": 0.0667,
                "assists": 0,
                "expected_goals": 0.0419,
                "goal_rate": 0.0436,
                "goals": 0,
                "shots_on_target": 0.1526,
                "total_shots": 0.5731,
                "rating": 6.897,
                "minutes": 75.86,
                "total_pass": 44.5933,
                "accurate_pass": 41.4806,
                "duels_won": 4.5268,
                "total_long_balls": 2.9064,
                "accurate_long_balls": 2.1086,
                "total_own_half_passes": 21.0142,
                "accurate_own_half_passes": 19.8006,
                "total_opp_half_passes": 23.5792,
                "accurate_opp_half_passes": 21.68,
                "crosses_total": 0.2576,
                "crosses_accurate": 0.0,
                "touches": 57.0521,
                "possession_lost": 6.7508,
                "dispossessed": 1.2943,
                "duels_lost": 4.5282,
                "aerial_won": 0.9,
                "aerial_lost": 0.4201,
                "interceptions": 0.5213,
                "tackles_won": 0.4956,
                "tackles": 0.8001,
                "clearances": 0.8015,
                "total_contest": 2.8464,
                "won_contest": 2.1116,
                "challenges_lost": 0.8914,
                "fouls": 1.1455,
                "fouls_drawn": 1.6076,
                "blocks": 0.1641,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2378,
                "xgot": 0.0,
                "ball_carries": 20.2819,
                "total_progression": 72.9482,
                "progressive_carries": 2.0709,
                "shots_off_target": 0.4205,
                "duel_xg_multiplier": 0.9,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.382,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.041,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0011,
                "creation_factor": 1.1221,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.041,
                "scorer_weight": 0.0419,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0508,
                "finishing_factor": 1.0011,
                "appearance_weight": 1.0,
                "weight_rank": 7,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "key_pass": 0.7197,
                "expected_assists": 0.052,
                "assist_rate": 0.0667,
                "assists": 0,
                "expected_goals": 0.0419,
                "goal_rate": 0.0436,
                "goals": 0,
                "shots_on_target": 0.1526,
                "total_shots": 0.5731,
                "rating": 6.897,
                "minutes": 75.86,
                "total_pass": 44.5933,
                "accurate_pass": 41.4806,
                "duels_won": 4.5268,
                "total_long_balls": 2.9064,
                "accurate_long_balls": 2.1086,
                "total_own_half_passes": 21.0142,
                "accurate_own_half_passes": 19.8006,
                "total_opp_half_passes": 23.5792,
                "accurate_opp_half_passes": 21.68,
                "crosses_total": 0.2576,
                "crosses_accurate": 0.0,
                "touches": 57.0521,
                "possession_lost": 6.7508,
                "dispossessed": 1.2943,
                "duels_lost": 4.5282,
                "aerial_won": 0.9,
                "aerial_lost": 0.4201,
                "interceptions": 0.5213,
                "tackles_won": 0.4956,
                "tackles": 0.8001,
                "clearances": 0.8015,
                "total_contest": 2.8464,
                "won_contest": 2.1116,
                "challenges_lost": 0.8914,
                "fouls": 1.1455,
                "fouls_drawn": 1.6076,
                "blocks": 0.1641,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2378,
                "xgot": 0.0,
                "ball_carries": 20.2819,
                "total_progression": 72.9482,
                "progressive_carries": 2.0709,
                "shots_off_target": 0.4205,
                "duel_xg_multiplier": 0.9,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.382,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.041,
                "projected_assists": 0,
                "assist_probability": 0.0507,
                "finishing_factor": 1.0011,
                "creation_factor": 1.1221,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0507,
                "provider_weight": 0.0583,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0994,
                "creation_factor": 1.1221,
                "appearance_weight": 1.0,
                "weight_rank": 5,
                "eligible_players": 13
              }
            }
          ]
        },
        "Chupete": {
          "player_id": 1913386,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 9,
          "height": 185,
          "market_value": 10700000,
          "stats": {
            "expected_goals": 0.306,
            "goal_rate": 0.3909,
            "goals": 0,
            "shots_on_target": 1,
            "total_shots": 2,
            "expected_assists": 0.0397,
            "key_pass": 1,
            "rating": 6.7466,
            "minutes": 88,
            "total_pass": 16,
            "accurate_pass": 10,
            "duels_won": 5,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 11,
            "accurate_opp_half_passes": 7,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 28,
            "possession_lost": 9.8352,
            "dispossessed": 0.1261,
            "duels_lost": 5,
            "aerial_lost": 2,
            "total_contest": 1,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 1,
            "assist_rate": 0.0,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.2777,
            "offsides": 0,
            "ball_carries": 6,
            "total_progression": 21,
            "progressive_carries": 1,
            "shots_off_target": 1,
            "duel_xg_multiplier": 0.9867,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.3,
            "aerial_won": 2,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.191,
            "pressing_faced": "LOW",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "numerical_situation": "1v2",
            "opponent_defenders": "Quilindschy Hartman, Leandro Cabrera",
            "opponent_faced": "Quilindschy Hartman, Leandro Cabrera",
            "antagonist_source": "attacking_duel",
            "projected_goals": 0,
            "goal_probability": 0.2636,
            "projected_assists": 0,
            "assist_probability": 0.0389,
            "finishing_factor": 1.1997,
            "creation_factor": 0.8,
            "fifa_overall": 80.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 23,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0006,
                "total_shots": 0,
                "total_pass": 3,
                "accurate_pass": 2,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0231,
                "expected_assists": 0.0087,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 14,
                "accurate_pass": 9,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 6,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 90,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0838,
                "expected_assists": 0.0107,
                "total_shots": 2,
                "shots_off_target": 1,
                "total_pass": 16,
                "accurate_pass": 7,
                "key_pass": 1,
                "interceptions": 1,
                "aerial_won": 4,
                "duels_won": 6,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 5.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.9766,
                "expected_assists": 0.0189,
                "total_shots": 4,
                "shots_on_target": 2,
                "shots_off_target": 2,
                "total_pass": 14,
                "accurate_pass": 8,
                "clearances": 2,
                "aerial_won": 2,
                "duels_won": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.2089,
                "expected_assists": 0.0182,
                "total_shots": 3,
                "shots_off_target": 2,
                "total_pass": 20,
                "accurate_pass": 16,
                "key_pass": 2,
                "clearances": 2,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 1.6769,
                "expected_assists": 0.0102,
                "total_shots": 4,
                "shots_on_target": 1,
                "shots_off_target": 2,
                "total_pass": 14,
                "accurate_pass": 10,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 1,
                "aerial_won": 4,
                "duels_won": 6,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 90,
                "rating": 5.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0603,
                "expected_assists": 0.0553,
                "total_shots": 1,
                "total_pass": 18,
                "accurate_pass": 11,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 3,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 2054,
            "combined_rank_score": 783.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 784.0,
            "sofascore_rating": 6.6333,
            "sofascore_appearances": 3.0,
            "fifa_rank": 783.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 11,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7466,
            "source_file": "data/player_rankings.csv",
            "player_name": "Chupete",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Liam Jessop",
                  "ranking": 2049
                },
                {
                  "player_name": "Tohirjon Ashuboyev",
                  "ranking": 2050
                },
                {
                  "player_name": "Javier Méndez",
                  "ranking": 2051
                },
                {
                  "player_name": "Facundo Marín",
                  "ranking": 2052
                },
                {
                  "player_name": "Lee Rim",
                  "ranking": 2053
                }
              ],
              "lower": [
                {
                  "player_name": "Miguelito",
                  "ranking": 2055
                },
                {
                  "player_name": "Francisco Herrera",
                  "ranking": 2056
                },
                {
                  "player_name": "Joon-mo Kang",
                  "ranking": 2057
                },
                {
                  "player_name": "Maks Juraj Čelić",
                  "ranking": 2058
                },
                {
                  "player_name": "Eligijus Jankauskas",
                  "ranking": 2059
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.718,
          "history_matches": 7,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 7,
            "data_confidence": 0.718,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 1.0032,
            "fbref_prior_metrics": {
              "squad": "Málaga",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "minutes": 270.0,
              "goals_per90": 0.3333333333333333,
              "assists_per90": 0.0,
              "shots_per90": 2.67,
              "shots_on_target_pct": 12.5,
              "prior_reliability": 0.2
            },
            "rationale": "XGBoost regressor (F_service) evaluated 7 historical appearances across 7 target models; FBref 2026-2027 prior blended (La Liga, Málaga, rel: 0.20, gls/90: 0.3333333333333333, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.3208,
                "goals": 0.3991,
                "goal_rate": 0.3991,
                "shots_on_target": 0.7916,
                "total_shots": 2.1217,
                "expected_assists": 0.0411,
                "key_pass": 0.5705,
                "rating": 6.7466,
                "minutes": 87.5,
                "total_pass": 15.7242,
                "accurate_pass": 9.7913,
                "duels_won": 4.5261,
                "total_long_balls": 0.2958,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 11.3899,
                "accurate_opp_half_passes": 6.9064,
                "crosses_total": 0.7225,
                "crosses_accurate": 0.0,
                "touches": 27.9227,
                "possession_lost": 9.8038,
                "dispossessed": 0.1257,
                "duels_lost": 5.016,
                "aerial_lost": 1.8144,
                "total_contest": 1.3856,
                "won_contest": 0.4816,
                "ball_recovery": 1.1239,
                "challenges_lost": 0.8293,
                "fouls": 1.3426,
                "fouls_drawn": 1.4197,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.2047,
                "tackles_won": 0.4734,
                "tackles": 0.4734,
                "clearances": 1.3309,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2997,
                "xgot": 0.2911,
                "offsides": 0.2997,
                "ball_carries": 5.9191,
                "total_progression": 21.3466,
                "progressive_carries": 1.3626,
                "shots_off_target": 1.3301
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 23.0,
                    "is_starting": false,
                    "weight": 0.2208,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1877,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1595,
                    "rating": 6.2
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1356,
                    "rating": 5.7
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1152,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.098,
                    "rating": 7.3
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0833,
                    "rating": 5.9
                  }
                ],
                "feature_row": {
                  "history_matches": 7.0,
                  "is_starting_11": 1.0,
                  "expectedGoals": 0.3435,
                  "totalOppositionHalfPasses": 9.3168,
                  "accurateOppositionHalfPasses": 5.6024,
                  "accuratePass": 8.0712,
                  "totalShots": 1.8699
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.32075801491737366,
                    "model_output": 0.3208,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0635
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0353
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0195
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": 0.0146
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0147
                        }
                      ],
                      "others": -0.0258,
                      "total": 0.3208,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.276858
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.126273
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.063447
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": 0.04508
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.043401
                        }
                      ],
                      "others_margin": -0.077449
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.39906302094459534,
                    "model_output": 0.3991,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.059
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.054
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": 0.0501
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0488
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0442
                        }
                      ],
                      "others": 0.0277,
                      "total": 0.3991,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.254144
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.186916
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": 0.146739
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.124898
                        },
                        {
                          "name": "goals",
                          "margin": -0.112538
                        }
                      ],
                      "others_margin": 0.07207
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.7916185259819031,
                    "model_output": 0.7916,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1644
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0575
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0447
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0375
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0395
                        }
                      ],
                      "others": 0.0004,
                      "total": 0.7916,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.267155
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.078723
                        },
                        {
                          "name": "goals",
                          "margin": -0.060661
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.051194
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.05115
                        }
                      ],
                      "others_margin": 0.000557
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 2.1217050552368164,
                    "model_output": 2.1217,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.5194
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.1301
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": 0.0542
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0494
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0487
                        }
                      ],
                      "others": 0.0386,
                      "total": 2.1217,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.519381
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.130105
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": 0.054231
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.049399
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.048655
                        }
                      ],
                      "others_margin": 0.038536
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.04107290506362915,
                    "model_output": 0.0411,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.021
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0089
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0077
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0067
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.004
                        }
                      ],
                      "others": -0.0169,
                      "total": 0.0411,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.282968
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.110066
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.106238
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.102342
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.067437
                        }
                      ],
                      "others_margin": -0.344836
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 0.5704872608184814,
                    "model_output": 0.5705,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.2221
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0601
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0484
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0362
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.0255
                        }
                      ],
                      "others": -0.1554,
                      "total": 0.5705,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.284796
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.069477
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.0596
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.047028
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.034472
                        }
                      ],
                      "others_margin": -0.240925
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.746603012084961,
                    "model_output": 6.7466,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0479
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0346
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0231
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": 0.0212
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0201
                        }
                      ],
                      "others": -0.0471,
                      "total": 6.7466,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.047945
                        },
                        {
                          "name": "rating",
                          "margin": -0.034645
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.023139
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": 0.021212
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.02006
                        }
                      ],
                      "others_margin": -0.046991
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 7,
                  "role_matches": 6,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 1.0032, quality 0.531)",
              "stats": {
                "expected_goals": 0.3218,
                "goals": 0.4003,
                "goal_rate": 0.4003,
                "shots_on_target": 0.7942,
                "total_shots": 2.1286,
                "expected_assists": 0.0412,
                "key_pass": 0.5723,
                "rating": 6.7466,
                "minutes": 87.5,
                "total_pass": 15.7745,
                "accurate_pass": 9.8226,
                "duels_won": 4.5406,
                "total_long_balls": 0.2967,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 11.4263,
                "accurate_opp_half_passes": 6.9285,
                "crosses_total": 0.7248,
                "crosses_accurate": 0.0,
                "touches": 28.0121,
                "possession_lost": 9.8352,
                "dispossessed": 0.1261,
                "duels_lost": 5.0321,
                "aerial_lost": 1.8202,
                "total_contest": 1.39,
                "won_contest": 0.4831,
                "ball_recovery": 1.1275,
                "challenges_lost": 0.832,
                "fouls": 1.3469,
                "fouls_drawn": 1.4242,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.2054,
                "tackles_won": 0.4749,
                "tackles": 0.4749,
                "clearances": 1.3352,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.3007,
                "xgot": 0.292,
                "offsides": 0.3007,
                "ball_carries": 5.938,
                "total_progression": 21.4149,
                "progressive_carries": 1.367,
                "shots_off_target": 1.3344
              },
              "params": {
                "market_value_eur": 10700000,
                "quality_factor": 0.5306,
                "boost_factor": 1.0032,
                "reference_quality": 0.505,
                "history_matches": 7,
                "history_shrink": 0.4167,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0542)",
              "stats": {
                "expected_goals": 0.3218,
                "goals": 0.3962,
                "goal_rate": 0.3962,
                "shots_on_target": 0.7686,
                "total_shots": 2.1539,
                "expected_assists": 0.0412,
                "key_pass": 0.5723,
                "rating": 6.7466,
                "minutes": 87.5,
                "total_pass": 15.7745,
                "accurate_pass": 9.8226,
                "duels_won": 4.5406,
                "total_long_balls": 0.2967,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 11.4263,
                "accurate_opp_half_passes": 6.9285,
                "crosses_total": 0.6855,
                "crosses_accurate": 0.0,
                "touches": 28.0121,
                "possession_lost": 9.8352,
                "dispossessed": 0.1261,
                "duels_lost": 5.0321,
                "aerial_lost": 1.8202,
                "total_contest": 1.39,
                "won_contest": 0.4831,
                "ball_recovery": 1.1275,
                "challenges_lost": 0.832,
                "fouls": 1.3266,
                "fouls_drawn": 1.3997,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.1943,
                "tackles_won": 0.4843,
                "tackles": 0.4749,
                "clearances": 1.3352,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.3007,
                "xgot": 0.292,
                "offsides": 0.302,
                "ball_carries": 5.938,
                "total_progression": 21.4149,
                "progressive_carries": 1.367,
                "shots_off_target": 1.3344
              },
              "params": {
                "blend_weight": 0.0542,
                "history_matches": 7,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.9722,
                "prior_reliability": 0.2,
                "competition": "La Liga",
                "squad": "Málaga"
              },
              "changes": [
                {
                  "stat": "totalCross",
                  "before": 0.7248,
                  "after": 0.6855
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.7942,
                  "after": 0.7686
                },
                {
                  "stat": "totalShots",
                  "before": 2.1286,
                  "after": 2.1539
                },
                {
                  "stat": "wasFouled",
                  "before": 1.4242,
                  "after": 1.3997
                },
                {
                  "stat": "fouls",
                  "before": 1.3469,
                  "after": 1.3266
                },
                {
                  "stat": "interceptionWon",
                  "before": 0.2054,
                  "after": 0.1943
                },
                {
                  "stat": "wonTackle",
                  "before": 0.4749,
                  "after": 0.4843
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.3218,
                "goals": 0.3962,
                "goal_rate": 0.3962,
                "shots_on_target": 0.7686,
                "total_shots": 2.1539,
                "expected_assists": 0.0412,
                "key_pass": 0.5723,
                "rating": 6.7466,
                "minutes": 87.5,
                "total_pass": 15.7745,
                "accurate_pass": 9.8226,
                "duels_won": 4.5406,
                "total_long_balls": 0.2967,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 11.4263,
                "accurate_opp_half_passes": 6.9285,
                "crosses_total": 0.6855,
                "crosses_accurate": 0.0,
                "touches": 28.0121,
                "possession_lost": 9.8352,
                "dispossessed": 0.1261,
                "duels_lost": 5.0321,
                "aerial_lost": 1.8202,
                "total_contest": 1.39,
                "won_contest": 0.4831,
                "ball_recovery": 1.1275,
                "challenges_lost": 0.832,
                "fouls": 1.3266,
                "fouls_drawn": 1.3997,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.1943,
                "tackles_won": 0.4749,
                "tackles": 0.4749,
                "clearances": 1.3352,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.3007,
                "xgot": 0.292,
                "offsides": 0.302,
                "ball_carries": 5.938,
                "total_progression": 21.4149,
                "progressive_carries": 1.367,
                "shots_off_target": 1.3344
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "expected_goals": 0.3175,
                "goals": 0.3909,
                "goal_rate": 0.3909,
                "shots_on_target": 0.7584,
                "total_shots": 2.1253,
                "expected_assists": 0.0412,
                "key_pass": 0.5723,
                "rating": 6.7466,
                "minutes": 87.5,
                "total_pass": 15.7745,
                "accurate_pass": 9.8226,
                "duels_won": 4.5406,
                "total_long_balls": 0.2967,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 11.4263,
                "accurate_opp_half_passes": 6.9285,
                "crosses_total": 0.6855,
                "crosses_accurate": 0.0,
                "touches": 28.0121,
                "possession_lost": 9.8352,
                "dispossessed": 0.1261,
                "duels_lost": 5.0321,
                "aerial_lost": 1.8202,
                "total_contest": 1.39,
                "won_contest": 0.4831,
                "ball_recovery": 1.1275,
                "challenges_lost": 0.832,
                "fouls": 1.3266,
                "fouls_drawn": 1.3997,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.1943,
                "tackles_won": 0.4749,
                "tackles": 0.4749,
                "clearances": 1.3352,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2967,
                "xgot": 0.2881,
                "offsides": 0.302,
                "ball_carries": 5.938,
                "total_progression": 21.4149,
                "progressive_carries": 1.367,
                "shots_off_target": 1.3167,
                "duel_xg_multiplier": 0.9867,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.191,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Quilindschy Hartman, Leandro Cabrera",
                "opponent_faced": "Quilindschy Hartman, Leandro Cabrera",
                "antagonist_source": "attacking_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Quilindschy Hartman, Leandro Cabrera",
                  "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                  "duel_win_rate": 0.191,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v2",
                  "xg_multiplier": 0.9867,
                  "skill_edge": -0.0031,
                  "height_edge": -0.006,
                  "attacker_skill": 0.5306,
                  "defender_skill": 0.5375,
                  "attacker_role": "ST",
                  "attacker_mv_price_index": 1.0,
                  "defender_adjusted_parts": [
                    {
                      "player": "Quilindschy Hartman",
                      "market_value": 15500000,
                      "role": "CB",
                      "price_index": 0.75,
                      "adjusted_quality": 0.6376
                    },
                    {
                      "player": "Leandro Cabrera",
                      "market_value": 930000,
                      "role": "CB",
                      "price_index": 0.75,
                      "adjusted_quality": 0.4374
                    }
                  ],
                  "xg_override": 0.3175
                }
              },
              "changes": [
                {
                  "stat": "totalShots",
                  "before": 2.1539,
                  "after": 2.1253
                },
                {
                  "stat": "shotOffTarget",
                  "before": 1.3344,
                  "after": 1.3167
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.7686,
                  "after": 0.7584
                },
                {
                  "stat": "goals",
                  "before": 0.3962,
                  "after": 0.3909
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "expected_goals": 0.306,
                "goal_rate": 0.3909,
                "goals": 0,
                "shots_on_target": 0.7584,
                "total_shots": 2.1253,
                "expected_assists": 0.0397,
                "key_pass": 0.5723,
                "rating": 6.7466,
                "minutes": 87.5,
                "total_pass": 15.7745,
                "accurate_pass": 9.8226,
                "duels_won": 4.5406,
                "total_long_balls": 0.2967,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 11.4263,
                "accurate_opp_half_passes": 6.9285,
                "crosses_total": 0.6855,
                "crosses_accurate": 0.0,
                "touches": 28.0121,
                "possession_lost": 9.8352,
                "dispossessed": 0.1261,
                "duels_lost": 5.0321,
                "aerial_lost": 1.8202,
                "total_contest": 1.39,
                "won_contest": 0.4831,
                "ball_recovery": 1.1275,
                "challenges_lost": 0.832,
                "fouls": 1.3266,
                "fouls_drawn": 1.3997,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.1943,
                "tackles_won": 0.4749,
                "tackles": 0.4749,
                "clearances": 1.3352,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2967,
                "xgot": 0.2777,
                "offsides": 0.302,
                "ball_carries": 5.938,
                "total_progression": 21.4149,
                "progressive_carries": 1.367,
                "shots_off_target": 1.3167,
                "duel_xg_multiplier": 0.9867,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.191,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Quilindschy Hartman, Leandro Cabrera",
                "opponent_faced": "Quilindschy Hartman, Leandro Cabrera",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1997,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              },
              "changes": [
                {
                  "stat": "expected_goals",
                  "before": 0.3175,
                  "after": 0.306
                }
              ]
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 11 by projected rating, fifa_overall 80.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.306,
                "goal_rate": 0.3909,
                "goals": 0,
                "shots_on_target": 0.7584,
                "total_shots": 2.1253,
                "expected_assists": 0.0397,
                "key_pass": 0.5723,
                "rating": 6.7466,
                "minutes": 87.5,
                "total_pass": 15.7745,
                "accurate_pass": 9.8226,
                "duels_won": 4.5406,
                "total_long_balls": 0.2967,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 11.4263,
                "accurate_opp_half_passes": 6.9285,
                "crosses_total": 0.6855,
                "crosses_accurate": 0.0,
                "touches": 28.0121,
                "possession_lost": 9.8352,
                "dispossessed": 0.1261,
                "duels_lost": 5.0321,
                "aerial_lost": 1.8202,
                "total_contest": 1.39,
                "won_contest": 0.4831,
                "ball_recovery": 1.1275,
                "challenges_lost": 0.832,
                "fouls": 1.3266,
                "fouls_drawn": 1.3997,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.1943,
                "tackles_won": 0.4749,
                "tackles": 0.4749,
                "clearances": 1.3352,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2967,
                "xgot": 0.2777,
                "offsides": 0.302,
                "ball_carries": 5.938,
                "total_progression": 21.4149,
                "progressive_carries": 1.367,
                "shots_off_target": 1.3167,
                "duel_xg_multiplier": 0.9867,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.191,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Quilindschy Hartman, Leandro Cabrera",
                "opponent_faced": "Quilindschy Hartman, Leandro Cabrera",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1997,
                "creation_factor": 0.8,
                "fifa_overall": 80.0
              },
              "params": {
                "match_squad_rank": 11,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 2054,
                "fifa_rank": 783.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 80.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "expected_goals": 0.306,
                "goal_rate": 0.3909,
                "goals": 0,
                "shots_on_target": 0.7584,
                "total_shots": 2.1253,
                "expected_assists": 0.0397,
                "key_pass": 0.5723,
                "rating": 6.7466,
                "minutes": 87.5,
                "total_pass": 15.7745,
                "accurate_pass": 9.8226,
                "duels_won": 4.5406,
                "total_long_balls": 0.2967,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 11.4263,
                "accurate_opp_half_passes": 6.9285,
                "crosses_total": 0.6855,
                "crosses_accurate": 0.0,
                "touches": 28.0121,
                "possession_lost": 9.8352,
                "dispossessed": 0.1261,
                "duels_lost": 5.0321,
                "aerial_lost": 1.8202,
                "total_contest": 1.39,
                "won_contest": 0.4831,
                "ball_recovery": 1.1275,
                "challenges_lost": 0.832,
                "fouls": 1.3266,
                "fouls_drawn": 1.3997,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.1943,
                "tackles_won": 0.4749,
                "tackles": 0.4749,
                "clearances": 1.3352,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2967,
                "xgot": 0.2777,
                "offsides": 0.302,
                "ball_carries": 5.938,
                "total_progression": 21.4149,
                "progressive_carries": 1.367,
                "shots_off_target": 1.3167,
                "duel_xg_multiplier": 0.9867,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.191,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Quilindschy Hartman, Leandro Cabrera",
                "opponent_faced": "Quilindschy Hartman, Leandro Cabrera",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.2636,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1997,
                "creation_factor": 0.8,
                "fifa_overall": 80.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.2636,
                "scorer_weight": 0.3671,
                "squad_weight_total": 0.8264,
                "weight_share": 0.4442,
                "finishing_factor": 1.1997,
                "appearance_weight": 1.0,
                "weight_rank": 1,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "expected_goals": 0.306,
                "goal_rate": 0.3909,
                "goals": 0,
                "shots_on_target": 0.7584,
                "total_shots": 2.1253,
                "expected_assists": 0.0397,
                "key_pass": 0.5723,
                "rating": 6.7466,
                "minutes": 87.5,
                "total_pass": 15.7745,
                "accurate_pass": 9.8226,
                "duels_won": 4.5406,
                "total_long_balls": 0.2967,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 11.4263,
                "accurate_opp_half_passes": 6.9285,
                "crosses_total": 0.6855,
                "crosses_accurate": 0.0,
                "touches": 28.0121,
                "possession_lost": 9.8352,
                "dispossessed": 0.1261,
                "duels_lost": 5.0321,
                "aerial_lost": 1.8202,
                "total_contest": 1.39,
                "won_contest": 0.4831,
                "ball_recovery": 1.1275,
                "challenges_lost": 0.832,
                "fouls": 1.3266,
                "fouls_drawn": 1.3997,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.1943,
                "tackles_won": 0.4749,
                "tackles": 0.4749,
                "clearances": 1.3352,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.2967,
                "xgot": 0.2777,
                "offsides": 0.302,
                "ball_carries": 5.938,
                "total_progression": 21.4149,
                "progressive_carries": 1.367,
                "shots_off_target": 1.3167,
                "duel_xg_multiplier": 0.9867,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.191,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Quilindschy Hartman, Leandro Cabrera",
                "opponent_faced": "Quilindschy Hartman, Leandro Cabrera",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.2636,
                "projected_assists": 0,
                "assist_probability": 0.0389,
                "finishing_factor": 1.1997,
                "creation_factor": 0.8,
                "fifa_overall": 80.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0389,
                "provider_weight": 0.0318,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0541,
                "creation_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 6,
                "eligible_players": 13
              }
            }
          ]
        },
        "Joaquín Muñoz": {
          "player_id": 904964,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 11,
          "height": 172,
          "market_value": 1400000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0941,
            "assist_rate": 0.1402,
            "assists": 0,
            "expected_goals": 0.0748,
            "goal_rate": 0.052,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "rating": 6.7456,
            "minutes": 71,
            "total_pass": 15,
            "accurate_pass": 12,
            "duels_won": 3,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_own_half_passes": 4,
            "accurate_own_half_passes": 3,
            "total_opp_half_passes": 12,
            "accurate_opp_half_passes": 10,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 26,
            "possession_lost": 8.104,
            "dispossessed": 0.9225,
            "duels_lost": 4,
            "aerial_won": 1,
            "aerial_lost": 1,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 0,
            "total_contest": 1,
            "won_contest": 1,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 2,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 11,
            "total_progression": 39,
            "progressive_carries": 2,
            "shots_off_target": 1,
            "duel_xg_multiplier": 0.7901,
            "dribbles_attempted": 3,
            "dribbles_successful": 0.8,
            "crosses_attempted": 2.0,
            "duel_win_rate": 0.317,
            "pressing_faced": "LOW",
            "matchup_zone": "Left Mid vs Right Back — Wide Channel",
            "numerical_situation": "1v1",
            "opponent_defenders": "Omar El Hilali",
            "opponent_faced": "Omar El Hilali",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.0721,
            "projected_assists": 0,
            "assist_probability": 0.0898,
            "finishing_factor": 0.8,
            "creation_factor": 1.25,
            "fifa_overall": 71.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 67,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0607,
                "expected_assists": 0.0834,
                "total_shots": 1,
                "total_pass": 12,
                "accurate_pass": 6,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 3,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 29,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0174,
                "expected_assists": 0.0067,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 8,
                "accurate_pass": 5,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 61,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0269,
                "expected_assists": 0.0167,
                "total_shots": 1,
                "total_pass": 11,
                "accurate_pass": 11,
                "tackles": 1,
                "interceptions": 1,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 31,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0598,
                "total_shots": 0,
                "total_pass": 11,
                "accurate_pass": 9,
                "key_pass": 2,
                "duels_won": 2,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 61,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0216,
                "expected_assists": 0.0675,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 17,
                "accurate_pass": 16,
                "key_pass": 1,
                "clearances": 1,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 73,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.029,
                "expected_assists": 0.0199,
                "total_shots": 1,
                "total_pass": 19,
                "accurate_pass": 17,
                "tackles": 2,
                "tackles_won": 2,
                "duels_won": 6,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 67,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0255,
                "total_shots": 0,
                "total_pass": 23,
                "accurate_pass": 18,
                "tackles": 1,
                "duels_won": 7,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 4788,
            "combined_rank_score": 2863.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 698.0,
            "sofascore_rating": 6.7,
            "sofascore_appearances": 1.0,
            "fifa_rank": 5029.0,
            "fifa_overall": 71.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 12,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7456,
            "source_file": "data/player_rankings.csv",
            "player_name": "Joaquín Muñoz",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Jorge Ruvalcaba",
                  "ranking": 4783
                },
                {
                  "player_name": "Luca Langoni",
                  "ranking": 4784
                },
                {
                  "player_name": "John Victor",
                  "ranking": 4785
                },
                {
                  "player_name": "Diego Luna",
                  "ranking": 4786
                },
                {
                  "player_name": "Rafael Navarro",
                  "ranking": 4787
                }
              ],
              "lower": [
                {
                  "player_name": "Odin Luraas Bjørtuft",
                  "ranking": 4789
                },
                {
                  "player_name": "Harry Milne",
                  "ranking": 4790
                },
                {
                  "player_name": "Auston Trusty",
                  "ranking": 4791
                },
                {
                  "player_name": "Cameron Devlin",
                  "ranking": 4792
                },
                {
                  "player_name": "Reo Hatate",
                  "ranking": 4793
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.71,
          "history_matches": 7,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 7,
            "data_confidence": 0.71,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9916,
            "fbref_prior_metrics": {
              "squad": "Málaga",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "minutes": 198.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 0.91,
              "shots_on_target_pct": 0.0,
              "prior_reliability": 0.1467
            },
            "rationale": "XGBoost regressor (M_service) evaluated 7 historical appearances across 8 target models; FBref 2026-2027 prior blended (La Liga, Málaga, rel: 0.15, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 1.0725,
                "expected_assists": 0.0985,
                "assists": 0.1473,
                "assist_rate": 0.1473,
                "expected_goals": 0.0991,
                "goals": 0.069,
                "goal_rate": 0.069,
                "shots_on_target": 0.4277,
                "total_shots": 1.312,
                "rating": 6.7456,
                "minutes": 71.32,
                "total_pass": 15.4523,
                "accurate_pass": 12.6047,
                "duels_won": 3.4754,
                "total_long_balls": 0.8867,
                "accurate_long_balls": 0.1408,
                "total_own_half_passes": 3.5483,
                "accurate_own_half_passes": 2.7027,
                "total_opp_half_passes": 11.904,
                "accurate_opp_half_passes": 9.902,
                "crosses_total": 1.3445,
                "crosses_accurate": 0.4352,
                "touches": 26.6132,
                "possession_lost": 8.1727,
                "dispossessed": 0.9303,
                "duels_lost": 4.2918,
                "aerial_won": 0.0,
                "aerial_lost": 0.8688,
                "interceptions": 0.2292,
                "tackles_won": 0.6008,
                "tackles": 0.9708,
                "clearances": 0.1948,
                "total_contest": 1.2523,
                "won_contest": 0.8052,
                "challenges_lost": 1.304,
                "fouls": 0.7416,
                "fouls_drawn": 1.6994,
                "blocks": 0.1948,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 10.7293,
                "total_progression": 39.0152,
                "progressive_carries": 1.8225,
                "shots_off_target": 0.8843
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.2208,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 29.0,
                    "is_starting": false,
                    "weight": 0.1877,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 61.0,
                    "is_starting": true,
                    "weight": 0.1595,
                    "rating": 6.2
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 31.0,
                    "is_starting": false,
                    "weight": 0.1356,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 61.0,
                    "is_starting": true,
                    "weight": 0.1152,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 73.0,
                    "is_starting": true,
                    "weight": 0.098,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.0833,
                    "rating": 6.7
                  }
                ],
                "feature_row": {
                  "history_matches": 7.0,
                  "is_starting_11": 1.0,
                  "totalShots": 0.7812,
                  "creative_index": 0.2683,
                  "expectedGoals": 0.0263,
                  "expectedAssists": 0.0423,
                  "onTargetScoringAttempt": 0.0
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 1.0725116729736328,
                    "model_output": 1.0725,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1099
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0576
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0557
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": 0.0452
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0394
                        }
                      ],
                      "others": -0.0101,
                      "total": 1.0725,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.116928
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.056172
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.054334
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": 0.044285
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.037104
                        }
                      ],
                      "others_margin": -0.009335
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.09845447540283203,
                    "model_output": 0.0985,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0101
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0096
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0065
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0058
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": 0.0049
                        }
                      ],
                      "others": -0.004,
                      "total": 0.0985,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "expectedAssists",
                          "margin": -0.125704
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.119213
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.073863
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.060844
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": 0.048639
                        }
                      ],
                      "others_margin": -0.038969
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.147263303399086,
                    "model_output": 0.1473,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0129
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0112
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.011
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0118
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0112
                        }
                      ],
                      "others": 0.0264,
                      "total": 0.1473,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.141184
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.120875
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.119049
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.113435
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.096909
                        }
                      ],
                      "others_margin": 0.197171
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.09907454252243042,
                    "model_output": 0.0991,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0244
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0105
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0105
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0075
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0063
                        }
                      ],
                      "others": 0.0093,
                      "total": 0.0991,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "expectedGoals",
                          "margin": -0.298857
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.139733
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.122549
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.086536
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.07228
                        }
                      ],
                      "others_margin": 0.098866
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.06903722137212753,
                    "model_output": 0.069,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0191
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.012
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0074
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.007
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0069
                        }
                      ],
                      "others": -0.005,
                      "total": 0.069,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "expectedGoals",
                          "margin": -0.217148
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.165091
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.104773
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.090809
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.089163
                        }
                      ],
                      "others_margin": -0.070877
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.4277461767196655,
                    "model_output": 0.4277,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0519
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0379
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0393
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0341
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0206
                        }
                      ],
                      "others": 0.0237,
                      "total": 0.4277,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "expectedGoals",
                          "margin": -0.174464
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.130419
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.119228
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.093242
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.052267
                        }
                      ],
                      "others_margin": 0.057122
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 1.3120474815368652,
                    "model_output": 1.312,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.161
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.1262
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0794
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0432
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0386
                        }
                      ],
                      "others": 0.1955,
                      "total": 1.312,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.160998
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.126197
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.079422
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.043241
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.038606
                        }
                      ],
                      "others_margin": 0.195657
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.745622158050537,
                    "model_output": 6.7456,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0494
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0382
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0246
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0203
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": 0.0101
                        }
                      ],
                      "others": -0.0301,
                      "total": 6.7456,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.049361
                        },
                        {
                          "name": "rating",
                          "margin": -0.03816
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.024618
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.020347
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": 0.010139
                        }
                      ],
                      "others_margin": -0.030139
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 7,
                  "role_matches": 5,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9916, quality 0.437)",
              "stats": {
                "key_pass": 1.0635,
                "expected_assists": 0.0976,
                "assists": 0.146,
                "assist_rate": 0.146,
                "expected_goals": 0.0982,
                "goals": 0.0685,
                "goal_rate": 0.0685,
                "shots_on_target": 0.4242,
                "total_shots": 1.3011,
                "rating": 6.7456,
                "minutes": 71.32,
                "total_pass": 15.3225,
                "accurate_pass": 12.4988,
                "duels_won": 3.4462,
                "total_long_balls": 0.8793,
                "accurate_long_balls": 0.1396,
                "total_own_half_passes": 3.5185,
                "accurate_own_half_passes": 2.68,
                "total_opp_half_passes": 11.804,
                "accurate_opp_half_passes": 9.8188,
                "crosses_total": 1.3332,
                "crosses_accurate": 0.4315,
                "touches": 26.3896,
                "possession_lost": 8.104,
                "dispossessed": 0.9225,
                "duels_lost": 4.2557,
                "aerial_won": 0.0,
                "aerial_lost": 0.8615,
                "interceptions": 0.2273,
                "tackles_won": 0.5958,
                "tackles": 0.9626,
                "clearances": 0.1932,
                "total_contest": 1.2418,
                "won_contest": 0.7984,
                "challenges_lost": 1.293,
                "fouls": 0.7354,
                "fouls_drawn": 1.6851,
                "blocks": 0.1932,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 10.6392,
                "total_progression": 38.6875,
                "progressive_carries": 1.8072,
                "shots_off_target": 0.8769
              },
              "params": {
                "market_value_eur": 1400000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9916,
                "reference_quality": 0.505,
                "history_matches": 7,
                "history_shrink": 0.4167,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0397)",
              "stats": {
                "key_pass": 1.0635,
                "expected_assists": 0.0976,
                "assists": 0.1402,
                "assist_rate": 0.1402,
                "expected_goals": 0.0982,
                "goals": 0.0658,
                "goal_rate": 0.0658,
                "shots_on_target": 0.4073,
                "total_shots": 1.2781,
                "rating": 6.7456,
                "minutes": 71.32,
                "total_pass": 15.3225,
                "accurate_pass": 12.4988,
                "duels_won": 3.4462,
                "total_long_balls": 0.8793,
                "accurate_long_balls": 0.1396,
                "total_own_half_passes": 3.5185,
                "accurate_own_half_passes": 2.68,
                "total_opp_half_passes": 11.804,
                "accurate_opp_half_passes": 9.8188,
                "crosses_total": 1.3089,
                "crosses_accurate": 0.4315,
                "touches": 26.3896,
                "possession_lost": 8.104,
                "dispossessed": 0.9225,
                "duels_lost": 4.2557,
                "aerial_won": 0.0,
                "aerial_lost": 0.8615,
                "interceptions": 0.2183,
                "tackles_won": 0.6008,
                "tackles": 0.9626,
                "clearances": 0.1932,
                "total_contest": 1.2418,
                "won_contest": 0.7984,
                "challenges_lost": 1.293,
                "fouls": 0.7491,
                "fouls_drawn": 1.7326,
                "blocks": 0.1932,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 10.6392,
                "total_progression": 38.6875,
                "progressive_carries": 1.8072,
                "shots_off_target": 0.8769
              },
              "params": {
                "blend_weight": 0.0397,
                "history_matches": 7,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.7924,
                "prior_reliability": 0.1467,
                "competition": "La Liga",
                "squad": "Málaga"
              },
              "changes": [
                {
                  "stat": "wasFouled",
                  "before": 1.6851,
                  "after": 1.7326
                },
                {
                  "stat": "totalCross",
                  "before": 1.3332,
                  "after": 1.3089
                },
                {
                  "stat": "totalShots",
                  "before": 1.3011,
                  "after": 1.2781
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.4242,
                  "after": 0.4073
                },
                {
                  "stat": "fouls",
                  "before": 0.7354,
                  "after": 0.7491
                },
                {
                  "stat": "interceptionWon",
                  "before": 0.2273,
                  "after": 0.2183
                },
                {
                  "stat": "goalAssist",
                  "before": 0.146,
                  "after": 0.1402
                },
                {
                  "stat": "wonTackle",
                  "before": 0.5958,
                  "after": 0.6008
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 1.0635,
                "expected_assists": 0.0976,
                "assists": 0.1402,
                "assist_rate": 0.1402,
                "expected_goals": 0.0982,
                "goals": 0.0658,
                "goal_rate": 0.0658,
                "shots_on_target": 0.4073,
                "total_shots": 1.2842,
                "rating": 6.7456,
                "minutes": 71.32,
                "total_pass": 15.3225,
                "accurate_pass": 12.4988,
                "duels_won": 3.4462,
                "total_long_balls": 0.8793,
                "accurate_long_balls": 0.1396,
                "total_own_half_passes": 3.5185,
                "accurate_own_half_passes": 2.68,
                "total_opp_half_passes": 11.804,
                "accurate_opp_half_passes": 9.8188,
                "crosses_total": 1.3089,
                "crosses_accurate": 0.4315,
                "touches": 26.3896,
                "possession_lost": 8.104,
                "dispossessed": 0.9225,
                "duels_lost": 4.2557,
                "aerial_won": 0.0,
                "aerial_lost": 0.8615,
                "interceptions": 0.2183,
                "tackles_won": 0.6008,
                "tackles": 0.9626,
                "clearances": 0.1932,
                "total_contest": 1.2418,
                "won_contest": 0.7984,
                "challenges_lost": 1.293,
                "fouls": 0.7491,
                "fouls_drawn": 1.7326,
                "blocks": 0.1932,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 10.6392,
                "total_progression": 38.6875,
                "progressive_carries": 1.8072,
                "shots_off_target": 0.8769
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "key_pass": 1.0635,
                "expected_assists": 0.0976,
                "assists": 0.1402,
                "assist_rate": 0.1402,
                "expected_goals": 0.0776,
                "goals": 0.052,
                "goal_rate": 0.052,
                "shots_on_target": 0.3218,
                "total_shots": 1.0146,
                "rating": 6.7456,
                "minutes": 71.32,
                "total_pass": 15.3225,
                "accurate_pass": 12.4988,
                "duels_won": 3.4462,
                "total_long_balls": 0.8793,
                "accurate_long_balls": 0.1396,
                "total_own_half_passes": 3.5185,
                "accurate_own_half_passes": 2.68,
                "total_opp_half_passes": 11.804,
                "accurate_opp_half_passes": 9.8188,
                "crosses_total": 1.3089,
                "crosses_accurate": 0.4315,
                "touches": 26.3896,
                "possession_lost": 8.104,
                "dispossessed": 0.9225,
                "duels_lost": 4.2557,
                "aerial_won": 0.8,
                "aerial_lost": 0.8615,
                "interceptions": 0.2183,
                "tackles_won": 0.6008,
                "tackles": 0.9626,
                "clearances": 0.1932,
                "total_contest": 1.2418,
                "won_contest": 0.7984,
                "challenges_lost": 1.293,
                "fouls": 0.7491,
                "fouls_drawn": 1.7326,
                "blocks": 0.1932,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 10.6392,
                "total_progression": 38.6875,
                "progressive_carries": 1.8072,
                "shots_off_target": 0.6928,
                "duel_xg_multiplier": 0.7901,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 0.8,
                "crosses_attempted": 2.0,
                "duel_win_rate": 0.317,
                "pressing_faced": "LOW",
                "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Omar El Hilali",
                "opponent_faced": "Omar El Hilali",
                "antagonist_source": "attacking_duel, midfield_pairing"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Omar El Hilali",
                  "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                  "duel_win_rate": 0.317,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v1",
                  "xg_multiplier": 0.7901,
                  "skill_edge": -0.0988,
                  "height_edge": -0.044,
                  "attacker_skill": 0.4374,
                  "defender_skill": 0.6569,
                  "attacker_role": "LM",
                  "attacker_mv_price_index": 0.9,
                  "defender_adjusted_parts": [
                    {
                      "player": "Omar El Hilali",
                      "market_value": 15900000,
                      "role": "RB",
                      "price_index": 0.7,
                      "adjusted_quality": 0.6569
                    }
                  ],
                  "xg_override": 0.0776
                }
              },
              "changes": [
                {
                  "stat": "aerialWon",
                  "before": 0.0,
                  "after": 0.8
                },
                {
                  "stat": "totalShots",
                  "before": 1.2842,
                  "after": 1.0146
                },
                {
                  "stat": "shotOffTarget",
                  "before": 0.8769,
                  "after": 0.6928
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.4073,
                  "after": 0.3218
                },
                {
                  "stat": "expectedGoals",
                  "before": 0.0982,
                  "after": 0.0776
                },
                {
                  "stat": "goals",
                  "before": 0.0658,
                  "after": 0.052
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "key_pass": 1.0635,
                "expected_assists": 0.0941,
                "assist_rate": 0.1402,
                "assists": 0,
                "expected_goals": 0.0748,
                "goal_rate": 0.052,
                "goals": 0,
                "shots_on_target": 0.3218,
                "total_shots": 1.0146,
                "rating": 6.7456,
                "minutes": 71.32,
                "total_pass": 15.3225,
                "accurate_pass": 12.4988,
                "duels_won": 3.4462,
                "total_long_balls": 0.8793,
                "accurate_long_balls": 0.1396,
                "total_own_half_passes": 3.5185,
                "accurate_own_half_passes": 2.68,
                "total_opp_half_passes": 11.804,
                "accurate_opp_half_passes": 9.8188,
                "crosses_total": 1.3089,
                "crosses_accurate": 0.4315,
                "touches": 26.3896,
                "possession_lost": 8.104,
                "dispossessed": 0.9225,
                "duels_lost": 4.2557,
                "aerial_won": 0.8,
                "aerial_lost": 0.8615,
                "interceptions": 0.2183,
                "tackles_won": 0.6008,
                "tackles": 0.9626,
                "clearances": 0.1932,
                "total_contest": 1.2418,
                "won_contest": 0.7984,
                "challenges_lost": 1.293,
                "fouls": 0.7491,
                "fouls_drawn": 1.7326,
                "blocks": 0.1932,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 10.6392,
                "total_progression": 38.6875,
                "progressive_carries": 1.8072,
                "shots_off_target": 0.6928,
                "duel_xg_multiplier": 0.7901,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 0.8,
                "crosses_attempted": 2.0,
                "duel_win_rate": 0.317,
                "pressing_faced": "LOW",
                "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Omar El Hilali",
                "opponent_faced": "Omar El Hilali",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 1.25
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 12 by projected rating, fifa_overall 71.0; not used by the projection)",
              "stats": {
                "key_pass": 1.0635,
                "expected_assists": 0.0941,
                "assist_rate": 0.1402,
                "assists": 0,
                "expected_goals": 0.0748,
                "goal_rate": 0.052,
                "goals": 0,
                "shots_on_target": 0.3218,
                "total_shots": 1.0146,
                "rating": 6.7456,
                "minutes": 71.32,
                "total_pass": 15.3225,
                "accurate_pass": 12.4988,
                "duels_won": 3.4462,
                "total_long_balls": 0.8793,
                "accurate_long_balls": 0.1396,
                "total_own_half_passes": 3.5185,
                "accurate_own_half_passes": 2.68,
                "total_opp_half_passes": 11.804,
                "accurate_opp_half_passes": 9.8188,
                "crosses_total": 1.3089,
                "crosses_accurate": 0.4315,
                "touches": 26.3896,
                "possession_lost": 8.104,
                "dispossessed": 0.9225,
                "duels_lost": 4.2557,
                "aerial_won": 0.8,
                "aerial_lost": 0.8615,
                "interceptions": 0.2183,
                "tackles_won": 0.6008,
                "tackles": 0.9626,
                "clearances": 0.1932,
                "total_contest": 1.2418,
                "won_contest": 0.7984,
                "challenges_lost": 1.293,
                "fouls": 0.7491,
                "fouls_drawn": 1.7326,
                "blocks": 0.1932,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 10.6392,
                "total_progression": 38.6875,
                "progressive_carries": 1.8072,
                "shots_off_target": 0.6928,
                "duel_xg_multiplier": 0.7901,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 0.8,
                "crosses_attempted": 2.0,
                "duel_win_rate": 0.317,
                "pressing_faced": "LOW",
                "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Omar El Hilali",
                "opponent_faced": "Omar El Hilali",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 1.25,
                "fifa_overall": 71.0
              },
              "params": {
                "match_squad_rank": 12,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 4788,
                "fifa_rank": 5029.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 71.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "key_pass": 1.0635,
                "expected_assists": 0.0941,
                "assist_rate": 0.1402,
                "assists": 0,
                "expected_goals": 0.0748,
                "goal_rate": 0.052,
                "goals": 0,
                "shots_on_target": 0.3218,
                "total_shots": 1.0146,
                "rating": 6.7456,
                "minutes": 71.32,
                "total_pass": 15.3225,
                "accurate_pass": 12.4988,
                "duels_won": 3.4462,
                "total_long_balls": 0.8793,
                "accurate_long_balls": 0.1396,
                "total_own_half_passes": 3.5185,
                "accurate_own_half_passes": 2.68,
                "total_opp_half_passes": 11.804,
                "accurate_opp_half_passes": 9.8188,
                "crosses_total": 1.3089,
                "crosses_accurate": 0.4315,
                "touches": 26.3896,
                "possession_lost": 8.104,
                "dispossessed": 0.9225,
                "duels_lost": 4.2557,
                "aerial_won": 0.8,
                "aerial_lost": 0.8615,
                "interceptions": 0.2183,
                "tackles_won": 0.6008,
                "tackles": 0.9626,
                "clearances": 0.1932,
                "total_contest": 1.2418,
                "won_contest": 0.7984,
                "challenges_lost": 1.293,
                "fouls": 0.7491,
                "fouls_drawn": 1.7326,
                "blocks": 0.1932,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 10.6392,
                "total_progression": 38.6875,
                "progressive_carries": 1.8072,
                "shots_off_target": 0.6928,
                "duel_xg_multiplier": 0.7901,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 0.8,
                "crosses_attempted": 2.0,
                "duel_win_rate": 0.317,
                "pressing_faced": "LOW",
                "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Omar El Hilali",
                "opponent_faced": "Omar El Hilali",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0721,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 1.25,
                "fifa_overall": 71.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0721,
                "scorer_weight": 0.0598,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0724,
                "finishing_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 4,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "key_pass": 1.0635,
                "expected_assists": 0.0941,
                "assist_rate": 0.1402,
                "assists": 0,
                "expected_goals": 0.0748,
                "goal_rate": 0.052,
                "goals": 0,
                "shots_on_target": 0.3218,
                "total_shots": 1.0146,
                "rating": 6.7456,
                "minutes": 71.32,
                "total_pass": 15.3225,
                "accurate_pass": 12.4988,
                "duels_won": 3.4462,
                "total_long_balls": 0.8793,
                "accurate_long_balls": 0.1396,
                "total_own_half_passes": 3.5185,
                "accurate_own_half_passes": 2.68,
                "total_opp_half_passes": 11.804,
                "accurate_opp_half_passes": 9.8188,
                "crosses_total": 1.3089,
                "crosses_accurate": 0.4315,
                "touches": 26.3896,
                "possession_lost": 8.104,
                "dispossessed": 0.9225,
                "duels_lost": 4.2557,
                "aerial_won": 0.8,
                "aerial_lost": 0.8615,
                "interceptions": 0.2183,
                "tackles_won": 0.6008,
                "tackles": 0.9626,
                "clearances": 0.1932,
                "total_contest": 1.2418,
                "won_contest": 0.7984,
                "challenges_lost": 1.293,
                "fouls": 0.7491,
                "fouls_drawn": 1.7326,
                "blocks": 0.1932,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 10.6392,
                "total_progression": 38.6875,
                "progressive_carries": 1.8072,
                "shots_off_target": 0.6928,
                "duel_xg_multiplier": 0.7901,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 0.8,
                "crosses_attempted": 2.0,
                "duel_win_rate": 0.317,
                "pressing_faced": "LOW",
                "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Omar El Hilali",
                "opponent_faced": "Omar El Hilali",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0721,
                "projected_assists": 0,
                "assist_probability": 0.0898,
                "finishing_factor": 0.8,
                "creation_factor": 1.25,
                "fifa_overall": 71.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0898,
                "provider_weight": 0.1176,
                "squad_weight_total": 0.5871,
                "weight_share": 0.2004,
                "creation_factor": 1.25,
                "appearance_weight": 1.0,
                "weight_rank": 2,
                "eligible_players": 13
              }
            }
          ]
        },
        "Pablo Martínez": {
          "player_id": 927066,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 18,
          "height": 182,
          "market_value": 3100000,
          "stats": {
            "key_pass": 2,
            "expected_assists": 0.1309,
            "assist_rate": 0.1526,
            "assists": 0,
            "expected_goals": 0.044,
            "goal_rate": 0.0429,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "rating": 6.876,
            "minutes": 81,
            "total_pass": 33,
            "accurate_pass": 28,
            "duels_won": 2,
            "total_long_balls": 3,
            "accurate_long_balls": 2,
            "total_own_half_passes": 15,
            "accurate_own_half_passes": 14,
            "total_opp_half_passes": 18,
            "accurate_opp_half_passes": 14,
            "crosses_total": 5,
            "crosses_accurate": 2,
            "touches": 47,
            "possession_lost": 9.9365,
            "dispossessed": 0.3819,
            "duels_lost": 3,
            "aerial_won": 1,
            "aerial_lost": 0,
            "interceptions": 1,
            "tackles_won": 0,
            "tackles": 1,
            "clearances": 1,
            "total_contest": 1,
            "won_contest": 0,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0194,
            "ball_carries": 12,
            "total_progression": 33,
            "progressive_carries": 1,
            "shots_off_target": 1,
            "duel_xg_multiplier": 0.9591,
            "dribbles_attempted": 3,
            "dribbles_successful": 1.1,
            "crosses_attempted": 2.0,
            "duel_win_rate": 0.432,
            "pressing_faced": "LOW",
            "matchup_zone": "Right Mid vs Left Back — Wide Channel",
            "numerical_situation": "1v1",
            "opponent_defenders": "Clemens Riedel",
            "opponent_faced": "Clemens Riedel",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.043,
            "projected_assists": 0,
            "assist_probability": 0.1227,
            "finishing_factor": 0.9707,
            "creation_factor": 1.0904,
            "fifa_overall": 82.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 23,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0432,
                "total_shots": 0,
                "total_pass": 14,
                "accurate_pass": 14,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0588,
                "expected_assists": 0.0037,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 23,
                "accurate_pass": 18,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 2,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.0317,
                "expected_assists": 0.3682,
                "total_shots": 2,
                "shots_on_target": 1,
                "total_pass": 49,
                "accurate_pass": 44,
                "key_pass": 5,
                "tackles": 1,
                "interceptions": 3,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 59,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0142,
                "expected_assists": 0.039,
                "total_shots": 1,
                "total_pass": 40,
                "accurate_pass": 35,
                "key_pass": 2,
                "interceptions": 1,
                "clearances": 2,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 45,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0153,
                "total_shots": 0,
                "total_pass": 32,
                "accurate_pass": 29,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083710,
              "match_date": "2026-05-23",
              "home_team": "Real Betis",
              "away_team": "Levante UD",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Levante UD",
              "opponent": "Real Betis",
              "stats": {
                "minutes": 86,
                "rating": 7.3,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_assists": 0.6553,
                "total_shots": 0,
                "total_pass": 38,
                "accurate_pass": 34,
                "key_pass": 5,
                "interceptions": 1,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083676,
              "match_date": "2026-05-17",
              "home_team": "Levante UD",
              "away_team": "Mallorca",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Levante UD",
              "opponent": "Mallorca",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.2582,
                "total_shots": 0,
                "total_pass": 13,
                "accurate_pass": 8,
                "key_pass": 2,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083613,
              "match_date": "2026-05-12",
              "home_team": "Celta Vigo",
              "away_team": "Levante UD",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Levante UD",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 62,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0921,
                "total_shots": 0,
                "total_pass": 47,
                "accurate_pass": 43,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083568,
              "match_date": "2026-05-08",
              "home_team": "Levante UD",
              "away_team": "Osasuna",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Levante UD",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 76,
                "rating": 7.8,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.0286,
                "expected_assists": 0.7169,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 47,
                "accurate_pass": 43,
                "key_pass": 4,
                "interceptions": 1,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083512,
              "match_date": "2026-05-02",
              "home_team": "Villarreal",
              "away_team": "Levante UD",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Levante UD",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 77,
                "rating": 7.1,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.131,
                "expected_assists": 0.3227,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 32,
                "accurate_pass": 26,
                "key_pass": 3,
                "clearances": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 1083,
            "combined_rank_score": 444.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 490.0,
            "sofascore_rating": 6.8667,
            "sofascore_appearances": 27.0,
            "fifa_rank": 399.0,
            "fifa_overall": 82.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 5,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.876,
            "source_file": "data/player_rankings.csv",
            "player_name": "Pablo Martínez",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Davinson Sánchez",
                  "ranking": 1078
                },
                {
                  "player_name": "Robert Sánchez",
                  "ranking": 1079
                },
                {
                  "player_name": "Romelu Lukaku",
                  "ranking": 1080
                },
                {
                  "player_name": "Rafael Delgado",
                  "ranking": 1081
                },
                {
                  "player_name": "Kim Han-Seo",
                  "ranking": 1082
                }
              ],
              "lower": [
                {
                  "player_name": "Ethan Espinoza",
                  "ranking": 1084
                },
                {
                  "player_name": "Ji-Min Rim",
                  "ranking": 1085
                },
                {
                  "player_name": "Rafael Bandeira",
                  "ranking": 1086
                },
                {
                  "player_name": "Guk-yeong Han",
                  "ranking": 1087
                },
                {
                  "player_name": "Ramiro Vaca",
                  "ranking": 1088
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.755,
          "history_matches": 32,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 32,
            "data_confidence": 0.755,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9973,
            "fbref_prior_metrics": {
              "squad": "Málaga",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 1.0,
              "starts": 0.0,
              "minutes": 45.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 0.0,
              "prior_reliability": 0.0333
            },
            "rationale": "XGBoost regressor (M_service) evaluated 32 historical appearances across 8 target models; FBref 2026-2027 prior blended (La Liga, Málaga, rel: 0.03, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 1.607,
                "expected_assists": 0.1361,
                "assists": 0.1534,
                "assist_rate": 0.1534,
                "expected_goals": 0.0478,
                "goals": 0.0449,
                "goal_rate": 0.0449,
                "shots_on_target": 0.2638,
                "total_shots": 0.879,
                "rating": 6.876,
                "minutes": 80.54,
                "total_pass": 33.4885,
                "accurate_pass": 28.1677,
                "duels_won": 1.6817,
                "total_long_balls": 3.2726,
                "accurate_long_balls": 1.7901,
                "total_own_half_passes": 15.4908,
                "accurate_own_half_passes": 14.0683,
                "total_opp_half_passes": 17.9977,
                "accurate_opp_half_passes": 14.0994,
                "crosses_total": 4.943,
                "crosses_accurate": 2.1283,
                "touches": 47.2424,
                "possession_lost": 9.9634,
                "dispossessed": 0.3829,
                "duels_lost": 2.766,
                "aerial_won": 0.482,
                "aerial_lost": 0.1888,
                "interceptions": 0.9413,
                "tackles_won": 0.3446,
                "tackles": 0.5554,
                "clearances": 1.1585,
                "total_contest": 0.7512,
                "won_contest": 0.2717,
                "challenges_lost": 0.6678,
                "fouls": 1.0726,
                "fouls_drawn": 0.4081,
                "blocks": 0.4081,
                "big_chances_created": 0.3382,
                "big_chances_missed": 0.0,
                "xgot": 0.0211,
                "ball_carries": 11.8682,
                "total_progression": 32.8383,
                "progressive_carries": 0.5872,
                "shots_off_target": 0.6152
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 23.0,
                    "is_starting": false,
                    "weight": 0.1508,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1282,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.109,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 59.0,
                    "is_starting": true,
                    "weight": 0.0926,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.0787,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-05-23",
                    "opponent": "Real Betis",
                    "minutes": 86.0,
                    "is_starting": true,
                    "weight": 0.0669,
                    "rating": 7.3
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Mallorca",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0569,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-05-12",
                    "opponent": "Celta Vigo",
                    "minutes": 62.0,
                    "is_starting": true,
                    "weight": 0.0484,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-05-08",
                    "opponent": "Osasuna",
                    "minutes": 76.0,
                    "is_starting": true,
                    "weight": 0.0411,
                    "rating": 7.8
                  },
                  {
                    "match_date": "2026-05-02",
                    "opponent": "Villarreal",
                    "minutes": 77.0,
                    "is_starting": true,
                    "weight": 0.0349,
                    "rating": 7.1
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 1.0,
                  "totalShots": 0.7079,
                  "creative_index": 0.8323,
                  "expectedGoals": 0.0283,
                  "expectedAssists": 0.1772,
                  "onTargetScoringAttempt": 0.1268
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 1.6069531440734863,
                    "model_output": 1.607,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "creative_index",
                          "contribution": 0.1745
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1482
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.1167
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0995
                        },
                        {
                          "name": "keyPass",
                          "contribution": 0.0656
                        }
                      ],
                      "others": 0.1163,
                      "total": 1.607,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "creative_index",
                          "margin": 0.179779
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.130747
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.09217
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.07239
                        },
                        {
                          "name": "keyPass",
                          "margin": 0.045035
                        }
                      ],
                      "others_margin": 0.075036
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.13613183796405792,
                    "model_output": 0.1361,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "expectedAssists",
                          "contribution": 0.015
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0141
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0142
                        },
                        {
                          "name": "keyPass",
                          "contribution": 0.0062
                        },
                        {
                          "name": "creative_index",
                          "contribution": 0.0063
                        }
                      ],
                      "others": -0.0055,
                      "total": 0.1361,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "expectedAssists",
                          "margin": 0.161467
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.130969
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.116171
                        },
                        {
                          "name": "keyPass",
                          "margin": 0.046597
                        },
                        {
                          "name": "creative_index",
                          "margin": 0.045187
                        }
                      ],
                      "others_margin": -0.038475
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.15338535606861115,
                    "model_output": 0.1534,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "keyPass",
                          "contribution": 0.0136
                        },
                        {
                          "name": "creative_index",
                          "contribution": 0.0155
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0153
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0097
                        },
                        {
                          "name": "ballRecovery_p90",
                          "contribution": 0.0076
                        }
                      ],
                      "others": 0.0259,
                      "total": 0.1534,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "keyPass",
                          "margin": 0.147872
                        },
                        {
                          "name": "creative_index",
                          "margin": 0.14591
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.125862
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.07798
                        },
                        {
                          "name": "ballRecovery_p90",
                          "margin": 0.061263
                        }
                      ],
                      "others_margin": 0.184678
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.047814685851335526,
                    "model_output": 0.0478,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0304
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0102
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0062
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0042
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.003
                        }
                      ],
                      "others": -0.013,
                      "total": 0.0478,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "expectedGoals",
                          "margin": -0.388748
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.147752
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.087918
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.06334
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.047889
                        }
                      ],
                      "others_margin": -0.240362
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.044949185103178024,
                    "model_output": 0.0449,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0154
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0103
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0086
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0055
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0053
                        }
                      ],
                      "others": -0.0186,
                      "total": 0.0449,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "expectedGoals",
                          "margin": -0.171518
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.13439
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.127975
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.082905
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.079807
                        }
                      ],
                      "others_margin": -0.345025
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.2638009488582611,
                    "model_output": 0.2638,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0437
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0407
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0221
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0158
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.0107
                        }
                      ],
                      "others": -0.0146,
                      "total": 0.2638,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.126447
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.117329
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.069889
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.053102
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.037844
                        }
                      ],
                      "others_margin": -0.053803
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.878952145576477,
                    "model_output": 0.879,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1472
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0673
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0562
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0535
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0341
                        }
                      ],
                      "others": -0.0476,
                      "total": 0.879,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.147166
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.067263
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.056207
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.05352
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.03413
                        }
                      ],
                      "others_margin": -0.047558
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.876037120819092,
                    "model_output": 6.876,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0345
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0174
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0081
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "contribution": -0.008
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0073
                        }
                      ],
                      "others": 0.0172,
                      "total": 6.876,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.034487
                        },
                        {
                          "name": "rating",
                          "margin": -0.017417
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.008066
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "margin": -0.007971
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.007261
                        }
                      ],
                      "others_margin": 0.017261
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 32,
                  "role_matches": 24,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9973, quality 0.439)",
              "stats": {
                "key_pass": 1.6026,
                "expected_assists": 0.1358,
                "assists": 0.153,
                "assist_rate": 0.153,
                "expected_goals": 0.0477,
                "goals": 0.0448,
                "goal_rate": 0.0448,
                "shots_on_target": 0.2631,
                "total_shots": 0.8766,
                "rating": 6.876,
                "minutes": 80.54,
                "total_pass": 33.3981,
                "accurate_pass": 28.0916,
                "duels_won": 1.6772,
                "total_long_balls": 3.2638,
                "accurate_long_balls": 1.7853,
                "total_own_half_passes": 15.449,
                "accurate_own_half_passes": 14.0303,
                "total_opp_half_passes": 17.9491,
                "accurate_opp_half_passes": 14.0613,
                "crosses_total": 4.9297,
                "crosses_accurate": 2.1226,
                "touches": 47.1148,
                "possession_lost": 9.9365,
                "dispossessed": 0.3819,
                "duels_lost": 2.7585,
                "aerial_won": 0.4807,
                "aerial_lost": 0.1883,
                "interceptions": 0.9388,
                "tackles_won": 0.3437,
                "tackles": 0.5539,
                "clearances": 1.1554,
                "total_contest": 0.7492,
                "won_contest": 0.271,
                "challenges_lost": 0.666,
                "fouls": 1.0697,
                "fouls_drawn": 0.407,
                "blocks": 0.407,
                "big_chances_created": 0.3373,
                "big_chances_missed": 0.0,
                "xgot": 0.021,
                "ball_carries": 11.8362,
                "total_progression": 32.7496,
                "progressive_carries": 0.5856,
                "shots_off_target": 0.6135
              },
              "params": {
                "market_value_eur": 3100000,
                "quality_factor": 0.4387,
                "boost_factor": 0.9973,
                "reference_quality": 0.505,
                "history_matches": 32,
                "history_shrink": 0.1351,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0029)",
              "stats": {
                "key_pass": 1.6026,
                "expected_assists": 0.1358,
                "assists": 0.1526,
                "assist_rate": 0.1526,
                "expected_goals": 0.0477,
                "goals": 0.0447,
                "goal_rate": 0.0447,
                "shots_on_target": 0.2623,
                "total_shots": 0.874,
                "rating": 6.876,
                "minutes": 80.54,
                "total_pass": 33.3981,
                "accurate_pass": 28.0916,
                "duels_won": 1.6772,
                "total_long_balls": 3.2638,
                "accurate_long_balls": 1.7853,
                "total_own_half_passes": 15.449,
                "accurate_own_half_passes": 14.0303,
                "total_opp_half_passes": 17.9491,
                "accurate_opp_half_passes": 14.0613,
                "crosses_total": 4.9362,
                "crosses_accurate": 2.1226,
                "touches": 47.1148,
                "possession_lost": 9.9365,
                "dispossessed": 0.3819,
                "duels_lost": 2.7585,
                "aerial_won": 0.4807,
                "aerial_lost": 0.1883,
                "interceptions": 0.9361,
                "tackles_won": 0.3427,
                "tackles": 0.5539,
                "clearances": 1.1554,
                "total_contest": 0.7492,
                "won_contest": 0.271,
                "challenges_lost": 0.666,
                "fouls": 1.0666,
                "fouls_drawn": 0.4058,
                "blocks": 0.407,
                "big_chances_created": 0.3373,
                "big_chances_missed": 0.0,
                "xgot": 0.021,
                "ball_carries": 11.8362,
                "total_progression": 32.7496,
                "progressive_carries": 0.5856,
                "shots_off_target": 0.6135
              },
              "params": {
                "blend_weight": 0.0029,
                "history_matches": 32,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.8949,
                "prior_reliability": 0.0333,
                "competition": "La Liga",
                "squad": "Málaga"
              },
              "changes": [
                {
                  "stat": "totalCross",
                  "before": 4.9297,
                  "after": 4.9362
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 1.6026,
                "expected_assists": 0.1358,
                "assists": 0.1526,
                "assist_rate": 0.1526,
                "expected_goals": 0.0477,
                "goals": 0.0447,
                "goal_rate": 0.0447,
                "shots_on_target": 0.2623,
                "total_shots": 0.8758,
                "rating": 6.876,
                "minutes": 80.54,
                "total_pass": 33.3981,
                "accurate_pass": 28.0916,
                "duels_won": 1.6772,
                "total_long_balls": 3.2638,
                "accurate_long_balls": 1.7853,
                "total_own_half_passes": 15.449,
                "accurate_own_half_passes": 14.0303,
                "total_opp_half_passes": 17.9491,
                "accurate_opp_half_passes": 14.0613,
                "crosses_total": 4.9362,
                "crosses_accurate": 2.1226,
                "touches": 47.1148,
                "possession_lost": 9.9365,
                "dispossessed": 0.3819,
                "duels_lost": 2.7585,
                "aerial_won": 0.4807,
                "aerial_lost": 0.1883,
                "interceptions": 0.9361,
                "tackles_won": 0.3427,
                "tackles": 0.5539,
                "clearances": 1.1554,
                "total_contest": 0.7492,
                "won_contest": 0.271,
                "challenges_lost": 0.666,
                "fouls": 1.0666,
                "fouls_drawn": 0.4058,
                "blocks": 0.407,
                "big_chances_created": 0.3373,
                "big_chances_missed": 0.0,
                "xgot": 0.021,
                "ball_carries": 11.8362,
                "total_progression": 32.7496,
                "progressive_carries": 0.5856,
                "shots_off_target": 0.6135
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "key_pass": 1.6026,
                "expected_assists": 0.1358,
                "assists": 0.1526,
                "assist_rate": 0.1526,
                "expected_goals": 0.0457,
                "goals": 0.0429,
                "goal_rate": 0.0429,
                "shots_on_target": 0.2516,
                "total_shots": 0.84,
                "rating": 6.876,
                "minutes": 80.54,
                "total_pass": 33.3981,
                "accurate_pass": 28.0916,
                "duels_won": 1.6772,
                "total_long_balls": 3.2638,
                "accurate_long_balls": 1.7853,
                "total_own_half_passes": 15.449,
                "accurate_own_half_passes": 14.0303,
                "total_opp_half_passes": 17.9491,
                "accurate_opp_half_passes": 14.0613,
                "crosses_total": 4.9362,
                "crosses_accurate": 2.1226,
                "touches": 47.1148,
                "possession_lost": 9.9365,
                "dispossessed": 0.3819,
                "duels_lost": 2.7585,
                "aerial_won": 1.1,
                "aerial_lost": 0.1883,
                "interceptions": 0.9361,
                "tackles_won": 0.3427,
                "tackles": 0.5539,
                "clearances": 1.1554,
                "total_contest": 0.7492,
                "won_contest": 0.271,
                "challenges_lost": 0.666,
                "fouls": 1.0666,
                "fouls_drawn": 0.4058,
                "blocks": 0.407,
                "big_chances_created": 0.3373,
                "big_chances_missed": 0.0,
                "xgot": 0.0201,
                "ball_carries": 11.8362,
                "total_progression": 32.7496,
                "progressive_carries": 0.5856,
                "shots_off_target": 0.5884,
                "duel_xg_multiplier": 0.9591,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 1.1,
                "crosses_attempted": 2.0,
                "duel_win_rate": 0.432,
                "pressing_faced": "LOW",
                "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Clemens Riedel",
                "opponent_faced": "Clemens Riedel",
                "antagonist_source": "attacking_duel, midfield_pairing"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Clemens Riedel",
                  "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                  "duel_win_rate": 0.432,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v1",
                  "xg_multiplier": 0.9591,
                  "skill_edge": -0.0118,
                  "height_edge": -0.016,
                  "attacker_skill": 0.4429,
                  "defender_skill": 0.4692,
                  "attacker_role": "RM",
                  "attacker_mv_price_index": 0.9,
                  "defender_adjusted_parts": [
                    {
                      "player": "Clemens Riedel",
                      "market_value": 3900000,
                      "role": "LB",
                      "price_index": 0.7,
                      "adjusted_quality": 0.4692
                    }
                  ],
                  "xg_override": 0.0457
                }
              },
              "changes": [
                {
                  "stat": "aerialWon",
                  "before": 0.4807,
                  "after": 1.1
                },
                {
                  "stat": "totalShots",
                  "before": 0.8758,
                  "after": 0.84
                },
                {
                  "stat": "shotOffTarget",
                  "before": 0.6135,
                  "after": 0.5884
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.2623,
                  "after": 0.2516
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "key_pass": 1.6026,
                "expected_assists": 0.1309,
                "assist_rate": 0.1526,
                "assists": 0,
                "expected_goals": 0.044,
                "goal_rate": 0.0429,
                "goals": 0,
                "shots_on_target": 0.2516,
                "total_shots": 0.84,
                "rating": 6.876,
                "minutes": 80.54,
                "total_pass": 33.3981,
                "accurate_pass": 28.0916,
                "duels_won": 1.6772,
                "total_long_balls": 3.2638,
                "accurate_long_balls": 1.7853,
                "total_own_half_passes": 15.449,
                "accurate_own_half_passes": 14.0303,
                "total_opp_half_passes": 17.9491,
                "accurate_opp_half_passes": 14.0613,
                "crosses_total": 4.9362,
                "crosses_accurate": 2.1226,
                "touches": 47.1148,
                "possession_lost": 9.9365,
                "dispossessed": 0.3819,
                "duels_lost": 2.7585,
                "aerial_won": 1.1,
                "aerial_lost": 0.1883,
                "interceptions": 0.9361,
                "tackles_won": 0.3427,
                "tackles": 0.5539,
                "clearances": 1.1554,
                "total_contest": 0.7492,
                "won_contest": 0.271,
                "challenges_lost": 0.666,
                "fouls": 1.0666,
                "fouls_drawn": 0.4058,
                "blocks": 0.407,
                "big_chances_created": 0.3373,
                "big_chances_missed": 0.0,
                "xgot": 0.0194,
                "ball_carries": 11.8362,
                "total_progression": 32.7496,
                "progressive_carries": 0.5856,
                "shots_off_target": 0.5884,
                "duel_xg_multiplier": 0.9591,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 1.1,
                "crosses_attempted": 2.0,
                "duel_win_rate": 0.432,
                "pressing_faced": "LOW",
                "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Clemens Riedel",
                "opponent_faced": "Clemens Riedel",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9707,
                "creation_factor": 1.0904
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 5 by projected rating, fifa_overall 82.0; not used by the projection)",
              "stats": {
                "key_pass": 1.6026,
                "expected_assists": 0.1309,
                "assist_rate": 0.1526,
                "assists": 0,
                "expected_goals": 0.044,
                "goal_rate": 0.0429,
                "goals": 0,
                "shots_on_target": 0.2516,
                "total_shots": 0.84,
                "rating": 6.876,
                "minutes": 80.54,
                "total_pass": 33.3981,
                "accurate_pass": 28.0916,
                "duels_won": 1.6772,
                "total_long_balls": 3.2638,
                "accurate_long_balls": 1.7853,
                "total_own_half_passes": 15.449,
                "accurate_own_half_passes": 14.0303,
                "total_opp_half_passes": 17.9491,
                "accurate_opp_half_passes": 14.0613,
                "crosses_total": 4.9362,
                "crosses_accurate": 2.1226,
                "touches": 47.1148,
                "possession_lost": 9.9365,
                "dispossessed": 0.3819,
                "duels_lost": 2.7585,
                "aerial_won": 1.1,
                "aerial_lost": 0.1883,
                "interceptions": 0.9361,
                "tackles_won": 0.3427,
                "tackles": 0.5539,
                "clearances": 1.1554,
                "total_contest": 0.7492,
                "won_contest": 0.271,
                "challenges_lost": 0.666,
                "fouls": 1.0666,
                "fouls_drawn": 0.4058,
                "blocks": 0.407,
                "big_chances_created": 0.3373,
                "big_chances_missed": 0.0,
                "xgot": 0.0194,
                "ball_carries": 11.8362,
                "total_progression": 32.7496,
                "progressive_carries": 0.5856,
                "shots_off_target": 0.5884,
                "duel_xg_multiplier": 0.9591,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 1.1,
                "crosses_attempted": 2.0,
                "duel_win_rate": 0.432,
                "pressing_faced": "LOW",
                "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Clemens Riedel",
                "opponent_faced": "Clemens Riedel",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9707,
                "creation_factor": 1.0904,
                "fifa_overall": 82.0
              },
              "params": {
                "match_squad_rank": 5,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 1083,
                "fifa_rank": 399.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 82.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "key_pass": 1.6026,
                "expected_assists": 0.1309,
                "assist_rate": 0.1526,
                "assists": 0,
                "expected_goals": 0.044,
                "goal_rate": 0.0429,
                "goals": 0,
                "shots_on_target": 0.2516,
                "total_shots": 0.84,
                "rating": 6.876,
                "minutes": 80.54,
                "total_pass": 33.3981,
                "accurate_pass": 28.0916,
                "duels_won": 1.6772,
                "total_long_balls": 3.2638,
                "accurate_long_balls": 1.7853,
                "total_own_half_passes": 15.449,
                "accurate_own_half_passes": 14.0303,
                "total_opp_half_passes": 17.9491,
                "accurate_opp_half_passes": 14.0613,
                "crosses_total": 4.9362,
                "crosses_accurate": 2.1226,
                "touches": 47.1148,
                "possession_lost": 9.9365,
                "dispossessed": 0.3819,
                "duels_lost": 2.7585,
                "aerial_won": 1.1,
                "aerial_lost": 0.1883,
                "interceptions": 0.9361,
                "tackles_won": 0.3427,
                "tackles": 0.5539,
                "clearances": 1.1554,
                "total_contest": 0.7492,
                "won_contest": 0.271,
                "challenges_lost": 0.666,
                "fouls": 1.0666,
                "fouls_drawn": 0.4058,
                "blocks": 0.407,
                "big_chances_created": 0.3373,
                "big_chances_missed": 0.0,
                "xgot": 0.0194,
                "ball_carries": 11.8362,
                "total_progression": 32.7496,
                "progressive_carries": 0.5856,
                "shots_off_target": 0.5884,
                "duel_xg_multiplier": 0.9591,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 1.1,
                "crosses_attempted": 2.0,
                "duel_win_rate": 0.432,
                "pressing_faced": "LOW",
                "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Clemens Riedel",
                "opponent_faced": "Clemens Riedel",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.043,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9707,
                "creation_factor": 1.0904,
                "fifa_overall": 82.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.043,
                "scorer_weight": 0.0427,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0517,
                "finishing_factor": 0.9707,
                "appearance_weight": 1.0,
                "weight_rank": 6,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "key_pass": 1.6026,
                "expected_assists": 0.1309,
                "assist_rate": 0.1526,
                "assists": 0,
                "expected_goals": 0.044,
                "goal_rate": 0.0429,
                "goals": 0,
                "shots_on_target": 0.2516,
                "total_shots": 0.84,
                "rating": 6.876,
                "minutes": 80.54,
                "total_pass": 33.3981,
                "accurate_pass": 28.0916,
                "duels_won": 1.6772,
                "total_long_balls": 3.2638,
                "accurate_long_balls": 1.7853,
                "total_own_half_passes": 15.449,
                "accurate_own_half_passes": 14.0303,
                "total_opp_half_passes": 17.9491,
                "accurate_opp_half_passes": 14.0613,
                "crosses_total": 4.9362,
                "crosses_accurate": 2.1226,
                "touches": 47.1148,
                "possession_lost": 9.9365,
                "dispossessed": 0.3819,
                "duels_lost": 2.7585,
                "aerial_won": 1.1,
                "aerial_lost": 0.1883,
                "interceptions": 0.9361,
                "tackles_won": 0.3427,
                "tackles": 0.5539,
                "clearances": 1.1554,
                "total_contest": 0.7492,
                "won_contest": 0.271,
                "challenges_lost": 0.666,
                "fouls": 1.0666,
                "fouls_drawn": 0.4058,
                "blocks": 0.407,
                "big_chances_created": 0.3373,
                "big_chances_missed": 0.0,
                "xgot": 0.0194,
                "ball_carries": 11.8362,
                "total_progression": 32.7496,
                "progressive_carries": 0.5856,
                "shots_off_target": 0.5884,
                "duel_xg_multiplier": 0.9591,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 1.1,
                "crosses_attempted": 2.0,
                "duel_win_rate": 0.432,
                "pressing_faced": "LOW",
                "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Clemens Riedel",
                "opponent_faced": "Clemens Riedel",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.043,
                "projected_assists": 0,
                "assist_probability": 0.1227,
                "finishing_factor": 0.9707,
                "creation_factor": 1.0904,
                "fifa_overall": 82.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.1227,
                "provider_weight": 0.1427,
                "squad_weight_total": 0.5871,
                "weight_share": 0.2431,
                "creation_factor": 1.0904,
                "appearance_weight": 1.0,
                "weight_rank": 1,
                "eligible_players": 13
              }
            }
          ]
        },
        "Carlos Dotor": {
          "player_id": 997221,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 8,
          "height": 180,
          "market_value": 1200000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0646,
            "assist_rate": 0.0668,
            "assists": 0,
            "expected_goals": 0.0638,
            "goal_rate": 0.0705,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "rating": 6.9124,
            "minutes": 81,
            "total_pass": 41,
            "accurate_pass": 35,
            "duels_won": 4,
            "total_long_balls": 2,
            "accurate_long_balls": 1,
            "total_own_half_passes": 18,
            "accurate_own_half_passes": 16,
            "total_opp_half_passes": 23,
            "accurate_opp_half_passes": 19,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 51,
            "possession_lost": 8.9415,
            "dispossessed": 0.7218,
            "duels_lost": 4,
            "aerial_won": 1,
            "aerial_lost": 1,
            "interceptions": 1,
            "tackles_won": 1,
            "tackles": 2,
            "clearances": 1,
            "total_contest": 1,
            "won_contest": 1,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.2214,
            "ball_carries": 16,
            "total_progression": 33,
            "progressive_carries": 1,
            "shots_off_target": 1,
            "duel_xg_multiplier": 0.9236,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.7,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.398,
            "pressing_faced": "LOW",
            "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
            "numerical_situation": "1v1",
            "opponent_defenders": "Gabriel Moscardo",
            "opponent_faced": "Gabriel Moscardo",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.0618,
            "projected_assists": 0,
            "assist_probability": 0.0626,
            "finishing_factor": 1.037,
            "creation_factor": 0.9983,
            "fifa_overall": 85.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0371,
                "expected_assists": 0.0701,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 43,
                "accurate_pass": 35,
                "key_pass": 1,
                "tackles": 2,
                "interceptions": 1,
                "duels_won": 5,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 61,
                "rating": 7.3,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.2461,
                "expected_assists": 0.0024,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 31,
                "accurate_pass": 27,
                "interceptions": 1,
                "clearances": 2,
                "duels_won": 1,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 86,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0858,
                "expected_assists": 0.1533,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 41,
                "accurate_pass": 34,
                "key_pass": 2,
                "tackles": 3,
                "tackles_won": 2,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 6,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0289,
                "total_shots": 0,
                "total_pass": 62,
                "accurate_pass": 55,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 2,
                "duels_won": 2,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 73,
                "rating": 7.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0332,
                "expected_assists": 0.0438,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 46,
                "accurate_pass": 37,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 67,
                "rating": 7.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0133,
                "total_shots": 0,
                "total_pass": 27,
                "accurate_pass": 23,
                "tackles": 4,
                "tackles_won": 3,
                "interceptions": 1,
                "duels_won": 5,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 93,
            "combined_rank_score": 114.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 91.0,
            "sofascore_rating": 7.5,
            "sofascore_appearances": 1.0,
            "fifa_rank": 137.0,
            "fifa_overall": 85.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 2,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.9124,
            "source_file": "data/player_rankings.csv",
            "player_name": "Carlos Dotor",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Diogo Costa",
                  "ranking": 88
                },
                {
                  "player_name": "Vinícius Júnior",
                  "ranking": 89
                },
                {
                  "player_name": "Khozhiakbar Alizhonov",
                  "ranking": 90
                },
                {
                  "player_name": "Abduvokhid Nematov",
                  "ranking": 91
                },
                {
                  "player_name": "Ignacio Suárez",
                  "ranking": 92
                }
              ],
              "lower": [
                {
                  "player_name": "Cristhian Martínez",
                  "ranking": 94
                },
                {
                  "player_name": "Luka Stankovski",
                  "ranking": 95
                },
                {
                  "player_name": "Jordan Pickford",
                  "ranking": 96
                },
                {
                  "player_name": "Luke Brattan",
                  "ranking": 97
                },
                {
                  "player_name": "Moisés Caicedo",
                  "ranking": 98
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.65,
          "history_matches": 6,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 6,
            "data_confidence": 0.65,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9908,
            "fbref_prior_metrics": {
              "squad": "Málaga",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "minutes": 228.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 0.39,
              "shots_on_target_pct": 100.0,
              "prior_reliability": 0.1667
            },
            "rationale": "XGBoost regressor (M_service) evaluated 6 historical appearances across 8 target models; FBref 2026-2027 prior blended (La Liga, Málaga, rel: 0.17, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 0.8196,
                "expected_assists": 0.0676,
                "assists": 0.071,
                "assist_rate": 0.071,
                "expected_goals": 0.0724,
                "goals": 0.081,
                "goal_rate": 0.081,
                "shots_on_target": 0.2884,
                "total_shots": 0.9527,
                "rating": 6.9124,
                "minutes": 80.58,
                "total_pass": 41.6731,
                "accurate_pass": 35.1155,
                "duels_won": 3.5343,
                "total_long_balls": 1.5529,
                "accurate_long_balls": 0.921,
                "total_own_half_passes": 18.0282,
                "accurate_own_half_passes": 15.7045,
                "total_opp_half_passes": 23.6449,
                "accurate_opp_half_passes": 19.4111,
                "crosses_total": 0.1257,
                "crosses_accurate": 0.0,
                "touches": 51.5885,
                "possession_lost": 9.0245,
                "dispossessed": 0.7285,
                "duels_lost": 3.809,
                "aerial_won": 0.348,
                "aerial_lost": 0.6195,
                "interceptions": 0.6781,
                "tackles_won": 1.0901,
                "tackles": 1.8526,
                "clearances": 0.5834,
                "total_contest": 0.9951,
                "won_contest": 0.6474,
                "challenges_lost": 0.8343,
                "fouls": 1.2791,
                "fouls_drawn": 0.6864,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.251,
                "ball_carries": 16.1683,
                "total_progression": 33.4235,
                "progressive_carries": 1.0361,
                "shots_off_target": 0.6643
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.2408,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 61.0,
                    "is_starting": true,
                    "weight": 0.2047,
                    "rating": 7.3
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 86.0,
                    "is_starting": true,
                    "weight": 0.174,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1479,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 73.0,
                    "is_starting": true,
                    "weight": 0.1257,
                    "rating": 7.4
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.1069,
                    "rating": 7.5
                  }
                ],
                "feature_row": {
                  "history_matches": 6.0,
                  "is_starting_11": 1.0,
                  "totalShots": 0.7452,
                  "creative_index": 0.3781,
                  "expectedGoals": 0.0784,
                  "expectedAssists": 0.0553,
                  "onTargetScoringAttempt": 0.5712
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 0.8196437954902649,
                    "model_output": 0.8196,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1221
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.1064
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0436
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0292
                        },
                        {
                          "name": "wonTackle",
                          "contribution": -0.0258
                        }
                      ],
                      "others": 0.0163,
                      "total": 0.8196,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.129125
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.111538
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.049583
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.034657
                        },
                        {
                          "name": "wonTackle",
                          "margin": -0.031587
                        }
                      ],
                      "others_margin": 0.020169
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.06758979707956314,
                    "model_output": 0.0676,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "totalCross",
                          "contribution": -0.0175
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0097
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0041
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0027
                        },
                        {
                          "name": "goalAssist",
                          "contribution": -0.0026
                        }
                      ],
                      "others": -0.001,
                      "total": 0.0676,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "totalCross",
                          "margin": -0.228464
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.133347
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.053819
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.037776
                        },
                        {
                          "name": "goalAssist",
                          "margin": -0.036771
                        }
                      ],
                      "others_margin": -0.014767
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.07096882909536362,
                    "model_output": 0.071,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "totalCross",
                          "contribution": -0.0105
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.006
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0058
                        },
                        {
                          "name": "creative_index",
                          "contribution": 0.0048
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0039
                        }
                      ],
                      "others": -0.0044,
                      "total": 0.071,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "totalCross",
                          "margin": -0.131409
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.083389
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.080364
                        },
                        {
                          "name": "creative_index",
                          "margin": 0.061909
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.049796
                        }
                      ],
                      "others_margin": -0.060787
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.07235945761203766,
                    "model_output": 0.0724,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0133
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0128
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0103
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0065
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0064
                        }
                      ],
                      "others": -0.0121,
                      "total": 0.0724,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.131747
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.126024
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.114272
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.079503
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.078989
                        }
                      ],
                      "others_margin": -0.157128
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.08103778213262558,
                    "model_output": 0.081,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0135
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0097
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0079
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": 0.0068
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.0042
                        }
                      ],
                      "others": -0.0039,
                      "total": 0.081,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.149054
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.123086
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.100921
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": 0.079184
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.048608
                        }
                      ],
                      "others_margin": -0.045783
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.2883673906326294,
                    "model_output": 0.2884,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0496
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0247
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0179
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.0145
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0107
                        }
                      ],
                      "others": -0.0174,
                      "total": 0.2884,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.142535
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.068455
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.052573
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.044803
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.034472
                        }
                      ],
                      "others_margin": -0.058712
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.9526795744895935,
                    "model_output": 0.9527,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1367
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0789
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0622
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0447
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.0313
                        }
                      ],
                      "others": -0.1152,
                      "total": 0.9527,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.13667
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.078939
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.062164
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.044668
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.031334
                        }
                      ],
                      "others_margin": -0.115228
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.912380695343018,
                    "model_output": 6.9124,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": 0.0917
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0375
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.0206
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "contribution": 0.0119
                        },
                        {
                          "name": "accuratePass",
                          "contribution": -0.0117
                        }
                      ],
                      "others": -0.0453,
                      "total": 6.9124,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": 0.091652
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.037476
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.020634
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "margin": 0.011857
                        },
                        {
                          "name": "accuratePass",
                          "margin": -0.011651
                        }
                      ],
                      "others_margin": -0.045191
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 6,
                  "role_matches": 6,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9908, quality 0.437)",
              "stats": {
                "key_pass": 0.8121,
                "expected_assists": 0.067,
                "assists": 0.0703,
                "assist_rate": 0.0703,
                "expected_goals": 0.0717,
                "goals": 0.0803,
                "goal_rate": 0.0803,
                "shots_on_target": 0.2857,
                "total_shots": 0.9439,
                "rating": 6.9124,
                "minutes": 80.58,
                "total_pass": 41.2897,
                "accurate_pass": 34.7924,
                "duels_won": 3.5018,
                "total_long_balls": 1.5386,
                "accurate_long_balls": 0.9125,
                "total_own_half_passes": 17.8623,
                "accurate_own_half_passes": 15.56,
                "total_opp_half_passes": 23.4274,
                "accurate_opp_half_passes": 19.2325,
                "crosses_total": 0.1245,
                "crosses_accurate": 0.0,
                "touches": 51.1139,
                "possession_lost": 8.9415,
                "dispossessed": 0.7218,
                "duels_lost": 3.774,
                "aerial_won": 0.3448,
                "aerial_lost": 0.6138,
                "interceptions": 0.6719,
                "tackles_won": 1.0801,
                "tackles": 1.8356,
                "clearances": 0.578,
                "total_contest": 0.9859,
                "won_contest": 0.6414,
                "challenges_lost": 0.8266,
                "fouls": 1.2673,
                "fouls_drawn": 0.6801,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.2487,
                "ball_carries": 16.0196,
                "total_progression": 33.116,
                "progressive_carries": 1.0266,
                "shots_off_target": 0.6582
              },
              "params": {
                "market_value_eur": 1200000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9908,
                "reference_quality": 0.505,
                "history_matches": 6,
                "history_shrink": 0.4545,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0493)",
              "stats": {
                "key_pass": 0.8121,
                "expected_assists": 0.067,
                "assists": 0.0668,
                "assist_rate": 0.0668,
                "expected_goals": 0.0717,
                "goals": 0.0763,
                "goal_rate": 0.0763,
                "shots_on_target": 0.2888,
                "total_shots": 0.9146,
                "rating": 6.9124,
                "minutes": 80.58,
                "total_pass": 41.2897,
                "accurate_pass": 34.7924,
                "duels_won": 3.5018,
                "total_long_balls": 1.5386,
                "accurate_long_balls": 0.9125,
                "total_own_half_passes": 17.8623,
                "accurate_own_half_passes": 15.56,
                "total_opp_half_passes": 23.4274,
                "accurate_opp_half_passes": 19.2325,
                "crosses_total": 0.1536,
                "crosses_accurate": 0.0,
                "touches": 51.1139,
                "possession_lost": 8.9415,
                "dispossessed": 0.7218,
                "duels_lost": 3.774,
                "aerial_won": 0.3448,
                "aerial_lost": 0.6138,
                "interceptions": 0.6741,
                "tackles_won": 1.1327,
                "tackles": 1.8356,
                "clearances": 0.578,
                "total_contest": 0.9859,
                "won_contest": 0.6414,
                "challenges_lost": 0.8266,
                "fouls": 1.2225,
                "fouls_drawn": 0.6466,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.2487,
                "ball_carries": 16.0196,
                "total_progression": 33.116,
                "progressive_carries": 1.0266,
                "shots_off_target": 0.6582
              },
              "params": {
                "blend_weight": 0.0493,
                "history_matches": 6,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.8953,
                "prior_reliability": 0.1667,
                "competition": "La Liga",
                "squad": "Málaga"
              },
              "changes": [
                {
                  "stat": "wonTackle",
                  "before": 1.0801,
                  "after": 1.1327
                },
                {
                  "stat": "fouls",
                  "before": 1.2673,
                  "after": 1.2225
                },
                {
                  "stat": "wasFouled",
                  "before": 0.6801,
                  "after": 0.6466
                },
                {
                  "stat": "totalShots",
                  "before": 0.9439,
                  "after": 0.9146
                },
                {
                  "stat": "totalCross",
                  "before": 0.1245,
                  "after": 0.1536
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 0.8121,
                "expected_assists": 0.067,
                "assists": 0.0668,
                "assist_rate": 0.0668,
                "expected_goals": 0.0717,
                "goals": 0.0763,
                "goal_rate": 0.0763,
                "shots_on_target": 0.2888,
                "total_shots": 0.947,
                "rating": 6.9124,
                "minutes": 80.58,
                "total_pass": 41.2897,
                "accurate_pass": 34.7924,
                "duels_won": 3.5018,
                "total_long_balls": 1.5386,
                "accurate_long_balls": 0.9125,
                "total_own_half_passes": 17.8623,
                "accurate_own_half_passes": 15.56,
                "total_opp_half_passes": 23.4274,
                "accurate_opp_half_passes": 19.2325,
                "crosses_total": 0.1536,
                "crosses_accurate": 0.0,
                "touches": 51.1139,
                "possession_lost": 8.9415,
                "dispossessed": 0.7218,
                "duels_lost": 3.774,
                "aerial_won": 0.3448,
                "aerial_lost": 0.6138,
                "interceptions": 0.6741,
                "tackles_won": 1.1327,
                "tackles": 1.8356,
                "clearances": 0.578,
                "total_contest": 0.9859,
                "won_contest": 0.6414,
                "challenges_lost": 0.8266,
                "fouls": 1.2225,
                "fouls_drawn": 0.6466,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.2487,
                "ball_carries": 16.0196,
                "total_progression": 33.116,
                "progressive_carries": 1.0266,
                "shots_off_target": 0.6582
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": true
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "key_pass": 0.8121,
                "expected_assists": 0.067,
                "assists": 0.0668,
                "assist_rate": 0.0668,
                "expected_goals": 0.0662,
                "goals": 0.0705,
                "goal_rate": 0.0705,
                "shots_on_target": 0.2667,
                "total_shots": 0.8746,
                "rating": 6.9124,
                "minutes": 80.58,
                "total_pass": 41.2897,
                "accurate_pass": 34.7924,
                "duels_won": 3.5018,
                "total_long_balls": 1.5386,
                "accurate_long_balls": 0.9125,
                "total_own_half_passes": 17.8623,
                "accurate_own_half_passes": 15.56,
                "total_opp_half_passes": 23.4274,
                "accurate_opp_half_passes": 19.2325,
                "crosses_total": 0.1536,
                "crosses_accurate": 0.0,
                "touches": 51.1139,
                "possession_lost": 8.9415,
                "dispossessed": 0.7218,
                "duels_lost": 3.774,
                "aerial_won": 1.1,
                "aerial_lost": 0.6138,
                "interceptions": 0.6741,
                "tackles_won": 1.1327,
                "tackles": 1.8356,
                "clearances": 0.578,
                "total_contest": 0.9859,
                "won_contest": 0.6414,
                "challenges_lost": 0.8266,
                "fouls": 1.2225,
                "fouls_drawn": 0.6466,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.2297,
                "ball_carries": 16.0196,
                "total_progression": 33.116,
                "progressive_carries": 1.0266,
                "shots_off_target": 0.6079,
                "duel_xg_multiplier": 0.9236,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.398,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, midfield_pairing"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Gabriel Moscardo",
                  "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                  "duel_win_rate": 0.398,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v1",
                  "xg_multiplier": 0.9236,
                  "skill_edge": -0.032,
                  "height_edge": -0.02,
                  "attacker_skill": 0.4374,
                  "defender_skill": 0.5085,
                  "attacker_role": "CM",
                  "attacker_mv_price_index": 0.9,
                  "defender_adjusted_parts": [
                    {
                      "player": "Gabriel Moscardo",
                      "market_value": 7500000,
                      "role": "CDM",
                      "price_index": 0.85,
                      "adjusted_quality": 0.5085
                    }
                  ],
                  "xg_override": 0.0662
                }
              },
              "changes": [
                {
                  "stat": "aerialWon",
                  "before": 0.3448,
                  "after": 1.1
                },
                {
                  "stat": "totalShots",
                  "before": 0.947,
                  "after": 0.8746
                },
                {
                  "stat": "shotOffTarget",
                  "before": 0.6582,
                  "after": 0.6079
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.2888,
                  "after": 0.2667
                },
                {
                  "stat": "expectedGoalsOnTarget",
                  "before": 0.2487,
                  "after": 0.2297
                },
                {
                  "stat": "goals",
                  "before": 0.0763,
                  "after": 0.0705
                },
                {
                  "stat": "expectedGoals",
                  "before": 0.0717,
                  "after": 0.0662
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "key_pass": 0.8121,
                "expected_assists": 0.0646,
                "assist_rate": 0.0668,
                "assists": 0,
                "expected_goals": 0.0638,
                "goal_rate": 0.0705,
                "goals": 0,
                "shots_on_target": 0.2667,
                "total_shots": 0.8746,
                "rating": 6.9124,
                "minutes": 80.58,
                "total_pass": 41.2897,
                "accurate_pass": 34.7924,
                "duels_won": 3.5018,
                "total_long_balls": 1.5386,
                "accurate_long_balls": 0.9125,
                "total_own_half_passes": 17.8623,
                "accurate_own_half_passes": 15.56,
                "total_opp_half_passes": 23.4274,
                "accurate_opp_half_passes": 19.2325,
                "crosses_total": 0.1536,
                "crosses_accurate": 0.0,
                "touches": 51.1139,
                "possession_lost": 8.9415,
                "dispossessed": 0.7218,
                "duels_lost": 3.774,
                "aerial_won": 1.1,
                "aerial_lost": 0.6138,
                "interceptions": 0.6741,
                "tackles_won": 1.1327,
                "tackles": 1.8356,
                "clearances": 0.578,
                "total_contest": 0.9859,
                "won_contest": 0.6414,
                "challenges_lost": 0.8266,
                "fouls": 1.2225,
                "fouls_drawn": 0.6466,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.2214,
                "ball_carries": 16.0196,
                "total_progression": 33.116,
                "progressive_carries": 1.0266,
                "shots_off_target": 0.6079,
                "duel_xg_multiplier": 0.9236,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.398,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.037,
                "creation_factor": 0.9983
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 2 by projected rating, fifa_overall 85.0; not used by the projection)",
              "stats": {
                "key_pass": 0.8121,
                "expected_assists": 0.0646,
                "assist_rate": 0.0668,
                "assists": 0,
                "expected_goals": 0.0638,
                "goal_rate": 0.0705,
                "goals": 0,
                "shots_on_target": 0.2667,
                "total_shots": 0.8746,
                "rating": 6.9124,
                "minutes": 80.58,
                "total_pass": 41.2897,
                "accurate_pass": 34.7924,
                "duels_won": 3.5018,
                "total_long_balls": 1.5386,
                "accurate_long_balls": 0.9125,
                "total_own_half_passes": 17.8623,
                "accurate_own_half_passes": 15.56,
                "total_opp_half_passes": 23.4274,
                "accurate_opp_half_passes": 19.2325,
                "crosses_total": 0.1536,
                "crosses_accurate": 0.0,
                "touches": 51.1139,
                "possession_lost": 8.9415,
                "dispossessed": 0.7218,
                "duels_lost": 3.774,
                "aerial_won": 1.1,
                "aerial_lost": 0.6138,
                "interceptions": 0.6741,
                "tackles_won": 1.1327,
                "tackles": 1.8356,
                "clearances": 0.578,
                "total_contest": 0.9859,
                "won_contest": 0.6414,
                "challenges_lost": 0.8266,
                "fouls": 1.2225,
                "fouls_drawn": 0.6466,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.2214,
                "ball_carries": 16.0196,
                "total_progression": 33.116,
                "progressive_carries": 1.0266,
                "shots_off_target": 0.6079,
                "duel_xg_multiplier": 0.9236,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.398,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.037,
                "creation_factor": 0.9983,
                "fifa_overall": 85.0
              },
              "params": {
                "match_squad_rank": 2,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 93,
                "fifa_rank": 137.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 85.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "key_pass": 0.8121,
                "expected_assists": 0.0646,
                "assist_rate": 0.0668,
                "assists": 0,
                "expected_goals": 0.0638,
                "goal_rate": 0.0705,
                "goals": 0,
                "shots_on_target": 0.2667,
                "total_shots": 0.8746,
                "rating": 6.9124,
                "minutes": 80.58,
                "total_pass": 41.2897,
                "accurate_pass": 34.7924,
                "duels_won": 3.5018,
                "total_long_balls": 1.5386,
                "accurate_long_balls": 0.9125,
                "total_own_half_passes": 17.8623,
                "accurate_own_half_passes": 15.56,
                "total_opp_half_passes": 23.4274,
                "accurate_opp_half_passes": 19.2325,
                "crosses_total": 0.1536,
                "crosses_accurate": 0.0,
                "touches": 51.1139,
                "possession_lost": 8.9415,
                "dispossessed": 0.7218,
                "duels_lost": 3.774,
                "aerial_won": 1.1,
                "aerial_lost": 0.6138,
                "interceptions": 0.6741,
                "tackles_won": 1.1327,
                "tackles": 1.8356,
                "clearances": 0.578,
                "total_contest": 0.9859,
                "won_contest": 0.6414,
                "challenges_lost": 0.8266,
                "fouls": 1.2225,
                "fouls_drawn": 0.6466,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.2214,
                "ball_carries": 16.0196,
                "total_progression": 33.116,
                "progressive_carries": 1.0266,
                "shots_off_target": 0.6079,
                "duel_xg_multiplier": 0.9236,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.398,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0618,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.037,
                "creation_factor": 0.9983,
                "fifa_overall": 85.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0618,
                "scorer_weight": 0.0662,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0801,
                "finishing_factor": 1.037,
                "appearance_weight": 1.0,
                "weight_rank": 3,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "key_pass": 0.8121,
                "expected_assists": 0.0646,
                "assist_rate": 0.0668,
                "assists": 0,
                "expected_goals": 0.0638,
                "goal_rate": 0.0705,
                "goals": 0,
                "shots_on_target": 0.2667,
                "total_shots": 0.8746,
                "rating": 6.9124,
                "minutes": 80.58,
                "total_pass": 41.2897,
                "accurate_pass": 34.7924,
                "duels_won": 3.5018,
                "total_long_balls": 1.5386,
                "accurate_long_balls": 0.9125,
                "total_own_half_passes": 17.8623,
                "accurate_own_half_passes": 15.56,
                "total_opp_half_passes": 23.4274,
                "accurate_opp_half_passes": 19.2325,
                "crosses_total": 0.1536,
                "crosses_accurate": 0.0,
                "touches": 51.1139,
                "possession_lost": 8.9415,
                "dispossessed": 0.7218,
                "duels_lost": 3.774,
                "aerial_won": 1.1,
                "aerial_lost": 0.6138,
                "interceptions": 0.6741,
                "tackles_won": 1.1327,
                "tackles": 1.8356,
                "clearances": 0.578,
                "total_contest": 0.9859,
                "won_contest": 0.6414,
                "challenges_lost": 0.8266,
                "fouls": 1.2225,
                "fouls_drawn": 0.6466,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.2214,
                "ball_carries": 16.0196,
                "total_progression": 33.116,
                "progressive_carries": 1.0266,
                "shots_off_target": 0.6079,
                "duel_xg_multiplier": 0.9236,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.398,
                "pressing_faced": "LOW",
                "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "Gabriel Moscardo",
                "opponent_faced": "Gabriel Moscardo",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0618,
                "projected_assists": 0,
                "assist_probability": 0.0626,
                "finishing_factor": 1.037,
                "creation_factor": 0.9983,
                "fifa_overall": 85.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0626,
                "provider_weight": 0.0645,
                "squad_weight_total": 0.5871,
                "weight_share": 0.1098,
                "creation_factor": 0.9983,
                "appearance_weight": 1.0,
                "weight_rank": 4,
                "eligible_players": 13
              }
            }
          ]
        }
      },
      "bench_players": {
        "Carlos Lopez": {
          "player_id": 1442178,
          "position": "G",
          "position_depth": "G_BENCH",
          "is_starter": false,
          "shirt_number": 13,
          "height": 184,
          "market_value": 95000,
          "stats": {
            "saves": 0,
            "goals_prevented": 0.022,
            "rating": 6.8,
            "minutes": 4,
            "total_pass": 1,
            "accurate_pass": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "touches": 2,
            "clearances": 0,
            "ball_recovery": 0,
            "high_claims": 0,
            "punches": 0.0146,
            "aerial_won": 0,
            "sweeper_actions": 0,
            "sweeper_accurate": 0,
            "saves_inside_box": 0,
            "possession_lost": 0.1171,
            "duels_won": 0,
            "duels_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "total_own_half_passes": 1,
            "accurate_own_half_passes": 1,
            "bench_appearance_probability": 0.109,
            "bench_expected_minutes": 4.39,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 3,
            "projected_substitution_expected_count": 2.43,
            "projected_substitution_game_state_adjustment": 1,
            "substitution_usage": "available_bench_not_projected_used",
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 62.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 9083,
            "combined_rank_score": 7736.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 15175.0,
            "fifa_overall": 62.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 7,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.8,
            "source_file": "data/player_rankings.csv",
            "player_name": "Carlos Lopez",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Lars-Jørgen Salvesen",
                  "ranking": 9078
                },
                {
                  "player_name": "Greg Docherty",
                  "ranking": 9079
                },
                {
                  "player_name": "Scott Wright",
                  "ranking": 9080
                },
                {
                  "player_name": "Stiven Muhlethaler",
                  "ranking": 9081
                },
                {
                  "player_name": "Jordan Thompson",
                  "ranking": 9082
                }
              ],
              "lower": [
                {
                  "player_name": "Gabriel Osho",
                  "ranking": 9084
                },
                {
                  "player_name": "Sam Sutton",
                  "ranking": 9085
                },
                {
                  "player_name": "Scott Wharton",
                  "ranking": 9086
                },
                {
                  "player_name": "David Turnbull",
                  "ranking": 9087
                },
                {
                  "player_name": "Sam Smith",
                  "ranking": 9088
                }
              ]
            }
          },
          "data_sources": [
            "market_value"
          ],
          "data_confidence": 0.25,
          "history_matches": 0,
          "xgboost_reasoning": {
            "model_source": "market_value_prior",
            "position_service": "G_service",
            "features_evaluated": [],
            "targets_predicted": [],
            "history_matches": 0,
            "data_confidence": 0.25,
            "data_sources": [
              "market_value"
            ],
            "bench_expected_minutes": 4.392222187561249,
            "bench_appearance_prob": 0.10873737216187492,
            "market_value_adjustment": 0.4374,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection from market-value prior (€95,000) scaled to 4.4 expected mins."
          },
          "stat_evolution": [
            {
              "step": "market_value_prior",
              "description": "Market-value baseline for position G (quality 0.44)",
              "stats": {
                "saves": 2.9,
                "goals_prevented": 0.45,
                "rating": 6.8,
                "minutes": 90.0,
                "total_pass": 27.0,
                "accurate_pass": 20.0,
                "total_long_balls": 8.0,
                "accurate_long_balls": 4.0,
                "touches": 32.0,
                "clearances": 0.9,
                "ball_recovery": 1.2,
                "high_claims": 0.5,
                "punches": 0.3,
                "aerial_won": 0.6,
                "sweeper_actions": 1.2,
                "sweeper_accurate": 0.7,
                "saves_inside_box": 1.2,
                "possession_lost": 2.4,
                "duels_won": 0.4,
                "duels_lost": 0.2,
                "total_contest": 0.4,
                "won_contest": 0.2,
                "fouls": 0.2,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 21.0,
                "accurate_own_half_passes": 16.0
              },
              "params": {
                "market_value_eur": 95000,
                "quality_factor": 0.4374
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 90.0 to 4.4 expected minutes (appearance prob 0.11)",
              "stats": {
                "saves": 0.1415,
                "goals_prevented": 0.022,
                "rating": 6.8,
                "minutes": 4.39,
                "total_pass": 1.3177,
                "accurate_pass": 0.976,
                "total_long_balls": 0.3904,
                "accurate_long_balls": 0.1952,
                "touches": 1.5617,
                "clearances": 0.0439,
                "ball_recovery": 0.0586,
                "high_claims": 0.0244,
                "punches": 0.0146,
                "aerial_won": 0.0293,
                "sweeper_actions": 0.0586,
                "sweeper_accurate": 0.0342,
                "saves_inside_box": 0.0586,
                "possession_lost": 0.1171,
                "duels_won": 0.0195,
                "duels_lost": 0.0098,
                "total_contest": 0.0195,
                "won_contest": 0.0098,
                "fouls": 0.0098,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 1.0249,
                "accurate_own_half_passes": 0.7808,
                "bench_appearance_probability": 0.109,
                "bench_expected_minutes": 4.39
              },
              "params": {
                "expected_minutes": 4.39,
                "projection_minutes": 90.0,
                "minutes_scale": 0.0488,
                "appearance_probability": 0.109
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "saves": 0.1415,
                "goals_prevented": 0.022,
                "rating": 6.8,
                "minutes": 4.39,
                "total_pass": 1.3177,
                "accurate_pass": 0.976,
                "total_long_balls": 0.3904,
                "accurate_long_balls": 0.1952,
                "touches": 1.5617,
                "clearances": 0.0439,
                "ball_recovery": 0.0586,
                "high_claims": 0.0244,
                "punches": 0.0146,
                "aerial_won": 0.0293,
                "sweeper_actions": 0.0586,
                "sweeper_accurate": 0.0342,
                "saves_inside_box": 0.0586,
                "possession_lost": 0.1171,
                "duels_won": 0.0195,
                "duels_lost": 0.0098,
                "total_contest": 0.0195,
                "won_contest": 0.0098,
                "fouls": 0.0098,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 1.0249,
                "accurate_own_half_passes": 0.7808,
                "bench_appearance_probability": 0.109,
                "bench_expected_minutes": 4.39
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "not_projected_to_play",
              "description": "Not among the projected substitutes: no share of the team's goals or assists",
              "stats": {
                "saves": 0.1415,
                "goals_prevented": 0.022,
                "rating": 6.8,
                "minutes": 4.39,
                "total_pass": 1.3177,
                "accurate_pass": 0.976,
                "total_long_balls": 0.3904,
                "accurate_long_balls": 0.1952,
                "touches": 1.5617,
                "clearances": 0.0439,
                "ball_recovery": 0.0586,
                "high_claims": 0.0244,
                "punches": 0.0146,
                "aerial_won": 0.0293,
                "sweeper_actions": 0.0586,
                "sweeper_accurate": 0.0342,
                "saves_inside_box": 0.0586,
                "possession_lost": 0.1171,
                "duels_won": 0.0195,
                "duels_lost": 0.0098,
                "total_contest": 0.0195,
                "won_contest": 0.0098,
                "fouls": 0.0098,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 1.0249,
                "accurate_own_half_passes": 0.7808,
                "bench_appearance_probability": 0.109,
                "bench_expected_minutes": 4.39,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "available_bench_not_projected_used",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0
              },
              "params": {
                "appearance_probability": 0.109,
                "projected_substitutes": 3,
                "scoreline_reset": true
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 7 by projected rating, fifa_overall 62.0; not used by the projection)",
              "stats": {
                "saves": 0.1415,
                "goals_prevented": 0.022,
                "rating": 6.8,
                "minutes": 4.39,
                "total_pass": 1.3177,
                "accurate_pass": 0.976,
                "total_long_balls": 0.3904,
                "accurate_long_balls": 0.1952,
                "touches": 1.5617,
                "clearances": 0.0439,
                "ball_recovery": 0.0586,
                "high_claims": 0.0244,
                "punches": 0.0146,
                "aerial_won": 0.0293,
                "sweeper_actions": 0.0586,
                "sweeper_accurate": 0.0342,
                "saves_inside_box": 0.0586,
                "possession_lost": 0.1171,
                "duels_won": 0.0195,
                "duels_lost": 0.0098,
                "total_contest": 0.0195,
                "won_contest": 0.0098,
                "fouls": 0.0098,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 1.0249,
                "accurate_own_half_passes": 0.7808,
                "bench_appearance_probability": 0.109,
                "bench_expected_minutes": 4.39,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "available_bench_not_projected_used",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "fifa_overall": 62.0
              },
              "params": {
                "match_squad_rank": 7,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 9083,
                "fifa_rank": 15175.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 62.0
              }
            }
          ]
        },
        "Adam Aznou": {
          "player_id": 1466124,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 39,
          "height": 178,
          "market_value": 6200000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 0,
            "aerial_won": 0,
            "duels_won": 1,
            "total_pass": 7,
            "accurate_pass": 5,
            "expected_goals": 0.0026,
            "rating": 6.9,
            "minutes": 14,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_own_half_passes": 4,
            "accurate_own_half_passes": 3,
            "total_opp_half_passes": 2,
            "accurate_opp_half_passes": 1,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 9,
            "possession_lost": 0.9762,
            "dispossessed": 0.4,
            "duels_lost": 1,
            "aerial_lost": 2,
            "total_contest": 1,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 0,
            "blocks": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.0061,
            "assists": 0,
            "expected_assists": 0.0073,
            "total_shots": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "big_chances_created": 0,
            "xgot": 0.002,
            "key_pass": 0,
            "ball_carries": 3,
            "total_progression": 9,
            "progressive_carries": 1,
            "bench_appearance_probability": 0.306,
            "bench_expected_minutes": 13.73,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 3,
            "projected_substitution_expected_count": 2.43,
            "projected_substitution_game_state_adjustment": 1,
            "substitution_usage": "available_bench_not_projected_used",
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 67.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 6312,
            "combined_rank_score": 4601.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 9024.0,
            "fifa_overall": 67.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 3,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.9,
            "source_file": "data/player_rankings.csv",
            "player_name": "Adam Aznou",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Xavier Arreaga",
                  "ranking": 6307
                },
                {
                  "player_name": "Gustavo Nunes",
                  "ranking": 6308
                },
                {
                  "player_name": "Tom Watson",
                  "ranking": 6309
                },
                {
                  "player_name": "Daniel Piña",
                  "ranking": 6310
                },
                {
                  "player_name": "Angus Thurgate",
                  "ranking": 6311
                }
              ],
              "lower": [
                {
                  "player_name": "Fernando Meza",
                  "ranking": 6313
                },
                {
                  "player_name": "David Miculescu",
                  "ranking": 6314
                },
                {
                  "player_name": "Dino Beširović",
                  "ranking": 6315
                },
                {
                  "player_name": "Adama Traoré",
                  "ranking": 6316
                },
                {
                  "player_name": "Enrique Triverio",
                  "ranking": 6317
                }
              ]
            }
          },
          "data_sources": [
            "market_value"
          ],
          "data_confidence": 0.25,
          "history_matches": 0,
          "xgboost_reasoning": {
            "model_source": "market_value_prior",
            "position_service": "D_service",
            "features_evaluated": [],
            "targets_predicted": [],
            "history_matches": 0,
            "data_confidence": 0.25,
            "data_sources": [
              "market_value"
            ],
            "bench_expected_minutes": 13.728465634082903,
            "bench_appearance_prob": 0.30583934700376836,
            "market_value_adjustment": 0.4769,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection from market-value prior (€6,200,000) scaled to 13.7 expected mins."
          },
          "stat_evolution": [
            {
              "step": "market_value_prior",
              "description": "Market-value baseline for position D (quality 0.48)",
              "stats": {
                "interceptions": 1.5,
                "tackles": 2.3,
                "tackles_won": 1.4,
                "clearances": 2.6,
                "aerial_won": 2.2,
                "duels_won": 5.4,
                "total_pass": 43.0,
                "accurate_pass": 34.0,
                "expected_goals": 0.017,
                "rating": 6.9,
                "minutes": 90.0,
                "total_long_balls": 5.0,
                "accurate_long_balls": 2.9,
                "total_own_half_passes": 28.0,
                "accurate_own_half_passes": 22.0,
                "total_opp_half_passes": 10.0,
                "accurate_opp_half_passes": 7.0,
                "crosses_total": 0.9,
                "crosses_accurate": 0.4,
                "touches": 59.0,
                "possession_lost": 6.4,
                "dispossessed": 0.4,
                "duels_lost": 3.4,
                "aerial_lost": 2.0,
                "total_contest": 3.9,
                "won_contest": 2.2,
                "ball_recovery": 4.9,
                "challenges_lost": 1.0,
                "fouls": 1.0,
                "fouls_drawn": 0.6,
                "blocks": 0.7,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.04,
                "assist_rate": 0.04,
                "expected_assists": 0.048,
                "total_shots": 0.34,
                "shots_on_target": 0.15,
                "shots_off_target": 0.19,
                "big_chances_created": 0.04,
                "xgot": 0.013,
                "key_pass": 0.6,
                "ball_carries": 20.0,
                "total_progression": 59.0,
                "progressive_carries": 4.0
              },
              "params": {
                "market_value_eur": 6200000,
                "quality_factor": 0.4769
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 90.0 to 13.7 expected minutes (appearance prob 0.31)",
              "stats": {
                "interceptions": 0.2288,
                "tackles": 0.3508,
                "tackles_won": 0.2136,
                "clearances": 0.3966,
                "aerial_won": 0.3356,
                "duels_won": 0.8237,
                "total_pass": 6.5592,
                "accurate_pass": 5.1863,
                "expected_goals": 0.0026,
                "rating": 6.9,
                "minutes": 13.73,
                "total_long_balls": 0.7627,
                "accurate_long_balls": 0.4424,
                "total_own_half_passes": 4.2711,
                "accurate_own_half_passes": 3.3558,
                "total_opp_half_passes": 1.5254,
                "accurate_opp_half_passes": 1.0678,
                "crosses_total": 0.1373,
                "crosses_accurate": 0.061,
                "touches": 8.9998,
                "possession_lost": 0.9762,
                "dispossessed": 0.4,
                "duels_lost": 0.5186,
                "aerial_lost": 2.0,
                "total_contest": 0.5949,
                "won_contest": 0.3356,
                "ball_recovery": 0.7474,
                "challenges_lost": 1.0,
                "fouls": 0.1525,
                "fouls_drawn": 0.0915,
                "blocks": 0.1068,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0061,
                "assist_rate": 0.0061,
                "expected_assists": 0.0073,
                "total_shots": 0.0519,
                "shots_on_target": 0.0229,
                "shots_off_target": 0.029,
                "big_chances_created": 0.0061,
                "xgot": 0.002,
                "key_pass": 0.0915,
                "ball_carries": 3.0508,
                "total_progression": 8.9998,
                "progressive_carries": 0.6102,
                "bench_appearance_probability": 0.306,
                "bench_expected_minutes": 13.73
              },
              "params": {
                "expected_minutes": 13.73,
                "projection_minutes": 90.0,
                "minutes_scale": 0.1525,
                "appearance_probability": 0.306
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 0.2288,
                "tackles": 0.3508,
                "tackles_won": 0.2136,
                "clearances": 0.3966,
                "aerial_won": 0.3356,
                "duels_won": 0.8237,
                "total_pass": 6.5592,
                "accurate_pass": 5.1863,
                "expected_goals": 0.0026,
                "rating": 6.9,
                "minutes": 13.73,
                "total_long_balls": 0.7627,
                "accurate_long_balls": 0.4424,
                "total_own_half_passes": 4.2711,
                "accurate_own_half_passes": 3.3558,
                "total_opp_half_passes": 1.5254,
                "accurate_opp_half_passes": 1.0678,
                "crosses_total": 0.1373,
                "crosses_accurate": 0.061,
                "touches": 8.9998,
                "possession_lost": 0.9762,
                "dispossessed": 0.4,
                "duels_lost": 0.5186,
                "aerial_lost": 2.0,
                "total_contest": 0.5949,
                "won_contest": 0.3356,
                "ball_recovery": 0.7474,
                "challenges_lost": 1.0,
                "fouls": 0.1525,
                "fouls_drawn": 0.0915,
                "blocks": 0.1068,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0061,
                "assist_rate": 0.0061,
                "expected_assists": 0.0073,
                "total_shots": 0.0519,
                "shots_on_target": 0.0229,
                "shots_off_target": 0.029,
                "big_chances_created": 0.0061,
                "xgot": 0.002,
                "key_pass": 0.0915,
                "ball_carries": 3.0508,
                "total_progression": 8.9998,
                "progressive_carries": 0.6102,
                "bench_appearance_probability": 0.306,
                "bench_expected_minutes": 13.73
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "not_projected_to_play",
              "description": "Not among the projected substitutes: no share of the team's goals or assists",
              "stats": {
                "interceptions": 0.2288,
                "tackles": 0.3508,
                "tackles_won": 0.2136,
                "clearances": 0.3966,
                "aerial_won": 0.3356,
                "duels_won": 0.8237,
                "total_pass": 6.5592,
                "accurate_pass": 5.1863,
                "expected_goals": 0.0026,
                "rating": 6.9,
                "minutes": 13.73,
                "total_long_balls": 0.7627,
                "accurate_long_balls": 0.4424,
                "total_own_half_passes": 4.2711,
                "accurate_own_half_passes": 3.3558,
                "total_opp_half_passes": 1.5254,
                "accurate_opp_half_passes": 1.0678,
                "crosses_total": 0.1373,
                "crosses_accurate": 0.061,
                "touches": 8.9998,
                "possession_lost": 0.9762,
                "dispossessed": 0.4,
                "duels_lost": 0.5186,
                "aerial_lost": 2.0,
                "total_contest": 0.5949,
                "won_contest": 0.3356,
                "ball_recovery": 0.7474,
                "challenges_lost": 1.0,
                "fouls": 0.1525,
                "fouls_drawn": 0.0915,
                "blocks": 0.1068,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0061,
                "assists": 0,
                "expected_assists": 0.0073,
                "total_shots": 0.0519,
                "shots_on_target": 0.0229,
                "shots_off_target": 0.029,
                "big_chances_created": 0.0061,
                "xgot": 0.002,
                "key_pass": 0.0915,
                "ball_carries": 3.0508,
                "total_progression": 8.9998,
                "progressive_carries": 0.6102,
                "bench_appearance_probability": 0.306,
                "bench_expected_minutes": 13.73,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0
              },
              "params": {
                "appearance_probability": 0.306,
                "projected_substitutes": 3,
                "scoreline_reset": true
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 3 by projected rating, fifa_overall 67.0; not used by the projection)",
              "stats": {
                "interceptions": 0.2288,
                "tackles": 0.3508,
                "tackles_won": 0.2136,
                "clearances": 0.3966,
                "aerial_won": 0.3356,
                "duels_won": 0.8237,
                "total_pass": 6.5592,
                "accurate_pass": 5.1863,
                "expected_goals": 0.0026,
                "rating": 6.9,
                "minutes": 13.73,
                "total_long_balls": 0.7627,
                "accurate_long_balls": 0.4424,
                "total_own_half_passes": 4.2711,
                "accurate_own_half_passes": 3.3558,
                "total_opp_half_passes": 1.5254,
                "accurate_opp_half_passes": 1.0678,
                "crosses_total": 0.1373,
                "crosses_accurate": 0.061,
                "touches": 8.9998,
                "possession_lost": 0.9762,
                "dispossessed": 0.4,
                "duels_lost": 0.5186,
                "aerial_lost": 2.0,
                "total_contest": 0.5949,
                "won_contest": 0.3356,
                "ball_recovery": 0.7474,
                "challenges_lost": 1.0,
                "fouls": 0.1525,
                "fouls_drawn": 0.0915,
                "blocks": 0.1068,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0061,
                "assists": 0,
                "expected_assists": 0.0073,
                "total_shots": 0.0519,
                "shots_on_target": 0.0229,
                "shots_off_target": 0.029,
                "big_chances_created": 0.0061,
                "xgot": 0.002,
                "key_pass": 0.0915,
                "ball_carries": 3.0508,
                "total_progression": 8.9998,
                "progressive_carries": 0.6102,
                "bench_appearance_probability": 0.306,
                "bench_expected_minutes": 13.73,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "fifa_overall": 67.0
              },
              "params": {
                "match_squad_rank": 3,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 6312,
                "fifa_rank": 9024.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 67.0
              }
            }
          ]
        },
        "Jose Salinas": {
          "player_id": 1068891,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 12,
          "height": 178,
          "market_value": 1800000,
          "stats": {
            "interceptions": 0,
            "tackles": 1,
            "tackles_won": 0,
            "clearances": 1,
            "aerial_won": 0,
            "total_shots": 0,
            "rating": 6.5819,
            "minutes": 14,
            "total_pass": 4,
            "accurate_pass": 3,
            "duels_won": 0,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_own_half_passes": 2,
            "accurate_own_half_passes": 1,
            "total_opp_half_passes": 3,
            "accurate_opp_half_passes": 2,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 7,
            "possession_lost": 2.1043,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 0,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "blocks": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "expected_goals": 0.0179,
            "expected_assists": 0.0023,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 2,
            "total_progression": 4,
            "progressive_carries": 0,
            "key_pass": 0,
            "shots_off_target": 0,
            "bench_appearance_probability": 0.299,
            "bench_expected_minutes": 13.57,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 3,
            "projected_substitution_expected_count": 2.43,
            "projected_substitution_game_state_adjustment": 1,
            "substitution_usage": "available_bench_not_projected_used",
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 77.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 90,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0155,
                "expected_assists": 0.0063,
                "total_shots": 1,
                "total_pass": 24,
                "accurate_pass": 22,
                "tackles": 2,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 45,
                "rating": 6.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0007,
                "total_shots": 0,
                "total_pass": 8,
                "accurate_pass": 7,
                "tackles": 4,
                "tackles_won": 4,
                "clearances": 1,
                "duels_won": 5,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 87,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0127,
                "total_shots": 0,
                "total_pass": 50,
                "accurate_pass": 47,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 2,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0111,
                "total_shots": 0,
                "total_pass": 45,
                "accurate_pass": 41,
                "interceptions": 2,
                "clearances": 3,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 30,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0022,
                "total_shots": 0,
                "total_pass": 12,
                "accurate_pass": 11,
                "interceptions": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 18,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0028,
                "total_shots": 0,
                "total_pass": 11,
                "accurate_pass": 6,
                "aerial_won": 2,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083587,
              "match_date": "2026-05-09",
              "home_team": "Sevilla",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 15,
                "rating": 5.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1573,
                "expected_assists": 0.0033,
                "total_shots": 1,
                "total_pass": 4,
                "accurate_pass": 2,
                "key_pass": 1,
                "interceptions": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083642,
              "match_date": "2026-03-15",
              "home_team": "Mallorca",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Mallorca",
              "stats": {
                "minutes": 9,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083303,
              "match_date": "2026-02-09",
              "home_team": "Villarreal",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 90,
                "rating": 4.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0111,
                "total_shots": 0,
                "total_pass": 45,
                "accurate_pass": 39,
                "key_pass": 1,
                "interceptions": 2,
                "clearances": 4,
                "aerial_won": 2,
                "duels_won": 4,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083180,
              "match_date": "2025-12-22",
              "home_team": "Athletic Club",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Athletic Club",
              "stats": {
                "minutes": 12,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "total_shots": 0
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 2864,
            "combined_rank_score": 1199.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 969.0,
            "sofascore_rating": 6.35,
            "sofascore_appearances": 11.0,
            "fifa_rank": 1429.0,
            "fifa_overall": 77.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 17,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.5819,
            "source_file": "data/player_rankings.csv",
            "player_name": "Jose Salinas",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Jérémy Corinus",
                  "ranking": 2859
                },
                {
                  "player_name": "Livio Meier",
                  "ranking": 2860
                },
                {
                  "player_name": "Park Chae-Joon",
                  "ranking": 2861
                },
                {
                  "player_name": "Martin Andersen",
                  "ranking": 2862
                },
                {
                  "player_name": "Jorge Cabello",
                  "ranking": 2863
                }
              ],
              "lower": [
                {
                  "player_name": "Ryan Camenzuli",
                  "ranking": 2865
                },
                {
                  "player_name": "Miguel Loureiro",
                  "ranking": 2866
                },
                {
                  "player_name": "Saba Sazonov",
                  "ranking": 2867
                },
                {
                  "player_name": "Juan Pablo Nieto",
                  "ranking": 2868
                },
                {
                  "player_name": "Adalid Terrazas",
                  "ranking": 2869
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.75,
          "history_matches": 17,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 17,
            "data_confidence": 0.75,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 13.572222187561248,
            "bench_appearance_prob": 0.2987373721618749,
            "market_value_adjustment": 0.9954,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost D_service (17 historical appearances) to 13.6 expected mins (appearance prob 0.30)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 0.3108,
                "tackles": 0.5868,
                "tackles_won": 0.3685,
                "clearances": 0.7208,
                "aerial_won": 0.3048,
                "total_shots": 0.1251,
                "rating": 6.5819,
                "minutes": 15.46,
                "total_pass": 4.9402,
                "accurate_pass": 3.3447,
                "duels_won": 0.3742,
                "total_long_balls": 0.2377,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 1.8897,
                "accurate_own_half_passes": 1.3333,
                "total_opp_half_passes": 3.0505,
                "accurate_opp_half_passes": 2.0114,
                "crosses_total": 0.0491,
                "crosses_accurate": 0.0,
                "touches": 7.6317,
                "possession_lost": 2.4081,
                "dispossessed": 0.0,
                "duels_lost": 1.1003,
                "aerial_lost": 0.4396,
                "total_contest": 0.1302,
                "won_contest": 0.0,
                "ball_recovery": 0.4437,
                "challenges_lost": 0.3103,
                "fouls": 0.2203,
                "fouls_drawn": 0.0,
                "blocks": 0.1801,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0205,
                "expected_assists": 0.0026,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 1.7669,
                "total_progression": 4.3965,
                "progressive_carries": 0.0,
                "key_pass": 0.1302,
                "shots_off_target": 0.1251
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1601,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 45.0,
                    "is_starting": true,
                    "weight": 0.1361,
                    "rating": 6.0
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 87.0,
                    "is_starting": true,
                    "weight": 0.1157,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0983,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 30.0,
                    "is_starting": false,
                    "weight": 0.0836,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 18.0,
                    "is_starting": false,
                    "weight": 0.071,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-05-09",
                    "opponent": "Sevilla",
                    "minutes": 15.0,
                    "is_starting": false,
                    "weight": 0.0604,
                    "rating": 5.6
                  },
                  {
                    "match_date": "2026-03-15",
                    "opponent": "Mallorca",
                    "minutes": 9.0,
                    "is_starting": false,
                    "weight": 0.0513,
                    "rating": 6.2
                  },
                  {
                    "match_date": "2026-02-09",
                    "opponent": "Villarreal",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0436,
                    "rating": 4.9
                  },
                  {
                    "match_date": "2025-12-22",
                    "opponent": "Athletic Club",
                    "minutes": 12.0,
                    "is_starting": false,
                    "weight": 0.0371,
                    "rating": 6.6
                  }
                ],
                "feature_row": {
                  "history_matches": 17.0,
                  "is_starting_11": 0.0,
                  "totalClearance": 1.0238,
                  "aerialWon": 0.5105,
                  "totalClearance_p90": 1.1679,
                  "totalTackle": 1.1495,
                  "totalPass": 20.7284
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 0.3108210861682892,
                    "model_output": 0.3108,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.466
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.0307
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.0162
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.011
                        },
                        {
                          "name": "interceptionWon_p90",
                          "contribution": 0.0088
                        }
                      ],
                      "others": -0.0314,
                      "total": 0.3108,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.784263
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.081572
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.045826
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.032332
                        },
                        {
                          "name": "interceptionWon_p90",
                          "margin": 0.026187
                        }
                      ],
                      "others_margin": -0.096733
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 0.58678138256073,
                    "model_output": 0.5868,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.78
                        },
                        {
                          "name": "ballRecovery_p90",
                          "contribution": -0.0206
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.0167
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": 0.0166
                        },
                        {
                          "name": "challengeLost",
                          "contribution": 0.0136
                        }
                      ],
                      "others": -0.0534,
                      "total": 0.5868,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.820077
                        },
                        {
                          "name": "ballRecovery_p90",
                          "margin": -0.034138
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.027758
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": 0.026901
                        },
                        {
                          "name": "challengeLost",
                          "margin": 0.021433
                        }
                      ],
                      "others_margin": -0.087068
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 0.3685303330421448,
                    "model_output": 0.3685,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.455
                        },
                        {
                          "name": "ballRecovery_p90",
                          "contribution": -0.013
                        },
                        {
                          "name": "errorLeadToAShot",
                          "contribution": -0.0114
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.0107
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.0104
                        }
                      ],
                      "others": -0.0068,
                      "total": 0.3685,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.760514
                        },
                        {
                          "name": "ballRecovery_p90",
                          "margin": -0.033062
                        },
                        {
                          "name": "errorLeadToAShot",
                          "margin": -0.029884
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.028136
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.027239
                        }
                      ],
                      "others_margin": -0.018257
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 0.7207958102226257,
                    "model_output": 0.7208,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -2.1742
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.2711
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": -0.1181
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0592
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.0549
                        }
                      ],
                      "others": -0.0531,
                      "total": 0.7208,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.994084
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.238591
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": -0.12485
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.068979
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.06859
                        }
                      ],
                      "others_margin": -0.071088
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 0.30480921268463135,
                    "model_output": 0.3048,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.8128
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.1667
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.0483
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.0366
                        },
                        {
                          "name": "minutesPlayed",
                          "contribution": 0.0144
                        }
                      ],
                      "others": -0.0272,
                      "total": 0.3048,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.887039
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.346619
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.127846
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.109183
                        },
                        {
                          "name": "minutesPlayed",
                          "margin": 0.044445
                        }
                      ],
                      "others_margin": -0.08538
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.1251191645860672,
                    "model_output": 0.1251,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1881
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0694
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0296
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0116
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.0092
                        }
                      ],
                      "others": -0.0381,
                      "total": 0.1251,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.188065
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.069389
                        },
                        {
                          "name": "rating",
                          "margin": -0.029633
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.011585
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.009199
                        }
                      ],
                      "others_margin": -0.038143
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.581907272338867,
                    "model_output": 6.5819,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "totalPass",
                          "contribution": -0.0351
                        },
                        {
                          "name": "accuratePass",
                          "contribution": -0.0246
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0198
                        },
                        {
                          "name": "touches",
                          "contribution": -0.016
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0144
                        }
                      ],
                      "others": -0.0933,
                      "total": 6.5819,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "totalPass",
                          "margin": -0.035087
                        },
                        {
                          "name": "accuratePass",
                          "margin": -0.024588
                        },
                        {
                          "name": "rating",
                          "margin": -0.019762
                        },
                        {
                          "name": "touches",
                          "margin": -0.015985
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.014419
                        }
                      ],
                      "others_margin": -0.093385
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 17,
                  "role_matches": 11,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9954, quality 0.437)",
              "stats": {
                "interceptions": 0.3094,
                "tackles": 0.5841,
                "tackles_won": 0.3668,
                "clearances": 0.7175,
                "aerial_won": 0.3034,
                "total_shots": 0.1245,
                "rating": 6.5819,
                "minutes": 15.46,
                "total_pass": 4.9175,
                "accurate_pass": 3.3293,
                "duels_won": 0.3725,
                "total_long_balls": 0.2366,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 1.881,
                "accurate_own_half_passes": 1.3272,
                "total_opp_half_passes": 3.0365,
                "accurate_opp_half_passes": 2.0021,
                "crosses_total": 0.0489,
                "crosses_accurate": 0.0,
                "touches": 7.5966,
                "possession_lost": 2.397,
                "dispossessed": 0.0,
                "duels_lost": 1.0952,
                "aerial_lost": 0.4376,
                "total_contest": 0.1296,
                "won_contest": 0.0,
                "ball_recovery": 0.4417,
                "challenges_lost": 0.3089,
                "fouls": 0.2193,
                "fouls_drawn": 0.0,
                "blocks": 0.1793,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0204,
                "expected_assists": 0.0026,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 1.7588,
                "total_progression": 4.3763,
                "progressive_carries": 0.0,
                "key_pass": 0.1296,
                "shots_off_target": 0.1245
              },
              "params": {
                "market_value_eur": 1800000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9954,
                "reference_quality": 0.505,
                "history_matches": 17,
                "history_shrink": 0.2273,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 15.5 to 13.6 expected minutes (appearance prob 0.30)",
              "stats": {
                "interceptions": 0.2716,
                "tackles": 0.5128,
                "tackles_won": 0.322,
                "clearances": 0.6299,
                "aerial_won": 0.2664,
                "total_shots": 0.1093,
                "rating": 6.5819,
                "minutes": 13.57,
                "total_pass": 4.317,
                "accurate_pass": 2.9228,
                "duels_won": 0.327,
                "total_long_balls": 0.2077,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 1.6513,
                "accurate_own_half_passes": 1.1651,
                "total_opp_half_passes": 2.6657,
                "accurate_opp_half_passes": 1.7576,
                "crosses_total": 0.0429,
                "crosses_accurate": 0.0,
                "touches": 6.669,
                "possession_lost": 2.1043,
                "dispossessed": 0.0,
                "duels_lost": 0.9615,
                "aerial_lost": 0.4376,
                "total_contest": 0.1138,
                "won_contest": 0.0,
                "ball_recovery": 0.3878,
                "challenges_lost": 0.3089,
                "fouls": 0.1925,
                "fouls_drawn": 0.0,
                "blocks": 0.1574,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0179,
                "expected_assists": 0.0023,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 1.544,
                "total_progression": 3.8419,
                "progressive_carries": 0.0,
                "key_pass": 0.1138,
                "shots_off_target": 0.1093,
                "bench_appearance_probability": 0.299,
                "bench_expected_minutes": 13.57
              },
              "params": {
                "expected_minutes": 13.57,
                "projection_minutes": 15.46,
                "minutes_scale": 0.8779,
                "appearance_probability": 0.299
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 0.2716,
                "tackles": 0.5128,
                "tackles_won": 0.322,
                "clearances": 0.6299,
                "aerial_won": 0.2664,
                "total_shots": 0.1093,
                "rating": 6.5819,
                "minutes": 13.57,
                "total_pass": 4.317,
                "accurate_pass": 2.9228,
                "duels_won": 0.327,
                "total_long_balls": 0.2077,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 1.6513,
                "accurate_own_half_passes": 1.1651,
                "total_opp_half_passes": 2.6657,
                "accurate_opp_half_passes": 1.7576,
                "crosses_total": 0.0429,
                "crosses_accurate": 0.0,
                "touches": 6.669,
                "possession_lost": 2.1043,
                "dispossessed": 0.0,
                "duels_lost": 0.9615,
                "aerial_lost": 0.4376,
                "total_contest": 0.1138,
                "won_contest": 0.0,
                "ball_recovery": 0.3878,
                "challenges_lost": 0.3089,
                "fouls": 0.1925,
                "fouls_drawn": 0.0,
                "blocks": 0.1574,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0179,
                "expected_assists": 0.0023,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 1.544,
                "total_progression": 3.8419,
                "progressive_carries": 0.0,
                "key_pass": 0.1138,
                "shots_off_target": 0.1093,
                "bench_appearance_probability": 0.299,
                "bench_expected_minutes": 13.57
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "not_projected_to_play",
              "description": "Not among the projected substitutes: no share of the team's goals or assists",
              "stats": {
                "interceptions": 0.2716,
                "tackles": 0.5128,
                "tackles_won": 0.322,
                "clearances": 0.6299,
                "aerial_won": 0.2664,
                "total_shots": 0.1093,
                "rating": 6.5819,
                "minutes": 13.57,
                "total_pass": 4.317,
                "accurate_pass": 2.9228,
                "duels_won": 0.327,
                "total_long_balls": 0.2077,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 1.6513,
                "accurate_own_half_passes": 1.1651,
                "total_opp_half_passes": 2.6657,
                "accurate_opp_half_passes": 1.7576,
                "crosses_total": 0.0429,
                "crosses_accurate": 0.0,
                "touches": 6.669,
                "possession_lost": 2.1043,
                "dispossessed": 0.0,
                "duels_lost": 0.9615,
                "aerial_lost": 0.4376,
                "total_contest": 0.1138,
                "won_contest": 0.0,
                "ball_recovery": 0.3878,
                "challenges_lost": 0.3089,
                "fouls": 0.1925,
                "fouls_drawn": 0.0,
                "blocks": 0.1574,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0179,
                "expected_assists": 0.0023,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 1.544,
                "total_progression": 3.8419,
                "progressive_carries": 0.0,
                "key_pass": 0.1138,
                "shots_off_target": 0.1093,
                "bench_appearance_probability": 0.299,
                "bench_expected_minutes": 13.57,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0
              },
              "params": {
                "appearance_probability": 0.299,
                "projected_substitutes": 3,
                "scoreline_reset": true
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 17 by projected rating, fifa_overall 77.0; not used by the projection)",
              "stats": {
                "interceptions": 0.2716,
                "tackles": 0.5128,
                "tackles_won": 0.322,
                "clearances": 0.6299,
                "aerial_won": 0.2664,
                "total_shots": 0.1093,
                "rating": 6.5819,
                "minutes": 13.57,
                "total_pass": 4.317,
                "accurate_pass": 2.9228,
                "duels_won": 0.327,
                "total_long_balls": 0.2077,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 1.6513,
                "accurate_own_half_passes": 1.1651,
                "total_opp_half_passes": 2.6657,
                "accurate_opp_half_passes": 1.7576,
                "crosses_total": 0.0429,
                "crosses_accurate": 0.0,
                "touches": 6.669,
                "possession_lost": 2.1043,
                "dispossessed": 0.0,
                "duels_lost": 0.9615,
                "aerial_lost": 0.4376,
                "total_contest": 0.1138,
                "won_contest": 0.0,
                "ball_recovery": 0.3878,
                "challenges_lost": 0.3089,
                "fouls": 0.1925,
                "fouls_drawn": 0.0,
                "blocks": 0.1574,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0179,
                "expected_assists": 0.0023,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 1.544,
                "total_progression": 3.8419,
                "progressive_carries": 0.0,
                "key_pass": 0.1138,
                "shots_off_target": 0.1093,
                "bench_appearance_probability": 0.299,
                "bench_expected_minutes": 13.57,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "fifa_overall": 77.0
              },
              "params": {
                "match_squad_rank": 17,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 2864,
                "fifa_rank": 1429.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 77.0
              }
            }
          ]
        },
        "Jens-Lys Cajuste": {
          "player_id": 857671,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 2,
          "height": 188,
          "market_value": 6600000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0159,
            "assist_rate": 0.0308,
            "assists": 0,
            "expected_goals": 0.0245,
            "goal_rate": 0.0469,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 0,
            "rating": 6.669,
            "minutes": 22,
            "total_pass": 8,
            "accurate_pass": 7,
            "duels_won": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_own_half_passes": 4,
            "accurate_own_half_passes": 4,
            "total_opp_half_passes": 4,
            "accurate_opp_half_passes": 3,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 10,
            "possession_lost": 1.4052,
            "dispossessed": 0.0,
            "duels_lost": 0,
            "aerial_won": 0,
            "aerial_lost": 0,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 0,
            "total_contest": 0,
            "won_contest": 0,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 3,
            "total_progression": 6,
            "progressive_carries": 0,
            "shots_off_target": 0,
            "bench_appearance_probability": 0.507,
            "bench_expected_minutes": 22.15,
            "projected_substitution_order": 3,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 3,
            "projected_substitution_expected_count": 2.43,
            "projected_substitution_game_state_adjustment": 1,
            "substitution_usage": "projected_used_substitute",
            "projected_goals": 0,
            "goal_probability": 0.0123,
            "projected_assists": 0,
            "assist_probability": 0.008,
            "finishing_factor": 1.25,
            "creation_factor": 1.215,
            "fifa_overall": 73.0
          },
          "latest_10_games": [
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 9,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0005,
                "total_shots": 0,
                "total_pass": 6,
                "accurate_pass": 5,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 3806,
            "combined_rank_score": 1806.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 3437.0,
            "fifa_overall": 73.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 15,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.669,
            "source_file": "data/player_rankings.csv",
            "player_name": "Jens-Lys Cajuste",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Bartłomiej Drągowski",
                  "ranking": 3801
                },
                {
                  "player_name": "Eliesse Ben Seghir",
                  "ranking": 3802
                },
                {
                  "player_name": "Roony Bardghji",
                  "ranking": 3803
                },
                {
                  "player_name": "Nilson Angulo",
                  "ranking": 3804
                },
                {
                  "player_name": "James McAtee",
                  "ranking": 3805
                }
              ],
              "lower": [
                {
                  "player_name": "Yáser Asprilla",
                  "ranking": 3807
                },
                {
                  "player_name": "Stephen Eustaquio",
                  "ranking": 3808
                },
                {
                  "player_name": "Darío Osorio",
                  "ranking": 3809
                },
                {
                  "player_name": "Josh Sargent",
                  "ranking": 3810
                },
                {
                  "player_name": "Haris Hajradinović",
                  "ranking": 3811
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.312,
          "history_matches": 1,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 1,
            "data_confidence": 0.312,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 22.147767132293673,
            "bench_appearance_prob": 0.5067166878315306,
            "market_value_adjustment": 0.9942,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost M_service (1 historical appearances) to 22.1 expected mins (appearance prob 0.51)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 0.2061,
                "expected_assists": 0.0117,
                "assists": 0.022,
                "assist_rate": 0.022,
                "expected_goals": 0.0181,
                "goals": 0.0334,
                "goal_rate": 0.0334,
                "shots_on_target": 0.0854,
                "total_shots": 0.2559,
                "rating": 6.669,
                "minutes": 15.67,
                "total_pass": 6.0,
                "accurate_pass": 5.0,
                "duels_won": 1.0,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 3.0,
                "accurate_own_half_passes": 3.0,
                "total_opp_half_passes": 3.0,
                "accurate_opp_half_passes": 2.0,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.0,
                "possession_lost": 1.0,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.0,
                "tackles": 1.0,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.0,
                "total_progression": 4.2118,
                "progressive_carries": 0.0,
                "shots_off_target": 0.1705
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 9.0,
                    "is_starting": false,
                    "weight": 1.0,
                    "rating": 6.7
                  }
                ],
                "feature_row": {
                  "history_matches": 1.0,
                  "is_starting_11": 0.0,
                  "totalShots": 0.0,
                  "creative_index": 0.0003,
                  "expectedGoals": 0.0,
                  "expectedAssists": 0.0005,
                  "onTargetScoringAttempt": 0.0
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 0.20605409145355225,
                    "model_output": 0.2061,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.4838
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0416
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0367
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0305
                        },
                        {
                          "name": "ballCarriesCount",
                          "contribution": -0.019
                        }
                      ],
                      "others": -0.0685,
                      "total": 0.2061,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.789556
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.109057
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.107258
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.098991
                        },
                        {
                          "name": "ballCarriesCount",
                          "margin": -0.066851
                        }
                      ],
                      "others_margin": -0.287087
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.011731374077498913,
                    "model_output": 0.0117,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0422
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0114
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0077
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0029
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0016
                        }
                      ],
                      "others": -0.0083,
                      "total": 0.0117,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.677562
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.302445
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.272495
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.125804
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.076972
                        }
                      ],
                      "others_margin": -0.534163
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.02197728306055069,
                    "model_output": 0.022,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0222
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0134
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.008
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0059
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0027
                        }
                      ],
                      "others": -0.011,
                      "total": 0.022,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.300983
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.238368
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.175691
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.152909
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.078032
                        }
                      ],
                      "others_margin": -0.409358
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.01806838996708393,
                    "model_output": 0.0181,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0368
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0196
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0105
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0045
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0025
                        }
                      ],
                      "others": -0.0074,
                      "total": 0.0181,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.493468
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.416493
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.322399
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.180609
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.10236
                        }
                      ],
                      "others_margin": -0.343065
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.033421456813812256,
                    "model_output": 0.0334,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0329
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0166
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0087
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0039
                        },
                        {
                          "name": "ballRecovery_p90",
                          "contribution": 0.0033
                        }
                      ],
                      "others": -0.0054,
                      "total": 0.0334,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.411302
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.296136
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.198498
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.103704
                        },
                        {
                          "name": "ballRecovery_p90",
                          "margin": 0.08828
                        }
                      ],
                      "others_margin": -0.150784
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.08539165556430817,
                    "model_output": 0.0854,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1247
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0698
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.029
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0181
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": 0.0123
                        }
                      ],
                      "others": -0.0093,
                      "total": 0.0854,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.485738
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.431117
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.253558
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.19855
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": 0.138935
                        }
                      ],
                      "others_margin": -0.10344
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.25584647059440613,
                    "model_output": 0.2558,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.3601
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.2332
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0451
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0305
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0298
                        }
                      ],
                      "others": -0.036,
                      "total": 0.2558,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.360104
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.233194
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.045117
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.030544
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.02978
                        }
                      ],
                      "others_margin": -0.035879
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.668961048126221,
                    "model_output": 6.669,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0789
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0489
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.0156
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0144
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "contribution": 0.012
                        }
                      ],
                      "others": -0.0341,
                      "total": 6.669,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.07894
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.048941
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.015587
                        },
                        {
                          "name": "rating",
                          "margin": -0.014375
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "margin": 0.01196
                        }
                      ],
                      "others_margin": -0.034026
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 1,
                  "role_matches": 1,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "all_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9942, quality 0.482)",
              "stats": {
                "key_pass": 0.2049,
                "expected_assists": 0.0117,
                "assists": 0.0218,
                "assist_rate": 0.0218,
                "expected_goals": 0.018,
                "goals": 0.0332,
                "goal_rate": 0.0332,
                "shots_on_target": 0.0849,
                "total_shots": 0.2544,
                "rating": 6.669,
                "minutes": 15.67,
                "total_pass": 5.9652,
                "accurate_pass": 4.971,
                "duels_won": 0.9942,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 2.9826,
                "accurate_own_half_passes": 2.9826,
                "total_opp_half_passes": 2.9826,
                "accurate_opp_half_passes": 1.9884,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 6.9594,
                "possession_lost": 0.9942,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.9942,
                "tackles": 0.9942,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 1.9884,
                "total_progression": 4.1874,
                "progressive_carries": 0.0,
                "shots_off_target": 0.1695
              },
              "params": {
                "market_value_eur": 6600000,
                "quality_factor": 0.4818,
                "boost_factor": 0.9942,
                "reference_quality": 0.505,
                "history_matches": 1,
                "history_shrink": 0.8333,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 15.7 to 22.1 expected minutes (appearance prob 0.51)",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0165,
                "assists": 0.0308,
                "assist_rate": 0.0308,
                "expected_goals": 0.0254,
                "goals": 0.0469,
                "goal_rate": 0.0469,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15
              },
              "params": {
                "expected_minutes": 22.15,
                "projection_minutes": 15.67,
                "minutes_scale": 1.4134,
                "appearance_probability": 0.507
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0165,
                "assists": 0.0308,
                "assist_rate": 0.0308,
                "expected_goals": 0.0254,
                "goals": 0.0469,
                "goal_rate": 0.0469,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": true
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0159,
                "assist_rate": 0.0308,
                "assists": 0,
                "expected_goals": 0.0245,
                "goal_rate": 0.0469,
                "goals": 0,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15,
                "projected_substitution_order": 3,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.215
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 0.507
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 15 by projected rating, fifa_overall 73.0; not used by the projection)",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0159,
                "assist_rate": 0.0308,
                "assists": 0,
                "expected_goals": 0.0245,
                "goal_rate": 0.0469,
                "goals": 0,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15,
                "projected_substitution_order": 3,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.215,
                "fifa_overall": 73.0
              },
              "params": {
                "match_squad_rank": 15,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3806,
                "fifa_rank": 3437.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 73.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0159,
                "assist_rate": 0.0308,
                "assists": 0,
                "expected_goals": 0.0245,
                "goal_rate": 0.0469,
                "goals": 0,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15,
                "projected_substitution_order": 3,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0123,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.215,
                "fifa_overall": 73.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0123,
                "scorer_weight": 0.0155,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0188,
                "finishing_factor": 1.25,
                "appearance_weight": 0.507,
                "weight_rank": 10,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0159,
                "assist_rate": 0.0308,
                "assists": 0,
                "expected_goals": 0.0245,
                "goal_rate": 0.0469,
                "goals": 0,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15,
                "projected_substitution_order": 3,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0123,
                "projected_assists": 0,
                "assist_probability": 0.008,
                "finishing_factor": 1.25,
                "creation_factor": 1.215,
                "fifa_overall": 73.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.008,
                "provider_weight": 0.0098,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0167,
                "creation_factor": 1.215,
                "appearance_weight": 0.507,
                "weight_rank": 10,
                "eligible_players": 13
              }
            }
          ]
        },
        "Izan Merino": {
          "player_id": 1493488,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 23,
          "height": 186,
          "market_value": 1900000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0155,
            "assist_rate": 0.0208,
            "assists": 0,
            "expected_goals": 0.0096,
            "goal_rate": 0.0222,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 0,
            "rating": 6.6942,
            "minutes": 22,
            "total_pass": 39,
            "accurate_pass": 37,
            "duels_won": 1,
            "total_long_balls": 3,
            "accurate_long_balls": 2,
            "total_own_half_passes": 22,
            "accurate_own_half_passes": 21,
            "total_opp_half_passes": 17,
            "accurate_opp_half_passes": 16,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 43,
            "possession_lost": 3.3357,
            "dispossessed": 0.0,
            "duels_lost": 2,
            "aerial_won": 0,
            "aerial_lost": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 1,
            "clearances": 1,
            "total_contest": 0,
            "won_contest": 0,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 11,
            "total_progression": 30,
            "progressive_carries": 0,
            "shots_off_target": 0,
            "bench_appearance_probability": 0.499,
            "bench_expected_minutes": 21.97,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 3,
            "projected_substitution_expected_count": 2.43,
            "projected_substitution_game_state_adjustment": 1,
            "substitution_usage": "available_bench_not_projected_used",
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 70.0
          },
          "latest_10_games": [
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 61,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0005,
                "total_shots": 0,
                "total_pass": 20,
                "accurate_pass": 18,
                "clearances": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 67,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0197,
                "total_shots": 0,
                "total_pass": 54,
                "accurate_pass": 52,
                "clearances": 1,
                "duels_won": 1,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 31,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0122,
                "total_shots": 0,
                "total_pass": 20,
                "accurate_pass": 20,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 87,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0277,
                "total_shots": 0,
                "total_pass": 54,
                "accurate_pass": 48,
                "key_pass": 2,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "duels_won": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 85,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0472,
                "expected_assists": 0.0427,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 71,
                "accurate_pass": 68,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0109,
                "total_shots": 0,
                "total_pass": 47,
                "accurate_pass": 43,
                "tackles": 1,
                "interceptions": 2,
                "clearances": 1,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 5154,
            "combined_rank_score": 3350.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 784.0,
            "sofascore_rating": 6.6333,
            "sofascore_appearances": 3.0,
            "fifa_rank": 5916.0,
            "fifa_overall": 70.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 14,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.6942,
            "source_file": "data/player_rankings.csv",
            "player_name": "Izan Merino",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Jean-Philippe Krasso",
                  "ranking": 5149
                },
                {
                  "player_name": "Abdallah Sima",
                  "ranking": 5150
                },
                {
                  "player_name": "Bryan Okoh",
                  "ranking": 5151
                },
                {
                  "player_name": "Lamine Sy",
                  "ranking": 5152
                },
                {
                  "player_name": "Santiago Hidalgo",
                  "ranking": 5153
                }
              ],
              "lower": [
                {
                  "player_name": "Louis Mouton",
                  "ranking": 5155
                },
                {
                  "player_name": "Yassin Belkhdim",
                  "ranking": 5156
                },
                {
                  "player_name": "Erik Janža",
                  "ranking": 5157
                },
                {
                  "player_name": "Fernando Cornejo",
                  "ranking": 5158
                },
                {
                  "player_name": "Jacques Ekomié",
                  "ranking": 5159
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.625,
          "history_matches": 6,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 6,
            "data_confidence": 0.625,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 21.97222218756125,
            "bench_appearance_prob": 0.4987373721618749,
            "market_value_adjustment": 0.9908,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost M_service (6 historical appearances) to 22.0 expected mins (appearance prob 0.50)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 0.239,
                "expected_assists": 0.0164,
                "assists": 0.022,
                "assist_rate": 0.022,
                "expected_goals": 0.0102,
                "goals": 0.0234,
                "goal_rate": 0.0234,
                "shots_on_target": 0.0529,
                "total_shots": 0.1767,
                "rating": 6.6942,
                "minutes": 23.0,
                "total_pass": 41.285,
                "accurate_pass": 38.702,
                "duels_won": 0.7592,
                "total_long_balls": 3.1876,
                "accurate_long_balls": 2.2326,
                "total_own_half_passes": 23.0492,
                "accurate_own_half_passes": 22.2883,
                "total_opp_half_passes": 18.2359,
                "accurate_opp_half_passes": 16.4138,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 45.6476,
                "possession_lost": 3.5241,
                "dispossessed": 0.0,
                "duels_lost": 2.0803,
                "aerial_won": 0.0,
                "aerial_lost": 0.1257,
                "interceptions": 0.3616,
                "tackles_won": 0.4476,
                "tackles": 0.5545,
                "clearances": 1.2749,
                "total_contest": 0.2408,
                "won_contest": 0.0,
                "challenges_lost": 0.7398,
                "fouls": 0.9739,
                "fouls_drawn": 0.2047,
                "blocks": 0.1069,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 11.6791,
                "total_progression": 31.5906,
                "progressive_carries": 0.1479,
                "shots_off_target": 0.1238
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 61.0,
                    "is_starting": true,
                    "weight": 0.2408,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.2047,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 31.0,
                    "is_starting": false,
                    "weight": 0.174,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 87.0,
                    "is_starting": true,
                    "weight": 0.1479,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 85.0,
                    "is_starting": true,
                    "weight": 0.1257,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1069,
                    "rating": 6.6
                  }
                ],
                "feature_row": {
                  "history_matches": 6.0,
                  "is_starting_11": 0.0,
                  "totalShots": 0.1257,
                  "creative_index": 0.1788,
                  "expectedGoals": 0.0059,
                  "expectedAssists": 0.0169,
                  "onTargetScoringAttempt": 0.0
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 0.23902025818824768,
                    "model_output": 0.239,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.4152
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0519
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0368
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0334
                        },
                        {
                          "name": "creative_efficiency",
                          "contribution": -0.017
                        }
                      ],
                      "others": -0.0929,
                      "total": 0.239,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.632142
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.116666
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.091833
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.091394
                        },
                        {
                          "name": "creative_efficiency",
                          "margin": -0.04996
                        }
                      ],
                      "others_margin": -0.328397
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.01636696793138981,
                    "model_output": 0.0164,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0371
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0114
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0063
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0052
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0019
                        }
                      ],
                      "others": -0.0075,
                      "total": 0.0164,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.566736
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.266414
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.18467
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.183268
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.074957
                        }
                      ],
                      "others_margin": -0.380398
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.021953094750642776,
                    "model_output": 0.022,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0224
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0159
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0074
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0046
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0028
                        }
                      ],
                      "others": -0.0101,
                      "total": 0.022,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.305082
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.291895
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.172538
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.124794
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.084416
                        }
                      ],
                      "others_margin": -0.377717
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.010243494994938374,
                    "model_output": 0.0102,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0441
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.018
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.01
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0031
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0017
                        }
                      ],
                      "others": -0.0073,
                      "total": 0.0102,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.629753
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.442298
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.368399
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.149153
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.091811
                        }
                      ],
                      "others_margin": -0.539783
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.023441998288035393,
                    "model_output": 0.0234,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0359
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0148
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0087
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0037
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0027
                        }
                      ],
                      "others": -0.0084,
                      "total": 0.0234,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.457532
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.273376
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.205145
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.102788
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.082468
                        }
                      ],
                      "others_margin": -0.305503
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.05285396799445152,
                    "model_output": 0.0529,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1409
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0607
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0241
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0183
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.003
                        }
                      ],
                      "others": -0.0241,
                      "total": 0.0529,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.570835
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.402741
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.219241
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.205976
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.037584
                        }
                      ],
                      "others_margin": -0.376806
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.17660808563232422,
                    "model_output": 0.1766,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.3011
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.2445
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0456
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0312
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0245
                        }
                      ],
                      "others": -0.167,
                      "total": 0.1766,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.301135
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.244519
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.04556
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.031204
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.024541
                        }
                      ],
                      "others_margin": -0.166897
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.694211006164551,
                    "model_output": 6.6942,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0803
                        },
                        {
                          "name": "rating",
                          "contribution": -0.038
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": 0.0349
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.0166
                        },
                        {
                          "name": "accuratePass",
                          "contribution": -0.0097
                        }
                      ],
                      "others": -0.045,
                      "total": 6.6942,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.080252
                        },
                        {
                          "name": "rating",
                          "margin": -0.037984
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": 0.034942
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.016595
                        },
                        {
                          "name": "accuratePass",
                          "margin": -0.009673
                        }
                      ],
                      "others_margin": -0.045098
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 6,
                  "role_matches": 1,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "all_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9908, quality 0.437)",
              "stats": {
                "key_pass": 0.2368,
                "expected_assists": 0.0162,
                "assists": 0.0218,
                "assist_rate": 0.0218,
                "expected_goals": 0.0101,
                "goals": 0.0232,
                "goal_rate": 0.0232,
                "shots_on_target": 0.0524,
                "total_shots": 0.1751,
                "rating": 6.6942,
                "minutes": 23.0,
                "total_pass": 40.9052,
                "accurate_pass": 38.3459,
                "duels_won": 0.7522,
                "total_long_balls": 3.1583,
                "accurate_long_balls": 2.2121,
                "total_own_half_passes": 22.8371,
                "accurate_own_half_passes": 22.0832,
                "total_opp_half_passes": 18.0681,
                "accurate_opp_half_passes": 16.2628,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 45.2276,
                "possession_lost": 3.4917,
                "dispossessed": 0.0,
                "duels_lost": 2.0612,
                "aerial_won": 0.0,
                "aerial_lost": 0.1245,
                "interceptions": 0.3583,
                "tackles_won": 0.4435,
                "tackles": 0.5494,
                "clearances": 1.2632,
                "total_contest": 0.2386,
                "won_contest": 0.0,
                "challenges_lost": 0.733,
                "fouls": 0.9649,
                "fouls_drawn": 0.2028,
                "blocks": 0.1059,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 11.5717,
                "total_progression": 31.3,
                "progressive_carries": 0.1465,
                "shots_off_target": 0.1227
              },
              "params": {
                "market_value_eur": 1900000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9908,
                "reference_quality": 0.505,
                "history_matches": 6,
                "history_shrink": 0.4545,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 23.0 to 22.0 expected minutes (appearance prob 0.50)",
              "stats": {
                "key_pass": 0.2262,
                "expected_assists": 0.0155,
                "assists": 0.0208,
                "assist_rate": 0.0208,
                "expected_goals": 0.0096,
                "goals": 0.0222,
                "goal_rate": 0.0222,
                "shots_on_target": 0.0501,
                "total_shots": 0.1673,
                "rating": 6.6942,
                "minutes": 21.97,
                "total_pass": 39.0773,
                "accurate_pass": 36.6324,
                "duels_won": 0.7186,
                "total_long_balls": 3.0172,
                "accurate_long_balls": 2.1133,
                "total_own_half_passes": 21.8166,
                "accurate_own_half_passes": 21.0964,
                "total_opp_half_passes": 17.2607,
                "accurate_opp_half_passes": 15.5361,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 43.2066,
                "possession_lost": 3.3357,
                "dispossessed": 0.0,
                "duels_lost": 1.9691,
                "aerial_won": 0.0,
                "aerial_lost": 0.1245,
                "interceptions": 0.3423,
                "tackles_won": 0.4237,
                "tackles": 0.5248,
                "clearances": 1.2068,
                "total_contest": 0.2279,
                "won_contest": 0.0,
                "challenges_lost": 0.733,
                "fouls": 0.9218,
                "fouls_drawn": 0.1937,
                "blocks": 0.1012,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 11.0546,
                "total_progression": 29.9013,
                "progressive_carries": 0.14,
                "shots_off_target": 0.1172,
                "bench_appearance_probability": 0.499,
                "bench_expected_minutes": 21.97
              },
              "params": {
                "expected_minutes": 21.97,
                "projection_minutes": 23.0,
                "minutes_scale": 0.9553,
                "appearance_probability": 0.499
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 0.2262,
                "expected_assists": 0.0155,
                "assists": 0.0208,
                "assist_rate": 0.0208,
                "expected_goals": 0.0096,
                "goals": 0.0222,
                "goal_rate": 0.0222,
                "shots_on_target": 0.0501,
                "total_shots": 0.1673,
                "rating": 6.6942,
                "minutes": 21.97,
                "total_pass": 39.0773,
                "accurate_pass": 36.6324,
                "duels_won": 0.7186,
                "total_long_balls": 3.0172,
                "accurate_long_balls": 2.1133,
                "total_own_half_passes": 21.8166,
                "accurate_own_half_passes": 21.0964,
                "total_opp_half_passes": 17.2607,
                "accurate_opp_half_passes": 15.5361,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 43.2066,
                "possession_lost": 3.3357,
                "dispossessed": 0.0,
                "duels_lost": 1.9691,
                "aerial_won": 0.0,
                "aerial_lost": 0.1245,
                "interceptions": 0.3423,
                "tackles_won": 0.4237,
                "tackles": 0.5248,
                "clearances": 1.2068,
                "total_contest": 0.2279,
                "won_contest": 0.0,
                "challenges_lost": 0.733,
                "fouls": 0.9218,
                "fouls_drawn": 0.1937,
                "blocks": 0.1012,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 11.0546,
                "total_progression": 29.9013,
                "progressive_carries": 0.14,
                "shots_off_target": 0.1172,
                "bench_appearance_probability": 0.499,
                "bench_expected_minutes": 21.97
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "not_projected_to_play",
              "description": "Not among the projected substitutes: no share of the team's goals or assists",
              "stats": {
                "key_pass": 0.2262,
                "expected_assists": 0.0155,
                "assist_rate": 0.0208,
                "assists": 0,
                "expected_goals": 0.0096,
                "goal_rate": 0.0222,
                "goals": 0,
                "shots_on_target": 0.0501,
                "total_shots": 0.1673,
                "rating": 6.6942,
                "minutes": 21.97,
                "total_pass": 39.0773,
                "accurate_pass": 36.6324,
                "duels_won": 0.7186,
                "total_long_balls": 3.0172,
                "accurate_long_balls": 2.1133,
                "total_own_half_passes": 21.8166,
                "accurate_own_half_passes": 21.0964,
                "total_opp_half_passes": 17.2607,
                "accurate_opp_half_passes": 15.5361,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 43.2066,
                "possession_lost": 3.3357,
                "dispossessed": 0.0,
                "duels_lost": 1.9691,
                "aerial_won": 0.0,
                "aerial_lost": 0.1245,
                "interceptions": 0.3423,
                "tackles_won": 0.4237,
                "tackles": 0.5248,
                "clearances": 1.2068,
                "total_contest": 0.2279,
                "won_contest": 0.0,
                "challenges_lost": 0.733,
                "fouls": 0.9218,
                "fouls_drawn": 0.1937,
                "blocks": 0.1012,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 11.0546,
                "total_progression": 29.9013,
                "progressive_carries": 0.14,
                "shots_off_target": 0.1172,
                "bench_appearance_probability": 0.499,
                "bench_expected_minutes": 21.97,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0
              },
              "params": {
                "appearance_probability": 0.499,
                "projected_substitutes": 3,
                "scoreline_reset": true
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 14 by projected rating, fifa_overall 70.0; not used by the projection)",
              "stats": {
                "key_pass": 0.2262,
                "expected_assists": 0.0155,
                "assist_rate": 0.0208,
                "assists": 0,
                "expected_goals": 0.0096,
                "goal_rate": 0.0222,
                "goals": 0,
                "shots_on_target": 0.0501,
                "total_shots": 0.1673,
                "rating": 6.6942,
                "minutes": 21.97,
                "total_pass": 39.0773,
                "accurate_pass": 36.6324,
                "duels_won": 0.7186,
                "total_long_balls": 3.0172,
                "accurate_long_balls": 2.1133,
                "total_own_half_passes": 21.8166,
                "accurate_own_half_passes": 21.0964,
                "total_opp_half_passes": 17.2607,
                "accurate_opp_half_passes": 15.5361,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 43.2066,
                "possession_lost": 3.3357,
                "dispossessed": 0.0,
                "duels_lost": 1.9691,
                "aerial_won": 0.0,
                "aerial_lost": 0.1245,
                "interceptions": 0.3423,
                "tackles_won": 0.4237,
                "tackles": 0.5248,
                "clearances": 1.2068,
                "total_contest": 0.2279,
                "won_contest": 0.0,
                "challenges_lost": 0.733,
                "fouls": 0.9218,
                "fouls_drawn": 0.1937,
                "blocks": 0.1012,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 11.0546,
                "total_progression": 29.9013,
                "progressive_carries": 0.14,
                "shots_off_target": 0.1172,
                "bench_appearance_probability": 0.499,
                "bench_expected_minutes": 21.97,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "fifa_overall": 70.0
              },
              "params": {
                "match_squad_rank": 14,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 5154,
                "fifa_rank": 5916.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 70.0
              }
            }
          ]
        },
        "Adrián Niño": {
          "player_id": 1402927,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 21,
          "height": 186,
          "market_value": 1900000,
          "stats": {
            "expected_goals": 0.1017,
            "goal_rate": 0.1019,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "expected_assists": 0.0152,
            "key_pass": 0,
            "rating": 6.5402,
            "minutes": 25,
            "total_pass": 4,
            "accurate_pass": 3,
            "duels_won": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 2,
            "accurate_opp_half_passes": 2,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 8,
            "possession_lost": 1.864,
            "dispossessed": 0.3262,
            "duels_lost": 3,
            "aerial_lost": 3,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 0,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.146,
            "offsides": 0,
            "ball_carries": 1,
            "total_progression": 5,
            "progressive_carries": 0,
            "shots_off_target": 1,
            "bench_appearance_probability": 0.559,
            "bench_expected_minutes": 25.29,
            "projected_substitution_order": 1,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 3,
            "projected_substitution_expected_count": 2.43,
            "projected_substitution_game_state_adjustment": 1,
            "substitution_usage": "projected_used_substitute",
            "projected_goals": 0,
            "goal_probability": 0.0541,
            "projected_assists": 0,
            "assist_probability": 0.0084,
            "finishing_factor": 0.9768,
            "creation_factor": 0.8,
            "fifa_overall": 72.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 45,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0803,
                "expected_assists": 0.0038,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 7,
                "accurate_pass": 5,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 29,
                "rating": 6.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.289,
                "expected_assists": 0.0002,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 3,
                "accurate_pass": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 23,
                "rating": 7.6,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1408,
                "expected_assists": 0.0015,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 2,
                "total_pass": 1,
                "accurate_pass": 1,
                "key_pass": 1,
                "aerial_won": 1,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 4211,
            "combined_rank_score": 2241.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 4265.0,
            "fifa_overall": 72.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 18,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.5402,
            "source_file": "data/player_rankings.csv",
            "player_name": "Adrián Niño",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Léo Scienza",
                  "ranking": 4206
                },
                {
                  "player_name": "Iván Villar",
                  "ranking": 4207
                },
                {
                  "player_name": "Arthur Avom Ebong",
                  "ranking": 4208
                },
                {
                  "player_name": "Ángel Pérez",
                  "ranking": 4209
                },
                {
                  "player_name": "Salomón Rondón",
                  "ranking": 4210
                }
              ],
              "lower": [
                {
                  "player_name": "Anthony Lopes",
                  "ranking": 4212
                },
                {
                  "player_name": "Thorgan Hazard",
                  "ranking": 4213
                },
                {
                  "player_name": "Kenny Lala",
                  "ranking": 4214
                },
                {
                  "player_name": "Morgan Sanson",
                  "ranking": 4215
                },
                {
                  "player_name": "Hamari Traoré",
                  "ranking": 4216
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.438,
          "history_matches": 3,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 3,
            "data_confidence": 0.438,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 25.292222187561247,
            "bench_appearance_prob": 0.5587373721618749,
            "market_value_adjustment": 0.9873,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost F_service (3 historical appearances) to 25.3 expected mins (appearance prob 0.56)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.1189,
                "goals": 0.1147,
                "goal_rate": 0.1147,
                "shots_on_target": 0.3099,
                "total_shots": 1.0331,
                "expected_assists": 0.0178,
                "key_pass": 0.2164,
                "rating": 6.5402,
                "minutes": 28.12,
                "total_pass": 3.9932,
                "accurate_pass": 3.2157,
                "duels_won": 1.3392,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.5549,
                "accurate_opp_half_passes": 1.7774,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 8.654,
                "possession_lost": 2.0991,
                "dispossessed": 0.3304,
                "duels_lost": 3.4879,
                "aerial_lost": 2.7687,
                "total_contest": 0.3887,
                "won_contest": 0.3887,
                "ball_recovery": 0.3887,
                "challenges_lost": 0.3887,
                "fouls": 0.2809,
                "fouls_drawn": 0.2809,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3887,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.1706,
                "offsides": 0.3304,
                "ball_carries": 1.3887,
                "total_progression": 5.3266,
                "progressive_carries": 0.3887,
                "shots_off_target": 0.7232
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.3887,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 29.0,
                    "is_starting": false,
                    "weight": 0.3304,
                    "rating": 6.1
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 23.0,
                    "is_starting": false,
                    "weight": 0.2809,
                    "rating": 7.6
                  }
                ],
                "feature_row": {
                  "history_matches": 3.0,
                  "is_starting_11": 0.0,
                  "expectedGoals": 0.1662,
                  "totalOppositionHalfPasses": 2.5549,
                  "accurateOppositionHalfPasses": 1.7775,
                  "accuratePass": 3.2157,
                  "totalShots": 1.5617
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.11885768175125122,
                    "model_output": 0.1189,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0875
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0099
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0087
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0046
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0045
                        }
                      ],
                      "others": 0.0063,
                      "total": 0.1189,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.579348
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.084801
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.07422
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.041235
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.041199
                        }
                      ],
                      "others_margin": 0.053653
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.11473456770181656,
                    "model_output": 0.1147,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0916
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0091
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0056
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.004
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": 0.0041
                        }
                      ],
                      "others": 0.0092,
                      "total": 0.1147,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.597443
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.084355
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.056039
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.039989
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": 0.039368
                        }
                      ],
                      "others_margin": 0.084212
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.3099268078804016,
                    "model_output": 0.3099,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2211
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0177
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0127
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0106
                        },
                        {
                          "name": "shot_accuracy",
                          "contribution": -0.008
                        }
                      ],
                      "others": 0.0076,
                      "total": 0.3099,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.530611
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.054519
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.038703
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.033733
                        },
                        {
                          "name": "shot_accuracy",
                          "margin": -0.026161
                        }
                      ],
                      "others_margin": 0.025065
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 1.033111572265625,
                    "model_output": 1.0331,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.5718
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0762
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0548
                        },
                        {
                          "name": "shot_waste_rate",
                          "contribution": 0.0525
                        },
                        {
                          "name": "shotOffTarget",
                          "contribution": 0.0506
                        }
                      ],
                      "others": -0.0079,
                      "total": 1.0331,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.571759
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.076215
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.054822
                        },
                        {
                          "name": "shot_waste_rate",
                          "margin": 0.0525
                        },
                        {
                          "name": "shotOffTarget",
                          "margin": 0.050596
                        }
                      ],
                      "others_margin": -0.00797
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.01777803897857666,
                    "model_output": 0.0178,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0177
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0111
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0039
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0022
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.002
                        }
                      ],
                      "others": -0.0096,
                      "total": 0.0178,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.321293
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.273305
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.115059
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.07272
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.071568
                        }
                      ],
                      "others_margin": -0.431391
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 0.21638719737529755,
                    "model_output": 0.2164,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2673
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0561
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0372
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0235
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0161
                        }
                      ],
                      "others": -0.0574,
                      "total": 0.2164,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.505061
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.148461
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.112035
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.078043
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.057193
                        }
                      ],
                      "others_margin": -0.235335
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.540198802947998,
                    "model_output": 6.5402,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0531
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0218
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0196
                        },
                        {
                          "name": "aerialLost",
                          "contribution": -0.0163
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0161
                        }
                      ],
                      "others": -0.0951,
                      "total": 6.5402,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.053106
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.021785
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.019645
                        },
                        {
                          "name": "aerialLost",
                          "margin": -0.01633
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.01607
                        }
                      ],
                      "others_margin": -0.095026
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 3,
                  "role_matches": 3,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9873, quality 0.437)",
              "stats": {
                "expected_goals": 0.1173,
                "goals": 0.1133,
                "goal_rate": 0.1133,
                "shots_on_target": 0.306,
                "total_shots": 1.02,
                "expected_assists": 0.0176,
                "key_pass": 0.2136,
                "rating": 6.5402,
                "minutes": 28.12,
                "total_pass": 3.9425,
                "accurate_pass": 3.1749,
                "duels_won": 1.3222,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.5225,
                "accurate_opp_half_passes": 1.7548,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 8.5441,
                "possession_lost": 2.0724,
                "dispossessed": 0.3262,
                "duels_lost": 3.4436,
                "aerial_lost": 2.7335,
                "total_contest": 0.3838,
                "won_contest": 0.3838,
                "ball_recovery": 0.3838,
                "challenges_lost": 0.3838,
                "fouls": 0.2773,
                "fouls_drawn": 0.2773,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3838,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.1684,
                "offsides": 0.3262,
                "ball_carries": 1.3711,
                "total_progression": 5.259,
                "progressive_carries": 0.3838,
                "shots_off_target": 0.714
              },
              "params": {
                "market_value_eur": 1900000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9873,
                "reference_quality": 0.505,
                "history_matches": 3,
                "history_shrink": 0.625,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 28.1 to 25.3 expected minutes (appearance prob 0.56)",
              "stats": {
                "expected_goals": 0.1055,
                "goals": 0.1019,
                "goal_rate": 0.1019,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0158,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.1515,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29
              },
              "params": {
                "expected_minutes": 25.29,
                "projection_minutes": 28.12,
                "minutes_scale": 0.8994,
                "appearance_probability": 0.559
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.1055,
                "goals": 0.1019,
                "goal_rate": 0.1019,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0158,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.1515,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "expected_goals": 0.1017,
                "goal_rate": 0.1019,
                "goals": 0,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0152,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.146,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9768,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 0.559
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 18 by projected rating, fifa_overall 72.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.1017,
                "goal_rate": 0.1019,
                "goals": 0,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0152,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.146,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9768,
                "creation_factor": 0.8,
                "fifa_overall": 72.0
              },
              "params": {
                "match_squad_rank": 18,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 4211,
                "fifa_rank": 4265.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 72.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "expected_goals": 0.1017,
                "goal_rate": 0.1019,
                "goals": 0,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0152,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.146,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0541,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9768,
                "creation_factor": 0.8,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0541,
                "scorer_weight": 0.0555,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0672,
                "finishing_factor": 0.9768,
                "appearance_weight": 0.559,
                "weight_rank": 5,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "expected_goals": 0.1017,
                "goal_rate": 0.1019,
                "goals": 0,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0152,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.146,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0541,
                "projected_assists": 0,
                "assist_probability": 0.0084,
                "finishing_factor": 0.9768,
                "creation_factor": 0.8,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0084,
                "provider_weight": 0.0068,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0116,
                "creation_factor": 0.8,
                "appearance_weight": 0.559,
                "weight_rank": 11,
                "eligible_players": 13
              }
            }
          ]
        },
        "Juan Cruz": {
          "player_id": 936234,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 19,
          "height": 179,
          "market_value": 1700000,
          "stats": {
            "expected_goals": 0.061,
            "goal_rate": 0.0757,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "expected_assists": 0.0427,
            "key_pass": 0,
            "rating": 6.6002,
            "minutes": 25,
            "total_pass": 8,
            "accurate_pass": 7,
            "duels_won": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 6,
            "accurate_opp_half_passes": 5,
            "crosses_total": 2,
            "crosses_accurate": 0,
            "touches": 13,
            "possession_lost": 4.377,
            "dispossessed": 0.6408,
            "duels_lost": 1,
            "aerial_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0393,
            "offsides": 0,
            "ball_carries": 4,
            "total_progression": 35,
            "progressive_carries": 1,
            "shots_off_target": 0,
            "bench_appearance_probability": 0.559,
            "bench_expected_minutes": 25.29,
            "projected_substitution_order": 2,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 3,
            "projected_substitution_expected_count": 2.43,
            "projected_substitution_game_state_adjustment": 1,
            "substitution_usage": "projected_used_substitute",
            "projected_goals": 0,
            "goal_probability": 0.0331,
            "projected_assists": 0,
            "assist_probability": 0.0234,
            "finishing_factor": 1.1094,
            "creation_factor": 0.8,
            "fifa_overall": 73.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 10,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0361,
                "expected_assists": 0.0,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 45,
                "rating": 6.9,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_assists": 0.0581,
                "total_shots": 0,
                "total_pass": 10,
                "accurate_pass": 6,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 1,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 29,
                "rating": 7.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0016,
                "total_shots": 0,
                "total_pass": 5,
                "accurate_pass": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 59,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0188,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 16,
                "tackles": 2,
                "tackles_won": 1,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 29,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0196,
                "expected_assists": 0.0057,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 14,
                "accurate_pass": 12,
                "tackles": 1,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 56,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0225,
                "expected_assists": 0.0104,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 11,
                "accurate_pass": 11,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 23,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0092,
                "total_shots": 0,
                "total_pass": 8,
                "accurate_pass": 8,
                "tackles": 1,
                "duels_won": 2,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 4217,
            "combined_rank_score": 2245.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 959.0,
            "sofascore_rating": 6.4,
            "sofascore_appearances": 1.0,
            "fifa_rank": 3532.0,
            "fifa_overall": 73.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 16,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.6002,
            "source_file": "data/player_rankings.csv",
            "player_name": "Juan Cruz",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Anthony Lopes",
                  "ranking": 4212
                },
                {
                  "player_name": "Thorgan Hazard",
                  "ranking": 4213
                },
                {
                  "player_name": "Kenny Lala",
                  "ranking": 4214
                },
                {
                  "player_name": "Morgan Sanson",
                  "ranking": 4215
                },
                {
                  "player_name": "Hamari Traoré",
                  "ranking": 4216
                }
              ],
              "lower": [
                {
                  "player_name": "Maxime Lopez",
                  "ranking": 4218
                },
                {
                  "player_name": "Guillermo Martínez",
                  "ranking": 4219
                },
                {
                  "player_name": "Haris Belkebla",
                  "ranking": 4220
                },
                {
                  "player_name": "Renato Sanches",
                  "ranking": 4221
                },
                {
                  "player_name": "Yusuf Sarı",
                  "ranking": 4222
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.688,
          "history_matches": 7,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 7,
            "data_confidence": 0.688,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 25.292222187561247,
            "bench_appearance_prob": 0.5587373721618749,
            "market_value_adjustment": 0.9916,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost F_service (7 historical appearances) to 25.3 expected mins (appearance prob 0.56)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.0536,
                "goals": 0.0641,
                "goal_rate": 0.0641,
                "shots_on_target": 0.248,
                "total_shots": 0.5991,
                "expected_assists": 0.0375,
                "key_pass": 0.3244,
                "rating": 6.6002,
                "minutes": 21.25,
                "total_pass": 6.3635,
                "accurate_pass": 5.5962,
                "duels_won": 0.6122,
                "total_long_balls": 0.7673,
                "accurate_long_balls": 0.2267,
                "total_opp_half_passes": 5.1898,
                "accurate_opp_half_passes": 4.4225,
                "crosses_total": 1.4749,
                "crosses_accurate": 0.0,
                "touches": 11.3836,
                "possession_lost": 3.7087,
                "dispossessed": 0.6462,
                "duels_lost": 1.0656,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.8049,
                "challenges_lost": 0.2267,
                "fouls": 0.1927,
                "fouls_drawn": 0.1927,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.4194,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0346,
                "offsides": 0.0,
                "ball_carries": 3.7273,
                "total_progression": 29.9771,
                "progressive_carries": 0.96,
                "shots_off_target": 0.3511
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 10.0,
                    "is_starting": false,
                    "weight": 0.2208,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 45.0,
                    "is_starting": true,
                    "weight": 0.1877,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 29.0,
                    "is_starting": false,
                    "weight": 0.1595,
                    "rating": 7.1
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 59.0,
                    "is_starting": true,
                    "weight": 0.1356,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 29.0,
                    "is_starting": false,
                    "weight": 0.1152,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 56.0,
                    "is_starting": true,
                    "weight": 0.098,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 23.0,
                    "is_starting": false,
                    "weight": 0.0833,
                    "rating": 6.4
                  }
                ],
                "feature_row": {
                  "history_matches": 7.0,
                  "is_starting_11": 0.0,
                  "expectedGoals": 0.0124,
                  "totalOppositionHalfPasses": 6.1558,
                  "accurateOppositionHalfPasses": 5.2978,
                  "accuratePass": 7.2195,
                  "totalShots": 0.434
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.053635645657777786,
                    "model_output": 0.0536,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.082
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0226
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": -0.0101
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0069
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0036
                        }
                      ],
                      "others": -0.0202,
                      "total": 0.0536,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.531043
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.214882
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": -0.113641
                        },
                        {
                          "name": "goals",
                          "margin": -0.085959
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.047732
                        }
                      ],
                      "others_margin": -0.317605
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.06411342322826385,
                    "model_output": 0.0641,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.082
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0197
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0097
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": -0.0088
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0066
                        }
                      ],
                      "others": -0.0128,
                      "total": 0.0641,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.514997
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.176936
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.100394
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": -0.1001
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.08249
                        }
                      ],
                      "others_margin": -0.18132
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.24801009893417358,
                    "model_output": 0.248,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1756
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0288
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": -0.0245
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0212
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0164
                        }
                      ],
                      "others": -0.0225,
                      "total": 0.248,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.395934
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.083162
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": -0.07656
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.071316
                        },
                        {
                          "name": "goals",
                          "margin": -0.058739
                        }
                      ],
                      "others_margin": -0.086781
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.5991223454475403,
                    "model_output": 0.5991,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.4649
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.141
                        },
                        {
                          "name": "goals",
                          "contribution": -0.05
                        },
                        {
                          "name": "duelWon",
                          "contribution": -0.0324
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0301
                        }
                      ],
                      "others": -0.0612,
                      "total": 0.5991,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.464903
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.141011
                        },
                        {
                          "name": "goals",
                          "margin": -0.04997
                        },
                        {
                          "name": "duelWon",
                          "margin": -0.032373
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.030116
                        }
                      ],
                      "others_margin": -0.061211
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.037468668073415756,
                    "model_output": 0.0375,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0199
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0051
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0034
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.0028
                        },
                        {
                          "name": "duelLost",
                          "contribution": 0.0026
                        }
                      ],
                      "others": 0.0018,
                      "total": 0.0375,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.370569
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.122968
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.090777
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.08285
                        },
                        {
                          "name": "duelLost",
                          "margin": 0.075625
                        }
                      ],
                      "others_margin": 0.051743
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 0.32442328333854675,
                    "model_output": 0.3244,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2834
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0253
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0217
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0114
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.0114
                        }
                      ],
                      "others": -0.0192,
                      "total": 0.3244,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.545504
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.066828
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.061249
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.033786
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.033619
                        }
                      ],
                      "others_margin": -0.057399
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.600246906280518,
                    "model_output": 6.6002,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0551
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0243
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0158
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0149
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.0102
                        }
                      ],
                      "others": -0.0417,
                      "total": 6.6002,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.055144
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.024291
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.015824
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.014943
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.010196
                        }
                      ],
                      "others_margin": -0.041517
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 7,
                  "role_matches": 4,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9916, quality 0.437)",
              "stats": {
                "expected_goals": 0.0532,
                "goals": 0.0636,
                "goal_rate": 0.0636,
                "shots_on_target": 0.2459,
                "total_shots": 0.5941,
                "expected_assists": 0.0372,
                "key_pass": 0.3217,
                "rating": 6.6002,
                "minutes": 21.25,
                "total_pass": 6.31,
                "accurate_pass": 5.5492,
                "duels_won": 0.6071,
                "total_long_balls": 0.7609,
                "accurate_long_balls": 0.2248,
                "total_opp_half_passes": 5.1462,
                "accurate_opp_half_passes": 4.3854,
                "crosses_total": 1.4625,
                "crosses_accurate": 0.0,
                "touches": 11.288,
                "possession_lost": 3.6775,
                "dispossessed": 0.6408,
                "duels_lost": 1.0566,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.7981,
                "challenges_lost": 0.2248,
                "fouls": 0.1911,
                "fouls_drawn": 0.1911,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.4159,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0343,
                "offsides": 0.0,
                "ball_carries": 3.696,
                "total_progression": 29.7253,
                "progressive_carries": 0.9519,
                "shots_off_target": 0.3482
              },
              "params": {
                "market_value_eur": 1700000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9916,
                "reference_quality": 0.505,
                "history_matches": 7,
                "history_shrink": 0.4167,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 21.2 to 25.3 expected minutes (appearance prob 0.56)",
              "stats": {
                "expected_goals": 0.0633,
                "goals": 0.0757,
                "goal_rate": 0.0757,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0443,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0408,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29
              },
              "params": {
                "expected_minutes": 25.29,
                "projection_minutes": 21.25,
                "minutes_scale": 1.1902,
                "appearance_probability": 0.559
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.0633,
                "goals": 0.0757,
                "goal_rate": 0.0757,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0443,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0408,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": true
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "expected_goals": 0.061,
                "goal_rate": 0.0757,
                "goals": 0,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0427,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0393,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1094,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 0.559
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 16 by projected rating, fifa_overall 73.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.061,
                "goal_rate": 0.0757,
                "goals": 0,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0427,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0393,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1094,
                "creation_factor": 0.8,
                "fifa_overall": 73.0
              },
              "params": {
                "match_squad_rank": 16,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 4217,
                "fifa_rank": 3532.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 73.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "expected_goals": 0.061,
                "goal_rate": 0.0757,
                "goals": 0,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0427,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0393,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0331,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1094,
                "creation_factor": 0.8,
                "fifa_overall": 73.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0331,
                "scorer_weight": 0.0378,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0458,
                "finishing_factor": 1.1094,
                "appearance_weight": 0.559,
                "weight_rank": 8,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "expected_goals": 0.061,
                "goal_rate": 0.0757,
                "goals": 0,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0427,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0393,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0331,
                "projected_assists": 0,
                "assist_probability": 0.0234,
                "finishing_factor": 1.1094,
                "creation_factor": 0.8,
                "fifa_overall": 73.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0234,
                "provider_weight": 0.0191,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0325,
                "creation_factor": 0.8,
                "appearance_weight": 0.559,
                "weight_rank": 7,
                "eligible_players": 13
              }
            }
          ]
        }
      },
      "substitutes": {
        "Adrián Niño": {
          "player_id": 1402927,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 21,
          "height": 186,
          "market_value": 1900000,
          "stats": {
            "expected_goals": 0.1017,
            "goal_rate": 0.1019,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "expected_assists": 0.0152,
            "key_pass": 0,
            "rating": 6.5402,
            "minutes": 25,
            "total_pass": 4,
            "accurate_pass": 3,
            "duels_won": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 2,
            "accurate_opp_half_passes": 2,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 8,
            "possession_lost": 1.864,
            "dispossessed": 0.3262,
            "duels_lost": 3,
            "aerial_lost": 3,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 0,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.146,
            "offsides": 0,
            "ball_carries": 1,
            "total_progression": 5,
            "progressive_carries": 0,
            "shots_off_target": 1,
            "bench_appearance_probability": 0.559,
            "bench_expected_minutes": 25.29,
            "projected_substitution_order": 1,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 3,
            "projected_substitution_expected_count": 2.43,
            "projected_substitution_game_state_adjustment": 1,
            "substitution_usage": "projected_used_substitute",
            "projected_goals": 0,
            "goal_probability": 0.0541,
            "projected_assists": 0,
            "assist_probability": 0.0084,
            "finishing_factor": 0.9768,
            "creation_factor": 0.8,
            "fifa_overall": 72.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 45,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0803,
                "expected_assists": 0.0038,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 7,
                "accurate_pass": 5,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 29,
                "rating": 6.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.289,
                "expected_assists": 0.0002,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 3,
                "accurate_pass": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 23,
                "rating": 7.6,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1408,
                "expected_assists": 0.0015,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 2,
                "total_pass": 1,
                "accurate_pass": 1,
                "key_pass": 1,
                "aerial_won": 1,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 4211,
            "combined_rank_score": 2241.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 4265.0,
            "fifa_overall": 72.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 18,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.5402,
            "source_file": "data/player_rankings.csv",
            "player_name": "Adrián Niño",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Léo Scienza",
                  "ranking": 4206
                },
                {
                  "player_name": "Iván Villar",
                  "ranking": 4207
                },
                {
                  "player_name": "Arthur Avom Ebong",
                  "ranking": 4208
                },
                {
                  "player_name": "Ángel Pérez",
                  "ranking": 4209
                },
                {
                  "player_name": "Salomón Rondón",
                  "ranking": 4210
                }
              ],
              "lower": [
                {
                  "player_name": "Anthony Lopes",
                  "ranking": 4212
                },
                {
                  "player_name": "Thorgan Hazard",
                  "ranking": 4213
                },
                {
                  "player_name": "Kenny Lala",
                  "ranking": 4214
                },
                {
                  "player_name": "Morgan Sanson",
                  "ranking": 4215
                },
                {
                  "player_name": "Hamari Traoré",
                  "ranking": 4216
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.438,
          "history_matches": 3,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 3,
            "data_confidence": 0.438,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 25.292222187561247,
            "bench_appearance_prob": 0.5587373721618749,
            "market_value_adjustment": 0.9873,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost F_service (3 historical appearances) to 25.3 expected mins (appearance prob 0.56)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.1189,
                "goals": 0.1147,
                "goal_rate": 0.1147,
                "shots_on_target": 0.3099,
                "total_shots": 1.0331,
                "expected_assists": 0.0178,
                "key_pass": 0.2164,
                "rating": 6.5402,
                "minutes": 28.12,
                "total_pass": 3.9932,
                "accurate_pass": 3.2157,
                "duels_won": 1.3392,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.5549,
                "accurate_opp_half_passes": 1.7774,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 8.654,
                "possession_lost": 2.0991,
                "dispossessed": 0.3304,
                "duels_lost": 3.4879,
                "aerial_lost": 2.7687,
                "total_contest": 0.3887,
                "won_contest": 0.3887,
                "ball_recovery": 0.3887,
                "challenges_lost": 0.3887,
                "fouls": 0.2809,
                "fouls_drawn": 0.2809,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3887,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.1706,
                "offsides": 0.3304,
                "ball_carries": 1.3887,
                "total_progression": 5.3266,
                "progressive_carries": 0.3887,
                "shots_off_target": 0.7232
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.3887,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 29.0,
                    "is_starting": false,
                    "weight": 0.3304,
                    "rating": 6.1
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 23.0,
                    "is_starting": false,
                    "weight": 0.2809,
                    "rating": 7.6
                  }
                ],
                "feature_row": {
                  "history_matches": 3.0,
                  "is_starting_11": 0.0,
                  "expectedGoals": 0.1662,
                  "totalOppositionHalfPasses": 2.5549,
                  "accurateOppositionHalfPasses": 1.7775,
                  "accuratePass": 3.2157,
                  "totalShots": 1.5617
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.11885768175125122,
                    "model_output": 0.1189,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0875
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0099
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0087
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0046
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0045
                        }
                      ],
                      "others": 0.0063,
                      "total": 0.1189,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.579348
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.084801
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.07422
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.041235
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.041199
                        }
                      ],
                      "others_margin": 0.053653
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.11473456770181656,
                    "model_output": 0.1147,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0916
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0091
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0056
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.004
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": 0.0041
                        }
                      ],
                      "others": 0.0092,
                      "total": 0.1147,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.597443
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.084355
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.056039
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.039989
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": 0.039368
                        }
                      ],
                      "others_margin": 0.084212
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.3099268078804016,
                    "model_output": 0.3099,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2211
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0177
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0127
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0106
                        },
                        {
                          "name": "shot_accuracy",
                          "contribution": -0.008
                        }
                      ],
                      "others": 0.0076,
                      "total": 0.3099,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.530611
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.054519
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.038703
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.033733
                        },
                        {
                          "name": "shot_accuracy",
                          "margin": -0.026161
                        }
                      ],
                      "others_margin": 0.025065
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 1.033111572265625,
                    "model_output": 1.0331,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.5718
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0762
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0548
                        },
                        {
                          "name": "shot_waste_rate",
                          "contribution": 0.0525
                        },
                        {
                          "name": "shotOffTarget",
                          "contribution": 0.0506
                        }
                      ],
                      "others": -0.0079,
                      "total": 1.0331,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.571759
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.076215
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.054822
                        },
                        {
                          "name": "shot_waste_rate",
                          "margin": 0.0525
                        },
                        {
                          "name": "shotOffTarget",
                          "margin": 0.050596
                        }
                      ],
                      "others_margin": -0.00797
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.01777803897857666,
                    "model_output": 0.0178,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0177
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0111
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0039
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0022
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.002
                        }
                      ],
                      "others": -0.0096,
                      "total": 0.0178,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.321293
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.273305
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.115059
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.07272
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.071568
                        }
                      ],
                      "others_margin": -0.431391
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 0.21638719737529755,
                    "model_output": 0.2164,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2673
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0561
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0372
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0235
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0161
                        }
                      ],
                      "others": -0.0574,
                      "total": 0.2164,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.505061
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.148461
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.112035
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.078043
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.057193
                        }
                      ],
                      "others_margin": -0.235335
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.540198802947998,
                    "model_output": 6.5402,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0531
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0218
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0196
                        },
                        {
                          "name": "aerialLost",
                          "contribution": -0.0163
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0161
                        }
                      ],
                      "others": -0.0951,
                      "total": 6.5402,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.053106
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.021785
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.019645
                        },
                        {
                          "name": "aerialLost",
                          "margin": -0.01633
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.01607
                        }
                      ],
                      "others_margin": -0.095026
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 3,
                  "role_matches": 3,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9873, quality 0.437)",
              "stats": {
                "expected_goals": 0.1173,
                "goals": 0.1133,
                "goal_rate": 0.1133,
                "shots_on_target": 0.306,
                "total_shots": 1.02,
                "expected_assists": 0.0176,
                "key_pass": 0.2136,
                "rating": 6.5402,
                "minutes": 28.12,
                "total_pass": 3.9425,
                "accurate_pass": 3.1749,
                "duels_won": 1.3222,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.5225,
                "accurate_opp_half_passes": 1.7548,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 8.5441,
                "possession_lost": 2.0724,
                "dispossessed": 0.3262,
                "duels_lost": 3.4436,
                "aerial_lost": 2.7335,
                "total_contest": 0.3838,
                "won_contest": 0.3838,
                "ball_recovery": 0.3838,
                "challenges_lost": 0.3838,
                "fouls": 0.2773,
                "fouls_drawn": 0.2773,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3838,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.1684,
                "offsides": 0.3262,
                "ball_carries": 1.3711,
                "total_progression": 5.259,
                "progressive_carries": 0.3838,
                "shots_off_target": 0.714
              },
              "params": {
                "market_value_eur": 1900000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9873,
                "reference_quality": 0.505,
                "history_matches": 3,
                "history_shrink": 0.625,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 28.1 to 25.3 expected minutes (appearance prob 0.56)",
              "stats": {
                "expected_goals": 0.1055,
                "goals": 0.1019,
                "goal_rate": 0.1019,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0158,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.1515,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29
              },
              "params": {
                "expected_minutes": 25.29,
                "projection_minutes": 28.12,
                "minutes_scale": 0.8994,
                "appearance_probability": 0.559
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.1055,
                "goals": 0.1019,
                "goal_rate": 0.1019,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0158,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.1515,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "expected_goals": 0.1017,
                "goal_rate": 0.1019,
                "goals": 0,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0152,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.146,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9768,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 0.559
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 18 by projected rating, fifa_overall 72.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.1017,
                "goal_rate": 0.1019,
                "goals": 0,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0152,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.146,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9768,
                "creation_factor": 0.8,
                "fifa_overall": 72.0
              },
              "params": {
                "match_squad_rank": 18,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 4211,
                "fifa_rank": 4265.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 72.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "expected_goals": 0.1017,
                "goal_rate": 0.1019,
                "goals": 0,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0152,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.146,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0541,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.9768,
                "creation_factor": 0.8,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0541,
                "scorer_weight": 0.0555,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0672,
                "finishing_factor": 0.9768,
                "appearance_weight": 0.559,
                "weight_rank": 5,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "expected_goals": 0.1017,
                "goal_rate": 0.1019,
                "goals": 0,
                "shots_on_target": 0.2752,
                "total_shots": 0.9174,
                "expected_assists": 0.0152,
                "key_pass": 0.1921,
                "rating": 6.5402,
                "minutes": 25.29,
                "total_pass": 3.546,
                "accurate_pass": 2.8556,
                "duels_won": 1.1892,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_opp_half_passes": 2.2688,
                "accurate_opp_half_passes": 1.5783,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.6849,
                "possession_lost": 1.864,
                "dispossessed": 0.3262,
                "duels_lost": 3.0973,
                "aerial_lost": 2.7335,
                "total_contest": 0.3452,
                "won_contest": 0.3452,
                "ball_recovery": 0.3452,
                "challenges_lost": 0.3838,
                "fouls": 0.2494,
                "fouls_drawn": 0.2494,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.0,
                "clearances": 0.3452,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.146,
                "offsides": 0.3262,
                "ball_carries": 1.2332,
                "total_progression": 4.7301,
                "progressive_carries": 0.3452,
                "shots_off_target": 0.6422,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0541,
                "projected_assists": 0,
                "assist_probability": 0.0084,
                "finishing_factor": 0.9768,
                "creation_factor": 0.8,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0084,
                "provider_weight": 0.0068,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0116,
                "creation_factor": 0.8,
                "appearance_weight": 0.559,
                "weight_rank": 11,
                "eligible_players": 13
              }
            }
          ]
        },
        "Juan Cruz": {
          "player_id": 936234,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 19,
          "height": 179,
          "market_value": 1700000,
          "stats": {
            "expected_goals": 0.061,
            "goal_rate": 0.0757,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "expected_assists": 0.0427,
            "key_pass": 0,
            "rating": 6.6002,
            "minutes": 25,
            "total_pass": 8,
            "accurate_pass": 7,
            "duels_won": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 6,
            "accurate_opp_half_passes": 5,
            "crosses_total": 2,
            "crosses_accurate": 0,
            "touches": 13,
            "possession_lost": 4.377,
            "dispossessed": 0.6408,
            "duels_lost": 1,
            "aerial_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0393,
            "offsides": 0,
            "ball_carries": 4,
            "total_progression": 35,
            "progressive_carries": 1,
            "shots_off_target": 0,
            "bench_appearance_probability": 0.559,
            "bench_expected_minutes": 25.29,
            "projected_substitution_order": 2,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 3,
            "projected_substitution_expected_count": 2.43,
            "projected_substitution_game_state_adjustment": 1,
            "substitution_usage": "projected_used_substitute",
            "projected_goals": 0,
            "goal_probability": 0.0331,
            "projected_assists": 0,
            "assist_probability": 0.0234,
            "finishing_factor": 1.1094,
            "creation_factor": 0.8,
            "fifa_overall": 73.0
          },
          "latest_10_games": [
            {
              "match_id": 16416303,
              "match_date": "2026-09-20",
              "home_team": "Getafe",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Getafe",
              "stats": {
                "minutes": 10,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0361,
                "expected_assists": 0.0,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416338,
              "match_date": "2026-09-17",
              "home_team": "Málaga CF",
              "away_team": "Villarreal",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 45,
                "rating": 6.9,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_assists": 0.0581,
                "total_shots": 0,
                "total_pass": 10,
                "accurate_pass": 6,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 1,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416347,
              "match_date": "2026-09-13",
              "home_team": "Celta Vigo",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 29,
                "rating": 7.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0016,
                "total_shots": 0,
                "total_pass": 5,
                "accurate_pass": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 59,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0188,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 16,
                "tackles": 2,
                "tackles_won": 1,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416312,
              "match_date": "2026-08-30",
              "home_team": "Real Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 29,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0196,
                "expected_assists": 0.0057,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 14,
                "accurate_pass": 12,
                "tackles": 1,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416307,
              "match_date": "2026-08-24",
              "home_team": "Málaga CF",
              "away_team": "Deportivo de A Coruña",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Málaga CF",
              "opponent": "Deportivo de A Coruña",
              "stats": {
                "minutes": 56,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0225,
                "expected_assists": 0.0104,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 11,
                "accurate_pass": 11,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421055,
              "match_date": "2026-08-19",
              "home_team": "Atlético Madrid",
              "away_team": "Málaga CF",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 23,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0092,
                "total_shots": 0,
                "total_pass": 8,
                "accurate_pass": 8,
                "tackles": 1,
                "duels_won": 2,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 4217,
            "combined_rank_score": 2245.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 959.0,
            "sofascore_rating": 6.4,
            "sofascore_appearances": 1.0,
            "fifa_rank": 3532.0,
            "fifa_overall": 73.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 16,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.6002,
            "source_file": "data/player_rankings.csv",
            "player_name": "Juan Cruz",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Anthony Lopes",
                  "ranking": 4212
                },
                {
                  "player_name": "Thorgan Hazard",
                  "ranking": 4213
                },
                {
                  "player_name": "Kenny Lala",
                  "ranking": 4214
                },
                {
                  "player_name": "Morgan Sanson",
                  "ranking": 4215
                },
                {
                  "player_name": "Hamari Traoré",
                  "ranking": 4216
                }
              ],
              "lower": [
                {
                  "player_name": "Maxime Lopez",
                  "ranking": 4218
                },
                {
                  "player_name": "Guillermo Martínez",
                  "ranking": 4219
                },
                {
                  "player_name": "Haris Belkebla",
                  "ranking": 4220
                },
                {
                  "player_name": "Renato Sanches",
                  "ranking": 4221
                },
                {
                  "player_name": "Yusuf Sarı",
                  "ranking": 4222
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.688,
          "history_matches": 7,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 7,
            "data_confidence": 0.688,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 25.292222187561247,
            "bench_appearance_prob": 0.5587373721618749,
            "market_value_adjustment": 0.9916,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost F_service (7 historical appearances) to 25.3 expected mins (appearance prob 0.56)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.0536,
                "goals": 0.0641,
                "goal_rate": 0.0641,
                "shots_on_target": 0.248,
                "total_shots": 0.5991,
                "expected_assists": 0.0375,
                "key_pass": 0.3244,
                "rating": 6.6002,
                "minutes": 21.25,
                "total_pass": 6.3635,
                "accurate_pass": 5.5962,
                "duels_won": 0.6122,
                "total_long_balls": 0.7673,
                "accurate_long_balls": 0.2267,
                "total_opp_half_passes": 5.1898,
                "accurate_opp_half_passes": 4.4225,
                "crosses_total": 1.4749,
                "crosses_accurate": 0.0,
                "touches": 11.3836,
                "possession_lost": 3.7087,
                "dispossessed": 0.6462,
                "duels_lost": 1.0656,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.8049,
                "challenges_lost": 0.2267,
                "fouls": 0.1927,
                "fouls_drawn": 0.1927,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.4194,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0346,
                "offsides": 0.0,
                "ball_carries": 3.7273,
                "total_progression": 29.9771,
                "progressive_carries": 0.96,
                "shots_off_target": 0.3511
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-20",
                    "opponent": "Getafe",
                    "minutes": 10.0,
                    "is_starting": false,
                    "weight": 0.2208,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-09-17",
                    "opponent": "Villarreal",
                    "minutes": 45.0,
                    "is_starting": true,
                    "weight": 0.1877,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-09-13",
                    "opponent": "Celta Vigo",
                    "minutes": 29.0,
                    "is_starting": false,
                    "weight": 0.1595,
                    "rating": 7.1
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 59.0,
                    "is_starting": true,
                    "weight": 0.1356,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-08-30",
                    "opponent": "Real Madrid",
                    "minutes": 29.0,
                    "is_starting": false,
                    "weight": 0.1152,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-08-24",
                    "opponent": "Deportivo de A Coruña",
                    "minutes": 56.0,
                    "is_starting": true,
                    "weight": 0.098,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-08-19",
                    "opponent": "Atlético Madrid",
                    "minutes": 23.0,
                    "is_starting": false,
                    "weight": 0.0833,
                    "rating": 6.4
                  }
                ],
                "feature_row": {
                  "history_matches": 7.0,
                  "is_starting_11": 0.0,
                  "expectedGoals": 0.0124,
                  "totalOppositionHalfPasses": 6.1558,
                  "accurateOppositionHalfPasses": 5.2978,
                  "accuratePass": 7.2195,
                  "totalShots": 0.434
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.053635645657777786,
                    "model_output": 0.0536,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.082
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0226
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": -0.0101
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0069
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0036
                        }
                      ],
                      "others": -0.0202,
                      "total": 0.0536,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.531043
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.214882
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": -0.113641
                        },
                        {
                          "name": "goals",
                          "margin": -0.085959
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.047732
                        }
                      ],
                      "others_margin": -0.317605
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.06411342322826385,
                    "model_output": 0.0641,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.082
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0197
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0097
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": -0.0088
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0066
                        }
                      ],
                      "others": -0.0128,
                      "total": 0.0641,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.514997
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.176936
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.100394
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": -0.1001
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.08249
                        }
                      ],
                      "others_margin": -0.18132
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.24801009893417358,
                    "model_output": 0.248,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1756
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0288
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": -0.0245
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0212
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0164
                        }
                      ],
                      "others": -0.0225,
                      "total": 0.248,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.395934
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.083162
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": -0.07656
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.071316
                        },
                        {
                          "name": "goals",
                          "margin": -0.058739
                        }
                      ],
                      "others_margin": -0.086781
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.5991223454475403,
                    "model_output": 0.5991,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.4649
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.141
                        },
                        {
                          "name": "goals",
                          "contribution": -0.05
                        },
                        {
                          "name": "duelWon",
                          "contribution": -0.0324
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0301
                        }
                      ],
                      "others": -0.0612,
                      "total": 0.5991,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.464903
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.141011
                        },
                        {
                          "name": "goals",
                          "margin": -0.04997
                        },
                        {
                          "name": "duelWon",
                          "margin": -0.032373
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.030116
                        }
                      ],
                      "others_margin": -0.061211
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.037468668073415756,
                    "model_output": 0.0375,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0199
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0051
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0034
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.0028
                        },
                        {
                          "name": "duelLost",
                          "contribution": 0.0026
                        }
                      ],
                      "others": 0.0018,
                      "total": 0.0375,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.370569
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.122968
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.090777
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.08285
                        },
                        {
                          "name": "duelLost",
                          "margin": 0.075625
                        }
                      ],
                      "others_margin": 0.051743
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 0.32442328333854675,
                    "model_output": 0.3244,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2834
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0253
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0217
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0114
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.0114
                        }
                      ],
                      "others": -0.0192,
                      "total": 0.3244,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.545504
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.066828
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.061249
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.033786
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.033619
                        }
                      ],
                      "others_margin": -0.057399
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.600246906280518,
                    "model_output": 6.6002,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0551
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0243
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0158
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0149
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.0102
                        }
                      ],
                      "others": -0.0417,
                      "total": 6.6002,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.055144
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.024291
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.015824
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.014943
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.010196
                        }
                      ],
                      "others_margin": -0.041517
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 7,
                  "role_matches": 4,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9916, quality 0.437)",
              "stats": {
                "expected_goals": 0.0532,
                "goals": 0.0636,
                "goal_rate": 0.0636,
                "shots_on_target": 0.2459,
                "total_shots": 0.5941,
                "expected_assists": 0.0372,
                "key_pass": 0.3217,
                "rating": 6.6002,
                "minutes": 21.25,
                "total_pass": 6.31,
                "accurate_pass": 5.5492,
                "duels_won": 0.6071,
                "total_long_balls": 0.7609,
                "accurate_long_balls": 0.2248,
                "total_opp_half_passes": 5.1462,
                "accurate_opp_half_passes": 4.3854,
                "crosses_total": 1.4625,
                "crosses_accurate": 0.0,
                "touches": 11.288,
                "possession_lost": 3.6775,
                "dispossessed": 0.6408,
                "duels_lost": 1.0566,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.7981,
                "challenges_lost": 0.2248,
                "fouls": 0.1911,
                "fouls_drawn": 0.1911,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.4159,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0343,
                "offsides": 0.0,
                "ball_carries": 3.696,
                "total_progression": 29.7253,
                "progressive_carries": 0.9519,
                "shots_off_target": 0.3482
              },
              "params": {
                "market_value_eur": 1700000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9916,
                "reference_quality": 0.505,
                "history_matches": 7,
                "history_shrink": 0.4167,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 21.2 to 25.3 expected minutes (appearance prob 0.56)",
              "stats": {
                "expected_goals": 0.0633,
                "goals": 0.0757,
                "goal_rate": 0.0757,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0443,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0408,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29
              },
              "params": {
                "expected_minutes": 25.29,
                "projection_minutes": 21.25,
                "minutes_scale": 1.1902,
                "appearance_probability": 0.559
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.0633,
                "goals": 0.0757,
                "goal_rate": 0.0757,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0443,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0408,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": true
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "expected_goals": 0.061,
                "goal_rate": 0.0757,
                "goals": 0,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0427,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0393,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1094,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 0.559
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 16 by projected rating, fifa_overall 73.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.061,
                "goal_rate": 0.0757,
                "goals": 0,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0427,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0393,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1094,
                "creation_factor": 0.8,
                "fifa_overall": 73.0
              },
              "params": {
                "match_squad_rank": 16,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 4217,
                "fifa_rank": 3532.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 73.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "expected_goals": 0.061,
                "goal_rate": 0.0757,
                "goals": 0,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0427,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0393,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0331,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1094,
                "creation_factor": 0.8,
                "fifa_overall": 73.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0331,
                "scorer_weight": 0.0378,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0458,
                "finishing_factor": 1.1094,
                "appearance_weight": 0.559,
                "weight_rank": 8,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "expected_goals": 0.061,
                "goal_rate": 0.0757,
                "goals": 0,
                "shots_on_target": 0.2927,
                "total_shots": 0.7071,
                "expected_assists": 0.0427,
                "key_pass": 0.3829,
                "rating": 6.6002,
                "minutes": 25.29,
                "total_pass": 7.5103,
                "accurate_pass": 6.6048,
                "duels_won": 0.7226,
                "total_long_balls": 0.9056,
                "accurate_long_balls": 0.2676,
                "total_opp_half_passes": 6.1251,
                "accurate_opp_half_passes": 5.2196,
                "crosses_total": 1.7407,
                "crosses_accurate": 0.0,
                "touches": 13.4352,
                "possession_lost": 4.377,
                "dispossessed": 0.6408,
                "duels_lost": 1.2576,
                "aerial_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9499,
                "challenges_lost": 0.2248,
                "fouls": 0.2275,
                "fouls_drawn": 0.2275,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.0,
                "tackles_won": 0.0,
                "tackles": 0.495,
                "clearances": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0393,
                "offsides": 0.0,
                "ball_carries": 4.3991,
                "total_progression": 35.3797,
                "progressive_carries": 1.133,
                "shots_off_target": 0.4144,
                "bench_appearance_probability": 0.559,
                "bench_expected_minutes": 25.29,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0331,
                "projected_assists": 0,
                "assist_probability": 0.0234,
                "finishing_factor": 1.1094,
                "creation_factor": 0.8,
                "fifa_overall": 73.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.0234,
                "provider_weight": 0.0191,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0325,
                "creation_factor": 0.8,
                "appearance_weight": 0.559,
                "weight_rank": 7,
                "eligible_players": 13
              }
            }
          ]
        },
        "Jens-Lys Cajuste": {
          "player_id": 857671,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 2,
          "height": 188,
          "market_value": 6600000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0159,
            "assist_rate": 0.0308,
            "assists": 0,
            "expected_goals": 0.0245,
            "goal_rate": 0.0469,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 0,
            "rating": 6.669,
            "minutes": 22,
            "total_pass": 8,
            "accurate_pass": 7,
            "duels_won": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_own_half_passes": 4,
            "accurate_own_half_passes": 4,
            "total_opp_half_passes": 4,
            "accurate_opp_half_passes": 3,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 10,
            "possession_lost": 1.4052,
            "dispossessed": 0.0,
            "duels_lost": 0,
            "aerial_won": 0,
            "aerial_lost": 0,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 0,
            "total_contest": 0,
            "won_contest": 0,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 3,
            "total_progression": 6,
            "progressive_carries": 0,
            "shots_off_target": 0,
            "bench_appearance_probability": 0.507,
            "bench_expected_minutes": 22.15,
            "projected_substitution_order": 3,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 3,
            "projected_substitution_expected_count": 2.43,
            "projected_substitution_game_state_adjustment": 1,
            "substitution_usage": "projected_used_substitute",
            "projected_goals": 0,
            "goal_probability": 0.0123,
            "projected_assists": 0,
            "assist_probability": 0.008,
            "finishing_factor": 1.25,
            "creation_factor": 1.215,
            "fifa_overall": 73.0
          },
          "latest_10_games": [
            {
              "match_id": 16416320,
              "match_date": "2026-09-06",
              "home_team": "Málaga CF",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Málaga CF",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 9,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0005,
                "total_shots": 0,
                "total_pass": 6,
                "accurate_pass": 5,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 3806,
            "combined_rank_score": 1806.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 3437.0,
            "fifa_overall": 73.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 15,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.669,
            "source_file": "data/player_rankings.csv",
            "player_name": "Jens-Lys Cajuste",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Bartłomiej Drągowski",
                  "ranking": 3801
                },
                {
                  "player_name": "Eliesse Ben Seghir",
                  "ranking": 3802
                },
                {
                  "player_name": "Roony Bardghji",
                  "ranking": 3803
                },
                {
                  "player_name": "Nilson Angulo",
                  "ranking": 3804
                },
                {
                  "player_name": "James McAtee",
                  "ranking": 3805
                }
              ],
              "lower": [
                {
                  "player_name": "Yáser Asprilla",
                  "ranking": 3807
                },
                {
                  "player_name": "Stephen Eustaquio",
                  "ranking": 3808
                },
                {
                  "player_name": "Darío Osorio",
                  "ranking": 3809
                },
                {
                  "player_name": "Josh Sargent",
                  "ranking": 3810
                },
                {
                  "player_name": "Haris Hajradinović",
                  "ranking": 3811
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.312,
          "history_matches": 1,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 1,
            "data_confidence": 0.312,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 22.147767132293673,
            "bench_appearance_prob": 0.5067166878315306,
            "market_value_adjustment": 0.9942,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost M_service (1 historical appearances) to 22.1 expected mins (appearance prob 0.51)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 0.2061,
                "expected_assists": 0.0117,
                "assists": 0.022,
                "assist_rate": 0.022,
                "expected_goals": 0.0181,
                "goals": 0.0334,
                "goal_rate": 0.0334,
                "shots_on_target": 0.0854,
                "total_shots": 0.2559,
                "rating": 6.669,
                "minutes": 15.67,
                "total_pass": 6.0,
                "accurate_pass": 5.0,
                "duels_won": 1.0,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 3.0,
                "accurate_own_half_passes": 3.0,
                "total_opp_half_passes": 3.0,
                "accurate_opp_half_passes": 2.0,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 7.0,
                "possession_lost": 1.0,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.0,
                "tackles": 1.0,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.0,
                "total_progression": 4.2118,
                "progressive_carries": 0.0,
                "shots_off_target": 0.1705
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Levante UD",
                    "minutes": 9.0,
                    "is_starting": false,
                    "weight": 1.0,
                    "rating": 6.7
                  }
                ],
                "feature_row": {
                  "history_matches": 1.0,
                  "is_starting_11": 0.0,
                  "totalShots": 0.0,
                  "creative_index": 0.0003,
                  "expectedGoals": 0.0,
                  "expectedAssists": 0.0005,
                  "onTargetScoringAttempt": 0.0
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 0.20605409145355225,
                    "model_output": 0.2061,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.4838
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0416
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0367
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0305
                        },
                        {
                          "name": "ballCarriesCount",
                          "contribution": -0.019
                        }
                      ],
                      "others": -0.0685,
                      "total": 0.2061,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.789556
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.109057
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.107258
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.098991
                        },
                        {
                          "name": "ballCarriesCount",
                          "margin": -0.066851
                        }
                      ],
                      "others_margin": -0.287087
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.011731374077498913,
                    "model_output": 0.0117,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0422
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0114
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0077
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0029
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0016
                        }
                      ],
                      "others": -0.0083,
                      "total": 0.0117,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.677562
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.302445
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.272495
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.125804
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.076972
                        }
                      ],
                      "others_margin": -0.534163
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.02197728306055069,
                    "model_output": 0.022,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0222
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0134
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.008
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0059
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0027
                        }
                      ],
                      "others": -0.011,
                      "total": 0.022,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.300983
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.238368
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.175691
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.152909
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.078032
                        }
                      ],
                      "others_margin": -0.409358
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.01806838996708393,
                    "model_output": 0.0181,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0368
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0196
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0105
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0045
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0025
                        }
                      ],
                      "others": -0.0074,
                      "total": 0.0181,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.493468
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.416493
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.322399
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.180609
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.10236
                        }
                      ],
                      "others_margin": -0.343065
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.033421456813812256,
                    "model_output": 0.0334,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0329
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0166
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0087
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0039
                        },
                        {
                          "name": "ballRecovery_p90",
                          "contribution": 0.0033
                        }
                      ],
                      "others": -0.0054,
                      "total": 0.0334,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.411302
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.296136
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.198498
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.103704
                        },
                        {
                          "name": "ballRecovery_p90",
                          "margin": 0.08828
                        }
                      ],
                      "others_margin": -0.150784
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.08539165556430817,
                    "model_output": 0.0854,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1247
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0698
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.029
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0181
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": 0.0123
                        }
                      ],
                      "others": -0.0093,
                      "total": 0.0854,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.485738
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.431117
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.253558
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.19855
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": 0.138935
                        }
                      ],
                      "others_margin": -0.10344
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.25584647059440613,
                    "model_output": 0.2558,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.3601
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.2332
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0451
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0305
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0298
                        }
                      ],
                      "others": -0.036,
                      "total": 0.2558,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.360104
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.233194
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.045117
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.030544
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.02978
                        }
                      ],
                      "others_margin": -0.035879
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.668961048126221,
                    "model_output": 6.669,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0789
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0489
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.0156
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0144
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "contribution": 0.012
                        }
                      ],
                      "others": -0.0341,
                      "total": 6.669,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.07894
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.048941
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.015587
                        },
                        {
                          "name": "rating",
                          "margin": -0.014375
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "margin": 0.01196
                        }
                      ],
                      "others_margin": -0.034026
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 1,
                  "role_matches": 1,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "all_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9942, quality 0.482)",
              "stats": {
                "key_pass": 0.2049,
                "expected_assists": 0.0117,
                "assists": 0.0218,
                "assist_rate": 0.0218,
                "expected_goals": 0.018,
                "goals": 0.0332,
                "goal_rate": 0.0332,
                "shots_on_target": 0.0849,
                "total_shots": 0.2544,
                "rating": 6.669,
                "minutes": 15.67,
                "total_pass": 5.9652,
                "accurate_pass": 4.971,
                "duels_won": 0.9942,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 2.9826,
                "accurate_own_half_passes": 2.9826,
                "total_opp_half_passes": 2.9826,
                "accurate_opp_half_passes": 1.9884,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 6.9594,
                "possession_lost": 0.9942,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 0.9942,
                "tackles": 0.9942,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 1.9884,
                "total_progression": 4.1874,
                "progressive_carries": 0.0,
                "shots_off_target": 0.1695
              },
              "params": {
                "market_value_eur": 6600000,
                "quality_factor": 0.4818,
                "boost_factor": 0.9942,
                "reference_quality": 0.505,
                "history_matches": 1,
                "history_shrink": 0.8333,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 15.7 to 22.1 expected minutes (appearance prob 0.51)",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0165,
                "assists": 0.0308,
                "assist_rate": 0.0308,
                "expected_goals": 0.0254,
                "goals": 0.0469,
                "goal_rate": 0.0469,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15
              },
              "params": {
                "expected_minutes": 22.15,
                "projection_minutes": 15.67,
                "minutes_scale": 1.4134,
                "appearance_probability": 0.507
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0165,
                "assists": 0.0308,
                "assist_rate": 0.0308,
                "expected_goals": 0.0254,
                "goals": 0.0469,
                "goal_rate": 0.0469,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": true
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 0.77 (squad xG sum 0.7937, xG scale 0.9638, xA scale 0.9638, team xA 0.59 = 0.76 x lambda)",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0159,
                "assist_rate": 0.0308,
                "assists": 0,
                "expected_goals": 0.0245,
                "goal_rate": 0.0469,
                "goals": 0,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15,
                "projected_substitution_order": 3,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.215
              },
              "params": {
                "team_lambda": 0.765,
                "squad_xg_sum": 0.7937,
                "squad_xa_sum": 0.6072,
                "team_expected_assists": 0.5852,
                "team_xa_to_xg_ratio": 0.7649,
                "bench_appearance_weighted": true,
                "xg_scale": 0.9638,
                "xa_scale": 0.9638,
                "opponent_lambda": 1.477,
                "scoreline_reset": true,
                "appearance_weight": 0.507
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 15 by projected rating, fifa_overall 73.0; not used by the projection)",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0159,
                "assist_rate": 0.0308,
                "assists": 0,
                "expected_goals": 0.0245,
                "goal_rate": 0.0469,
                "goals": 0,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15,
                "projected_substitution_order": 3,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.215,
                "fifa_overall": 73.0
              },
              "params": {
                "match_squad_rank": 15,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3806,
                "fifa_rank": 3437.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 73.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation skipped: 0 projected goals",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0159,
                "assist_rate": 0.0308,
                "assists": 0,
                "expected_goals": 0.0245,
                "goal_rate": 0.0469,
                "goals": 0,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15,
                "projected_substitution_order": 3,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0123,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.215,
                "fifa_overall": 73.0
              },
              "params": {
                "allocation_applied": false,
                "team_goals": 0,
                "goals_allocated": 0,
                "goal_probability": 0.0123,
                "scorer_weight": 0.0155,
                "squad_weight_total": 0.8264,
                "weight_share": 0.0188,
                "finishing_factor": 1.25,
                "appearance_weight": 0.507,
                "weight_rank": 10,
                "eligible_players": 13
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation skipped: 0 projected assists",
              "stats": {
                "key_pass": 0.2896,
                "expected_assists": 0.0159,
                "assist_rate": 0.0308,
                "assists": 0,
                "expected_goals": 0.0245,
                "goal_rate": 0.0469,
                "goals": 0,
                "shots_on_target": 0.12,
                "total_shots": 0.3596,
                "rating": 6.669,
                "minutes": 22.15,
                "total_pass": 8.4311,
                "accurate_pass": 7.0259,
                "duels_won": 1.4052,
                "total_long_balls": 0.0,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 4.2156,
                "accurate_own_half_passes": 4.2156,
                "total_opp_half_passes": 4.2156,
                "accurate_opp_half_passes": 2.8104,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 9.8363,
                "possession_lost": 1.4052,
                "dispossessed": 0.0,
                "duels_lost": 0.0,
                "aerial_won": 0.0,
                "aerial_lost": 0.0,
                "interceptions": 0.0,
                "tackles_won": 1.4052,
                "tackles": 1.4052,
                "clearances": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 2.8104,
                "total_progression": 5.9184,
                "progressive_carries": 0.0,
                "shots_off_target": 0.2396,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.15,
                "projected_substitution_order": 3,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 3,
                "projected_substitution_expected_count": 2.43,
                "projected_substitution_game_state_adjustment": 1,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0123,
                "projected_assists": 0,
                "assist_probability": 0.008,
                "finishing_factor": 1.25,
                "creation_factor": 1.215,
                "fifa_overall": 73.0
              },
              "params": {
                "allocation_applied": false,
                "team_assists": 0,
                "assists_allocated": 0,
                "assist_probability": 0.008,
                "provider_weight": 0.0098,
                "squad_weight_total": 0.5871,
                "weight_share": 0.0167,
                "creation_factor": 1.215,
                "appearance_weight": 0.507,
                "weight_rank": 10,
                "eligible_players": 13
              }
            }
          ]
        }
      },
      "team_totals": {
        "projected_goals": 0,
        "expected_goals": 0.77,
        "expected_assists": 0.59,
        "total_shots": 10,
        "shots_on_target": 1,
        "total_passes": 420,
        "interceptions": 8,
        "tackles": 14,
        "avg_rating": 6.84,
        "possession_estimated_pct": 50.0,
        "pressing_actions_per_90": 6.1
      }
    },
    "Espanyol": {
      "formation": "4-2-3-1",
      "players": {
        "Javier Hernández": {
          "player_id": 1514913,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 28,
          "height": 175,
          "market_value": 1600000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.1511,
            "assist_rate": 0.2609,
            "assists": 1,
            "expected_goals": 0.1612,
            "goal_rate": 0.1859,
            "goals": 0,
            "shots_on_target": 1,
            "total_shots": 2,
            "rating": 6.6586,
            "minutes": 82,
            "total_pass": 21,
            "accurate_pass": 17,
            "duels_won": 3,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_own_half_passes": 7,
            "accurate_own_half_passes": 6,
            "total_opp_half_passes": 14,
            "accurate_opp_half_passes": 11,
            "crosses_total": 2,
            "crosses_accurate": 0,
            "touches": 42,
            "possession_lost": 16.1924,
            "dispossessed": 3.2498,
            "duels_lost": 9,
            "aerial_won": 1,
            "aerial_lost": 1,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 1,
            "clearances": 0,
            "total_contest": 3,
            "won_contest": 1,
            "challenges_lost": 1,
            "fouls": 2,
            "fouls_drawn": 2,
            "blocks": 0,
            "big_chances_created": 1,
            "big_chances_missed": 0,
            "xgot": 0.1712,
            "ball_carries": 15,
            "total_progression": 91,
            "progressive_carries": 2,
            "shots_off_target": 1,
            "duel_xg_multiplier": 1.0294,
            "dribbles_attempted": 3,
            "dribbles_successful": 1.3,
            "crosses_attempted": 1.9,
            "duel_win_rate": 0.5,
            "pressing_faced": "LOW",
            "matchup_zone": "Left Wing vs Right Back — Flank Battle",
            "numerical_situation": "1v1",
            "opponent_defenders": "Rafa Garrido",
            "opponent_faced": "Rafa Garrido",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.1489,
            "projected_assists": 1,
            "assist_probability": 0.1402,
            "finishing_factor": 1.132,
            "creation_factor": 1.25,
            "fifa_overall": 86.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1111,
                "expected_assists": 0.0952,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 32,
                "accurate_pass": 27,
                "key_pass": 2,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 74,
                "rating": 6.3,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.3039,
                "expected_assists": 0.1902,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 13,
                "accurate_pass": 11,
                "key_pass": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 80,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0157,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 17,
                "tackles": 3,
                "tackles_won": 2,
                "interceptions": 1,
                "duels_won": 6,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 5.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0603,
                "expected_assists": 0.0188,
                "total_shots": 2,
                "shots_on_target": 1,
                "total_pass": 21,
                "accurate_pass": 18,
                "duels_won": 2,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 70,
                "rating": 6.3,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.0962,
                "expected_assists": 0.08,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 12,
                "accurate_pass": 8,
                "key_pass": 2,
                "tackles": 1,
                "duels_won": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416306,
              "match_date": "2026-08-22",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 75,
                "rating": 6.9,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_assists": 0.2864,
                "total_shots": 0,
                "total_pass": 16,
                "accurate_pass": 15,
                "key_pass": 2,
                "tackles": 1,
                "duels_won": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421053,
              "match_date": "2026-08-16",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 82,
                "rating": 7.3,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.1872,
                "expected_assists": 0.3474,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 26,
                "accurate_pass": 19,
                "key_pass": 3,
                "tackles": 3,
                "tackles_won": 2,
                "clearances": 1,
                "duels_won": 6,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 198,
            "combined_rank_score": 125.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 157.0,
            "sofascore_rating": 7.3,
            "sofascore_appearances": 1.0,
            "fifa_rank": 93.0,
            "fifa_overall": 86.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 15,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.6586,
            "source_file": "data/player_rankings.csv",
            "player_name": "Javier Hernández",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Yarden Shua",
                  "ranking": 193
                },
                {
                  "player_name": "Antonio Sivera",
                  "ranking": 194
                },
                {
                  "player_name": "Igor Lichnovsky",
                  "ranking": 195
                },
                {
                  "player_name": "Luis Rojas",
                  "ranking": 196
                },
                {
                  "player_name": "Armandas Kučys",
                  "ranking": 197
                }
              ],
              "lower": [
                {
                  "player_name": "Daler Tukhsanov",
                  "ranking": 199
                },
                {
                  "player_name": "Azamat Soyibov",
                  "ranking": 200
                },
                {
                  "player_name": "Kervin Andrade",
                  "ranking": 201
                },
                {
                  "player_name": "Guillermo Maripán",
                  "ranking": 202
                },
                {
                  "player_name": "Emil Tîmbur",
                  "ranking": 203
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.713,
          "history_matches": 7,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 7,
            "data_confidence": 0.713,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9916,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "minutes": 224.0,
              "goals_per90": 0.0,
              "assists_per90": 1.2,
              "shots_per90": 1.21,
              "shots_on_target_pct": 33.3,
              "prior_reliability": 0.1667
            },
            "rationale": "XGBoost regressor (M_service) evaluated 7 historical appearances across 8 target models; FBref 2026-2027 prior blended (La Liga, Espanyol, rel: 0.17, gls/90: 0.0, ast/90: 1.2)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 1.3905,
                "expected_assists": 0.1495,
                "assists": 0.2234,
                "assist_rate": 0.2234,
                "expected_goals": 0.1552,
                "goals": 0.1907,
                "goal_rate": 0.1907,
                "shots_on_target": 0.7035,
                "total_shots": 1.8899,
                "rating": 6.6586,
                "minutes": 82.08,
                "total_pass": 20.8166,
                "accurate_pass": 17.1508,
                "duels_won": 3.243,
                "total_long_balls": 1.3786,
                "accurate_long_balls": 0.6812,
                "total_own_half_passes": 6.9104,
                "accurate_own_half_passes": 5.8291,
                "total_opp_half_passes": 13.9061,
                "accurate_opp_half_passes": 11.3217,
                "crosses_total": 2.5499,
                "crosses_accurate": 0.3803,
                "touches": 42.4478,
                "possession_lost": 16.3296,
                "dispossessed": 3.2773,
                "duels_lost": 8.8842,
                "aerial_won": 0.0,
                "aerial_lost": 0.6659,
                "interceptions": 0.1595,
                "tackles_won": 0.4855,
                "tackles": 0.9415,
                "clearances": 0.0833,
                "total_contest": 2.9073,
                "won_contest": 0.7953,
                "challenges_lost": 1.2689,
                "fouls": 1.8789,
                "fouls_drawn": 1.5061,
                "blocks": 0.0,
                "big_chances_created": 0.7049,
                "big_chances_missed": 0.0,
                "xgot": 0.1648,
                "ball_carries": 15.0422,
                "total_progression": 91.6483,
                "progressive_carries": 2.3965,
                "shots_off_target": 1.1864
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.2208,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 74.0,
                    "is_starting": true,
                    "weight": 0.1877,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 80.0,
                    "is_starting": true,
                    "weight": 0.1595,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1356,
                    "rating": 5.7
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 70.0,
                    "is_starting": true,
                    "weight": 0.1152,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-08-22",
                    "opponent": "Real Madrid",
                    "minutes": 75.0,
                    "is_starting": true,
                    "weight": 0.098,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-08-16",
                    "opponent": "Levante UD",
                    "minutes": 82.0,
                    "is_starting": true,
                    "weight": 0.0833,
                    "rating": 7.3
                  }
                ],
                "feature_row": {
                  "history_matches": 7.0,
                  "is_starting_11": 1.0,
                  "totalShots": 1.7782,
                  "creative_index": 0.8241,
                  "expectedGoals": 0.1164,
                  "expectedAssists": 0.128,
                  "onTargetScoringAttempt": 0.6273
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 1.3905491828918457,
                    "model_output": 1.3905,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "creative_index",
                          "contribution": 0.1615
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1244
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0817
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0698
                        },
                        {
                          "name": "keyPass",
                          "contribution": 0.0639
                        }
                      ],
                      "others": 0.003,
                      "total": 1.3905,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "creative_index",
                          "margin": 0.16743
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.112229
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.067396
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.05421
                        },
                        {
                          "name": "keyPass",
                          "margin": 0.047179
                        }
                      ],
                      "others_margin": 0.002071
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.14950314164161682,
                    "model_output": 0.1495,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "totalCross",
                          "contribution": 0.013
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0107
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0068
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.0059
                        },
                        {
                          "name": "keyPass",
                          "contribution": 0.005
                        }
                      ],
                      "others": 0.0223,
                      "total": 0.1495,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "totalCross",
                          "margin": 0.141098
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.10243
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.060237
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.04955
                        },
                        {
                          "name": "keyPass",
                          "margin": 0.040283
                        }
                      ],
                      "others_margin": 0.162012
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.22338803112506866,
                    "model_output": 0.2234,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "creative_index",
                          "contribution": 0.0108
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0106
                        },
                        {
                          "name": "keyPass",
                          "contribution": 0.0113
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.0123
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.0112
                        }
                      ],
                      "others": 0.082,
                      "total": 0.2234,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "creative_index",
                          "margin": 0.119218
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.104648
                        },
                        {
                          "name": "keyPass",
                          "margin": 0.100563
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.099178
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.082736
                        }
                      ],
                      "others_margin": 0.45722
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.15521195530891418,
                    "model_output": 0.1552,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0161
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0179
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0167
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0125
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0116
                        }
                      ],
                      "others": -0.014,
                      "total": 0.1552,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "expectedGoals",
                          "margin": 0.15768
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.150066
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.122327
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.082715
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.071071
                        }
                      ],
                      "others_margin": -0.086906
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.19066281616687775,
                    "model_output": 0.1907,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.0384
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0164
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0162
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0146
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0161
                        }
                      ],
                      "others": 0.0238,
                      "total": 0.1907,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.331658
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.113524
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.112234
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.101977
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.101458
                        }
                      ],
                      "others_margin": 0.132783
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.703486442565918,
                    "model_output": 0.7035,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.0849
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.055
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0418
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.045
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0426
                        }
                      ],
                      "others": 0.1102,
                      "total": 0.7035,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.232692
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.12619
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.08631
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.085289
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.074502
                        }
                      ],
                      "others_margin": 0.170348
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 1.889841914176941,
                    "model_output": 1.8898,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.4038
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1662
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0788
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0541
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0489
                        }
                      ],
                      "others": 0.2453,
                      "total": 1.8898,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.403751
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.166182
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.078824
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.054058
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.048852
                        }
                      ],
                      "others_margin": 0.245415
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.658604145050049,
                    "model_output": 6.6586,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "rating",
                          "contribution": -0.0513
                        },
                        {
                          "name": "goalAssist",
                          "contribution": -0.0336
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0288
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0199
                        },
                        {
                          "name": "dispossessed",
                          "contribution": -0.0198
                        }
                      ],
                      "others": -0.0767,
                      "total": 6.6586,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "rating",
                          "margin": -0.051277
                        },
                        {
                          "name": "goalAssist",
                          "margin": -0.033563
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.028826
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.019945
                        },
                        {
                          "name": "dispossessed",
                          "margin": -0.019805
                        }
                      ],
                      "others_margin": -0.076742
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 7,
                  "role_matches": 7,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9916, quality 0.437)",
              "stats": {
                "key_pass": 1.3789,
                "expected_assists": 0.1482,
                "assists": 0.2215,
                "assist_rate": 0.2215,
                "expected_goals": 0.1539,
                "goals": 0.1891,
                "goal_rate": 0.1891,
                "shots_on_target": 0.6976,
                "total_shots": 1.874,
                "rating": 6.6586,
                "minutes": 82.08,
                "total_pass": 20.6417,
                "accurate_pass": 17.0067,
                "duels_won": 3.2158,
                "total_long_balls": 1.367,
                "accurate_long_balls": 0.6755,
                "total_own_half_passes": 6.8524,
                "accurate_own_half_passes": 5.7801,
                "total_opp_half_passes": 13.7893,
                "accurate_opp_half_passes": 11.2266,
                "crosses_total": 2.5285,
                "crosses_accurate": 0.3771,
                "touches": 42.0912,
                "possession_lost": 16.1924,
                "dispossessed": 3.2498,
                "duels_lost": 8.8096,
                "aerial_won": 0.0,
                "aerial_lost": 0.6603,
                "interceptions": 0.1582,
                "tackles_won": 0.4814,
                "tackles": 0.9336,
                "clearances": 0.0826,
                "total_contest": 2.8829,
                "won_contest": 0.7886,
                "challenges_lost": 1.2582,
                "fouls": 1.8631,
                "fouls_drawn": 1.4934,
                "blocks": 0.0,
                "big_chances_created": 0.699,
                "big_chances_missed": 0.0,
                "xgot": 0.1634,
                "ball_carries": 14.9158,
                "total_progression": 90.8785,
                "progressive_carries": 2.3764,
                "shots_off_target": 1.1764
              },
              "params": {
                "market_value_eur": 1600000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9916,
                "reference_quality": 0.505,
                "history_matches": 7,
                "history_shrink": 0.4167,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0451)",
              "stats": {
                "key_pass": 1.3789,
                "expected_assists": 0.1482,
                "assists": 0.2609,
                "assist_rate": 0.2609,
                "expected_goals": 0.1539,
                "goals": 0.1806,
                "goal_rate": 0.1806,
                "shots_on_target": 0.6826,
                "total_shots": 1.8392,
                "rating": 6.6586,
                "minutes": 82.08,
                "total_pass": 20.6417,
                "accurate_pass": 17.0067,
                "duels_won": 3.2158,
                "total_long_balls": 1.367,
                "accurate_long_balls": 0.6755,
                "total_own_half_passes": 6.8524,
                "accurate_own_half_passes": 5.7801,
                "total_opp_half_passes": 13.7893,
                "accurate_opp_half_passes": 11.2266,
                "crosses_total": 2.4308,
                "crosses_accurate": 0.3771,
                "touches": 42.0912,
                "possession_lost": 16.1924,
                "dispossessed": 3.2498,
                "duels_lost": 8.8096,
                "aerial_won": 0.0,
                "aerial_lost": 0.6603,
                "interceptions": 0.1511,
                "tackles_won": 0.4926,
                "tackles": 0.9336,
                "clearances": 0.0826,
                "total_contest": 2.8829,
                "won_contest": 0.7886,
                "challenges_lost": 1.2582,
                "fouls": 1.9107,
                "fouls_drawn": 1.5413,
                "blocks": 0.0,
                "big_chances_created": 0.699,
                "big_chances_missed": 0.0,
                "xgot": 0.1634,
                "ball_carries": 14.9158,
                "total_progression": 90.8785,
                "progressive_carries": 2.3764,
                "shots_off_target": 1.1764
              },
              "params": {
                "blend_weight": 0.0451,
                "history_matches": 7,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.912,
                "prior_reliability": 0.1667,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "totalCross",
                  "before": 2.5285,
                  "after": 2.4308
                },
                {
                  "stat": "wasFouled",
                  "before": 1.4934,
                  "after": 1.5413
                },
                {
                  "stat": "fouls",
                  "before": 1.8631,
                  "after": 1.9107
                },
                {
                  "stat": "goalAssist",
                  "before": 0.2215,
                  "after": 0.2609
                },
                {
                  "stat": "totalShots",
                  "before": 1.874,
                  "after": 1.8392
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.6976,
                  "after": 0.6826
                },
                {
                  "stat": "wonTackle",
                  "before": 0.4814,
                  "after": 0.4926
                },
                {
                  "stat": "goals",
                  "before": 0.1891,
                  "after": 0.1806
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 1.3789,
                "expected_assists": 0.1482,
                "assists": 0.2609,
                "assist_rate": 0.2609,
                "expected_goals": 0.1539,
                "goals": 0.1806,
                "goal_rate": 0.1806,
                "shots_on_target": 0.6826,
                "total_shots": 1.859,
                "rating": 6.6586,
                "minutes": 82.08,
                "total_pass": 20.6417,
                "accurate_pass": 17.0067,
                "duels_won": 3.2158,
                "total_long_balls": 1.367,
                "accurate_long_balls": 0.6755,
                "total_own_half_passes": 6.8524,
                "accurate_own_half_passes": 5.7801,
                "total_opp_half_passes": 13.7893,
                "accurate_opp_half_passes": 11.2266,
                "crosses_total": 2.4308,
                "crosses_accurate": 0.3771,
                "touches": 42.0912,
                "possession_lost": 16.1924,
                "dispossessed": 3.2498,
                "duels_lost": 8.8096,
                "aerial_won": 0.0,
                "aerial_lost": 0.6603,
                "interceptions": 0.1511,
                "tackles_won": 0.4926,
                "tackles": 0.9336,
                "clearances": 0.0826,
                "total_contest": 2.8829,
                "won_contest": 0.7886,
                "challenges_lost": 1.2582,
                "fouls": 1.9107,
                "fouls_drawn": 1.5413,
                "blocks": 0.0,
                "big_chances_created": 0.699,
                "big_chances_missed": 0.0,
                "xgot": 0.1634,
                "ball_carries": 14.9158,
                "total_progression": 90.8785,
                "progressive_carries": 2.3764,
                "shots_off_target": 1.1764
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "key_pass": 1.3789,
                "expected_assists": 0.1482,
                "assists": 0.2609,
                "assist_rate": 0.2609,
                "expected_goals": 0.1584,
                "goals": 0.1859,
                "goal_rate": 0.1859,
                "shots_on_target": 0.7027,
                "total_shots": 1.9137,
                "rating": 6.6586,
                "minutes": 82.08,
                "total_pass": 20.6417,
                "accurate_pass": 17.0067,
                "duels_won": 3.2158,
                "total_long_balls": 1.367,
                "accurate_long_balls": 0.6755,
                "total_own_half_passes": 6.8524,
                "accurate_own_half_passes": 5.7801,
                "total_opp_half_passes": 13.7893,
                "accurate_opp_half_passes": 11.2266,
                "crosses_total": 2.4308,
                "crosses_accurate": 0.3771,
                "touches": 42.0912,
                "possession_lost": 16.1924,
                "dispossessed": 3.2498,
                "duels_lost": 8.8096,
                "aerial_won": 0.9,
                "aerial_lost": 0.6603,
                "interceptions": 0.1511,
                "tackles_won": 0.4926,
                "tackles": 0.9336,
                "clearances": 0.0826,
                "total_contest": 2.8829,
                "won_contest": 0.7886,
                "challenges_lost": 1.2582,
                "fouls": 1.9107,
                "fouls_drawn": 1.5413,
                "blocks": 0.0,
                "big_chances_created": 0.699,
                "big_chances_missed": 0.0,
                "xgot": 0.1682,
                "ball_carries": 14.9158,
                "total_progression": 90.8785,
                "progressive_carries": 2.3764,
                "shots_off_target": 1.211,
                "duel_xg_multiplier": 1.0294,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 1.3,
                "crosses_attempted": 1.9,
                "duel_win_rate": 0.5,
                "pressing_faced": "LOW",
                "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                "numerical_situation": "1v1",
                "opponent_defenders": "Rafa Garrido",
                "opponent_faced": "Rafa Garrido",
                "antagonist_source": "attacking_duel, midfield_pairing"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Rafa Garrido",
                  "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                  "duel_win_rate": 0.5,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v1",
                  "xg_multiplier": 1.0294,
                  "skill_edge": 0.0,
                  "height_edge": 0.02,
                  "attacker_skill": 0.4374,
                  "defender_skill": 0.4374,
                  "attacker_role": "LW",
                  "attacker_mv_price_index": 1.0,
                  "defender_adjusted_parts": [
                    {
                      "player": "Rafa Garrido",
                      "market_value": 1400000,
                      "role": "RB",
                      "price_index": 0.7,
                      "adjusted_quality": 0.4374
                    }
                  ],
                  "xg_override": 0.1584
                }
              },
              "changes": [
                {
                  "stat": "aerialWon",
                  "before": 0.0,
                  "after": 0.9
                },
                {
                  "stat": "totalShots",
                  "before": 1.859,
                  "after": 1.9137
                },
                {
                  "stat": "shotOffTarget",
                  "before": 1.1764,
                  "after": 1.211
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.6826,
                  "after": 0.7027
                },
                {
                  "stat": "goals",
                  "before": 0.1806,
                  "after": 0.1859
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "key_pass": 1.3789,
                "expected_assists": 0.1511,
                "assist_rate": 0.2609,
                "assists": 0,
                "expected_goals": 0.1612,
                "goal_rate": 0.1859,
                "goals": 0,
                "shots_on_target": 0.7027,
                "total_shots": 1.9137,
                "rating": 6.6586,
                "minutes": 82.08,
                "total_pass": 20.6417,
                "accurate_pass": 17.0067,
                "duels_won": 3.2158,
                "total_long_balls": 1.367,
                "accurate_long_balls": 0.6755,
                "total_own_half_passes": 6.8524,
                "accurate_own_half_passes": 5.7801,
                "total_opp_half_passes": 13.7893,
                "accurate_opp_half_passes": 11.2266,
                "crosses_total": 2.4308,
                "crosses_accurate": 0.3771,
                "touches": 42.0912,
                "possession_lost": 16.1924,
                "dispossessed": 3.2498,
                "duels_lost": 8.8096,
                "aerial_won": 0.9,
                "aerial_lost": 0.6603,
                "interceptions": 0.1511,
                "tackles_won": 0.4926,
                "tackles": 0.9336,
                "clearances": 0.0826,
                "total_contest": 2.8829,
                "won_contest": 0.7886,
                "challenges_lost": 1.2582,
                "fouls": 1.9107,
                "fouls_drawn": 1.5413,
                "blocks": 0.0,
                "big_chances_created": 0.699,
                "big_chances_missed": 0.0,
                "xgot": 0.1712,
                "ball_carries": 14.9158,
                "total_progression": 90.8785,
                "progressive_carries": 2.3764,
                "shots_off_target": 1.211,
                "duel_xg_multiplier": 1.0294,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 1.3,
                "crosses_attempted": 1.9,
                "duel_win_rate": 0.5,
                "pressing_faced": "LOW",
                "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                "numerical_situation": "1v1",
                "opponent_defenders": "Rafa Garrido",
                "opponent_faced": "Rafa Garrido",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.132,
                "creation_factor": 1.25
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 15 by projected rating, fifa_overall 86.0; not used by the projection)",
              "stats": {
                "key_pass": 1.3789,
                "expected_assists": 0.1511,
                "assist_rate": 0.2609,
                "assists": 0,
                "expected_goals": 0.1612,
                "goal_rate": 0.1859,
                "goals": 0,
                "shots_on_target": 0.7027,
                "total_shots": 1.9137,
                "rating": 6.6586,
                "minutes": 82.08,
                "total_pass": 20.6417,
                "accurate_pass": 17.0067,
                "duels_won": 3.2158,
                "total_long_balls": 1.367,
                "accurate_long_balls": 0.6755,
                "total_own_half_passes": 6.8524,
                "accurate_own_half_passes": 5.7801,
                "total_opp_half_passes": 13.7893,
                "accurate_opp_half_passes": 11.2266,
                "crosses_total": 2.4308,
                "crosses_accurate": 0.3771,
                "touches": 42.0912,
                "possession_lost": 16.1924,
                "dispossessed": 3.2498,
                "duels_lost": 8.8096,
                "aerial_won": 0.9,
                "aerial_lost": 0.6603,
                "interceptions": 0.1511,
                "tackles_won": 0.4926,
                "tackles": 0.9336,
                "clearances": 0.0826,
                "total_contest": 2.8829,
                "won_contest": 0.7886,
                "challenges_lost": 1.2582,
                "fouls": 1.9107,
                "fouls_drawn": 1.5413,
                "blocks": 0.0,
                "big_chances_created": 0.699,
                "big_chances_missed": 0.0,
                "xgot": 0.1712,
                "ball_carries": 14.9158,
                "total_progression": 90.8785,
                "progressive_carries": 2.3764,
                "shots_off_target": 1.211,
                "duel_xg_multiplier": 1.0294,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 1.3,
                "crosses_attempted": 1.9,
                "duel_win_rate": 0.5,
                "pressing_faced": "LOW",
                "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                "numerical_situation": "1v1",
                "opponent_defenders": "Rafa Garrido",
                "opponent_faced": "Rafa Garrido",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.132,
                "creation_factor": 1.25,
                "fifa_overall": 86.0
              },
              "params": {
                "match_squad_rank": 15,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 198,
                "fifa_rank": 93.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 86.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "key_pass": 1.3789,
                "expected_assists": 0.1511,
                "assist_rate": 0.2609,
                "assists": 0,
                "expected_goals": 0.1612,
                "goal_rate": 0.1859,
                "goals": 0,
                "shots_on_target": 0.7027,
                "total_shots": 1.9137,
                "rating": 6.6586,
                "minutes": 82.08,
                "total_pass": 20.6417,
                "accurate_pass": 17.0067,
                "duels_won": 3.2158,
                "total_long_balls": 1.367,
                "accurate_long_balls": 0.6755,
                "total_own_half_passes": 6.8524,
                "accurate_own_half_passes": 5.7801,
                "total_opp_half_passes": 13.7893,
                "accurate_opp_half_passes": 11.2266,
                "crosses_total": 2.4308,
                "crosses_accurate": 0.3771,
                "touches": 42.0912,
                "possession_lost": 16.1924,
                "dispossessed": 3.2498,
                "duels_lost": 8.8096,
                "aerial_won": 0.9,
                "aerial_lost": 0.6603,
                "interceptions": 0.1511,
                "tackles_won": 0.4926,
                "tackles": 0.9336,
                "clearances": 0.0826,
                "total_contest": 2.8829,
                "won_contest": 0.7886,
                "challenges_lost": 1.2582,
                "fouls": 1.9107,
                "fouls_drawn": 1.5413,
                "blocks": 0.0,
                "big_chances_created": 0.699,
                "big_chances_missed": 0.0,
                "xgot": 0.1712,
                "ball_carries": 14.9158,
                "total_progression": 90.8785,
                "progressive_carries": 2.3764,
                "shots_off_target": 1.211,
                "duel_xg_multiplier": 1.0294,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 1.3,
                "crosses_attempted": 1.9,
                "duel_win_rate": 0.5,
                "pressing_faced": "LOW",
                "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                "numerical_situation": "1v1",
                "opponent_defenders": "Rafa Garrido",
                "opponent_faced": "Rafa Garrido",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.1489,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.132,
                "creation_factor": 1.25,
                "fifa_overall": 86.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.1489,
                "scorer_weight": 0.1825,
                "squad_weight_total": 1.6319,
                "weight_share": 0.1118,
                "finishing_factor": 1.132,
                "appearance_weight": 1.0,
                "weight_rank": 3,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "key_pass": 1.3789,
                "expected_assists": 0.1511,
                "assist_rate": 0.2609,
                "assists": 1,
                "expected_goals": 0.1612,
                "goal_rate": 0.1859,
                "goals": 0,
                "shots_on_target": 0.7027,
                "total_shots": 1.9137,
                "rating": 6.6586,
                "minutes": 82.08,
                "total_pass": 20.6417,
                "accurate_pass": 17.0067,
                "duels_won": 3.2158,
                "total_long_balls": 1.367,
                "accurate_long_balls": 0.6755,
                "total_own_half_passes": 6.8524,
                "accurate_own_half_passes": 5.7801,
                "total_opp_half_passes": 13.7893,
                "accurate_opp_half_passes": 11.2266,
                "crosses_total": 2.4308,
                "crosses_accurate": 0.3771,
                "touches": 42.0912,
                "possession_lost": 16.1924,
                "dispossessed": 3.2498,
                "duels_lost": 8.8096,
                "aerial_won": 0.9,
                "aerial_lost": 0.6603,
                "interceptions": 0.1511,
                "tackles_won": 0.4926,
                "tackles": 0.9336,
                "clearances": 0.0826,
                "total_contest": 2.8829,
                "won_contest": 0.7886,
                "challenges_lost": 1.2582,
                "fouls": 1.9107,
                "fouls_drawn": 1.5413,
                "blocks": 0.0,
                "big_chances_created": 0.699,
                "big_chances_missed": 0.0,
                "xgot": 0.1712,
                "ball_carries": 14.9158,
                "total_progression": 90.8785,
                "progressive_carries": 2.3764,
                "shots_off_target": 1.211,
                "duel_xg_multiplier": 1.0294,
                "dribbles_attempted": 3.0,
                "dribbles_successful": 1.3,
                "crosses_attempted": 1.9,
                "duel_win_rate": 0.5,
                "pressing_faced": "LOW",
                "matchup_zone": "Left Wing vs Right Back — Flank Battle",
                "numerical_situation": "1v1",
                "opponent_defenders": "Rafa Garrido",
                "opponent_faced": "Rafa Garrido",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.1489,
                "projected_assists": 1,
                "assist_probability": 0.1402,
                "finishing_factor": 1.132,
                "creation_factor": 1.25,
                "fifa_overall": 86.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 1,
                "assist_probability": 0.1402,
                "provider_weight": 0.1889,
                "squad_weight_total": 0.9581,
                "weight_share": 0.1971,
                "creation_factor": 1.25,
                "appearance_weight": 1.0,
                "weight_rank": 1,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Marcos Fernández": {
          "player_id": 1183542,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 18,
          "height": 176,
          "market_value": 1500000,
          "stats": {
            "expected_goals": 0.2879,
            "goal_rate": 0.289,
            "goals": 0,
            "shots_on_target": 1,
            "total_shots": 2,
            "expected_assists": 0.0675,
            "key_pass": 1,
            "rating": 6.8848,
            "minutes": 75,
            "total_pass": 7,
            "accurate_pass": 5,
            "duels_won": 2,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 5,
            "accurate_opp_half_passes": 3,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 13,
            "possession_lost": 2.7671,
            "dispossessed": 0.411,
            "duels_lost": 3,
            "aerial_lost": 2,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 0,
            "fouls": 1,
            "fouls_drawn": 0,
            "assist_rate": 0.1714,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.1833,
            "offsides": 1,
            "ball_carries": 4,
            "total_progression": 25,
            "progressive_carries": 1,
            "shots_off_target": 1,
            "duel_xg_multiplier": 0.953,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.3,
            "aerial_won": 1,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.18,
            "pressing_faced": "LOW",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "numerical_situation": "1v2",
            "opponent_defenders": "Ángel Recio, Fernando Calero",
            "opponent_faced": "Ángel Recio, Fernando Calero",
            "antagonist_source": "attacking_duel",
            "projected_goals": 0,
            "goal_probability": 0.2502,
            "projected_assists": 0,
            "assist_probability": 0.0653,
            "finishing_factor": 1.0183,
            "creation_factor": 1.25,
            "fifa_overall": 72.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 45,
                "rating": 7.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1441,
                "expected_assists": 0.2761,
                "total_shots": 3,
                "shots_off_target": 1,
                "total_pass": 9,
                "accurate_pass": 8,
                "key_pass": 2,
                "interceptions": 1,
                "aerial_won": 2,
                "duels_won": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 45,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.2692,
                "expected_assists": 0.1481,
                "total_shots": 3,
                "shots_on_target": 1,
                "total_pass": 9,
                "accurate_pass": 5,
                "key_pass": 1,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 66,
                "rating": 7.0,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.053,
                "expected_assists": 0.4026,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 9,
                "accurate_pass": 6,
                "key_pass": 1,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 31,
                "rating": 7.2,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.5535,
                "expected_assists": 0.0008,
                "total_shots": 3,
                "shots_on_target": 2,
                "shots_off_target": 1,
                "total_pass": 4,
                "accurate_pass": 2,
                "tackles": 1,
                "aerial_won": 2,
                "duels_won": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 20,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0962,
                "expected_assists": 0.0047,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 4,
                "accurate_pass": 4,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421053,
              "match_date": "2026-08-16",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 9,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0961,
                "total_shots": 1,
                "shots_off_target": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 4543,
            "combined_rank_score": 2601.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 959.0,
            "sofascore_rating": 6.4,
            "sofascore_appearances": 1.0,
            "fifa_rank": 4244.0,
            "fifa_overall": 72.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 5,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.8848,
            "source_file": "data/player_rankings.csv",
            "player_name": "Marcos Fernández",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Federico Carrizo",
                  "ranking": 4538
                },
                {
                  "player_name": "Ibrahim Diabaté",
                  "ranking": 4539
                },
                {
                  "player_name": "Chuba Akpom",
                  "ranking": 4540
                },
                {
                  "player_name": "Dani Rodríguez",
                  "ranking": 4541
                },
                {
                  "player_name": "Alex Valera",
                  "ranking": 4542
                }
              ],
              "lower": [
                {
                  "player_name": "Ximo Navarro",
                  "ranking": 4544
                },
                {
                  "player_name": "João Virgínia",
                  "ranking": 4545
                },
                {
                  "player_name": "Dimitri Foulquier",
                  "ranking": 4546
                },
                {
                  "player_name": "Nathan Patterson",
                  "ranking": 4547
                },
                {
                  "player_name": "Isaac Price",
                  "ranking": 4548
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.628,
          "history_matches": 6,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 6,
            "data_confidence": 0.628,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9908,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 2.0,
              "starts": 0.0,
              "minutes": 26.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 6.92,
              "shots_on_target_pct": 0.0,
              "prior_reliability": 0.02
            },
            "rationale": "XGBoost regressor (F_service) evaluated 6 historical appearances across 7 target models; FBref 2026-2027 prior blended (La Liga, Espanyol, rel: 0.02, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.2995,
                "goals": 0.308,
                "goal_rate": 0.308,
                "shots_on_target": 0.7839,
                "total_shots": 2.1244,
                "expected_assists": 0.0668,
                "key_pass": 0.7392,
                "rating": 6.8848,
                "minutes": 75.33,
                "total_pass": 6.6702,
                "accurate_pass": 4.7928,
                "duels_won": 1.9825,
                "total_long_balls": 0.4148,
                "accurate_long_balls": 0.4148,
                "total_opp_half_passes": 5.2466,
                "accurate_opp_half_passes": 3.3692,
                "crosses_total": 0.3787,
                "crosses_accurate": 0.3787,
                "touches": 12.6434,
                "possession_lost": 2.7928,
                "dispossessed": 0.4148,
                "duels_lost": 3.1501,
                "aerial_lost": 1.561,
                "total_contest": 0.2047,
                "won_contest": 0.2047,
                "ball_recovery": 1.1415,
                "challenges_lost": 0.174,
                "fouls": 1.1482,
                "fouls_drawn": 0.174,
                "assists": 0.174,
                "assist_rate": 0.174,
                "interceptions": 0.2408,
                "tackles_won": 0.1257,
                "tackles": 0.2736,
                "clearances": 0.174,
                "blocks": 0.0,
                "big_chances_created": 0.3787,
                "big_chances_missed": 0.3312,
                "xgot": 0.1908,
                "offsides": 0.5551,
                "ball_carries": 3.5912,
                "total_progression": 25.2325,
                "progressive_carries": 0.936,
                "shots_off_target": 1.3405
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.2408,
                    "rating": 7.5
                  },
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.2047,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 66.0,
                    "is_starting": true,
                    "weight": 0.174,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 31.0,
                    "is_starting": false,
                    "weight": 0.1479,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 20.0,
                    "is_starting": false,
                    "weight": 0.1257,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-08-16",
                    "opponent": "Levante UD",
                    "minutes": 9.0,
                    "is_starting": false,
                    "weight": 0.1069,
                    "rating": 6.4
                  }
                ],
                "feature_row": {
                  "history_matches": 6.0,
                  "is_starting_11": 1.0,
                  "expectedGoals": 0.2033,
                  "totalOppositionHalfPasses": 5.2466,
                  "accurateOppositionHalfPasses": 3.3691,
                  "accuratePass": 4.7928,
                  "totalShots": 2.3609
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.29954683780670166,
                    "model_output": 0.2995,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.064
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.024
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0157
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0112
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0101
                        }
                      ],
                      "others": -0.0043,
                      "total": 0.2995,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.27901
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.087252
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.053186
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.036271
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.032846
                        }
                      ],
                      "others_margin": -0.01368
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.30796486139297485,
                    "model_output": 0.308,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0645
                        },
                        {
                          "name": "goals",
                          "contribution": -0.026
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.023
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0168
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0139
                        }
                      ],
                      "others": 0.0121,
                      "total": 0.308,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.274928
                        },
                        {
                          "name": "goals",
                          "margin": -0.101813
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.090827
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.061396
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.04799
                        }
                      ],
                      "others_margin": 0.039767
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.7838975787162781,
                    "model_output": 0.7839,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1493
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0383
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.034
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0339
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0308
                        }
                      ],
                      "others": 0.0284,
                      "total": 0.7839,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.245347
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.054336
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.045884
                        },
                        {
                          "name": "goals",
                          "margin": -0.04571
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.041668
                        }
                      ],
                      "others_margin": 0.036792
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 2.124445915222168,
                    "model_output": 2.1244,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.4812
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.2126
                        },
                        {
                          "name": "totalShots_p90",
                          "contribution": 0.0607
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0392
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0349
                        }
                      ],
                      "others": -0.0829,
                      "total": 2.1244,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.481243
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.212641
                        },
                        {
                          "name": "totalShots_p90",
                          "margin": 0.060709
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.039194
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.034933
                        }
                      ],
                      "others_margin": -0.082981
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.06684267520904541,
                    "model_output": 0.0668,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0162
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0115
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0091
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0071
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0059
                        }
                      ],
                      "others": -0.0031,
                      "total": 0.0668,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.225102
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.133323
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.104153
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.088885
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.081517
                        }
                      ],
                      "others_margin": -0.044828
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 0.7391601800918579,
                    "model_output": 0.7392,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1949
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0492
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0393
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0391
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0382
                        }
                      ],
                      "others": -0.0421,
                      "total": 0.7392,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.253957
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.058283
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.049147
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.048949
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.047787
                        }
                      ],
                      "others_margin": -0.05537
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.884772300720215,
                    "model_output": 6.8848,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0587
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0405
                        },
                        {
                          "name": "rating",
                          "contribution": 0.0162
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0159
                        },
                        {
                          "name": "totalShots_p90",
                          "contribution": 0.0125
                        }
                      ],
                      "others": 0.0106,
                      "total": 6.8848,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.058681
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.040467
                        },
                        {
                          "name": "rating",
                          "margin": 0.016156
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.015919
                        },
                        {
                          "name": "totalShots_p90",
                          "margin": 0.012529
                        }
                      ],
                      "others_margin": 0.010697
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 6,
                  "role_matches": 1,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "all_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9908, quality 0.437)",
              "stats": {
                "expected_goals": 0.2968,
                "goals": 0.3051,
                "goal_rate": 0.3051,
                "shots_on_target": 0.7767,
                "total_shots": 2.1049,
                "expected_assists": 0.0662,
                "key_pass": 0.7324,
                "rating": 6.8848,
                "minutes": 75.33,
                "total_pass": 6.6088,
                "accurate_pass": 4.7487,
                "duels_won": 1.9643,
                "total_long_balls": 0.411,
                "accurate_long_balls": 0.411,
                "total_opp_half_passes": 5.1983,
                "accurate_opp_half_passes": 3.3382,
                "crosses_total": 0.3752,
                "crosses_accurate": 0.3752,
                "touches": 12.5271,
                "possession_lost": 2.7671,
                "dispossessed": 0.411,
                "duels_lost": 3.1211,
                "aerial_lost": 1.5466,
                "total_contest": 0.2028,
                "won_contest": 0.2028,
                "ball_recovery": 1.131,
                "challenges_lost": 0.1724,
                "fouls": 1.1376,
                "fouls_drawn": 0.1724,
                "assists": 0.1724,
                "assist_rate": 0.1724,
                "interceptions": 0.2386,
                "tackles_won": 0.1245,
                "tackles": 0.2711,
                "clearances": 0.1724,
                "blocks": 0.0,
                "big_chances_created": 0.3752,
                "big_chances_missed": 0.3282,
                "xgot": 0.189,
                "offsides": 0.55,
                "ball_carries": 3.5582,
                "total_progression": 25.0004,
                "progressive_carries": 0.9274,
                "shots_off_target": 1.3282
              },
              "params": {
                "market_value_eur": 1500000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9908,
                "reference_quality": 0.505,
                "history_matches": 6,
                "history_shrink": 0.4545,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0059)",
              "stats": {
                "expected_goals": 0.2968,
                "goals": 0.3033,
                "goal_rate": 0.3033,
                "shots_on_target": 0.7721,
                "total_shots": 2.1267,
                "expected_assists": 0.0662,
                "key_pass": 0.7324,
                "rating": 6.8848,
                "minutes": 75.33,
                "total_pass": 6.6088,
                "accurate_pass": 4.7487,
                "duels_won": 1.9643,
                "total_long_balls": 0.411,
                "accurate_long_balls": 0.411,
                "total_opp_half_passes": 5.1983,
                "accurate_opp_half_passes": 3.3382,
                "crosses_total": 0.373,
                "crosses_accurate": 0.3752,
                "touches": 12.5271,
                "possession_lost": 2.7671,
                "dispossessed": 0.411,
                "duels_lost": 3.1211,
                "aerial_lost": 1.5466,
                "total_contest": 0.2028,
                "won_contest": 0.2028,
                "ball_recovery": 1.131,
                "challenges_lost": 0.1724,
                "fouls": 1.1474,
                "fouls_drawn": 0.1714,
                "assists": 0.1714,
                "assist_rate": 0.1714,
                "interceptions": 0.2372,
                "tackles_won": 0.1403,
                "tackles": 0.2711,
                "clearances": 0.1724,
                "blocks": 0.0,
                "big_chances_created": 0.3752,
                "big_chances_missed": 0.3282,
                "xgot": 0.189,
                "offsides": 0.5468,
                "ball_carries": 3.5582,
                "total_progression": 25.0004,
                "progressive_carries": 0.9274,
                "shots_off_target": 1.3282
              },
              "params": {
                "blend_weight": 0.0059,
                "history_matches": 6,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.837,
                "prior_reliability": 0.02,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "totalShots",
                  "before": 2.1049,
                  "after": 2.1267
                },
                {
                  "stat": "wonTackle",
                  "before": 0.1245,
                  "after": 0.1403
                },
                {
                  "stat": "fouls",
                  "before": 1.1376,
                  "after": 1.1474
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.2968,
                "goals": 0.3033,
                "goal_rate": 0.3033,
                "shots_on_target": 0.7721,
                "total_shots": 2.1267,
                "expected_assists": 0.0662,
                "key_pass": 0.7324,
                "rating": 6.8848,
                "minutes": 75.33,
                "total_pass": 6.6088,
                "accurate_pass": 4.7487,
                "duels_won": 1.9643,
                "total_long_balls": 0.411,
                "accurate_long_balls": 0.411,
                "total_opp_half_passes": 5.1983,
                "accurate_opp_half_passes": 3.3382,
                "crosses_total": 0.373,
                "crosses_accurate": 0.373,
                "touches": 12.5271,
                "possession_lost": 2.7671,
                "dispossessed": 0.411,
                "duels_lost": 3.1211,
                "aerial_lost": 1.5466,
                "total_contest": 0.2028,
                "won_contest": 0.2028,
                "ball_recovery": 1.131,
                "challenges_lost": 0.1724,
                "fouls": 1.1474,
                "fouls_drawn": 0.1714,
                "assists": 0.1714,
                "assist_rate": 0.1714,
                "interceptions": 0.2372,
                "tackles_won": 0.1403,
                "tackles": 0.2711,
                "clearances": 0.1724,
                "blocks": 0.0,
                "big_chances_created": 0.3752,
                "big_chances_missed": 0.3282,
                "xgot": 0.189,
                "offsides": 0.5468,
                "ball_carries": 3.5582,
                "total_progression": 25.0004,
                "progressive_carries": 0.9274,
                "shots_off_target": 1.3282
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "expected_goals": 0.2829,
                "goals": 0.289,
                "goal_rate": 0.289,
                "shots_on_target": 0.7358,
                "total_shots": 2.0267,
                "expected_assists": 0.0662,
                "key_pass": 0.7324,
                "rating": 6.8848,
                "minutes": 75.33,
                "total_pass": 6.6088,
                "accurate_pass": 4.7487,
                "duels_won": 1.9643,
                "total_long_balls": 0.411,
                "accurate_long_balls": 0.411,
                "total_opp_half_passes": 5.1983,
                "accurate_opp_half_passes": 3.3382,
                "crosses_total": 0.373,
                "crosses_accurate": 0.373,
                "touches": 12.5271,
                "possession_lost": 2.7671,
                "dispossessed": 0.411,
                "duels_lost": 3.1211,
                "aerial_lost": 1.5466,
                "total_contest": 0.2028,
                "won_contest": 0.2028,
                "ball_recovery": 1.131,
                "challenges_lost": 0.1724,
                "fouls": 1.1474,
                "fouls_drawn": 0.1714,
                "assists": 0.1714,
                "assist_rate": 0.1714,
                "interceptions": 0.2372,
                "tackles_won": 0.1403,
                "tackles": 0.2711,
                "clearances": 0.1724,
                "blocks": 0.0,
                "big_chances_created": 0.3752,
                "big_chances_missed": 0.3128,
                "xgot": 0.1801,
                "offsides": 0.5468,
                "ball_carries": 3.5582,
                "total_progression": 25.0004,
                "progressive_carries": 0.9274,
                "shots_off_target": 1.2658,
                "duel_xg_multiplier": 0.953,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.4,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.18,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Ángel Recio, Fernando Calero",
                  "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                  "duel_win_rate": 0.18,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v2",
                  "xg_multiplier": 0.953,
                  "skill_edge": 0.0,
                  "height_edge": -0.032,
                  "attacker_skill": 0.4374,
                  "defender_skill": 0.4374,
                  "attacker_role": "ST",
                  "attacker_mv_price_index": 1.0,
                  "defender_adjusted_parts": [
                    {
                      "player": "Ángel Recio",
                      "market_value": 315000,
                      "role": "CB",
                      "price_index": 0.75,
                      "adjusted_quality": 0.4374
                    },
                    {
                      "player": "Fernando Calero",
                      "market_value": 2100000,
                      "role": "CB",
                      "price_index": 0.75,
                      "adjusted_quality": 0.4374
                    }
                  ],
                  "xg_override": 0.2829
                }
              },
              "changes": [
                {
                  "stat": "totalShots",
                  "before": 2.1267,
                  "after": 2.0267
                },
                {
                  "stat": "shotOffTarget",
                  "before": 1.3282,
                  "after": 1.2658
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.7721,
                  "after": 0.7358
                },
                {
                  "stat": "bigChanceMissed",
                  "before": 0.3282,
                  "after": 0.3128
                },
                {
                  "stat": "goals",
                  "before": 0.3033,
                  "after": 0.289
                },
                {
                  "stat": "expectedGoals",
                  "before": 0.2968,
                  "after": 0.2829
                },
                {
                  "stat": "expectedGoalsOnTarget",
                  "before": 0.189,
                  "after": 0.1801
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "expected_goals": 0.2879,
                "goal_rate": 0.289,
                "goals": 0,
                "shots_on_target": 0.7358,
                "total_shots": 2.0267,
                "expected_assists": 0.0675,
                "key_pass": 0.7324,
                "rating": 6.8848,
                "minutes": 75.33,
                "total_pass": 6.6088,
                "accurate_pass": 4.7487,
                "duels_won": 1.9643,
                "total_long_balls": 0.411,
                "accurate_long_balls": 0.411,
                "total_opp_half_passes": 5.1983,
                "accurate_opp_half_passes": 3.3382,
                "crosses_total": 0.373,
                "crosses_accurate": 0.373,
                "touches": 12.5271,
                "possession_lost": 2.7671,
                "dispossessed": 0.411,
                "duels_lost": 3.1211,
                "aerial_lost": 1.5466,
                "total_contest": 0.2028,
                "won_contest": 0.2028,
                "ball_recovery": 1.131,
                "challenges_lost": 0.1724,
                "fouls": 1.1474,
                "fouls_drawn": 0.1714,
                "assist_rate": 0.1714,
                "assists": 0,
                "interceptions": 0.2372,
                "tackles_won": 0.1403,
                "tackles": 0.2711,
                "clearances": 0.1724,
                "blocks": 0.0,
                "big_chances_created": 0.3752,
                "big_chances_missed": 0.3128,
                "xgot": 0.1833,
                "offsides": 0.5468,
                "ball_carries": 3.5582,
                "total_progression": 25.0004,
                "progressive_carries": 0.9274,
                "shots_off_target": 1.2658,
                "duel_xg_multiplier": 0.953,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.4,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.18,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0183,
                "creation_factor": 1.25
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              },
              "changes": [
                {
                  "stat": "expected_goals",
                  "before": 0.2829,
                  "after": 0.2879
                }
              ]
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 5 by projected rating, fifa_overall 72.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.2879,
                "goal_rate": 0.289,
                "goals": 0,
                "shots_on_target": 0.7358,
                "total_shots": 2.0267,
                "expected_assists": 0.0675,
                "key_pass": 0.7324,
                "rating": 6.8848,
                "minutes": 75.33,
                "total_pass": 6.6088,
                "accurate_pass": 4.7487,
                "duels_won": 1.9643,
                "total_long_balls": 0.411,
                "accurate_long_balls": 0.411,
                "total_opp_half_passes": 5.1983,
                "accurate_opp_half_passes": 3.3382,
                "crosses_total": 0.373,
                "crosses_accurate": 0.373,
                "touches": 12.5271,
                "possession_lost": 2.7671,
                "dispossessed": 0.411,
                "duels_lost": 3.1211,
                "aerial_lost": 1.5466,
                "total_contest": 0.2028,
                "won_contest": 0.2028,
                "ball_recovery": 1.131,
                "challenges_lost": 0.1724,
                "fouls": 1.1474,
                "fouls_drawn": 0.1714,
                "assist_rate": 0.1714,
                "assists": 0,
                "interceptions": 0.2372,
                "tackles_won": 0.1403,
                "tackles": 0.2711,
                "clearances": 0.1724,
                "blocks": 0.0,
                "big_chances_created": 0.3752,
                "big_chances_missed": 0.3128,
                "xgot": 0.1833,
                "offsides": 0.5468,
                "ball_carries": 3.5582,
                "total_progression": 25.0004,
                "progressive_carries": 0.9274,
                "shots_off_target": 1.2658,
                "duel_xg_multiplier": 0.953,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.4,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.18,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0183,
                "creation_factor": 1.25,
                "fifa_overall": 72.0
              },
              "params": {
                "match_squad_rank": 5,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 4543,
                "fifa_rank": 4244.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 72.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "expected_goals": 0.2879,
                "goal_rate": 0.289,
                "goals": 0,
                "shots_on_target": 0.7358,
                "total_shots": 2.0267,
                "expected_assists": 0.0675,
                "key_pass": 0.7324,
                "rating": 6.8848,
                "minutes": 75.33,
                "total_pass": 6.6088,
                "accurate_pass": 4.7487,
                "duels_won": 1.9643,
                "total_long_balls": 0.411,
                "accurate_long_balls": 0.411,
                "total_opp_half_passes": 5.1983,
                "accurate_opp_half_passes": 3.3382,
                "crosses_total": 0.373,
                "crosses_accurate": 0.373,
                "touches": 12.5271,
                "possession_lost": 2.7671,
                "dispossessed": 0.411,
                "duels_lost": 3.1211,
                "aerial_lost": 1.5466,
                "total_contest": 0.2028,
                "won_contest": 0.2028,
                "ball_recovery": 1.131,
                "challenges_lost": 0.1724,
                "fouls": 1.1474,
                "fouls_drawn": 0.1714,
                "assist_rate": 0.1714,
                "assists": 0,
                "interceptions": 0.2372,
                "tackles_won": 0.1403,
                "tackles": 0.2711,
                "clearances": 0.1724,
                "blocks": 0.0,
                "big_chances_created": 0.3752,
                "big_chances_missed": 0.3128,
                "xgot": 0.1833,
                "offsides": 0.5468,
                "ball_carries": 3.5582,
                "total_progression": 25.0004,
                "progressive_carries": 0.9274,
                "shots_off_target": 1.2658,
                "duel_xg_multiplier": 0.953,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.4,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.18,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.2502,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0183,
                "creation_factor": 1.25,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.2502,
                "scorer_weight": 0.2932,
                "squad_weight_total": 1.6319,
                "weight_share": 0.1796,
                "finishing_factor": 1.0183,
                "appearance_weight": 1.0,
                "weight_rank": 2,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "expected_goals": 0.2879,
                "goal_rate": 0.289,
                "goals": 0,
                "shots_on_target": 0.7358,
                "total_shots": 2.0267,
                "expected_assists": 0.0675,
                "key_pass": 0.7324,
                "rating": 6.8848,
                "minutes": 75.33,
                "total_pass": 6.6088,
                "accurate_pass": 4.7487,
                "duels_won": 1.9643,
                "total_long_balls": 0.411,
                "accurate_long_balls": 0.411,
                "total_opp_half_passes": 5.1983,
                "accurate_opp_half_passes": 3.3382,
                "crosses_total": 0.373,
                "crosses_accurate": 0.373,
                "touches": 12.5271,
                "possession_lost": 2.7671,
                "dispossessed": 0.411,
                "duels_lost": 3.1211,
                "aerial_lost": 1.5466,
                "total_contest": 0.2028,
                "won_contest": 0.2028,
                "ball_recovery": 1.131,
                "challenges_lost": 0.1724,
                "fouls": 1.1474,
                "fouls_drawn": 0.1714,
                "assist_rate": 0.1714,
                "assists": 0,
                "interceptions": 0.2372,
                "tackles_won": 0.1403,
                "tackles": 0.2711,
                "clearances": 0.1724,
                "blocks": 0.0,
                "big_chances_created": 0.3752,
                "big_chances_missed": 0.3128,
                "xgot": 0.1833,
                "offsides": 0.5468,
                "ball_carries": 3.5582,
                "total_progression": 25.0004,
                "progressive_carries": 0.9274,
                "shots_off_target": 1.2658,
                "duel_xg_multiplier": 0.953,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.4,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.18,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.2502,
                "projected_assists": 0,
                "assist_probability": 0.0653,
                "finishing_factor": 1.0183,
                "creation_factor": 1.25,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0653,
                "provider_weight": 0.0844,
                "squad_weight_total": 0.9581,
                "weight_share": 0.0881,
                "creation_factor": 1.25,
                "appearance_weight": 1.0,
                "weight_rank": 6,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Gabriel Moscardo": {
          "player_id": 1485309,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 20,
          "height": 185,
          "market_value": 7500000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0271,
            "assist_rate": 0.0382,
            "assists": 0,
            "expected_goals": 0.0766,
            "goal_rate": 0.096,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "rating": 6.6856,
            "minutes": 69,
            "total_pass": 13,
            "accurate_pass": 10,
            "duels_won": 4,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_own_half_passes": 7,
            "accurate_own_half_passes": 6,
            "total_opp_half_passes": 6,
            "accurate_opp_half_passes": 4,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 23,
            "possession_lost": 5.7223,
            "dispossessed": 1.5773,
            "duels_lost": 3,
            "aerial_won": 1,
            "aerial_lost": 1,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 2,
            "clearances": 1,
            "total_contest": 0,
            "won_contest": 0,
            "challenges_lost": 0,
            "fouls": 1,
            "fouls_drawn": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0083,
            "ball_carries": 5,
            "total_progression": 2,
            "progressive_carries": 0,
            "shots_off_target": 1,
            "duel_xg_multiplier": 1.0999,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.8,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.468,
            "pressing_faced": "LOW",
            "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
            "numerical_situation": "1v1",
            "opponent_defenders": "David Larrubia",
            "opponent_faced": "David Larrubia",
            "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.0737,
            "projected_assists": 0,
            "assist_probability": 0.0267,
            "finishing_factor": 1.1652,
            "creation_factor": 1.1514,
            "fifa_overall": 72.0
          },
          "latest_10_games": [
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 45,
                "rating": 5.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0811,
                "expected_assists": 0.004,
                "total_shots": 1,
                "total_pass": 8,
                "accurate_pass": 5,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 24,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.001,
                "total_shots": 0,
                "total_pass": 6,
                "accurate_pass": 6,
                "tackles": 2,
                "tackles_won": 1,
                "clearances": 1,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 59,
                "rating": 7.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0136,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 17,
                "tackles": 3,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 5,
                "duels_won": 9
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 45,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0453,
                "expected_assists": 0.006,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 21,
                "accurate_pass": 18,
                "tackles": 4,
                "tackles_won": 1,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 5,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 4340,
            "combined_rank_score": 2356.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 445.0,
            "sofascore_rating": 6.9,
            "sofascore_appearances": 1.0,
            "fifa_rank": 4267.0,
            "fifa_overall": 72.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 14,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.6856,
            "source_file": "data/player_rankings.csv",
            "player_name": "Gabriel Moscardo",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Fabiano Parisi",
                  "ranking": 4335
                },
                {
                  "player_name": "Mandela Keita",
                  "ranking": 4336
                },
                {
                  "player_name": "Jay Idzes",
                  "ranking": 4337
                },
                {
                  "player_name": "Obed Vargas",
                  "ranking": 4338
                },
                {
                  "player_name": "Mateo Joseph",
                  "ranking": 4339
                }
              ],
              "lower": [
                {
                  "player_name": "Akor Jerome Adams",
                  "ranking": 4341
                },
                {
                  "player_name": "Ezequiel Ponce",
                  "ranking": 4342
                },
                {
                  "player_name": "Anass Salah-Eddine",
                  "ranking": 4343
                },
                {
                  "player_name": "Fabio Miretti",
                  "ranking": 4344
                },
                {
                  "player_name": "Tommaso Baldanzi",
                  "ranking": 4345
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.505,
          "history_matches": 4,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 4,
            "data_confidence": 0.505,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9979,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 1.0,
              "starts": 0.0,
              "minutes": 45.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 2.0,
              "shots_on_target_pct": 100.0,
              "prior_reliability": 0.0333
            },
            "rationale": "XGBoost regressor (M_service) evaluated 4 historical appearances across 8 target models; FBref 2026-2027 prior blended (La Liga, Espanyol, rel: 0.03, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 0.5389,
                "expected_assists": 0.0266,
                "assists": 0.0388,
                "assist_rate": 0.0388,
                "expected_goals": 0.0686,
                "goals": 0.0886,
                "goal_rate": 0.0886,
                "shots_on_target": 0.2552,
                "total_shots": 0.8651,
                "rating": 6.6856,
                "minutes": 68.72,
                "total_pass": 12.9194,
                "accurate_pass": 10.4929,
                "duels_won": 4.1182,
                "total_long_balls": 1.2267,
                "accurate_long_balls": 1.034,
                "total_own_half_passes": 7.1134,
                "accurate_own_half_passes": 6.1874,
                "total_opp_half_passes": 5.8059,
                "accurate_opp_half_passes": 4.3054,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 22.8124,
                "possession_lost": 5.7343,
                "dispossessed": 1.5806,
                "duels_lost": 3.4535,
                "aerial_won": 1.6402,
                "aerial_lost": 0.6462,
                "interceptions": 0.2267,
                "tackles_won": 0.6862,
                "tackles": 1.9845,
                "clearances": 1.4194,
                "total_contest": 0.4595,
                "won_contest": 0.2668,
                "challenges_lost": 0.2267,
                "fouls": 0.8073,
                "fouls_drawn": 0.2267,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0075,
                "ball_carries": 4.6153,
                "total_progression": 2.1946,
                "progressive_carries": 0.0,
                "shots_off_target": 0.6099
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 45.0,
                    "is_starting": true,
                    "weight": 0.3138,
                    "rating": 5.8
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 24.0,
                    "is_starting": false,
                    "weight": 0.2667,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 59.0,
                    "is_starting": true,
                    "weight": 0.2267,
                    "rating": 7.1
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.1927,
                    "rating": 6.9
                  }
                ],
                "feature_row": {
                  "history_matches": 4.0,
                  "is_starting_11": 1.0,
                  "totalShots": 0.5065,
                  "creative_index": 0.0035,
                  "expectedGoals": 0.0342,
                  "expectedAssists": 0.0058,
                  "onTargetScoringAttempt": 0.1927
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 0.5389458537101746,
                    "model_output": 0.5389,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1376
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.1208
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0986
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0841
                        },
                        {
                          "name": "keyPass_p90",
                          "contribution": -0.0279
                        }
                      ],
                      "others": -0.1535,
                      "total": 0.5389,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.144329
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.125553
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.115653
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.1105
                        },
                        {
                          "name": "keyPass_p90",
                          "margin": -0.039454
                        }
                      ],
                      "others_margin": -0.250494
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.026623738929629326,
                    "model_output": 0.0266,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "totalCross",
                          "contribution": -0.0231
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0151
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0071
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0059
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.0035
                        }
                      ],
                      "others": -0.0187,
                      "total": 0.0266,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "totalCross",
                          "margin": -0.313261
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.275871
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.139201
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.113296
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.074182
                        }
                      ],
                      "others_margin": -0.532496
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.03876618295907974,
                    "model_output": 0.0388,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "totalCross",
                          "contribution": -0.0219
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0079
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0042
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0037
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0028
                        }
                      ],
                      "others": -0.0115,
                      "total": 0.0388,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "totalCross",
                          "margin": -0.29685
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.133718
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.079253
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.074538
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.056311
                        }
                      ],
                      "others_margin": -0.259754
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.06863365322351456,
                    "model_output": 0.0686,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0168
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0112
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.01
                        },
                        {
                          "name": "keyPass_p90",
                          "contribution": -0.0039
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0036
                        }
                      ],
                      "others": -0.0003,
                      "total": 0.0686,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.196025
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.155408
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.140303
                        },
                        {
                          "name": "keyPass_p90",
                          "margin": -0.052481
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.051442
                        }
                      ],
                      "others_margin": -0.004002
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.0885738804936409,
                    "model_output": 0.0886,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.0157
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.011
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0086
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0083
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0046
                        }
                      ],
                      "others": 0.0006,
                      "total": 0.0886,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.174967
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.126057
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.09734
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.093511
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.051344
                        }
                      ],
                      "others_margin": 0.00658
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.25518232583999634,
                    "model_output": 0.2552,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.0806
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0501
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0311
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0197
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0094
                        }
                      ],
                      "others": 0.0205,
                      "total": 0.2552,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.285849
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.230381
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.149238
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.083962
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.039223
                        }
                      ],
                      "others_margin": 0.083514
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.8650482892990112,
                    "model_output": 0.865,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.2448
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1254
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0761
                        },
                        {
                          "name": "totalPass",
                          "contribution": 0.0307
                        },
                        {
                          "name": "dispossessed",
                          "contribution": 0.0301
                        }
                      ],
                      "others": 0.0092,
                      "total": 0.865,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.244848
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.12541
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.076091
                        },
                        {
                          "name": "totalPass",
                          "margin": 0.03071
                        },
                        {
                          "name": "dispossessed",
                          "margin": 0.030132
                        }
                      ],
                      "others_margin": 0.009271
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.685565948486328,
                    "model_output": 6.6856,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0557
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0445
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0241
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0226
                        },
                        {
                          "name": "press_vulnerability",
                          "contribution": -0.0103
                        }
                      ],
                      "others": -0.0513,
                      "total": 6.6856,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.055663
                        },
                        {
                          "name": "rating",
                          "margin": -0.044478
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.024086
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.022563
                        },
                        {
                          "name": "press_vulnerability",
                          "margin": -0.010263
                        }
                      ],
                      "others_margin": -0.051376
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 4,
                  "role_matches": 2,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "all_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9979, quality 0.493)",
              "stats": {
                "key_pass": 0.5378,
                "expected_assists": 0.0266,
                "assists": 0.0387,
                "assist_rate": 0.0387,
                "expected_goals": 0.0685,
                "goals": 0.0884,
                "goal_rate": 0.0884,
                "shots_on_target": 0.2546,
                "total_shots": 0.8633,
                "rating": 6.6856,
                "minutes": 68.72,
                "total_pass": 12.8923,
                "accurate_pass": 10.4709,
                "duels_won": 4.1096,
                "total_long_balls": 1.2241,
                "accurate_long_balls": 1.0318,
                "total_own_half_passes": 7.0985,
                "accurate_own_half_passes": 6.1744,
                "total_opp_half_passes": 5.7937,
                "accurate_opp_half_passes": 4.2964,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 22.7645,
                "possession_lost": 5.7223,
                "dispossessed": 1.5773,
                "duels_lost": 3.4462,
                "aerial_won": 1.6368,
                "aerial_lost": 0.6448,
                "interceptions": 0.2262,
                "tackles_won": 0.6848,
                "tackles": 1.9803,
                "clearances": 1.4164,
                "total_contest": 0.4585,
                "won_contest": 0.2662,
                "challenges_lost": 0.2262,
                "fouls": 0.8056,
                "fouls_drawn": 0.2262,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0075,
                "ball_carries": 4.6056,
                "total_progression": 2.19,
                "progressive_carries": 0.0,
                "shots_off_target": 0.6086
              },
              "params": {
                "market_value_eur": 7500000,
                "quality_factor": 0.4927,
                "boost_factor": 0.9979,
                "reference_quality": 0.505,
                "history_matches": 4,
                "history_shrink": 0.5556,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0120)",
              "stats": {
                "key_pass": 0.5378,
                "expected_assists": 0.0266,
                "assists": 0.0382,
                "assist_rate": 0.0382,
                "expected_goals": 0.0685,
                "goals": 0.0873,
                "goal_rate": 0.0873,
                "shots_on_target": 0.2699,
                "total_shots": 0.8713,
                "rating": 6.6856,
                "minutes": 68.72,
                "total_pass": 12.8923,
                "accurate_pass": 10.4709,
                "duels_won": 4.1096,
                "total_long_balls": 1.2241,
                "accurate_long_balls": 1.0318,
                "total_own_half_passes": 7.0985,
                "accurate_own_half_passes": 6.1744,
                "total_opp_half_passes": 5.7937,
                "accurate_opp_half_passes": 4.2964,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 22.7645,
                "possession_lost": 5.7223,
                "dispossessed": 1.5773,
                "duels_lost": 3.4462,
                "aerial_won": 1.6368,
                "aerial_lost": 0.6448,
                "interceptions": 0.2235,
                "tackles_won": 0.6949,
                "tackles": 1.9803,
                "clearances": 1.4164,
                "total_contest": 0.4585,
                "won_contest": 0.2662,
                "challenges_lost": 0.2262,
                "fouls": 0.7959,
                "fouls_drawn": 0.2235,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0075,
                "ball_carries": 4.6056,
                "total_progression": 2.19,
                "progressive_carries": 0.0,
                "shots_off_target": 0.6086
              },
              "params": {
                "blend_weight": 0.012,
                "history_matches": 4,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.7636,
                "prior_reliability": 0.0333,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.2546,
                  "after": 0.2699
                },
                {
                  "stat": "wonTackle",
                  "before": 0.6848,
                  "after": 0.6949
                },
                {
                  "stat": "fouls",
                  "before": 0.8056,
                  "after": 0.7959
                },
                {
                  "stat": "totalShots",
                  "before": 0.8633,
                  "after": 0.8713
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 0.5378,
                "expected_assists": 0.0266,
                "assists": 0.0382,
                "assist_rate": 0.0382,
                "expected_goals": 0.0685,
                "goals": 0.0873,
                "goal_rate": 0.0873,
                "shots_on_target": 0.2699,
                "total_shots": 0.8785,
                "rating": 6.6856,
                "minutes": 68.72,
                "total_pass": 12.8923,
                "accurate_pass": 10.4709,
                "duels_won": 4.1096,
                "total_long_balls": 1.2241,
                "accurate_long_balls": 1.0318,
                "total_own_half_passes": 7.0985,
                "accurate_own_half_passes": 6.1744,
                "total_opp_half_passes": 5.7937,
                "accurate_opp_half_passes": 4.2964,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 22.7645,
                "possession_lost": 5.7223,
                "dispossessed": 1.5773,
                "duels_lost": 3.4462,
                "aerial_won": 1.6368,
                "aerial_lost": 0.6448,
                "interceptions": 0.2235,
                "tackles_won": 0.6949,
                "tackles": 1.9803,
                "clearances": 1.4164,
                "total_contest": 0.4585,
                "won_contest": 0.2662,
                "challenges_lost": 0.2262,
                "fouls": 0.7959,
                "fouls_drawn": 0.2235,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0075,
                "ball_carries": 4.6056,
                "total_progression": 2.19,
                "progressive_carries": 0.0,
                "shots_off_target": 0.6086
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": true
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "key_pass": 0.5378,
                "expected_assists": 0.0266,
                "assists": 0.0382,
                "assist_rate": 0.0382,
                "expected_goals": 0.0753,
                "goals": 0.096,
                "goal_rate": 0.096,
                "shots_on_target": 0.2969,
                "total_shots": 0.9663,
                "rating": 6.6856,
                "minutes": 68.72,
                "total_pass": 12.8923,
                "accurate_pass": 10.4709,
                "duels_won": 4.1096,
                "total_long_balls": 1.2241,
                "accurate_long_balls": 1.0318,
                "total_own_half_passes": 7.0985,
                "accurate_own_half_passes": 6.1744,
                "total_opp_half_passes": 5.7937,
                "accurate_opp_half_passes": 4.2964,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 22.7645,
                "possession_lost": 5.7223,
                "dispossessed": 1.5773,
                "duels_lost": 3.4462,
                "aerial_won": 1.2,
                "aerial_lost": 0.6448,
                "interceptions": 0.2235,
                "tackles_won": 0.6949,
                "tackles": 1.9803,
                "clearances": 1.4164,
                "total_contest": 0.4585,
                "won_contest": 0.2662,
                "challenges_lost": 0.2262,
                "fouls": 0.7959,
                "fouls_drawn": 0.2235,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0082,
                "ball_carries": 4.6056,
                "total_progression": 2.19,
                "progressive_carries": 0.0,
                "shots_off_target": 0.6694,
                "duel_xg_multiplier": 1.0999,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.468,
                "pressing_faced": "LOW",
                "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "David Larrubia",
                "opponent_faced": "David Larrubia",
                "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "David Larrubia",
                  "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                  "duel_win_rate": 0.468,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v1",
                  "xg_multiplier": 1.0999,
                  "skill_edge": 0.016,
                  "height_edge": 0.052,
                  "attacker_skill": 0.5085,
                  "defender_skill": 0.4731,
                  "attacker_role": "CDM",
                  "attacker_mv_price_index": 0.85,
                  "defender_adjusted_parts": [
                    {
                      "player": "David Larrubia",
                      "market_value": 5300000,
                      "role": "CM",
                      "price_index": 0.9,
                      "adjusted_quality": 0.4731
                    }
                  ],
                  "xg_override": 0.0753
                }
              },
              "changes": [
                {
                  "stat": "aerialWon",
                  "before": 1.6368,
                  "after": 1.2
                },
                {
                  "stat": "totalShots",
                  "before": 0.8785,
                  "after": 0.9663
                },
                {
                  "stat": "shotOffTarget",
                  "before": 0.6086,
                  "after": 0.6694
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.2699,
                  "after": 0.2969
                },
                {
                  "stat": "goals",
                  "before": 0.0873,
                  "after": 0.096
                },
                {
                  "stat": "expectedGoals",
                  "before": 0.0685,
                  "after": 0.0753
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "key_pass": 0.5378,
                "expected_assists": 0.0271,
                "assist_rate": 0.0382,
                "assists": 0,
                "expected_goals": 0.0766,
                "goal_rate": 0.096,
                "goals": 0,
                "shots_on_target": 0.2969,
                "total_shots": 0.9663,
                "rating": 6.6856,
                "minutes": 68.72,
                "total_pass": 12.8923,
                "accurate_pass": 10.4709,
                "duels_won": 4.1096,
                "total_long_balls": 1.2241,
                "accurate_long_balls": 1.0318,
                "total_own_half_passes": 7.0985,
                "accurate_own_half_passes": 6.1744,
                "total_opp_half_passes": 5.7937,
                "accurate_opp_half_passes": 4.2964,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 22.7645,
                "possession_lost": 5.7223,
                "dispossessed": 1.5773,
                "duels_lost": 3.4462,
                "aerial_won": 1.2,
                "aerial_lost": 0.6448,
                "interceptions": 0.2235,
                "tackles_won": 0.6949,
                "tackles": 1.9803,
                "clearances": 1.4164,
                "total_contest": 0.4585,
                "won_contest": 0.2662,
                "challenges_lost": 0.2262,
                "fouls": 0.7959,
                "fouls_drawn": 0.2235,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0083,
                "ball_carries": 4.6056,
                "total_progression": 2.19,
                "progressive_carries": 0.0,
                "shots_off_target": 0.6694,
                "duel_xg_multiplier": 1.0999,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.468,
                "pressing_faced": "LOW",
                "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "David Larrubia",
                "opponent_faced": "David Larrubia",
                "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1652,
                "creation_factor": 1.1514
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 14 by projected rating, fifa_overall 72.0; not used by the projection)",
              "stats": {
                "key_pass": 0.5378,
                "expected_assists": 0.0271,
                "assist_rate": 0.0382,
                "assists": 0,
                "expected_goals": 0.0766,
                "goal_rate": 0.096,
                "goals": 0,
                "shots_on_target": 0.2969,
                "total_shots": 0.9663,
                "rating": 6.6856,
                "minutes": 68.72,
                "total_pass": 12.8923,
                "accurate_pass": 10.4709,
                "duels_won": 4.1096,
                "total_long_balls": 1.2241,
                "accurate_long_balls": 1.0318,
                "total_own_half_passes": 7.0985,
                "accurate_own_half_passes": 6.1744,
                "total_opp_half_passes": 5.7937,
                "accurate_opp_half_passes": 4.2964,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 22.7645,
                "possession_lost": 5.7223,
                "dispossessed": 1.5773,
                "duels_lost": 3.4462,
                "aerial_won": 1.2,
                "aerial_lost": 0.6448,
                "interceptions": 0.2235,
                "tackles_won": 0.6949,
                "tackles": 1.9803,
                "clearances": 1.4164,
                "total_contest": 0.4585,
                "won_contest": 0.2662,
                "challenges_lost": 0.2262,
                "fouls": 0.7959,
                "fouls_drawn": 0.2235,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0083,
                "ball_carries": 4.6056,
                "total_progression": 2.19,
                "progressive_carries": 0.0,
                "shots_off_target": 0.6694,
                "duel_xg_multiplier": 1.0999,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.468,
                "pressing_faced": "LOW",
                "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "David Larrubia",
                "opponent_faced": "David Larrubia",
                "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1652,
                "creation_factor": 1.1514,
                "fifa_overall": 72.0
              },
              "params": {
                "match_squad_rank": 14,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 4340,
                "fifa_rank": 4267.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 72.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "key_pass": 0.5378,
                "expected_assists": 0.0271,
                "assist_rate": 0.0382,
                "assists": 0,
                "expected_goals": 0.0766,
                "goal_rate": 0.096,
                "goals": 0,
                "shots_on_target": 0.2969,
                "total_shots": 0.9663,
                "rating": 6.6856,
                "minutes": 68.72,
                "total_pass": 12.8923,
                "accurate_pass": 10.4709,
                "duels_won": 4.1096,
                "total_long_balls": 1.2241,
                "accurate_long_balls": 1.0318,
                "total_own_half_passes": 7.0985,
                "accurate_own_half_passes": 6.1744,
                "total_opp_half_passes": 5.7937,
                "accurate_opp_half_passes": 4.2964,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 22.7645,
                "possession_lost": 5.7223,
                "dispossessed": 1.5773,
                "duels_lost": 3.4462,
                "aerial_won": 1.2,
                "aerial_lost": 0.6448,
                "interceptions": 0.2235,
                "tackles_won": 0.6949,
                "tackles": 1.9803,
                "clearances": 1.4164,
                "total_contest": 0.4585,
                "won_contest": 0.2662,
                "challenges_lost": 0.2262,
                "fouls": 0.7959,
                "fouls_drawn": 0.2235,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0083,
                "ball_carries": 4.6056,
                "total_progression": 2.19,
                "progressive_carries": 0.0,
                "shots_off_target": 0.6694,
                "duel_xg_multiplier": 1.0999,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.468,
                "pressing_faced": "LOW",
                "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "David Larrubia",
                "opponent_faced": "David Larrubia",
                "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0737,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1652,
                "creation_factor": 1.1514,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.0737,
                "scorer_weight": 0.0893,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0547,
                "finishing_factor": 1.1652,
                "appearance_weight": 1.0,
                "weight_rank": 7,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "key_pass": 0.5378,
                "expected_assists": 0.0271,
                "assist_rate": 0.0382,
                "assists": 0,
                "expected_goals": 0.0766,
                "goal_rate": 0.096,
                "goals": 0,
                "shots_on_target": 0.2969,
                "total_shots": 0.9663,
                "rating": 6.6856,
                "minutes": 68.72,
                "total_pass": 12.8923,
                "accurate_pass": 10.4709,
                "duels_won": 4.1096,
                "total_long_balls": 1.2241,
                "accurate_long_balls": 1.0318,
                "total_own_half_passes": 7.0985,
                "accurate_own_half_passes": 6.1744,
                "total_opp_half_passes": 5.7937,
                "accurate_opp_half_passes": 4.2964,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 22.7645,
                "possession_lost": 5.7223,
                "dispossessed": 1.5773,
                "duels_lost": 3.4462,
                "aerial_won": 1.2,
                "aerial_lost": 0.6448,
                "interceptions": 0.2235,
                "tackles_won": 0.6949,
                "tackles": 1.9803,
                "clearances": 1.4164,
                "total_contest": 0.4585,
                "won_contest": 0.2662,
                "challenges_lost": 0.2262,
                "fouls": 0.7959,
                "fouls_drawn": 0.2235,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0083,
                "ball_carries": 4.6056,
                "total_progression": 2.19,
                "progressive_carries": 0.0,
                "shots_off_target": 0.6694,
                "duel_xg_multiplier": 1.0999,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.468,
                "pressing_faced": "LOW",
                "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "David Larrubia",
                "opponent_faced": "David Larrubia",
                "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0737,
                "projected_assists": 0,
                "assist_probability": 0.0267,
                "finishing_factor": 1.1652,
                "creation_factor": 1.1514,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0267,
                "provider_weight": 0.0312,
                "squad_weight_total": 0.9581,
                "weight_share": 0.0326,
                "creation_factor": 1.1514,
                "appearance_weight": 1.0,
                "weight_rank": 10,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Edu Expósito": {
          "player_id": 877262,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 8,
          "height": 175,
          "market_value": 4500000,
          "stats": {
            "key_pass": 2,
            "expected_assists": 0.168,
            "assist_rate": 0.1197,
            "assists": 0,
            "expected_goals": 0.1418,
            "goal_rate": 0.1801,
            "goals": 0,
            "shots_on_target": 1,
            "total_shots": 2,
            "rating": 7.186,
            "minutes": 83,
            "total_pass": 44,
            "accurate_pass": 36,
            "duels_won": 6,
            "total_long_balls": 4,
            "accurate_long_balls": 2,
            "total_own_half_passes": 14,
            "accurate_own_half_passes": 13,
            "total_opp_half_passes": 29,
            "accurate_opp_half_passes": 23,
            "crosses_total": 4,
            "crosses_accurate": 1,
            "touches": 64,
            "possession_lost": 14.1511,
            "dispossessed": 1.098,
            "duels_lost": 4,
            "aerial_won": 1,
            "aerial_lost": 1,
            "interceptions": 1,
            "tackles_won": 1,
            "tackles": 2,
            "clearances": 2,
            "total_contest": 2,
            "won_contest": 2,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0267,
            "ball_carries": 16,
            "total_progression": 70,
            "progressive_carries": 2,
            "shots_off_target": 1,
            "duel_xg_multiplier": 1.0128,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.7,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.409,
            "pressing_faced": "LOW",
            "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
            "numerical_situation": "1v1",
            "opponent_defenders": "David Larrubia",
            "opponent_faced": "David Larrubia",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.1322,
            "projected_assists": 0,
            "assist_probability": 0.1546,
            "finishing_factor": 1.2149,
            "creation_factor": 0.8,
            "fifa_overall": 77.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 90,
                "rating": 7.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1449,
                "expected_assists": 0.3741,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 81,
                "accurate_pass": 72,
                "key_pass": 6,
                "tackles": 4,
                "tackles_won": 4,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 3,
                "duels_won": 7,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 45,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.3802,
                "expected_assists": 0.2161,
                "total_shots": 3,
                "shots_off_target": 2,
                "total_pass": 30,
                "accurate_pass": 26,
                "key_pass": 2,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 89,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0458,
                "expected_assists": 0.1488,
                "total_shots": 1,
                "total_pass": 35,
                "accurate_pass": 32,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 4,
                "aerial_won": 1,
                "duels_won": 7,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 7.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.141,
                "expected_assists": 0.6104,
                "total_shots": 1,
                "total_pass": 49,
                "accurate_pass": 39,
                "key_pass": 6,
                "interceptions": 1,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 70,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1531,
                "expected_assists": 0.036,
                "total_shots": 3,
                "shots_off_target": 3,
                "total_pass": 39,
                "accurate_pass": 32,
                "tackles": 2,
                "tackles_won": 1,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 9
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416306,
              "match_date": "2026-08-22",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 88,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0563,
                "expected_assists": 0.0376,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 47,
                "accurate_pass": 40,
                "tackles": 4,
                "tackles_won": 1,
                "clearances": 1,
                "duels_won": 7,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421053,
              "match_date": "2026-08-16",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 86,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1101,
                "expected_assists": 0.0395,
                "total_shots": 3,
                "shots_off_target": 1,
                "total_pass": 51,
                "accurate_pass": 47,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 1,
                "duels_won": 4,
                "ball_recovery": 8
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083719,
              "match_date": "2026-05-23",
              "home_team": "Espanyol",
              "away_team": "Real Sociedad",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0279,
                "expected_assists": 0.0301,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 49,
                "accurate_pass": 34,
                "key_pass": 3,
                "tackles": 3,
                "interceptions": 1,
                "clearances": 3,
                "aerial_won": 1,
                "duels_won": 6,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083696,
              "match_date": "2026-05-17",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 64,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0712,
                "expected_assists": 0.0573,
                "total_shots": 1,
                "total_pass": 15,
                "accurate_pass": 11,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 2,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083629,
              "match_date": "2026-05-13",
              "home_team": "Espanyol",
              "away_team": "Athletic Club",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Athletic Club",
              "stats": {
                "minutes": 84,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1569,
                "expected_assists": 0.0563,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 26,
                "accurate_pass": 19,
                "key_pass": 4,
                "tackles": 4,
                "tackles_won": 1,
                "duels_won": 8,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 2628,
            "combined_rank_score": 921.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 289.0,
            "sofascore_rating": 7.0556,
            "sofascore_appearances": 36.0,
            "fifa_rank": 1553.0,
            "fifa_overall": 77.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 1,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 7.186,
            "source_file": "data/player_rankings.csv",
            "player_name": "Edu Expósito",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Francisco Jose Pozzo",
                  "ranking": 2623
                },
                {
                  "player_name": "Augustine Chidi Kwem",
                  "ranking": 2624
                },
                {
                  "player_name": "Otabek Ahadov",
                  "ranking": 2625
                },
                {
                  "player_name": "Rodrigo Sandoval",
                  "ranking": 2626
                },
                {
                  "player_name": "Ruben Loftus-Cheek",
                  "ranking": 2627
                }
              ],
              "lower": [
                {
                  "player_name": "Lucas Boyé",
                  "ranking": 2629
                },
                {
                  "player_name": "Duván Zapata",
                  "ranking": 2630
                },
                {
                  "player_name": "Tosin Adarabioyo",
                  "ranking": 2631
                },
                {
                  "player_name": "Selton Sanchez",
                  "ranking": 2632
                },
                {
                  "player_name": "Jung-Min Kim",
                  "ranking": 2633
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.777,
          "history_matches": 43,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 43,
            "data_confidence": 0.777,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9985,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "minutes": 241.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 3.36,
              "shots_on_target_pct": 11.1,
              "prior_reliability": 0.18
            },
            "rationale": "XGBoost regressor (M_service) evaluated 43 historical appearances across 8 target models; FBref 2026-2027 prior blended (La Liga, Espanyol, rel: 0.18, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 1.7295,
                "expected_assists": 0.1649,
                "assists": 0.1213,
                "assist_rate": 0.1213,
                "expected_goals": 0.1378,
                "goals": 0.1802,
                "goal_rate": 0.1802,
                "shots_on_target": 0.6413,
                "total_shots": 1.8164,
                "rating": 7.186,
                "minutes": 83.23,
                "total_pass": 43.6792,
                "accurate_pass": 36.4197,
                "duels_won": 5.5362,
                "total_long_balls": 4.0881,
                "accurate_long_balls": 1.6579,
                "total_own_half_passes": 14.4623,
                "accurate_own_half_passes": 13.302,
                "total_opp_half_passes": 29.217,
                "accurate_opp_half_passes": 23.1178,
                "crosses_total": 4.2516,
                "crosses_accurate": 1.2644,
                "touches": 63.6257,
                "possession_lost": 14.1724,
                "dispossessed": 1.0996,
                "duels_lost": 4.4639,
                "aerial_won": 1.0472,
                "aerial_lost": 1.0503,
                "interceptions": 0.5279,
                "tackles_won": 1.3692,
                "tackles": 2.1037,
                "clearances": 1.7977,
                "total_contest": 2.3641,
                "won_contest": 1.6269,
                "challenges_lost": 0.5422,
                "fouls": 1.0856,
                "fouls_drawn": 0.7766,
                "blocks": 0.092,
                "big_chances_created": 0.4442,
                "big_chances_missed": 0.0126,
                "xgot": 0.0259,
                "ball_carries": 16.2086,
                "total_progression": 69.8859,
                "progressive_carries": 1.8132,
                "shots_off_target": 1.1751
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1501,
                    "rating": 7.8
                  },
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.1276,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 89.0,
                    "is_starting": true,
                    "weight": 0.1085,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0922,
                    "rating": 7.7
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 70.0,
                    "is_starting": true,
                    "weight": 0.0784,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-08-22",
                    "opponent": "Real Madrid",
                    "minutes": 88.0,
                    "is_starting": true,
                    "weight": 0.0666,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-08-16",
                    "opponent": "Levante UD",
                    "minutes": 86.0,
                    "is_starting": true,
                    "weight": 0.0566,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-05-23",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0481,
                    "rating": 7.3
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Osasuna",
                    "minutes": 64.0,
                    "is_starting": true,
                    "weight": 0.0409,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-05-13",
                    "opponent": "Athletic Club",
                    "minutes": 84.0,
                    "is_starting": true,
                    "weight": 0.0348,
                    "rating": 6.9
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 1.0,
                  "totalShots": 1.9371,
                  "creative_index": 1.1556,
                  "expectedGoals": 0.1313,
                  "expectedAssists": 0.1978,
                  "onTargetScoringAttempt": 0.1964
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 1.7295207977294922,
                    "model_output": 1.7295,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "creative_index",
                          "contribution": 0.1892
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1351
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.1409
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.1108
                        },
                        {
                          "name": "wonTackle",
                          "contribution": -0.0801
                        }
                      ],
                      "others": 0.3474,
                      "total": 1.7295,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "creative_index",
                          "margin": 0.193548
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.118312
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.11011
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.078771
                        },
                        {
                          "name": "wonTackle",
                          "margin": -0.056342
                        }
                      ],
                      "others_margin": 0.224262
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.16492147743701935,
                    "model_output": 0.1649,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0145
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0137
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0118
                        },
                        {
                          "name": "creative_index",
                          "contribution": 0.0069
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.0063
                        }
                      ],
                      "others": 0.0259,
                      "total": 0.1649,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "expectedAssists",
                          "margin": 0.156367
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.128318
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.098435
                        },
                        {
                          "name": "creative_index",
                          "margin": 0.053274
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.046095
                        }
                      ],
                      "others_margin": 0.171273
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.12133701890707016,
                    "model_output": 0.1213,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "keyPass",
                          "contribution": 0.0152
                        },
                        {
                          "name": "creative_index",
                          "contribution": 0.0127
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.012
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0106
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0084
                        }
                      ],
                      "others": -0.0228,
                      "total": 0.1213,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "keyPass",
                          "margin": 0.16458
                        },
                        {
                          "name": "creative_index",
                          "margin": 0.119235
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.100812
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.081613
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.059782
                        }
                      ],
                      "others_margin": -0.172798
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.13783493638038635,
                    "model_output": 0.1378,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0231
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0217
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0183
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0091
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0071
                        }
                      ],
                      "others": -0.0035,
                      "total": 0.1378,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "expectedGoals",
                          "margin": 0.219182
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.169611
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.123643
                        },
                        {
                          "name": "goals",
                          "margin": -0.059329
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.048988
                        }
                      ],
                      "others_margin": -0.0259
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.18023552000522614,
                    "model_output": 0.1802,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.0398
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0235
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0164
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0146
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0148
                        }
                      ],
                      "others": 0.0063,
                      "total": 0.1802,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.341615
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.158009
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.107816
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.096465
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.0892
                        }
                      ],
                      "others_margin": 0.035451
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.6412724852561951,
                    "model_output": 0.6413,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.1209
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0617
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0665
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.049
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0135
                        }
                      ],
                      "others": 0.0327,
                      "total": 0.6413,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.317206
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.129895
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.123295
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.082019
                        },
                        {
                          "name": "goals",
                          "margin": -0.021955
                        }
                      ],
                      "others_margin": 0.052278
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 1.816339373588562,
                    "model_output": 1.8163,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.5218
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1557
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0568
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0545
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0362
                        }
                      ],
                      "others": 0.0008,
                      "total": 1.8163,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.521849
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.155742
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.056818
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.054506
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.036178
                        }
                      ],
                      "others_margin": 0.000782
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 7.185957908630371,
                    "model_output": 7.186,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "rating",
                          "contribution": 0.0907
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": 0.0799
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0292
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": 0.0292
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0284
                        }
                      ],
                      "others": 0.0797,
                      "total": 7.186,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "rating",
                          "margin": 0.090723
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": 0.079904
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.029225
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": 0.029199
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.028427
                        }
                      ],
                      "others_margin": 0.079608
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 43,
                  "role_matches": 38,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9985, quality 0.456)",
              "stats": {
                "key_pass": 1.7269,
                "expected_assists": 0.1647,
                "assists": 0.1212,
                "assist_rate": 0.1212,
                "expected_goals": 0.1376,
                "goals": 0.18,
                "goal_rate": 0.18,
                "shots_on_target": 0.6403,
                "total_shots": 1.8136,
                "rating": 7.186,
                "minutes": 83.23,
                "total_pass": 43.6137,
                "accurate_pass": 36.3651,
                "duels_won": 5.5279,
                "total_long_balls": 4.082,
                "accurate_long_balls": 1.6554,
                "total_own_half_passes": 14.4406,
                "accurate_own_half_passes": 13.282,
                "total_opp_half_passes": 29.1732,
                "accurate_opp_half_passes": 23.0831,
                "crosses_total": 4.2452,
                "crosses_accurate": 1.2625,
                "touches": 63.5303,
                "possession_lost": 14.1511,
                "dispossessed": 1.098,
                "duels_lost": 4.4572,
                "aerial_won": 1.0456,
                "aerial_lost": 1.0487,
                "interceptions": 0.5271,
                "tackles_won": 1.3671,
                "tackles": 2.1005,
                "clearances": 1.795,
                "total_contest": 2.3606,
                "won_contest": 1.6245,
                "challenges_lost": 0.5414,
                "fouls": 1.084,
                "fouls_drawn": 0.7754,
                "blocks": 0.0919,
                "big_chances_created": 0.4435,
                "big_chances_missed": 0.0126,
                "xgot": 0.0259,
                "ball_carries": 16.1843,
                "total_progression": 69.7811,
                "progressive_carries": 1.8105,
                "shots_off_target": 1.1733
              },
              "params": {
                "market_value_eur": 4500000,
                "quality_factor": 0.456,
                "boost_factor": 0.9985,
                "reference_quality": 0.505,
                "history_matches": 43,
                "history_shrink": 0.1042,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0122)",
              "stats": {
                "key_pass": 1.7269,
                "expected_assists": 0.1647,
                "assists": 0.1197,
                "assist_rate": 0.1197,
                "expected_goals": 0.1376,
                "goals": 0.1778,
                "goal_rate": 0.1778,
                "shots_on_target": 0.6367,
                "total_shots": 1.8294,
                "rating": 7.186,
                "minutes": 83.23,
                "total_pass": 43.6137,
                "accurate_pass": 36.3651,
                "duels_won": 5.5279,
                "total_long_balls": 4.082,
                "accurate_long_balls": 1.6554,
                "total_own_half_passes": 14.4406,
                "accurate_own_half_passes": 13.282,
                "total_opp_half_passes": 29.1732,
                "accurate_opp_half_passes": 23.0831,
                "crosses_total": 4.206,
                "crosses_accurate": 1.2625,
                "touches": 63.5303,
                "possession_lost": 14.1511,
                "dispossessed": 1.098,
                "duels_lost": 4.4572,
                "aerial_won": 1.0456,
                "aerial_lost": 1.0487,
                "interceptions": 0.5249,
                "tackles_won": 1.3671,
                "tackles": 2.1005,
                "clearances": 1.795,
                "total_contest": 2.3606,
                "won_contest": 1.6245,
                "challenges_lost": 0.5414,
                "fouls": 1.0791,
                "fouls_drawn": 0.7743,
                "blocks": 0.0919,
                "big_chances_created": 0.4435,
                "big_chances_missed": 0.0126,
                "xgot": 0.0259,
                "ball_carries": 16.1843,
                "total_progression": 69.7811,
                "progressive_carries": 1.8105,
                "shots_off_target": 1.1733
              },
              "params": {
                "blend_weight": 0.0122,
                "history_matches": 43,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.9248,
                "prior_reliability": 0.18,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "totalCross",
                  "before": 4.2452,
                  "after": 4.206
                },
                {
                  "stat": "totalShots",
                  "before": 1.8136,
                  "after": 1.8294
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 1.7269,
                "expected_assists": 0.1647,
                "assists": 0.1197,
                "assist_rate": 0.1197,
                "expected_goals": 0.1376,
                "goals": 0.1778,
                "goal_rate": 0.1778,
                "shots_on_target": 0.6367,
                "total_shots": 1.8294,
                "rating": 7.186,
                "minutes": 83.23,
                "total_pass": 43.6137,
                "accurate_pass": 36.3651,
                "duels_won": 5.5279,
                "total_long_balls": 4.082,
                "accurate_long_balls": 1.6554,
                "total_own_half_passes": 14.4406,
                "accurate_own_half_passes": 13.282,
                "total_opp_half_passes": 29.1732,
                "accurate_opp_half_passes": 23.0831,
                "crosses_total": 4.206,
                "crosses_accurate": 1.2625,
                "touches": 63.5303,
                "possession_lost": 14.1511,
                "dispossessed": 1.098,
                "duels_lost": 4.4572,
                "aerial_won": 1.0456,
                "aerial_lost": 1.0487,
                "interceptions": 0.5249,
                "tackles_won": 1.3671,
                "tackles": 2.1005,
                "clearances": 1.795,
                "total_contest": 2.3606,
                "won_contest": 1.6245,
                "challenges_lost": 0.5414,
                "fouls": 1.0791,
                "fouls_drawn": 0.7743,
                "blocks": 0.0919,
                "big_chances_created": 0.4435,
                "big_chances_missed": 0.0126,
                "xgot": 0.0259,
                "ball_carries": 16.1843,
                "total_progression": 69.7811,
                "progressive_carries": 1.8105,
                "shots_off_target": 1.1733
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "key_pass": 1.7269,
                "expected_assists": 0.1647,
                "assists": 0.1197,
                "assist_rate": 0.1197,
                "expected_goals": 0.1394,
                "goals": 0.1801,
                "goal_rate": 0.1801,
                "shots_on_target": 0.6448,
                "total_shots": 1.8528,
                "rating": 7.186,
                "minutes": 83.23,
                "total_pass": 43.6137,
                "accurate_pass": 36.3651,
                "duels_won": 5.5279,
                "total_long_balls": 4.082,
                "accurate_long_balls": 1.6554,
                "total_own_half_passes": 14.4406,
                "accurate_own_half_passes": 13.282,
                "total_opp_half_passes": 29.1732,
                "accurate_opp_half_passes": 23.0831,
                "crosses_total": 4.206,
                "crosses_accurate": 1.2625,
                "touches": 63.5303,
                "possession_lost": 14.1511,
                "dispossessed": 1.098,
                "duels_lost": 4.4572,
                "aerial_won": 0.9,
                "aerial_lost": 1.0487,
                "interceptions": 0.5249,
                "tackles_won": 1.3671,
                "tackles": 2.1005,
                "clearances": 1.795,
                "total_contest": 2.3606,
                "won_contest": 1.6245,
                "challenges_lost": 0.5414,
                "fouls": 1.0791,
                "fouls_drawn": 0.7743,
                "blocks": 0.0919,
                "big_chances_created": 0.4435,
                "big_chances_missed": 0.0128,
                "xgot": 0.0262,
                "ball_carries": 16.1843,
                "total_progression": 69.7811,
                "progressive_carries": 1.8105,
                "shots_off_target": 1.1883,
                "duel_xg_multiplier": 1.0128,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.409,
                "pressing_faced": "LOW",
                "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "David Larrubia",
                "opponent_faced": "David Larrubia",
                "antagonist_source": "attacking_duel, midfield_pairing"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "David Larrubia",
                  "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                  "duel_win_rate": 0.409,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v1",
                  "xg_multiplier": 1.0128,
                  "skill_edge": -0.0033,
                  "height_edge": 0.012,
                  "attacker_skill": 0.4658,
                  "defender_skill": 0.4731,
                  "attacker_role": "CDM",
                  "attacker_mv_price_index": 0.85,
                  "defender_adjusted_parts": [
                    {
                      "player": "David Larrubia",
                      "market_value": 5300000,
                      "role": "CM",
                      "price_index": 0.9,
                      "adjusted_quality": 0.4731
                    }
                  ],
                  "xg_override": 0.1394
                }
              },
              "changes": [
                {
                  "stat": "aerialWon",
                  "before": 1.0456,
                  "after": 0.9
                },
                {
                  "stat": "totalShots",
                  "before": 1.8294,
                  "after": 1.8528
                },
                {
                  "stat": "shotOffTarget",
                  "before": 1.1733,
                  "after": 1.1883
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.6367,
                  "after": 0.6448
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "key_pass": 1.7269,
                "expected_assists": 0.168,
                "assist_rate": 0.1197,
                "assists": 0,
                "expected_goals": 0.1418,
                "goal_rate": 0.1801,
                "goals": 0,
                "shots_on_target": 0.6448,
                "total_shots": 1.8528,
                "rating": 7.186,
                "minutes": 83.23,
                "total_pass": 43.6137,
                "accurate_pass": 36.3651,
                "duels_won": 5.5279,
                "total_long_balls": 4.082,
                "accurate_long_balls": 1.6554,
                "total_own_half_passes": 14.4406,
                "accurate_own_half_passes": 13.282,
                "total_opp_half_passes": 29.1732,
                "accurate_opp_half_passes": 23.0831,
                "crosses_total": 4.206,
                "crosses_accurate": 1.2625,
                "touches": 63.5303,
                "possession_lost": 14.1511,
                "dispossessed": 1.098,
                "duels_lost": 4.4572,
                "aerial_won": 0.9,
                "aerial_lost": 1.0487,
                "interceptions": 0.5249,
                "tackles_won": 1.3671,
                "tackles": 2.1005,
                "clearances": 1.795,
                "total_contest": 2.3606,
                "won_contest": 1.6245,
                "challenges_lost": 0.5414,
                "fouls": 1.0791,
                "fouls_drawn": 0.7743,
                "blocks": 0.0919,
                "big_chances_created": 0.4435,
                "big_chances_missed": 0.0128,
                "xgot": 0.0267,
                "ball_carries": 16.1843,
                "total_progression": 69.7811,
                "progressive_carries": 1.8105,
                "shots_off_target": 1.1883,
                "duel_xg_multiplier": 1.0128,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.409,
                "pressing_faced": "LOW",
                "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "David Larrubia",
                "opponent_faced": "David Larrubia",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.2149,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 1 by projected rating, fifa_overall 77.0; not used by the projection)",
              "stats": {
                "key_pass": 1.7269,
                "expected_assists": 0.168,
                "assist_rate": 0.1197,
                "assists": 0,
                "expected_goals": 0.1418,
                "goal_rate": 0.1801,
                "goals": 0,
                "shots_on_target": 0.6448,
                "total_shots": 1.8528,
                "rating": 7.186,
                "minutes": 83.23,
                "total_pass": 43.6137,
                "accurate_pass": 36.3651,
                "duels_won": 5.5279,
                "total_long_balls": 4.082,
                "accurate_long_balls": 1.6554,
                "total_own_half_passes": 14.4406,
                "accurate_own_half_passes": 13.282,
                "total_opp_half_passes": 29.1732,
                "accurate_opp_half_passes": 23.0831,
                "crosses_total": 4.206,
                "crosses_accurate": 1.2625,
                "touches": 63.5303,
                "possession_lost": 14.1511,
                "dispossessed": 1.098,
                "duels_lost": 4.4572,
                "aerial_won": 0.9,
                "aerial_lost": 1.0487,
                "interceptions": 0.5249,
                "tackles_won": 1.3671,
                "tackles": 2.1005,
                "clearances": 1.795,
                "total_contest": 2.3606,
                "won_contest": 1.6245,
                "challenges_lost": 0.5414,
                "fouls": 1.0791,
                "fouls_drawn": 0.7743,
                "blocks": 0.0919,
                "big_chances_created": 0.4435,
                "big_chances_missed": 0.0128,
                "xgot": 0.0267,
                "ball_carries": 16.1843,
                "total_progression": 69.7811,
                "progressive_carries": 1.8105,
                "shots_off_target": 1.1883,
                "duel_xg_multiplier": 1.0128,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.409,
                "pressing_faced": "LOW",
                "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "David Larrubia",
                "opponent_faced": "David Larrubia",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.2149,
                "creation_factor": 0.8,
                "fifa_overall": 77.0
              },
              "params": {
                "match_squad_rank": 1,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 2628,
                "fifa_rank": 1553.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 77.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "key_pass": 1.7269,
                "expected_assists": 0.168,
                "assist_rate": 0.1197,
                "assists": 0,
                "expected_goals": 0.1418,
                "goal_rate": 0.1801,
                "goals": 0,
                "shots_on_target": 0.6448,
                "total_shots": 1.8528,
                "rating": 7.186,
                "minutes": 83.23,
                "total_pass": 43.6137,
                "accurate_pass": 36.3651,
                "duels_won": 5.5279,
                "total_long_balls": 4.082,
                "accurate_long_balls": 1.6554,
                "total_own_half_passes": 14.4406,
                "accurate_own_half_passes": 13.282,
                "total_opp_half_passes": 29.1732,
                "accurate_opp_half_passes": 23.0831,
                "crosses_total": 4.206,
                "crosses_accurate": 1.2625,
                "touches": 63.5303,
                "possession_lost": 14.1511,
                "dispossessed": 1.098,
                "duels_lost": 4.4572,
                "aerial_won": 0.9,
                "aerial_lost": 1.0487,
                "interceptions": 0.5249,
                "tackles_won": 1.3671,
                "tackles": 2.1005,
                "clearances": 1.795,
                "total_contest": 2.3606,
                "won_contest": 1.6245,
                "challenges_lost": 0.5414,
                "fouls": 1.0791,
                "fouls_drawn": 0.7743,
                "blocks": 0.0919,
                "big_chances_created": 0.4435,
                "big_chances_missed": 0.0128,
                "xgot": 0.0267,
                "ball_carries": 16.1843,
                "total_progression": 69.7811,
                "progressive_carries": 1.8105,
                "shots_off_target": 1.1883,
                "duel_xg_multiplier": 1.0128,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.409,
                "pressing_faced": "LOW",
                "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "David Larrubia",
                "opponent_faced": "David Larrubia",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.1322,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.2149,
                "creation_factor": 0.8,
                "fifa_overall": 77.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.1322,
                "scorer_weight": 0.1723,
                "squad_weight_total": 1.6319,
                "weight_share": 0.1056,
                "finishing_factor": 1.2149,
                "appearance_weight": 1.0,
                "weight_rank": 4,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "key_pass": 1.7269,
                "expected_assists": 0.168,
                "assist_rate": 0.1197,
                "assists": 0,
                "expected_goals": 0.1418,
                "goal_rate": 0.1801,
                "goals": 0,
                "shots_on_target": 0.6448,
                "total_shots": 1.8528,
                "rating": 7.186,
                "minutes": 83.23,
                "total_pass": 43.6137,
                "accurate_pass": 36.3651,
                "duels_won": 5.5279,
                "total_long_balls": 4.082,
                "accurate_long_balls": 1.6554,
                "total_own_half_passes": 14.4406,
                "accurate_own_half_passes": 13.282,
                "total_opp_half_passes": 29.1732,
                "accurate_opp_half_passes": 23.0831,
                "crosses_total": 4.206,
                "crosses_accurate": 1.2625,
                "touches": 63.5303,
                "possession_lost": 14.1511,
                "dispossessed": 1.098,
                "duels_lost": 4.4572,
                "aerial_won": 0.9,
                "aerial_lost": 1.0487,
                "interceptions": 0.5249,
                "tackles_won": 1.3671,
                "tackles": 2.1005,
                "clearances": 1.795,
                "total_contest": 2.3606,
                "won_contest": 1.6245,
                "challenges_lost": 0.5414,
                "fouls": 1.0791,
                "fouls_drawn": 0.7743,
                "blocks": 0.0919,
                "big_chances_created": 0.4435,
                "big_chances_missed": 0.0128,
                "xgot": 0.0267,
                "ball_carries": 16.1843,
                "total_progression": 69.7811,
                "progressive_carries": 1.8105,
                "shots_off_target": 1.1883,
                "duel_xg_multiplier": 1.0128,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.7,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.409,
                "pressing_faced": "LOW",
                "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
                "numerical_situation": "1v1",
                "opponent_defenders": "David Larrubia",
                "opponent_faced": "David Larrubia",
                "antagonist_source": "attacking_duel, midfield_pairing",
                "projected_goals": 0,
                "goal_probability": 0.1322,
                "projected_assists": 0,
                "assist_probability": 0.1546,
                "finishing_factor": 1.2149,
                "creation_factor": 0.8,
                "fifa_overall": 77.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.1546,
                "provider_weight": 0.1344,
                "squad_weight_total": 0.9581,
                "weight_share": 0.1403,
                "creation_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 2,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Quilindschy Hartman": {
          "player_id": 1392044,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 3,
          "height": 183,
          "market_value": 15500000,
          "stats": {
            "interceptions": 1,
            "tackles": 2,
            "tackles_won": 1,
            "clearances": 2,
            "aerial_won": 1,
            "total_shots": 0,
            "rating": 6.6974,
            "minutes": 85,
            "total_pass": 40,
            "accurate_pass": 30,
            "duels_won": 4,
            "total_long_balls": 6,
            "accurate_long_balls": 2,
            "total_own_half_passes": 19,
            "accurate_own_half_passes": 16,
            "total_opp_half_passes": 21,
            "accurate_opp_half_passes": 14,
            "crosses_total": 3,
            "crosses_accurate": 0,
            "touches": 61,
            "possession_lost": 14.5933,
            "dispossessed": 0.2638,
            "duels_lost": 3,
            "aerial_lost": 1,
            "total_contest": 1,
            "won_contest": 0,
            "ball_recovery": 4,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 0,
            "blocks": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.1576,
            "assists": 0,
            "expected_goals": 0.0189,
            "expected_assists": 0.0809,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0052,
            "ball_carries": 9,
            "total_progression": 25,
            "progressive_carries": 0,
            "key_pass": 1,
            "shots_off_target": 0,
            "tackles_in_zone": 1.0,
            "tackles_won_in_zone": 0.9,
            "interceptions_in_zone": 0.9,
            "clearances_in_zone": 0.8,
            "aerial_duels_won": 0.6,
            "defensive_success_rate": 0.809,
            "opponent_faced": "Chupete",
            "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "antagonist_source": "defensive_duel",
            "projected_goals": 0,
            "goal_probability": 0.0187,
            "projected_assists": 0,
            "assist_probability": 0.0777,
            "finishing_factor": 0.8,
            "creation_factor": 1.25,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 45,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0124,
                "total_shots": 0,
                "total_pass": 30,
                "accurate_pass": 25,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "duels_won": 1,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 90,
                "rating": 7.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0916,
                "total_shots": 0,
                "total_pass": 48,
                "accurate_pass": 41,
                "key_pass": 3,
                "tackles": 5,
                "tackles_won": 3,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 6,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 16,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.1839,
                "total_shots": 0,
                "total_pass": 9,
                "accurate_pass": 9,
                "key_pass": 1,
                "aerial_won": 1,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14023940,
              "match_date": "2026-05-01",
              "home_team": "Leeds United",
              "away_team": "Burnley",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Burnley",
              "opponent": "Leeds United",
              "stats": {
                "minutes": 65,
                "rating": 5.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0024,
                "total_shots": 0,
                "total_pass": 25,
                "accurate_pass": 17,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 3,
                "clearances": 1,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Premier League",
              "league_id": "17",
              "league_slug": "premier-league",
              "league_country": "England",
              "season_id": "76986",
              "season_name": "Premier League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14024003,
              "match_date": "2026-04-22",
              "home_team": "Burnley",
              "away_team": "Manchester City",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Burnley",
              "opponent": "Manchester City",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1302,
                "expected_assists": 0.0021,
                "total_shots": 2,
                "shots_off_target": 1,
                "total_pass": 31,
                "accurate_pass": 19,
                "tackles": 10,
                "tackles_won": 6,
                "interceptions": 2,
                "clearances": 4,
                "duels_won": 12,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Premier League",
              "league_id": "17",
              "league_slug": "premier-league",
              "league_country": "England",
              "season_id": "76986",
              "season_name": "Premier League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14025041,
              "match_date": "2026-04-19",
              "home_team": "Nottingham Forest",
              "away_team": "Burnley",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Burnley",
              "opponent": "Nottingham Forest",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_assists": 0.2214,
                "total_shots": 0,
                "total_pass": 51,
                "accurate_pass": 39,
                "key_pass": 1,
                "tackles": 4,
                "tackles_won": 3,
                "interceptions": 3,
                "clearances": 2,
                "duels_won": 4,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Premier League",
              "league_id": "17",
              "league_slug": "premier-league",
              "league_country": "England",
              "season_id": "76986",
              "season_name": "Premier League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14024002,
              "match_date": "2026-04-11",
              "home_team": "Burnley",
              "away_team": "Brighton & Hove Albion",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Burnley",
              "opponent": "Brighton & Hove Albion",
              "stats": {
                "minutes": 82,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0218,
                "total_shots": 0,
                "total_pass": 48,
                "accurate_pass": 36,
                "clearances": 3,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Premier League",
              "league_id": "17",
              "league_slug": "premier-league",
              "league_country": "England",
              "season_id": "76986",
              "season_name": "Premier League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14024016,
              "match_date": "2026-03-21",
              "home_team": "Fulham",
              "away_team": "Burnley",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Burnley",
              "opponent": "Fulham",
              "stats": {
                "minutes": 90,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.019,
                "expected_assists": 0.2158,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 51,
                "accurate_pass": 45,
                "key_pass": 3,
                "tackles": 3,
                "tackles_won": 1,
                "interceptions": 3,
                "clearances": 1,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "Premier League",
              "league_id": "17",
              "league_slug": "premier-league",
              "league_country": "England",
              "season_id": "76986",
              "season_name": "Premier League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14023988,
              "match_date": "2026-03-14",
              "home_team": "Burnley",
              "away_team": "Bournemouth",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Burnley",
              "opponent": "Bournemouth",
              "stats": {
                "minutes": 74,
                "rating": 7.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0093,
                "total_shots": 0,
                "total_pass": 16,
                "accurate_pass": 11,
                "tackles": 2,
                "tackles_won": 1,
                "clearances": 4,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Premier League",
              "league_id": "17",
              "league_slug": "premier-league",
              "league_country": "England",
              "season_id": "76986",
              "season_name": "Premier League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14025189,
              "match_date": "2025-12-13",
              "home_team": "Burnley",
              "away_team": "Fulham",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Burnley",
              "opponent": "Fulham",
              "stats": {
                "minutes": 90,
                "rating": 5.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0385,
                "total_shots": 0,
                "total_pass": 47,
                "accurate_pass": 31,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 3,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "Premier League",
              "league_id": "17",
              "league_slug": "premier-league",
              "league_country": "England",
              "season_id": "76986",
              "season_name": "Premier League 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 3658,
            "combined_rank_score": 1619.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 822.0,
            "sofascore_rating": 6.6,
            "sofascore_appearances": 1.0,
            "fifa_rank": 2417.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 12,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.6974,
            "source_file": "data/player_rankings.csv",
            "player_name": "Quilindschy Hartman",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Miguel Almirón",
                  "ranking": 3653
                },
                {
                  "player_name": "Marko Livaja",
                  "ranking": 3654
                },
                {
                  "player_name": "Víctor Chust",
                  "ranking": 3655
                },
                {
                  "player_name": "Kevin Lomónaco",
                  "ranking": 3656
                },
                {
                  "player_name": "Giorgi Kochorashvili",
                  "ranking": 3657
                }
              ],
              "lower": [
                {
                  "player_name": "Oscar Dorley",
                  "ranking": 3659
                },
                {
                  "player_name": "Mykola Matviienko",
                  "ranking": 3660
                },
                {
                  "player_name": "Hamed Junior Traorè",
                  "ranking": 3661
                },
                {
                  "player_name": "Andrés Cubas",
                  "ranking": 3662
                },
                {
                  "player_name": "Raúl Rangel",
                  "ranking": 3663
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.75,
          "history_matches": 24,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 24,
            "data_confidence": 0.75,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "market_value_adjustment": 1.0041,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 0.0,
              "starts": 0.0,
              "prior_reliability": 0.0
            },
            "rationale": "XGBoost regressor (D_service) evaluated 24 historical appearances across 7 target models; FBref 2026-2027 prior blended (La Liga, Espanyol, rel: 0.00, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 1.0631,
                "tackles": 2.3059,
                "tackles_won": 1.3259,
                "clearances": 2.3225,
                "aerial_won": 0.624,
                "total_shots": 0.42,
                "rating": 6.6974,
                "minutes": 85.32,
                "total_pass": 39.6974,
                "accurate_pass": 30.3383,
                "duels_won": 4.2975,
                "total_long_balls": 6.0124,
                "accurate_long_balls": 2.1094,
                "total_own_half_passes": 19.2328,
                "accurate_own_half_passes": 16.0281,
                "total_opp_half_passes": 20.4646,
                "accurate_opp_half_passes": 14.3102,
                "crosses_total": 2.8032,
                "crosses_accurate": 0.3722,
                "touches": 60.7477,
                "possession_lost": 14.5337,
                "dispossessed": 0.2627,
                "duels_lost": 2.7188,
                "aerial_lost": 0.6509,
                "total_contest": 0.7078,
                "won_contest": 0.344,
                "ball_recovery": 3.9358,
                "challenges_lost": 0.6958,
                "fouls": 0.7456,
                "fouls_drawn": 0.1137,
                "blocks": 0.2285,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.157,
                "assist_rate": 0.157,
                "expected_goals": 0.0185,
                "expected_assists": 0.079,
                "shots_on_target": 0.0897,
                "big_chances_created": 0.2516,
                "xgot": 0.0051,
                "ball_carries": 8.8905,
                "total_progression": 24.5699,
                "progressive_carries": 0.3187,
                "key_pass": 1.0717,
                "shots_off_target": 0.3303
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.1531,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1301,
                    "rating": 7.1
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 16.0,
                    "is_starting": false,
                    "weight": 0.1106,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-05-01",
                    "opponent": "Leeds United",
                    "minutes": 65.0,
                    "is_starting": true,
                    "weight": 0.094,
                    "rating": 5.9
                  },
                  {
                    "match_date": "2026-04-22",
                    "opponent": "Manchester City",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0799,
                    "rating": 7.3
                  },
                  {
                    "match_date": "2026-04-19",
                    "opponent": "Nottingham Forest",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0679,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-04-11",
                    "opponent": "Brighton & Hove Albion",
                    "minutes": 82.0,
                    "is_starting": true,
                    "weight": 0.0577,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-03-21",
                    "opponent": "Fulham",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0491,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-03-14",
                    "opponent": "Bournemouth",
                    "minutes": 74.0,
                    "is_starting": true,
                    "weight": 0.0417,
                    "rating": 7.1
                  },
                  {
                    "match_date": "2025-12-13",
                    "opponent": "Fulham",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0355,
                    "rating": 5.6
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 1.0,
                  "totalClearance": 1.9244,
                  "aerialWon": 0.3974,
                  "totalClearance_p90": 2.0182,
                  "totalTackle": 2.7357,
                  "totalPass": 34.9793
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 1.0630884170532227,
                    "model_output": 1.0631,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1109
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0791
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.0285
                        },
                        {
                          "name": "interceptionWon_p90",
                          "contribution": 0.0275
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.0244
                        }
                      ],
                      "others": 0.0412,
                      "total": 1.0631,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.121655
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.07855
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.02762
                        },
                        {
                          "name": "interceptionWon_p90",
                          "margin": 0.026596
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.023608
                        }
                      ],
                      "others_margin": 0.039606
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 2.3059329986572266,
                    "model_output": 2.3059,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.192
                        },
                        {
                          "name": "totalTackle",
                          "contribution": 0.1624
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.1325
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": 0.1121
                        },
                        {
                          "name": "press_vulnerability",
                          "contribution": -0.0596
                        }
                      ],
                      "others": 0.3726,
                      "total": 2.3059,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.129043
                        },
                        {
                          "name": "totalTackle",
                          "margin": 0.097486
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.073056
                        },
                        {
                          "name": "defensive_actions",
                          "margin": 0.057915
                        },
                        {
                          "name": "press_vulnerability",
                          "margin": -0.030367
                        }
                      ],
                      "others_margin": 0.176264
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 1.325943112373352,
                    "model_output": 1.3259,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1035
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": 0.075
                        },
                        {
                          "name": "totalTackle",
                          "contribution": 0.0725
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.0415
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0388
                        }
                      ],
                      "others": 0.1402,
                      "total": 1.3259,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.114351
                        },
                        {
                          "name": "defensive_actions",
                          "margin": 0.075346
                        },
                        {
                          "name": "totalTackle",
                          "margin": 0.067852
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.03685
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.033244
                        }
                      ],
                      "others_margin": 0.111894
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 2.3224937915802,
                    "model_output": 2.3225,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "totalClearance",
                          "contribution": -0.5865
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.3651
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.3529
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.2697
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.1835
                        }
                      ],
                      "others": -0.1014,
                      "total": 2.3225,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "totalClearance",
                          "margin": -0.186233
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.119948
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.115708
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.098417
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.072954
                        }
                      ],
                      "others_margin": -0.042777
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 0.6240320205688477,
                    "model_output": 0.624,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "aerialWon",
                          "contribution": -0.5044
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.1008
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.098
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.0817
                        },
                        {
                          "name": "aerialLost",
                          "contribution": -0.0413
                        }
                      ],
                      "others": -0.1278,
                      "total": 0.624,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "aerialWon",
                          "margin": -0.45403
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.122053
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.118764
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.097987
                        },
                        {
                          "name": "aerialLost",
                          "margin": -0.053439
                        }
                      ],
                      "others_margin": -0.186362
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.419996052980423,
                    "model_output": 0.42,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.0985
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0567
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": 0.0256
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0197
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.0123
                        }
                      ],
                      "others": -0.0275,
                      "total": 0.42,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.098491
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.056654
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": 0.025555
                        },
                        {
                          "name": "rating",
                          "margin": -0.019732
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.012346
                        }
                      ],
                      "others_margin": -0.027468
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.697412014007568,
                    "model_output": 6.6974,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "rating",
                          "contribution": -0.0264
                        },
                        {
                          "name": "touches",
                          "contribution": 0.0194
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0125
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0124
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.0115
                        }
                      ],
                      "others": -0.0443,
                      "total": 6.6974,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "rating",
                          "margin": -0.026418
                        },
                        {
                          "name": "touches",
                          "margin": 0.019447
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.012493
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.012353
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.011457
                        }
                      ],
                      "others_margin": -0.044444
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 24,
                  "role_matches": 22,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 1.0041, quality 0.585)",
              "stats": {
                "interceptions": 1.0674,
                "tackles": 2.3154,
                "tackles_won": 1.3314,
                "clearances": 2.332,
                "aerial_won": 0.6266,
                "total_shots": 0.4218,
                "rating": 6.6974,
                "minutes": 85.32,
                "total_pass": 39.8602,
                "accurate_pass": 30.4627,
                "duels_won": 4.3151,
                "total_long_balls": 6.0371,
                "accurate_long_balls": 2.118,
                "total_own_half_passes": 19.3117,
                "accurate_own_half_passes": 16.0938,
                "total_opp_half_passes": 20.5485,
                "accurate_opp_half_passes": 14.3689,
                "crosses_total": 2.8147,
                "crosses_accurate": 0.3737,
                "touches": 60.9968,
                "possession_lost": 14.5933,
                "dispossessed": 0.2638,
                "duels_lost": 2.7299,
                "aerial_lost": 0.6536,
                "total_contest": 0.7107,
                "won_contest": 0.3454,
                "ball_recovery": 3.9519,
                "challenges_lost": 0.6987,
                "fouls": 0.7487,
                "fouls_drawn": 0.1142,
                "blocks": 0.2294,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.1576,
                "assist_rate": 0.1576,
                "expected_goals": 0.0186,
                "expected_assists": 0.0793,
                "shots_on_target": 0.0901,
                "big_chances_created": 0.2526,
                "xgot": 0.0051,
                "ball_carries": 8.927,
                "total_progression": 24.6706,
                "progressive_carries": 0.32,
                "key_pass": 1.0761,
                "shots_off_target": 0.3317
              },
              "params": {
                "market_value_eur": 15500000,
                "quality_factor": 0.5846,
                "boost_factor": 1.0041,
                "reference_quality": 0.505,
                "history_matches": 24,
                "history_shrink": 0.1724,
                "market_value_known": true
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 1.0674,
                "tackles": 2.3154,
                "tackles_won": 1.3314,
                "clearances": 2.332,
                "aerial_won": 0.6266,
                "total_shots": 0.4218,
                "rating": 6.6974,
                "minutes": 85.32,
                "total_pass": 39.8602,
                "accurate_pass": 30.4627,
                "duels_won": 4.3151,
                "total_long_balls": 6.0371,
                "accurate_long_balls": 2.118,
                "total_own_half_passes": 19.3117,
                "accurate_own_half_passes": 16.0938,
                "total_opp_half_passes": 20.5485,
                "accurate_opp_half_passes": 14.3689,
                "crosses_total": 2.8147,
                "crosses_accurate": 0.3737,
                "touches": 60.9968,
                "possession_lost": 14.5933,
                "dispossessed": 0.2638,
                "duels_lost": 2.7299,
                "aerial_lost": 0.6536,
                "total_contest": 0.7107,
                "won_contest": 0.3454,
                "ball_recovery": 3.9519,
                "challenges_lost": 0.6987,
                "fouls": 0.7487,
                "fouls_drawn": 0.1142,
                "blocks": 0.2294,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.1576,
                "assist_rate": 0.1576,
                "expected_goals": 0.0186,
                "expected_assists": 0.0793,
                "shots_on_target": 0.0901,
                "big_chances_created": 0.2526,
                "xgot": 0.0051,
                "ball_carries": 8.927,
                "total_progression": 24.6706,
                "progressive_carries": 0.32,
                "key_pass": 1.0761,
                "shots_off_target": 0.3317
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "interceptions": 1.0674,
                "tackles": 2.3154,
                "tackles_won": 1.3314,
                "clearances": 2.332,
                "aerial_won": 0.6266,
                "total_shots": 0.4218,
                "rating": 6.6974,
                "minutes": 85.32,
                "total_pass": 39.8602,
                "accurate_pass": 30.4627,
                "duels_won": 4.3151,
                "total_long_balls": 6.0371,
                "accurate_long_balls": 2.118,
                "total_own_half_passes": 19.3117,
                "accurate_own_half_passes": 16.0938,
                "total_opp_half_passes": 20.5485,
                "accurate_opp_half_passes": 14.3689,
                "crosses_total": 2.8147,
                "crosses_accurate": 0.3737,
                "touches": 60.9968,
                "possession_lost": 14.5933,
                "dispossessed": 0.2638,
                "duels_lost": 2.7299,
                "aerial_lost": 0.6536,
                "total_contest": 0.7107,
                "won_contest": 0.3454,
                "ball_recovery": 3.9519,
                "challenges_lost": 0.6987,
                "fouls": 0.7487,
                "fouls_drawn": 0.1142,
                "blocks": 0.2294,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.1576,
                "assist_rate": 0.1576,
                "expected_goals": 0.0186,
                "expected_assists": 0.0793,
                "shots_on_target": 0.0901,
                "big_chances_created": 0.2526,
                "xgot": 0.0051,
                "ball_carries": 8.927,
                "total_progression": 24.6706,
                "progressive_carries": 0.32,
                "key_pass": 1.0761,
                "shots_off_target": 0.3317,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.9,
                "interceptions_in_zone": 0.9,
                "clearances_in_zone": 0.8,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.809,
                "opponent_faced": "Chupete",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Chupete",
                  "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle"
                }
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "interceptions": 1.0674,
                "tackles": 2.3154,
                "tackles_won": 1.3314,
                "clearances": 2.332,
                "aerial_won": 0.6266,
                "total_shots": 0.4218,
                "rating": 6.6974,
                "minutes": 85.32,
                "total_pass": 39.8602,
                "accurate_pass": 30.4627,
                "duels_won": 4.3151,
                "total_long_balls": 6.0371,
                "accurate_long_balls": 2.118,
                "total_own_half_passes": 19.3117,
                "accurate_own_half_passes": 16.0938,
                "total_opp_half_passes": 20.5485,
                "accurate_opp_half_passes": 14.3689,
                "crosses_total": 2.8147,
                "crosses_accurate": 0.3737,
                "touches": 60.9968,
                "possession_lost": 14.5933,
                "dispossessed": 0.2638,
                "duels_lost": 2.7299,
                "aerial_lost": 0.6536,
                "total_contest": 0.7107,
                "won_contest": 0.3454,
                "ball_recovery": 3.9519,
                "challenges_lost": 0.6987,
                "fouls": 0.7487,
                "fouls_drawn": 0.1142,
                "blocks": 0.2294,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.1576,
                "assists": 0,
                "expected_goals": 0.0189,
                "expected_assists": 0.0809,
                "shots_on_target": 0.0901,
                "big_chances_created": 0.2526,
                "xgot": 0.0052,
                "ball_carries": 8.927,
                "total_progression": 24.6706,
                "progressive_carries": 0.32,
                "key_pass": 1.0761,
                "shots_off_target": 0.3317,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.9,
                "interceptions_in_zone": 0.9,
                "clearances_in_zone": 0.8,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.809,
                "opponent_faced": "Chupete",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 1.25
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 12 by projected rating, fifa_overall 75.0; not used by the projection)",
              "stats": {
                "interceptions": 1.0674,
                "tackles": 2.3154,
                "tackles_won": 1.3314,
                "clearances": 2.332,
                "aerial_won": 0.6266,
                "total_shots": 0.4218,
                "rating": 6.6974,
                "minutes": 85.32,
                "total_pass": 39.8602,
                "accurate_pass": 30.4627,
                "duels_won": 4.3151,
                "total_long_balls": 6.0371,
                "accurate_long_balls": 2.118,
                "total_own_half_passes": 19.3117,
                "accurate_own_half_passes": 16.0938,
                "total_opp_half_passes": 20.5485,
                "accurate_opp_half_passes": 14.3689,
                "crosses_total": 2.8147,
                "crosses_accurate": 0.3737,
                "touches": 60.9968,
                "possession_lost": 14.5933,
                "dispossessed": 0.2638,
                "duels_lost": 2.7299,
                "aerial_lost": 0.6536,
                "total_contest": 0.7107,
                "won_contest": 0.3454,
                "ball_recovery": 3.9519,
                "challenges_lost": 0.6987,
                "fouls": 0.7487,
                "fouls_drawn": 0.1142,
                "blocks": 0.2294,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.1576,
                "assists": 0,
                "expected_goals": 0.0189,
                "expected_assists": 0.0809,
                "shots_on_target": 0.0901,
                "big_chances_created": 0.2526,
                "xgot": 0.0052,
                "ball_carries": 8.927,
                "total_progression": 24.6706,
                "progressive_carries": 0.32,
                "key_pass": 1.0761,
                "shots_off_target": 0.3317,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.9,
                "interceptions_in_zone": 0.9,
                "clearances_in_zone": 0.8,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.809,
                "opponent_faced": "Chupete",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 1.25,
                "fifa_overall": 75.0
              },
              "params": {
                "match_squad_rank": 12,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3658,
                "fifa_rank": 2417.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 75.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "interceptions": 1.0674,
                "tackles": 2.3154,
                "tackles_won": 1.3314,
                "clearances": 2.332,
                "aerial_won": 0.6266,
                "total_shots": 0.4218,
                "rating": 6.6974,
                "minutes": 85.32,
                "total_pass": 39.8602,
                "accurate_pass": 30.4627,
                "duels_won": 4.3151,
                "total_long_balls": 6.0371,
                "accurate_long_balls": 2.118,
                "total_own_half_passes": 19.3117,
                "accurate_own_half_passes": 16.0938,
                "total_opp_half_passes": 20.5485,
                "accurate_opp_half_passes": 14.3689,
                "crosses_total": 2.8147,
                "crosses_accurate": 0.3737,
                "touches": 60.9968,
                "possession_lost": 14.5933,
                "dispossessed": 0.2638,
                "duels_lost": 2.7299,
                "aerial_lost": 0.6536,
                "total_contest": 0.7107,
                "won_contest": 0.3454,
                "ball_recovery": 3.9519,
                "challenges_lost": 0.6987,
                "fouls": 0.7487,
                "fouls_drawn": 0.1142,
                "blocks": 0.2294,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.1576,
                "assists": 0,
                "expected_goals": 0.0189,
                "expected_assists": 0.0809,
                "shots_on_target": 0.0901,
                "big_chances_created": 0.2526,
                "xgot": 0.0052,
                "ball_carries": 8.927,
                "total_progression": 24.6706,
                "progressive_carries": 0.32,
                "key_pass": 1.0761,
                "shots_off_target": 0.3317,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.9,
                "interceptions_in_zone": 0.9,
                "clearances_in_zone": 0.8,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.809,
                "opponent_faced": "Chupete",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0187,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 1.25,
                "fifa_overall": 75.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.0187,
                "scorer_weight": 0.0151,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0093,
                "finishing_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 10,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "interceptions": 1.0674,
                "tackles": 2.3154,
                "tackles_won": 1.3314,
                "clearances": 2.332,
                "aerial_won": 0.6266,
                "total_shots": 0.4218,
                "rating": 6.6974,
                "minutes": 85.32,
                "total_pass": 39.8602,
                "accurate_pass": 30.4627,
                "duels_won": 4.3151,
                "total_long_balls": 6.0371,
                "accurate_long_balls": 2.118,
                "total_own_half_passes": 19.3117,
                "accurate_own_half_passes": 16.0938,
                "total_opp_half_passes": 20.5485,
                "accurate_opp_half_passes": 14.3689,
                "crosses_total": 2.8147,
                "crosses_accurate": 0.3737,
                "touches": 60.9968,
                "possession_lost": 14.5933,
                "dispossessed": 0.2638,
                "duels_lost": 2.7299,
                "aerial_lost": 0.6536,
                "total_contest": 0.7107,
                "won_contest": 0.3454,
                "ball_recovery": 3.9519,
                "challenges_lost": 0.6987,
                "fouls": 0.7487,
                "fouls_drawn": 0.1142,
                "blocks": 0.2294,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.1576,
                "assists": 0,
                "expected_goals": 0.0189,
                "expected_assists": 0.0809,
                "shots_on_target": 0.0901,
                "big_chances_created": 0.2526,
                "xgot": 0.0052,
                "ball_carries": 8.927,
                "total_progression": 24.6706,
                "progressive_carries": 0.32,
                "key_pass": 1.0761,
                "shots_off_target": 0.3317,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.9,
                "interceptions_in_zone": 0.9,
                "clearances_in_zone": 0.8,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.809,
                "opponent_faced": "Chupete",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0187,
                "projected_assists": 0,
                "assist_probability": 0.0777,
                "finishing_factor": 0.8,
                "creation_factor": 1.25,
                "fifa_overall": 75.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0777,
                "provider_weight": 0.1011,
                "squad_weight_total": 0.9581,
                "weight_share": 0.1055,
                "creation_factor": 1.25,
                "appearance_weight": 1.0,
                "weight_rank": 5,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Leandro Cabrera": {
          "player_id": 81992,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 6,
          "height": 190,
          "market_value": 930000,
          "stats": {
            "interceptions": 1,
            "tackles": 1,
            "tackles_won": 1,
            "clearances": 6,
            "aerial_won": 3,
            "total_shots": 1,
            "rating": 6.7997,
            "minutes": 90,
            "total_pass": 47,
            "accurate_pass": 40,
            "duels_won": 4,
            "total_long_balls": 6,
            "accurate_long_balls": 3,
            "total_own_half_passes": 27,
            "accurate_own_half_passes": 25,
            "total_opp_half_passes": 21,
            "accurate_opp_half_passes": 15,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 61,
            "possession_lost": 8.4955,
            "dispossessed": 0.0535,
            "duels_lost": 3,
            "aerial_lost": 2,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 2,
            "challenges_lost": 0,
            "fouls": 1,
            "fouls_drawn": 0,
            "blocks": 1,
            "goal_rate": 0.0101,
            "goals": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "expected_goals": 0.0518,
            "expected_assists": 0.0394,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0247,
            "ball_carries": 11,
            "total_progression": 35,
            "progressive_carries": 0,
            "key_pass": 0,
            "shots_off_target": 0,
            "tackles_in_zone": 1.0,
            "tackles_won_in_zone": 0.9,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.6,
            "defensive_success_rate": 0.809,
            "opponent_faced": "Chupete",
            "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "antagonist_source": "defensive_duel",
            "projected_goals": 0,
            "goal_probability": 0.0505,
            "projected_assists": 0,
            "assist_probability": 0.0386,
            "finishing_factor": 0.8,
            "creation_factor": 0.8,
            "fifa_overall": 76.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0136,
                "expected_assists": 0.0446,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 74,
                "accurate_pass": 67,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 4,
                "aerial_won": 4,
                "duels_won": 7,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 90,
                "rating": 6.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1658,
                "expected_assists": 0.0509,
                "total_shots": 1,
                "total_pass": 50,
                "accurate_pass": 40,
                "interceptions": 3,
                "clearances": 9,
                "aerial_won": 6,
                "duels_won": 6,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0713,
                "total_shots": 0,
                "total_pass": 42,
                "accurate_pass": 36,
                "clearances": 17,
                "aerial_won": 3,
                "duels_won": 3,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0325,
                "total_shots": 0,
                "total_pass": 51,
                "accurate_pass": 48,
                "tackles": 1,
                "clearances": 4,
                "aerial_won": 2,
                "duels_won": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083719,
              "match_date": "2026-05-23",
              "home_team": "Espanyol",
              "away_team": "Real Sociedad",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1048,
                "expected_assists": 0.0057,
                "total_shots": 1,
                "total_pass": 41,
                "accurate_pass": 32,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083696,
              "match_date": "2026-05-17",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0018,
                "total_shots": 0,
                "total_pass": 32,
                "accurate_pass": 23,
                "clearances": 11,
                "aerial_won": 4,
                "duels_won": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083629,
              "match_date": "2026-05-13",
              "home_team": "Espanyol",
              "away_team": "Athletic Club",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Athletic Club",
              "stats": {
                "minutes": 90,
                "rating": 7.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0175,
                "expected_assists": 0.0082,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 68,
                "accurate_pass": 56,
                "interceptions": 2,
                "clearances": 7,
                "aerial_won": 3,
                "duels_won": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083587,
              "match_date": "2026-05-09",
              "home_team": "Sevilla",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0584,
                "expected_assists": 0.0124,
                "total_shots": 2,
                "shots_on_target": 1,
                "total_pass": 27,
                "accurate_pass": 16,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 10,
                "aerial_won": 4,
                "duels_won": 5,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083422,
              "match_date": "2026-05-03",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1498,
                "expected_assists": 0.0823,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 37,
                "accurate_pass": 29,
                "interceptions": 1,
                "clearances": 6,
                "aerial_won": 2,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083221,
              "match_date": "2026-04-27",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0041,
                "total_shots": 0,
                "total_pass": 51,
                "accurate_pass": 44,
                "clearances": 6,
                "aerial_won": 5,
                "duels_won": 5,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 3325,
            "combined_rank_score": 1280.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 612.0,
            "sofascore_rating": 6.7757,
            "sofascore_appearances": 37.0,
            "fifa_rank": 1948.0,
            "fifa_overall": 76.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 7,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7997,
            "source_file": "data/player_rankings.csv",
            "player_name": "Leandro Cabrera",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Aimar Oroz",
                  "ranking": 3320
                },
                {
                  "player_name": "Konstantinos Koulierakis",
                  "ranking": 3321
                },
                {
                  "player_name": "Óliver Torres",
                  "ranking": 3322
                },
                {
                  "player_name": "Daley Blind",
                  "ranking": 3323
                },
                {
                  "player_name": "Williot Swedberg",
                  "ranking": 3324
                }
              ],
              "lower": [
                {
                  "player_name": "Alejandro Zendejas",
                  "ranking": 3326
                },
                {
                  "player_name": "Sacha Boey",
                  "ranking": 3327
                },
                {
                  "player_name": "Hugo Cuypers",
                  "ranking": 3328
                },
                {
                  "player_name": "Carl Rushworth",
                  "ranking": 3329
                },
                {
                  "player_name": "Juan Brunetta",
                  "ranking": 3330
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.75,
          "history_matches": 41,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 41,
            "data_confidence": 0.75,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "market_value_adjustment": 0.9978,
            "fbref_prior_metrics": null,
            "rationale": "XGBoost regressor (D_service) evaluated 41 historical appearances across 7 target models."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 0.9292,
                "tackles": 1.0809,
                "tackles_won": 0.6075,
                "clearances": 6.4905,
                "aerial_won": 3.3469,
                "total_shots": 0.6455,
                "rating": 6.7997,
                "minutes": 90.0,
                "total_pass": 47.5927,
                "accurate_pass": 39.8832,
                "duels_won": 4.3786,
                "total_long_balls": 6.2133,
                "accurate_long_balls": 2.7578,
                "total_own_half_passes": 26.6875,
                "accurate_own_half_passes": 24.8637,
                "total_opp_half_passes": 20.9052,
                "accurate_opp_half_passes": 15.0195,
                "crosses_total": 0.3722,
                "crosses_accurate": 0.0343,
                "touches": 61.2938,
                "possession_lost": 8.5142,
                "dispossessed": 0.0536,
                "duels_lost": 3.3717,
                "aerial_lost": 1.5894,
                "total_contest": 0.0759,
                "won_contest": 0.0309,
                "ball_recovery": 2.1564,
                "challenges_lost": 0.299,
                "fouls": 1.4376,
                "fouls_drawn": 0.3642,
                "blocks": 0.7091,
                "goals": 0.0101,
                "goal_rate": 0.0101,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.051,
                "expected_assists": 0.0387,
                "shots_on_target": 0.1672,
                "big_chances_created": 0.003,
                "xgot": 0.0244,
                "ball_carries": 11.1895,
                "total_progression": 34.9683,
                "progressive_carries": 0.3437,
                "key_pass": 0.0987,
                "shots_off_target": 0.4783
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1502,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1277,
                    "rating": 6.0
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1085,
                    "rating": 7.3
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0922,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-05-23",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0784,
                    "rating": 6.2
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Osasuna",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0666,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-05-13",
                    "opponent": "Athletic Club",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0566,
                    "rating": 7.1
                  },
                  {
                    "match_date": "2026-05-09",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0481,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-05-03",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0409,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-04-27",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0348,
                    "rating": 7.3
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 1.0,
                  "totalClearance": 7.3791,
                  "aerialWon": 3.3337,
                  "totalClearance_p90": 7.3791,
                  "totalTackle": 0.6848,
                  "totalPass": 47.5927
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 0.9292327165603638,
                    "model_output": 0.9292,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.106
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0359
                        },
                        {
                          "name": "ballRecovery_p90",
                          "contribution": -0.0325
                        },
                        {
                          "name": "interceptionWon_p90",
                          "contribution": -0.0246
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.0168
                        }
                      ],
                      "others": -0.0297,
                      "total": 0.9292,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.116574
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.036581
                        },
                        {
                          "name": "ballRecovery_p90",
                          "margin": -0.033098
                        },
                        {
                          "name": "interceptionWon_p90",
                          "margin": -0.025801
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.01764
                        }
                      ],
                      "others_margin": -0.031293
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 1.0808560848236084,
                    "model_output": 1.0809,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1512
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": -0.1421
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.0813
                        },
                        {
                          "name": "press_vulnerability",
                          "contribution": -0.0523
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.0452
                        }
                      ],
                      "others": -0.1433,
                      "total": 1.0809,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.102978
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": -0.096478
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.059731
                        },
                        {
                          "name": "press_vulnerability",
                          "margin": -0.040399
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.036252
                        }
                      ],
                      "others_margin": -0.124454
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 0.6074927449226379,
                    "model_output": 0.6075,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "totalTackle_p90",
                          "contribution": -0.0771
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0623
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.0598
                        },
                        {
                          "name": "challengeLost",
                          "contribution": -0.034
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.0314
                        }
                      ],
                      "others": -0.1069,
                      "total": 0.6075,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "totalTackle_p90",
                          "margin": -0.094519
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.07706
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.07387
                        },
                        {
                          "name": "challengeLost",
                          "margin": -0.044627
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.043075
                        }
                      ],
                      "others_margin": -0.16197
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 6.490517616271973,
                    "model_output": 6.4905,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "totalClearance",
                          "contribution": 0.8458
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.5534
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.387
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": 0.3631
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.248
                        }
                      ],
                      "others": 0.6418,
                      "total": 6.4905,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "totalClearance",
                          "margin": 0.219173
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.121138
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.076766
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": 0.067032
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.043323
                        }
                      ],
                      "others_margin": 0.104128
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 3.34688663482666,
                    "model_output": 3.3469,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "aerialWon",
                          "contribution": 0.751
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.259
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.2845
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.2812
                        },
                        {
                          "name": "aerialLost",
                          "contribution": 0.1055
                        }
                      ],
                      "others": 0.2837,
                      "total": 3.3469,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "aerialWon",
                          "margin": 0.433967
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.114588
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.112365
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.099921
                        },
                        {
                          "name": "aerialLost",
                          "margin": 0.03504
                        }
                      ],
                      "others_margin": 0.088595
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.6455380320549011,
                    "model_output": 0.6455,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0589
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0404
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0316
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0305
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": 0.0244
                        }
                      ],
                      "others": 0.0518,
                      "total": 0.6455,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.058862
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.040356
                        },
                        {
                          "name": "rating",
                          "margin": -0.031583
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.030503
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": 0.024424
                        }
                      ],
                      "others_margin": 0.051844
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.799657821655273,
                    "model_output": 6.7997,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "rating",
                          "contribution": -0.0278
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.0231
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0201
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0134
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.0104
                        }
                      ],
                      "others": 0.0156,
                      "total": 6.7997,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "rating",
                          "margin": -0.027796
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.023109
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.020111
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.013426
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.010443
                        }
                      ],
                      "others_margin": 0.015456
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 41,
                  "role_matches": 41,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9978, quality 0.437)",
              "stats": {
                "interceptions": 0.9272,
                "tackles": 1.0785,
                "tackles_won": 0.6062,
                "clearances": 6.4762,
                "aerial_won": 3.3395,
                "total_shots": 0.6441,
                "rating": 6.7997,
                "minutes": 90.0,
                "total_pass": 47.488,
                "accurate_pass": 39.7955,
                "duels_won": 4.369,
                "total_long_balls": 6.1996,
                "accurate_long_balls": 2.7517,
                "total_own_half_passes": 26.6288,
                "accurate_own_half_passes": 24.809,
                "total_opp_half_passes": 20.8592,
                "accurate_opp_half_passes": 14.9865,
                "crosses_total": 0.3714,
                "crosses_accurate": 0.0342,
                "touches": 61.159,
                "possession_lost": 8.4955,
                "dispossessed": 0.0535,
                "duels_lost": 3.3643,
                "aerial_lost": 1.5859,
                "total_contest": 0.0757,
                "won_contest": 0.0308,
                "ball_recovery": 2.1517,
                "challenges_lost": 0.2983,
                "fouls": 1.4344,
                "fouls_drawn": 0.3634,
                "blocks": 0.7075,
                "goals": 0.0101,
                "goal_rate": 0.0101,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0509,
                "expected_assists": 0.0386,
                "shots_on_target": 0.1668,
                "big_chances_created": 0.003,
                "xgot": 0.0243,
                "ball_carries": 11.1649,
                "total_progression": 34.8914,
                "progressive_carries": 0.3429,
                "key_pass": 0.0985,
                "shots_off_target": 0.4772
              },
              "params": {
                "market_value_eur": 930000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9978,
                "reference_quality": 0.505,
                "history_matches": 41,
                "history_shrink": 0.1087,
                "market_value_known": true
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 0.9272,
                "tackles": 1.0785,
                "tackles_won": 0.6062,
                "clearances": 6.4762,
                "aerial_won": 3.3395,
                "total_shots": 0.6441,
                "rating": 6.7997,
                "minutes": 90.0,
                "total_pass": 47.488,
                "accurate_pass": 39.7955,
                "duels_won": 4.369,
                "total_long_balls": 6.1996,
                "accurate_long_balls": 2.7517,
                "total_own_half_passes": 26.6288,
                "accurate_own_half_passes": 24.809,
                "total_opp_half_passes": 20.8592,
                "accurate_opp_half_passes": 14.9865,
                "crosses_total": 0.3714,
                "crosses_accurate": 0.0342,
                "touches": 61.159,
                "possession_lost": 8.4955,
                "dispossessed": 0.0535,
                "duels_lost": 3.3643,
                "aerial_lost": 1.5859,
                "total_contest": 0.0757,
                "won_contest": 0.0308,
                "ball_recovery": 2.1517,
                "challenges_lost": 0.2983,
                "fouls": 1.4344,
                "fouls_drawn": 0.3634,
                "blocks": 0.7075,
                "goals": 0.0101,
                "goal_rate": 0.0101,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0509,
                "expected_assists": 0.0386,
                "shots_on_target": 0.1668,
                "big_chances_created": 0.003,
                "xgot": 0.0243,
                "ball_carries": 11.1649,
                "total_progression": 34.8914,
                "progressive_carries": 0.3429,
                "key_pass": 0.0985,
                "shots_off_target": 0.4772
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "interceptions": 0.9272,
                "tackles": 1.0785,
                "tackles_won": 0.6062,
                "clearances": 6.4762,
                "aerial_won": 3.3395,
                "total_shots": 0.6441,
                "rating": 6.7997,
                "minutes": 90.0,
                "total_pass": 47.488,
                "accurate_pass": 39.7955,
                "duels_won": 4.369,
                "total_long_balls": 6.1996,
                "accurate_long_balls": 2.7517,
                "total_own_half_passes": 26.6288,
                "accurate_own_half_passes": 24.809,
                "total_opp_half_passes": 20.8592,
                "accurate_opp_half_passes": 14.9865,
                "crosses_total": 0.3714,
                "crosses_accurate": 0.0342,
                "touches": 61.159,
                "possession_lost": 8.4955,
                "dispossessed": 0.0535,
                "duels_lost": 3.3643,
                "aerial_lost": 1.5859,
                "total_contest": 0.0757,
                "won_contest": 0.0308,
                "ball_recovery": 2.1517,
                "challenges_lost": 0.2983,
                "fouls": 1.4344,
                "fouls_drawn": 0.3634,
                "blocks": 0.7075,
                "goals": 0.0101,
                "goal_rate": 0.0101,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0509,
                "expected_assists": 0.0386,
                "shots_on_target": 0.1668,
                "big_chances_created": 0.003,
                "xgot": 0.0243,
                "ball_carries": 11.1649,
                "total_progression": 34.8914,
                "progressive_carries": 0.3429,
                "key_pass": 0.0985,
                "shots_off_target": 0.4772,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.9,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.809,
                "opponent_faced": "Chupete",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Chupete",
                  "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle"
                }
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "interceptions": 0.9272,
                "tackles": 1.0785,
                "tackles_won": 0.6062,
                "clearances": 6.4762,
                "aerial_won": 3.3395,
                "total_shots": 0.6441,
                "rating": 6.7997,
                "minutes": 90.0,
                "total_pass": 47.488,
                "accurate_pass": 39.7955,
                "duels_won": 4.369,
                "total_long_balls": 6.1996,
                "accurate_long_balls": 2.7517,
                "total_own_half_passes": 26.6288,
                "accurate_own_half_passes": 24.809,
                "total_opp_half_passes": 20.8592,
                "accurate_opp_half_passes": 14.9865,
                "crosses_total": 0.3714,
                "crosses_accurate": 0.0342,
                "touches": 61.159,
                "possession_lost": 8.4955,
                "dispossessed": 0.0535,
                "duels_lost": 3.3643,
                "aerial_lost": 1.5859,
                "total_contest": 0.0757,
                "won_contest": 0.0308,
                "ball_recovery": 2.1517,
                "challenges_lost": 0.2983,
                "fouls": 1.4344,
                "fouls_drawn": 0.3634,
                "blocks": 0.7075,
                "goal_rate": 0.0101,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0518,
                "expected_assists": 0.0394,
                "shots_on_target": 0.1668,
                "big_chances_created": 0.003,
                "xgot": 0.0247,
                "ball_carries": 11.1649,
                "total_progression": 34.8914,
                "progressive_carries": 0.3429,
                "key_pass": 0.0985,
                "shots_off_target": 0.4772,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.9,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.809,
                "opponent_faced": "Chupete",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 7 by projected rating, fifa_overall 76.0; not used by the projection)",
              "stats": {
                "interceptions": 0.9272,
                "tackles": 1.0785,
                "tackles_won": 0.6062,
                "clearances": 6.4762,
                "aerial_won": 3.3395,
                "total_shots": 0.6441,
                "rating": 6.7997,
                "minutes": 90.0,
                "total_pass": 47.488,
                "accurate_pass": 39.7955,
                "duels_won": 4.369,
                "total_long_balls": 6.1996,
                "accurate_long_balls": 2.7517,
                "total_own_half_passes": 26.6288,
                "accurate_own_half_passes": 24.809,
                "total_opp_half_passes": 20.8592,
                "accurate_opp_half_passes": 14.9865,
                "crosses_total": 0.3714,
                "crosses_accurate": 0.0342,
                "touches": 61.159,
                "possession_lost": 8.4955,
                "dispossessed": 0.0535,
                "duels_lost": 3.3643,
                "aerial_lost": 1.5859,
                "total_contest": 0.0757,
                "won_contest": 0.0308,
                "ball_recovery": 2.1517,
                "challenges_lost": 0.2983,
                "fouls": 1.4344,
                "fouls_drawn": 0.3634,
                "blocks": 0.7075,
                "goal_rate": 0.0101,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0518,
                "expected_assists": 0.0394,
                "shots_on_target": 0.1668,
                "big_chances_created": 0.003,
                "xgot": 0.0247,
                "ball_carries": 11.1649,
                "total_progression": 34.8914,
                "progressive_carries": 0.3429,
                "key_pass": 0.0985,
                "shots_off_target": 0.4772,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.9,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.809,
                "opponent_faced": "Chupete",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 0.8,
                "fifa_overall": 76.0
              },
              "params": {
                "match_squad_rank": 7,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3325,
                "fifa_rank": 1948.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 76.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "interceptions": 0.9272,
                "tackles": 1.0785,
                "tackles_won": 0.6062,
                "clearances": 6.4762,
                "aerial_won": 3.3395,
                "total_shots": 0.6441,
                "rating": 6.7997,
                "minutes": 90.0,
                "total_pass": 47.488,
                "accurate_pass": 39.7955,
                "duels_won": 4.369,
                "total_long_balls": 6.1996,
                "accurate_long_balls": 2.7517,
                "total_own_half_passes": 26.6288,
                "accurate_own_half_passes": 24.809,
                "total_opp_half_passes": 20.8592,
                "accurate_opp_half_passes": 14.9865,
                "crosses_total": 0.3714,
                "crosses_accurate": 0.0342,
                "touches": 61.159,
                "possession_lost": 8.4955,
                "dispossessed": 0.0535,
                "duels_lost": 3.3643,
                "aerial_lost": 1.5859,
                "total_contest": 0.0757,
                "won_contest": 0.0308,
                "ball_recovery": 2.1517,
                "challenges_lost": 0.2983,
                "fouls": 1.4344,
                "fouls_drawn": 0.3634,
                "blocks": 0.7075,
                "goal_rate": 0.0101,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0518,
                "expected_assists": 0.0394,
                "shots_on_target": 0.1668,
                "big_chances_created": 0.003,
                "xgot": 0.0247,
                "ball_carries": 11.1649,
                "total_progression": 34.8914,
                "progressive_carries": 0.3429,
                "key_pass": 0.0985,
                "shots_off_target": 0.4772,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.9,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.809,
                "opponent_faced": "Chupete",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0505,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8,
                "creation_factor": 0.8,
                "fifa_overall": 76.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.0505,
                "scorer_weight": 0.0414,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0254,
                "finishing_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 9,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "interceptions": 0.9272,
                "tackles": 1.0785,
                "tackles_won": 0.6062,
                "clearances": 6.4762,
                "aerial_won": 3.3395,
                "total_shots": 0.6441,
                "rating": 6.7997,
                "minutes": 90.0,
                "total_pass": 47.488,
                "accurate_pass": 39.7955,
                "duels_won": 4.369,
                "total_long_balls": 6.1996,
                "accurate_long_balls": 2.7517,
                "total_own_half_passes": 26.6288,
                "accurate_own_half_passes": 24.809,
                "total_opp_half_passes": 20.8592,
                "accurate_opp_half_passes": 14.9865,
                "crosses_total": 0.3714,
                "crosses_accurate": 0.0342,
                "touches": 61.159,
                "possession_lost": 8.4955,
                "dispossessed": 0.0535,
                "duels_lost": 3.3643,
                "aerial_lost": 1.5859,
                "total_contest": 0.0757,
                "won_contest": 0.0308,
                "ball_recovery": 2.1517,
                "challenges_lost": 0.2983,
                "fouls": 1.4344,
                "fouls_drawn": 0.3634,
                "blocks": 0.7075,
                "goal_rate": 0.0101,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0518,
                "expected_assists": 0.0394,
                "shots_on_target": 0.1668,
                "big_chances_created": 0.003,
                "xgot": 0.0247,
                "ball_carries": 11.1649,
                "total_progression": 34.8914,
                "progressive_carries": 0.3429,
                "key_pass": 0.0985,
                "shots_off_target": 0.4772,
                "tackles_in_zone": 1.0,
                "tackles_won_in_zone": 0.9,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.6,
                "aerial_duels_won": 0.6,
                "defensive_success_rate": 0.809,
                "opponent_faced": "Chupete",
                "pressing_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0505,
                "projected_assists": 0,
                "assist_probability": 0.0386,
                "finishing_factor": 0.8,
                "creation_factor": 0.8,
                "fifa_overall": 76.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0386,
                "provider_weight": 0.0315,
                "squad_weight_total": 0.9581,
                "weight_share": 0.0329,
                "creation_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 9,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Clemens Riedel": {
          "player_id": 1129360,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 5,
          "height": 186,
          "market_value": 3900000,
          "stats": {
            "interceptions": 1,
            "tackles": 1,
            "tackles_won": 1,
            "clearances": 5,
            "aerial_won": 2,
            "total_shots": 0,
            "rating": 6.7546,
            "minutes": 85,
            "total_pass": 48,
            "accurate_pass": 41,
            "duels_won": 4,
            "total_long_balls": 6,
            "accurate_long_balls": 2,
            "total_own_half_passes": 34,
            "accurate_own_half_passes": 32,
            "total_opp_half_passes": 14,
            "accurate_opp_half_passes": 9,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 60,
            "possession_lost": 7.9199,
            "dispossessed": 0.1306,
            "duels_lost": 4,
            "aerial_lost": 2,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 3,
            "challenges_lost": 0,
            "fouls": 2,
            "fouls_drawn": 0,
            "blocks": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.0097,
            "assists": 0,
            "expected_goals": 0.0064,
            "expected_assists": 0.0107,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0144,
            "ball_carries": 14,
            "total_progression": 53,
            "progressive_carries": 0,
            "key_pass": 0,
            "shots_off_target": 0,
            "tackles_in_zone": 1.9,
            "tackles_won_in_zone": 1.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.9,
            "defensive_success_rate": 0.568,
            "opponent_faced": "Pablo Martínez",
            "pressing_zone": "Right Mid vs Left Back — Wide Channel",
            "matchup_zone": "Right Mid vs Left Back — Wide Channel",
            "antagonist_source": "defensive_duel",
            "projected_goals": 0,
            "goal_probability": 0.0064,
            "projected_assists": 0,
            "assist_probability": 0.0106,
            "finishing_factor": 0.8881,
            "creation_factor": 0.9868,
            "fifa_overall": 70.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 23,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0205,
                "total_shots": 0,
                "total_pass": 32,
                "accurate_pass": 30,
                "interceptions": 1,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 2,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0172,
                "expected_assists": 0.0199,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 45,
                "accurate_pass": 39,
                "clearances": 5,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0024,
                "total_shots": 0,
                "total_pass": 44,
                "accurate_pass": 35,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 9,
                "aerial_won": 3,
                "duels_won": 5,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 16,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0033,
                "total_shots": 0,
                "total_pass": 11,
                "accurate_pass": 10,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416306,
              "match_date": "2026-08-22",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 66,
                "rating": 6.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0197,
                "expected_assists": 0.0031,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 26,
                "accurate_pass": 22,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 4,
                "aerial_won": 1,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421053,
              "match_date": "2026-08-16",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0127,
                "total_shots": 0,
                "total_pass": 74,
                "accurate_pass": 60,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 6,
                "aerial_won": 3,
                "duels_won": 4,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083696,
              "match_date": "2026-05-17",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0049,
                "total_shots": 0,
                "total_pass": 38,
                "accurate_pass": 30,
                "tackles": 1,
                "clearances": 11,
                "aerial_won": 3,
                "duels_won": 5,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083629,
              "match_date": "2026-05-13",
              "home_team": "Espanyol",
              "away_team": "Athletic Club",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Athletic Club",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0063,
                "total_shots": 0,
                "total_pass": 100,
                "accurate_pass": 91,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 9,
                "aerial_won": 3,
                "duels_won": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083330,
              "match_date": "2026-04-23",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 12,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0022,
                "total_shots": 0,
                "total_pass": 6,
                "accurate_pass": 5,
                "key_pass": 1,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14081811,
              "match_date": "2026-04-04",
              "home_team": "Real Betis",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Betis",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0047,
                "total_shots": 0,
                "total_pass": 31,
                "accurate_pass": 25,
                "tackles": 3,
                "tackles_won": 2,
                "clearances": 9,
                "aerial_won": 3,
                "duels_won": 7,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 5074,
            "combined_rank_score": 3259.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 591.0,
            "sofascore_rating": 6.79,
            "sofascore_appearances": 20.0,
            "fifa_rank": 5928.0,
            "fifa_overall": 70.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 10,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7546,
            "source_file": "data/player_rankings.csv",
            "player_name": "Clemens Riedel",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Luis Sandoval",
                  "ranking": 5069
                },
                {
                  "player_name": "Guido Mainero",
                  "ranking": 5070
                },
                {
                  "player_name": "Montrell Culbreath",
                  "ranking": 5071
                },
                {
                  "player_name": "Juma Bah",
                  "ranking": 5072
                },
                {
                  "player_name": "Hiroki Sakai",
                  "ranking": 5073
                }
              ],
              "lower": [
                {
                  "player_name": "Martín Sarrafiore",
                  "ranking": 5075
                },
                {
                  "player_name": "Juan Manuel Cuesta",
                  "ranking": 5076
                },
                {
                  "player_name": "Sebastián Guzmán",
                  "ranking": 5077
                },
                {
                  "player_name": "Anthony Patterson",
                  "ranking": 5078
                },
                {
                  "player_name": "Miguel Rubio",
                  "ranking": 5079
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.767,
          "history_matches": 26,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 26,
            "data_confidence": 0.767,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9973,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 2.0,
              "starts": 2.0,
              "minutes": 155.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 0.58,
              "shots_on_target_pct": 100.0,
              "prior_reliability": 0.1133
            },
            "rationale": "XGBoost regressor (D_service) evaluated 26 historical appearances across 7 target models; FBref 2026-2027 prior blended (La Liga, Espanyol, rel: 0.11, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 0.9144,
                "tackles": 1.205,
                "tackles_won": 0.6731,
                "clearances": 4.9884,
                "aerial_won": 2.1633,
                "total_shots": 0.4063,
                "rating": 6.7546,
                "minutes": 84.71,
                "total_pass": 48.3416,
                "accurate_pass": 41.23,
                "duels_won": 3.731,
                "total_long_balls": 6.2901,
                "accurate_long_balls": 2.072,
                "total_own_half_passes": 34.0618,
                "accurate_own_half_passes": 31.7388,
                "total_opp_half_passes": 14.2798,
                "accurate_opp_half_passes": 9.4913,
                "crosses_total": 0.0338,
                "crosses_accurate": 0.0116,
                "touches": 60.4452,
                "possession_lost": 7.9413,
                "dispossessed": 0.131,
                "duels_lost": 4.0557,
                "aerial_lost": 1.8273,
                "total_contest": 0.0189,
                "won_contest": 0.0189,
                "ball_recovery": 2.7985,
                "challenges_lost": 0.3995,
                "fouls": 1.8998,
                "fouls_drawn": 0.4343,
                "blocks": 0.4662,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0098,
                "assist_rate": 0.0098,
                "expected_goals": 0.0063,
                "expected_assists": 0.0105,
                "shots_on_target": 0.2772,
                "big_chances_created": 0.0,
                "xgot": 0.0142,
                "ball_carries": 14.5294,
                "total_progression": 53.6084,
                "progressive_carries": 0.4733,
                "key_pass": 0.0682,
                "shots_off_target": 0.1291
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 23.0,
                    "is_starting": false,
                    "weight": 0.1522,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1294,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.11,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 16.0,
                    "is_starting": false,
                    "weight": 0.0935,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-08-22",
                    "opponent": "Real Madrid",
                    "minutes": 66.0,
                    "is_starting": true,
                    "weight": 0.0795,
                    "rating": 6.0
                  },
                  {
                    "match_date": "2026-08-16",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0675,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Osasuna",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0574,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-05-13",
                    "opponent": "Athletic Club",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0488,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-04-23",
                    "opponent": "Rayo Vallecano",
                    "minutes": 12.0,
                    "is_starting": false,
                    "weight": 0.0415,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-04-04",
                    "opponent": "Real Betis",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0353,
                    "rating": 7.3
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 1.0,
                  "totalClearance": 4.6662,
                  "aerialWon": 1.7783,
                  "totalClearance_p90": 5.6789,
                  "totalTackle": 0.8031,
                  "totalPass": 39.6733
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 0.9144331812858582,
                    "model_output": 0.9144,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.12
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.0973
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0181
                        },
                        {
                          "name": "touches",
                          "contribution": 0.0175
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": -0.0145
                        }
                      ],
                      "others": 0.0133,
                      "total": 0.9144,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.130982
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.104921
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.020368
                        },
                        {
                          "name": "touches",
                          "margin": 0.019271
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": -0.015912
                        }
                      ],
                      "others_margin": 0.014761
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 1.2049657106399536,
                    "model_output": 1.205,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1772
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": -0.1166
                        },
                        {
                          "name": "press_vulnerability",
                          "contribution": -0.0546
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.0496
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.0386
                        }
                      ],
                      "others": -0.1067,
                      "total": 1.205,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.119663
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": -0.077126
                        },
                        {
                          "name": "press_vulnerability",
                          "margin": -0.038256
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.036059
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.028993
                        }
                      ],
                      "others_margin": -0.084867
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 0.6730579733848572,
                    "model_output": 0.6731,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0979
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": -0.0832
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.0661
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.0357
                        },
                        {
                          "name": "challengeLost",
                          "contribution": -0.0311
                        }
                      ],
                      "others": -0.0631,
                      "total": 0.6731,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.108477
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": -0.09147
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.079144
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.045449
                        },
                        {
                          "name": "challengeLost",
                          "margin": -0.041317
                        }
                      ],
                      "others_margin": -0.089606
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 4.988375186920166,
                    "model_output": 4.9884,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.4575
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.4777
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.2426
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.1604
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.1339
                        }
                      ],
                      "others": 0.0649,
                      "total": 4.9884,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.124486
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.1153
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.053831
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.034067
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.027571
                        }
                      ],
                      "others_margin": 0.013071
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 2.1633479595184326,
                    "model_output": 2.1633,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "aerialWon",
                          "contribution": 0.2654
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.183
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.1401
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.1139
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": -0.0662
                        }
                      ],
                      "others": 0.1451,
                      "total": 2.1633,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "aerialWon",
                          "margin": 0.175648
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.10531
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.073768
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.056211
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": -0.032266
                        }
                      ],
                      "others_margin": 0.069433
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.4062695801258087,
                    "model_output": 0.4063,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.1051
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0548
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": 0.0205
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0198
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.0145
                        }
                      ],
                      "others": -0.0297,
                      "total": 0.4063,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.105148
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.054751
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": 0.020531
                        },
                        {
                          "name": "rating",
                          "margin": -0.019809
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.014521
                        }
                      ],
                      "others_margin": -0.029707
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.754648208618164,
                    "model_output": 6.7546,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "rating",
                          "contribution": -0.0274
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0127
                        },
                        {
                          "name": "tackle_success_rate",
                          "contribution": 0.0116
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0108
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0105
                        }
                      ],
                      "others": -0.0023,
                      "total": 6.7546,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "rating",
                          "margin": -0.027429
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.012698
                        },
                        {
                          "name": "tackle_success_rate",
                          "margin": 0.011586
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.010771
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.010453
                        }
                      ],
                      "others_margin": -0.00226
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 26,
                  "role_matches": 20,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9973, quality 0.449)",
              "stats": {
                "interceptions": 0.912,
                "tackles": 1.2017,
                "tackles_won": 0.6712,
                "clearances": 4.9749,
                "aerial_won": 2.1575,
                "total_shots": 0.4053,
                "rating": 6.7546,
                "minutes": 84.71,
                "total_pass": 48.2111,
                "accurate_pass": 41.1187,
                "duels_won": 3.7209,
                "total_long_balls": 6.2731,
                "accurate_long_balls": 2.0664,
                "total_own_half_passes": 33.9698,
                "accurate_own_half_passes": 31.6531,
                "total_opp_half_passes": 14.2412,
                "accurate_opp_half_passes": 9.4657,
                "crosses_total": 0.0337,
                "crosses_accurate": 0.0116,
                "touches": 60.282,
                "possession_lost": 7.9199,
                "dispossessed": 0.1306,
                "duels_lost": 4.0447,
                "aerial_lost": 1.8224,
                "total_contest": 0.0188,
                "won_contest": 0.0188,
                "ball_recovery": 2.7909,
                "challenges_lost": 0.3984,
                "fouls": 1.8947,
                "fouls_drawn": 0.4331,
                "blocks": 0.4649,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0098,
                "assist_rate": 0.0098,
                "expected_goals": 0.0063,
                "expected_assists": 0.0105,
                "shots_on_target": 0.2765,
                "big_chances_created": 0.0,
                "xgot": 0.0142,
                "ball_carries": 14.4902,
                "total_progression": 53.4637,
                "progressive_carries": 0.472,
                "key_pass": 0.068,
                "shots_off_target": 0.1288
              },
              "params": {
                "market_value_eur": 3900000,
                "quality_factor": 0.4486,
                "boost_factor": 0.9973,
                "reference_quality": 0.505,
                "history_matches": 26,
                "history_shrink": 0.1613,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0119)",
              "stats": {
                "interceptions": 0.9012,
                "tackles": 1.2017,
                "tackles_won": 0.6764,
                "clearances": 4.9749,
                "aerial_won": 2.1575,
                "total_shots": 0.407,
                "rating": 6.7546,
                "minutes": 84.71,
                "total_pass": 48.2111,
                "accurate_pass": 41.1187,
                "duels_won": 3.7209,
                "total_long_balls": 6.2731,
                "accurate_long_balls": 2.0664,
                "total_own_half_passes": 33.9698,
                "accurate_own_half_passes": 31.6531,
                "total_opp_half_passes": 14.2412,
                "accurate_opp_half_passes": 9.4657,
                "crosses_total": 0.0333,
                "crosses_accurate": 0.0116,
                "touches": 60.282,
                "possession_lost": 7.9199,
                "dispossessed": 0.1306,
                "duels_lost": 4.0447,
                "aerial_lost": 1.8224,
                "total_contest": 0.0188,
                "won_contest": 0.0188,
                "ball_recovery": 2.7909,
                "challenges_lost": 0.3984,
                "fouls": 1.9117,
                "fouls_drawn": 0.428,
                "blocks": 0.4649,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0097,
                "assist_rate": 0.0097,
                "expected_goals": 0.0063,
                "expected_assists": 0.0105,
                "shots_on_target": 0.2797,
                "big_chances_created": 0.0,
                "xgot": 0.0142,
                "ball_carries": 14.4902,
                "total_progression": 53.4637,
                "progressive_carries": 0.472,
                "key_pass": 0.068,
                "shots_off_target": 0.1288
              },
              "params": {
                "blend_weight": 0.0119,
                "history_matches": 26,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.9412,
                "prior_reliability": 0.1133,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "fouls",
                  "before": 1.8947,
                  "after": 1.9117
                },
                {
                  "stat": "interceptionWon",
                  "before": 0.912,
                  "after": 0.9012
                },
                {
                  "stat": "wonTackle",
                  "before": 0.6712,
                  "after": 0.6764
                },
                {
                  "stat": "wasFouled",
                  "before": 0.4331,
                  "after": 0.428
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 0.9012,
                "tackles": 1.2017,
                "tackles_won": 0.6764,
                "clearances": 4.9749,
                "aerial_won": 2.1575,
                "total_shots": 0.4085,
                "rating": 6.7546,
                "minutes": 84.71,
                "total_pass": 48.2111,
                "accurate_pass": 41.1187,
                "duels_won": 3.7209,
                "total_long_balls": 6.2731,
                "accurate_long_balls": 2.0664,
                "total_own_half_passes": 33.9698,
                "accurate_own_half_passes": 31.6531,
                "total_opp_half_passes": 14.2412,
                "accurate_opp_half_passes": 9.4657,
                "crosses_total": 0.0333,
                "crosses_accurate": 0.0116,
                "touches": 60.282,
                "possession_lost": 7.9199,
                "dispossessed": 0.1306,
                "duels_lost": 4.0447,
                "aerial_lost": 1.8224,
                "total_contest": 0.0188,
                "won_contest": 0.0188,
                "ball_recovery": 2.7909,
                "challenges_lost": 0.3984,
                "fouls": 1.9117,
                "fouls_drawn": 0.428,
                "blocks": 0.4649,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0097,
                "assist_rate": 0.0097,
                "expected_goals": 0.0063,
                "expected_assists": 0.0105,
                "shots_on_target": 0.2797,
                "big_chances_created": 0.0,
                "xgot": 0.0142,
                "ball_carries": 14.4902,
                "total_progression": 53.4637,
                "progressive_carries": 0.472,
                "key_pass": 0.068,
                "shots_off_target": 0.1288
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "interceptions": 0.9012,
                "tackles": 1.2017,
                "tackles_won": 0.6764,
                "clearances": 4.9749,
                "aerial_won": 2.1575,
                "total_shots": 0.4085,
                "rating": 6.7546,
                "minutes": 84.71,
                "total_pass": 48.2111,
                "accurate_pass": 41.1187,
                "duels_won": 3.7209,
                "total_long_balls": 6.2731,
                "accurate_long_balls": 2.0664,
                "total_own_half_passes": 33.9698,
                "accurate_own_half_passes": 31.6531,
                "total_opp_half_passes": 14.2412,
                "accurate_opp_half_passes": 9.4657,
                "crosses_total": 0.0333,
                "crosses_accurate": 0.0116,
                "touches": 60.282,
                "possession_lost": 7.9199,
                "dispossessed": 0.1306,
                "duels_lost": 4.0447,
                "aerial_lost": 1.8224,
                "total_contest": 0.0188,
                "won_contest": 0.0188,
                "ball_recovery": 2.7909,
                "challenges_lost": 0.3984,
                "fouls": 1.9117,
                "fouls_drawn": 0.428,
                "blocks": 0.4649,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0097,
                "assist_rate": 0.0097,
                "expected_goals": 0.0063,
                "expected_assists": 0.0105,
                "shots_on_target": 0.2797,
                "big_chances_created": 0.0,
                "xgot": 0.0142,
                "ball_carries": 14.4902,
                "total_progression": 53.4637,
                "progressive_carries": 0.472,
                "key_pass": 0.068,
                "shots_off_target": 0.1288,
                "tackles_in_zone": 1.9,
                "tackles_won_in_zone": 1.6,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.5,
                "aerial_duels_won": 0.9,
                "defensive_success_rate": 0.568,
                "opponent_faced": "Pablo Martínez",
                "pressing_zone": "Right Mid vs Left Back — Wide Channel",
                "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                "antagonist_source": "defensive_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Pablo Martínez",
                  "matchup_zone": "Right Mid vs Left Back — Wide Channel"
                }
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "interceptions": 0.9012,
                "tackles": 1.2017,
                "tackles_won": 0.6764,
                "clearances": 4.9749,
                "aerial_won": 2.1575,
                "total_shots": 0.4085,
                "rating": 6.7546,
                "minutes": 84.71,
                "total_pass": 48.2111,
                "accurate_pass": 41.1187,
                "duels_won": 3.7209,
                "total_long_balls": 6.2731,
                "accurate_long_balls": 2.0664,
                "total_own_half_passes": 33.9698,
                "accurate_own_half_passes": 31.6531,
                "total_opp_half_passes": 14.2412,
                "accurate_opp_half_passes": 9.4657,
                "crosses_total": 0.0333,
                "crosses_accurate": 0.0116,
                "touches": 60.282,
                "possession_lost": 7.9199,
                "dispossessed": 0.1306,
                "duels_lost": 4.0447,
                "aerial_lost": 1.8224,
                "total_contest": 0.0188,
                "won_contest": 0.0188,
                "ball_recovery": 2.7909,
                "challenges_lost": 0.3984,
                "fouls": 1.9117,
                "fouls_drawn": 0.428,
                "blocks": 0.4649,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0097,
                "assists": 0,
                "expected_goals": 0.0064,
                "expected_assists": 0.0107,
                "shots_on_target": 0.2797,
                "big_chances_created": 0.0,
                "xgot": 0.0144,
                "ball_carries": 14.4902,
                "total_progression": 53.4637,
                "progressive_carries": 0.472,
                "key_pass": 0.068,
                "shots_off_target": 0.1288,
                "tackles_in_zone": 1.9,
                "tackles_won_in_zone": 1.6,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.5,
                "aerial_duels_won": 0.9,
                "defensive_success_rate": 0.568,
                "opponent_faced": "Pablo Martínez",
                "pressing_zone": "Right Mid vs Left Back — Wide Channel",
                "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8881,
                "creation_factor": 0.9868
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 10 by projected rating, fifa_overall 70.0; not used by the projection)",
              "stats": {
                "interceptions": 0.9012,
                "tackles": 1.2017,
                "tackles_won": 0.6764,
                "clearances": 4.9749,
                "aerial_won": 2.1575,
                "total_shots": 0.4085,
                "rating": 6.7546,
                "minutes": 84.71,
                "total_pass": 48.2111,
                "accurate_pass": 41.1187,
                "duels_won": 3.7209,
                "total_long_balls": 6.2731,
                "accurate_long_balls": 2.0664,
                "total_own_half_passes": 33.9698,
                "accurate_own_half_passes": 31.6531,
                "total_opp_half_passes": 14.2412,
                "accurate_opp_half_passes": 9.4657,
                "crosses_total": 0.0333,
                "crosses_accurate": 0.0116,
                "touches": 60.282,
                "possession_lost": 7.9199,
                "dispossessed": 0.1306,
                "duels_lost": 4.0447,
                "aerial_lost": 1.8224,
                "total_contest": 0.0188,
                "won_contest": 0.0188,
                "ball_recovery": 2.7909,
                "challenges_lost": 0.3984,
                "fouls": 1.9117,
                "fouls_drawn": 0.428,
                "blocks": 0.4649,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0097,
                "assists": 0,
                "expected_goals": 0.0064,
                "expected_assists": 0.0107,
                "shots_on_target": 0.2797,
                "big_chances_created": 0.0,
                "xgot": 0.0144,
                "ball_carries": 14.4902,
                "total_progression": 53.4637,
                "progressive_carries": 0.472,
                "key_pass": 0.068,
                "shots_off_target": 0.1288,
                "tackles_in_zone": 1.9,
                "tackles_won_in_zone": 1.6,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.5,
                "aerial_duels_won": 0.9,
                "defensive_success_rate": 0.568,
                "opponent_faced": "Pablo Martínez",
                "pressing_zone": "Right Mid vs Left Back — Wide Channel",
                "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8881,
                "creation_factor": 0.9868,
                "fifa_overall": 70.0
              },
              "params": {
                "match_squad_rank": 10,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 5074,
                "fifa_rank": 5928.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 70.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "interceptions": 0.9012,
                "tackles": 1.2017,
                "tackles_won": 0.6764,
                "clearances": 4.9749,
                "aerial_won": 2.1575,
                "total_shots": 0.4085,
                "rating": 6.7546,
                "minutes": 84.71,
                "total_pass": 48.2111,
                "accurate_pass": 41.1187,
                "duels_won": 3.7209,
                "total_long_balls": 6.2731,
                "accurate_long_balls": 2.0664,
                "total_own_half_passes": 33.9698,
                "accurate_own_half_passes": 31.6531,
                "total_opp_half_passes": 14.2412,
                "accurate_opp_half_passes": 9.4657,
                "crosses_total": 0.0333,
                "crosses_accurate": 0.0116,
                "touches": 60.282,
                "possession_lost": 7.9199,
                "dispossessed": 0.1306,
                "duels_lost": 4.0447,
                "aerial_lost": 1.8224,
                "total_contest": 0.0188,
                "won_contest": 0.0188,
                "ball_recovery": 2.7909,
                "challenges_lost": 0.3984,
                "fouls": 1.9117,
                "fouls_drawn": 0.428,
                "blocks": 0.4649,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0097,
                "assists": 0,
                "expected_goals": 0.0064,
                "expected_assists": 0.0107,
                "shots_on_target": 0.2797,
                "big_chances_created": 0.0,
                "xgot": 0.0144,
                "ball_carries": 14.4902,
                "total_progression": 53.4637,
                "progressive_carries": 0.472,
                "key_pass": 0.068,
                "shots_off_target": 0.1288,
                "tackles_in_zone": 1.9,
                "tackles_won_in_zone": 1.6,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.5,
                "aerial_duels_won": 0.9,
                "defensive_success_rate": 0.568,
                "opponent_faced": "Pablo Martínez",
                "pressing_zone": "Right Mid vs Left Back — Wide Channel",
                "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0064,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 0.8881,
                "creation_factor": 0.9868,
                "fifa_overall": 70.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.0064,
                "scorer_weight": 0.0057,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0035,
                "finishing_factor": 0.8881,
                "appearance_weight": 1.0,
                "weight_rank": 11,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "interceptions": 0.9012,
                "tackles": 1.2017,
                "tackles_won": 0.6764,
                "clearances": 4.9749,
                "aerial_won": 2.1575,
                "total_shots": 0.4085,
                "rating": 6.7546,
                "minutes": 84.71,
                "total_pass": 48.2111,
                "accurate_pass": 41.1187,
                "duels_won": 3.7209,
                "total_long_balls": 6.2731,
                "accurate_long_balls": 2.0664,
                "total_own_half_passes": 33.9698,
                "accurate_own_half_passes": 31.6531,
                "total_opp_half_passes": 14.2412,
                "accurate_opp_half_passes": 9.4657,
                "crosses_total": 0.0333,
                "crosses_accurate": 0.0116,
                "touches": 60.282,
                "possession_lost": 7.9199,
                "dispossessed": 0.1306,
                "duels_lost": 4.0447,
                "aerial_lost": 1.8224,
                "total_contest": 0.0188,
                "won_contest": 0.0188,
                "ball_recovery": 2.7909,
                "challenges_lost": 0.3984,
                "fouls": 1.9117,
                "fouls_drawn": 0.428,
                "blocks": 0.4649,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0097,
                "assists": 0,
                "expected_goals": 0.0064,
                "expected_assists": 0.0107,
                "shots_on_target": 0.2797,
                "big_chances_created": 0.0,
                "xgot": 0.0144,
                "ball_carries": 14.4902,
                "total_progression": 53.4637,
                "progressive_carries": 0.472,
                "key_pass": 0.068,
                "shots_off_target": 0.1288,
                "tackles_in_zone": 1.9,
                "tackles_won_in_zone": 1.6,
                "interceptions_in_zone": 0.7,
                "clearances_in_zone": 0.5,
                "aerial_duels_won": 0.9,
                "defensive_success_rate": 0.568,
                "opponent_faced": "Pablo Martínez",
                "pressing_zone": "Right Mid vs Left Back — Wide Channel",
                "matchup_zone": "Right Mid vs Left Back — Wide Channel",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0064,
                "projected_assists": 0,
                "assist_probability": 0.0106,
                "finishing_factor": 0.8881,
                "creation_factor": 0.9868,
                "fifa_overall": 70.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0106,
                "provider_weight": 0.0106,
                "squad_weight_total": 0.9581,
                "weight_share": 0.011,
                "creation_factor": 0.9868,
                "appearance_weight": 1.0,
                "weight_rank": 12,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Marko Dmitrović": {
          "player_id": 94527,
          "position": "G",
          "position_depth": "G",
          "is_starter": true,
          "shirt_number": 13,
          "height": 194,
          "market_value": 650000,
          "stats": {
            "saves": 3,
            "goals_prevented": -0.0995,
            "rating": 7.0915,
            "minutes": 90,
            "total_pass": 26,
            "accurate_pass": 16,
            "total_long_balls": 14,
            "accurate_long_balls": 5,
            "touches": 39,
            "clearances": 1,
            "ball_recovery": 11,
            "high_claims": 2,
            "punches": 0.6163,
            "aerial_won": 0,
            "sweeper_actions": 2,
            "sweeper_accurate": 1,
            "saves_inside_box": 2,
            "possession_lost": 9.2295,
            "duels_won": 0,
            "duels_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "total_own_half_passes": 15,
            "accurate_own_half_passes": 13,
            "gk_engine_opponent_lambda": 0.7655,
            "shots_faced": 7.3,
            "expected_saves": 1.79,
            "high_pressure_saves": 0.61,
            "opponent_faced": "Chupete, David Larrubia",
            "matchup_zone": "Goalkeeper shot-stopping context",
            "antagonist_source": "formation_fallback",
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "finishing_factor": 1.0,
            "creation_factor": 1.0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 79.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 90,
                "rating": 5.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0002,
                "total_shots": 0,
                "total_pass": 22,
                "accurate_pass": 22,
                "clearances": 1,
                "ball_recovery": 10,
                "saves": 3,
                "goals_prevented": -0.9473
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 90,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0025,
                "total_shots": 0,
                "total_pass": 25,
                "accurate_pass": 19,
                "clearances": 3,
                "ball_recovery": 8,
                "goals_prevented": -1.0696
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 90,
                "rating": 8.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0007,
                "total_shots": 0,
                "total_pass": 33,
                "accurate_pass": 16,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 15,
                "saves": 4,
                "goals_prevented": 0.5262
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0007,
                "total_shots": 0,
                "total_pass": 27,
                "accurate_pass": 22,
                "duels_won": 1,
                "ball_recovery": 18,
                "saves": 2,
                "goals_prevented": -0.0954
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 7.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0003,
                "total_shots": 0,
                "total_pass": 24,
                "accurate_pass": 16,
                "interceptions": 1,
                "ball_recovery": 9,
                "saves": 7,
                "goals_prevented": 1.0653
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416306,
              "match_date": "2026-08-22",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0012,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 9,
                "clearances": 1,
                "ball_recovery": 8,
                "saves": 6,
                "goals_prevented": -0.0185
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421053,
              "match_date": "2026-08-16",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0013,
                "total_shots": 0,
                "total_pass": 19,
                "accurate_pass": 14,
                "ball_recovery": 10
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083696,
              "match_date": "2026-05-17",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 90,
                "rating": 7.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0043,
                "total_shots": 0,
                "total_pass": 27,
                "accurate_pass": 8,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 13,
                "saves": 6,
                "goals_prevented": -0.3181
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083629,
              "match_date": "2026-05-13",
              "home_team": "Espanyol",
              "away_team": "Athletic Club",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Athletic Club",
              "stats": {
                "minutes": 90,
                "rating": 8.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0031,
                "total_shots": 0,
                "total_pass": 34,
                "accurate_pass": 21,
                "ball_recovery": 11,
                "saves": 4,
                "goals_prevented": 1.7533
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083587,
              "match_date": "2026-05-09",
              "home_team": "Sevilla",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 5.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0029,
                "total_shots": 0,
                "total_pass": 29,
                "accurate_pass": 9,
                "clearances": 1,
                "ball_recovery": 14,
                "saves": 4,
                "goals_prevented": -0.7879
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 1310,
            "combined_rank_score": 568.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 180.0,
            "sofascore_rating": 7.2333,
            "sofascore_appearances": 3.0,
            "fifa_rank": 957.0,
            "fifa_overall": 79.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 2,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 7.0915,
            "source_file": "data/player_rankings.csv",
            "player_name": "Marko Dmitrović",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Mario Gila",
                  "ranking": 1305
                },
                {
                  "player_name": "Son Heung Min",
                  "ranking": 1306
                },
                {
                  "player_name": "Bazoumana Touré",
                  "ranking": 1307
                },
                {
                  "player_name": "Emil Audero",
                  "ranking": 1308
                },
                {
                  "player_name": "Lukáš Haraslín",
                  "ranking": 1309
                }
              ],
              "lower": [
                {
                  "player_name": "Tino Livramento",
                  "ranking": 1311
                },
                {
                  "player_name": "Yéremy Pino",
                  "ranking": 1312
                },
                {
                  "player_name": "Cecilio Waterman",
                  "ranking": 1313
                },
                {
                  "player_name": "Javier Guerra",
                  "ranking": 1314
                },
                {
                  "player_name": "Pedro Gonçalves",
                  "ranking": 1315
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.78,
          "history_matches": 44,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "G_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "accurateLongBalls",
              "totalOwnHalfPasses",
              "accurateOwnHalfPasses",
              "saves",
              "savedShotsFromInsideTheBox",
              "goodHighClaim",
              "punches",
              "aerialWon",
              "totalKeeperSweeper",
              "accurateKeeperSweeper",
              "totalClearance",
              "ballRecovery",
              "touches",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "goalkeeperValueNormalized",
              "goalsPrevented",
              "rating",
              "pass_accuracy",
              "long_ball_accuracy",
              "save_contribution",
              "inside_box_save_rate",
              "sweeper_accuracy",
              "sweeper_actions_p90",
              "distribution_accuracy",
              "commanding_index",
              "history_matches"
            ],
            "targets_predicted": [
              "saves",
              "goalsPrevented",
              "rating"
            ],
            "history_matches": 44,
            "data_confidence": 0.78,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 0.9979,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "minutes": 270.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 0.0,
              "prior_reliability": 0.2
            },
            "rationale": "XGBoost regressor (G_service) evaluated 44 historical appearances across 3 target models; FBref 2026-2027 prior blended (La Liga, Espanyol, rel: 0.20, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost G_service raw output over 3 target models",
              "stats": {
                "saves": 2.955,
                "goals_prevented": -0.0997,
                "rating": 7.0915,
                "minutes": 90.0,
                "total_pass": 25.5859,
                "accurate_pass": 16.4781,
                "total_long_balls": 14.4926,
                "accurate_long_balls": 5.4232,
                "touches": 38.9317,
                "clearances": 1.0705,
                "ball_recovery": 10.9523,
                "high_claims": 1.8074,
                "punches": 0.6176,
                "aerial_won": 0.2246,
                "sweeper_actions": 1.6054,
                "sweeper_accurate": 1.4353,
                "saves_inside_box": 2.0161,
                "possession_lost": 9.2489,
                "duels_won": 0.3388,
                "duels_lost": 0.2334,
                "total_contest": 0.0922,
                "won_contest": 0.0922,
                "fouls": 0.0,
                "fouls_drawn": 0.1592,
                "total_own_half_passes": 14.6673,
                "accurate_own_half_passes": 13.3167
              },
              "trace": {
                "model": {
                  "position_service": "G",
                  "schema_version": 5,
                  "trained_at": "2026-10-09T10:02:40.828652+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 199,
                    "rows": 6796
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1501,
                    "rating": 5.5
                  },
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1276,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1085,
                    "rating": 8.0
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0922,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0784,
                    "rating": 7.9
                  },
                  {
                    "match_date": "2026-08-22",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0666,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-08-16",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0566,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Osasuna",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0481,
                    "rating": 7.5
                  },
                  {
                    "match_date": "2026-05-13",
                    "opponent": "Athletic Club",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0409,
                    "rating": 8.9
                  },
                  {
                    "match_date": "2026-05-09",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0348,
                    "rating": 5.9
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 1.0,
                  "sweeper_actions_p90": 1.4299,
                  "distribution_accuracy": 0.8664,
                  "sweeper_accuracy": 0.735,
                  "goalkeeperValueNormalized": 0.0773,
                  "save_contribution": 3.3589,
                  "accurateKeeperSweeper": 1.4434
                },
                "per_target": [
                  {
                    "target": "saves",
                    "predicted": 2.9549918174743652,
                    "model_output": 2.955,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "distribution_accuracy",
                        "importance": 0.0415
                      },
                      {
                        "name": "sweeper_actions_p90",
                        "importance": 0.0394
                      },
                      {
                        "name": "pass_accuracy",
                        "importance": 0.0368
                      },
                      {
                        "name": "accurateOwnHalfPasses",
                        "importance": 0.0362
                      },
                      {
                        "name": "sweeper_accuracy",
                        "importance": 0.0362
                      }
                    ],
                    "decomposition": {
                      "base": 2.9286,
                      "items": [
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0395
                        },
                        {
                          "name": "goalkeeperValueNormalized",
                          "contribution": -0.0295
                        },
                        {
                          "name": "saves",
                          "contribution": 0.0202
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": 0.0163
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0156
                        }
                      ],
                      "others": 0.0433,
                      "total": 2.955,
                      "log_link": true,
                      "margin_base": 1.074537,
                      "item_margins": [
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.013586
                        },
                        {
                          "name": "goalkeeperValueNormalized",
                          "margin": -0.010264
                        },
                        {
                          "name": "saves",
                          "margin": 0.00704
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": 0.005659
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.005378
                        }
                      ],
                      "others_margin": 0.014731
                    }
                  },
                  {
                    "target": "goalsPrevented",
                    "predicted": -0.09970267862081528,
                    "model_output": -0.0997,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "punches",
                        "importance": 0.041
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0398
                      },
                      {
                        "name": "sweeper_accuracy",
                        "importance": 0.0385
                      },
                      {
                        "name": "goalkeeperValueNormalized",
                        "importance": 0.0374
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0356
                      }
                    ],
                    "decomposition": {
                      "base": -0.0166,
                      "items": [
                        {
                          "name": "commanding_index",
                          "contribution": -0.0303
                        },
                        {
                          "name": "inside_box_save_rate",
                          "contribution": -0.0232
                        },
                        {
                          "name": "punches",
                          "contribution": 0.0214
                        },
                        {
                          "name": "goalkeeperValueNormalized",
                          "contribution": -0.0209
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.0201
                        }
                      ],
                      "others": -0.0502,
                      "total": -0.0997,
                      "log_link": false,
                      "margin_base": -0.016613,
                      "item_margins": [
                        {
                          "name": "commanding_index",
                          "margin": -0.030343
                        },
                        {
                          "name": "inside_box_save_rate",
                          "margin": -0.023185
                        },
                        {
                          "name": "punches",
                          "margin": 0.021444
                        },
                        {
                          "name": "goalkeeperValueNormalized",
                          "margin": -0.020872
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.02012
                        }
                      ],
                      "others_margin": -0.050254
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 7.091531276702881,
                    "model_output": 7.0915,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "sweeper_actions_p90",
                        "importance": 0.0429
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0382
                      },
                      {
                        "name": "distribution_accuracy",
                        "importance": 0.0371
                      },
                      {
                        "name": "goalkeeperValueNormalized",
                        "importance": 0.036
                      },
                      {
                        "name": "accurateOwnHalfPasses",
                        "importance": 0.0359
                      }
                    ],
                    "decomposition": {
                      "base": 7.0091,
                      "items": [
                        {
                          "name": "long_ball_accuracy",
                          "contribution": 0.0323
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0294
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.0243
                        },
                        {
                          "name": "saves",
                          "contribution": 0.0167
                        },
                        {
                          "name": "sweeper_accuracy",
                          "contribution": 0.0126
                        }
                      ],
                      "others": -0.0329,
                      "total": 7.0915,
                      "log_link": false,
                      "margin_base": 7.009122,
                      "item_margins": [
                        {
                          "name": "long_ball_accuracy",
                          "margin": 0.032275
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.029433
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.024335
                        },
                        {
                          "name": "saves",
                          "margin": 0.016656
                        },
                        {
                          "name": "sweeper_accuracy",
                          "margin": 0.01255
                        }
                      ],
                      "others_margin": -0.032839
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 44,
                  "role_matches": 44,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9979, quality 0.437)",
              "stats": {
                "saves": 2.9488,
                "goals_prevented": -0.0995,
                "rating": 7.0915,
                "minutes": 90.0,
                "total_pass": 25.5322,
                "accurate_pass": 16.4435,
                "total_long_balls": 14.4622,
                "accurate_long_balls": 5.4118,
                "touches": 38.8499,
                "clearances": 1.0683,
                "ball_recovery": 10.9293,
                "high_claims": 1.8036,
                "punches": 0.6163,
                "aerial_won": 0.2241,
                "sweeper_actions": 1.602,
                "sweeper_accurate": 1.4323,
                "saves_inside_box": 2.0119,
                "possession_lost": 9.2295,
                "duels_won": 0.3381,
                "duels_lost": 0.2329,
                "total_contest": 0.092,
                "won_contest": 0.092,
                "fouls": 0.0,
                "fouls_drawn": 0.1589,
                "total_own_half_passes": 14.6365,
                "accurate_own_half_passes": 13.2887
              },
              "params": {
                "market_value_eur": 650000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9979,
                "reference_quality": 0.505,
                "history_matches": 44,
                "history_shrink": 0.102,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0133)",
              "stats": {
                "saves": 2.9672,
                "goals_prevented": -0.0995,
                "rating": 7.0915,
                "minutes": 90.0,
                "total_pass": 25.5322,
                "accurate_pass": 16.4435,
                "total_long_balls": 14.4622,
                "accurate_long_balls": 5.4118,
                "touches": 38.8499,
                "clearances": 1.0683,
                "ball_recovery": 10.9293,
                "high_claims": 1.8036,
                "punches": 0.6163,
                "aerial_won": 0.2241,
                "sweeper_actions": 1.602,
                "sweeper_accurate": 1.4323,
                "saves_inside_box": 2.0119,
                "possession_lost": 9.2295,
                "duels_won": 0.3381,
                "duels_lost": 0.2329,
                "total_contest": 0.092,
                "won_contest": 0.092,
                "fouls": 0.0,
                "fouls_drawn": 0.1568,
                "total_own_half_passes": 14.6365,
                "accurate_own_half_passes": 13.2887
              },
              "params": {
                "blend_weight": 0.0133,
                "history_matches": 44,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 1.0,
                "prior_reliability": 0.2,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "saves",
                  "before": 2.9488,
                  "after": 2.9672
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "saves": 2.9672,
                "goals_prevented": -0.0995,
                "rating": 7.0915,
                "minutes": 90.0,
                "total_pass": 25.5322,
                "accurate_pass": 16.4435,
                "total_long_balls": 14.4622,
                "accurate_long_balls": 5.4118,
                "touches": 38.8499,
                "clearances": 1.0683,
                "ball_recovery": 10.9293,
                "high_claims": 1.8036,
                "punches": 0.6163,
                "aerial_won": 0.2241,
                "sweeper_actions": 1.602,
                "sweeper_accurate": 1.4323,
                "saves_inside_box": 2.0119,
                "possession_lost": 9.2295,
                "duels_won": 0.3381,
                "duels_lost": 0.2329,
                "total_contest": 0.092,
                "won_contest": 0.092,
                "fouls": 0.0,
                "fouls_drawn": 0.1568,
                "total_own_half_passes": 14.6365,
                "accurate_own_half_passes": 13.2887
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "saves": 2.9672,
                "goals_prevented": -0.0995,
                "rating": 7.0915,
                "minutes": 90.0,
                "total_pass": 25.5322,
                "accurate_pass": 16.4435,
                "total_long_balls": 14.4622,
                "accurate_long_balls": 5.4118,
                "touches": 38.8499,
                "clearances": 1.0683,
                "ball_recovery": 10.9293,
                "high_claims": 1.8036,
                "punches": 0.6163,
                "aerial_won": 0.2241,
                "sweeper_actions": 1.602,
                "sweeper_accurate": 1.4323,
                "saves_inside_box": 2.0119,
                "possession_lost": 9.2295,
                "duels_won": 0.3381,
                "duels_lost": 0.2329,
                "total_contest": 0.092,
                "won_contest": 0.092,
                "fouls": 0.0,
                "fouls_drawn": 0.1568,
                "total_own_half_passes": 14.6365,
                "accurate_own_half_passes": 13.2887,
                "gk_engine_opponent_lambda": 0.7655,
                "shots_faced": 7.3,
                "expected_saves": 1.79,
                "high_pressure_saves": 0.61,
                "opponent_faced": "Chupete, David Larrubia",
                "matchup_zone": "Goalkeeper shot-stopping context",
                "antagonist_source": "formation_fallback"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Chupete, David Larrubia",
                  "matchup_zone": "Goalkeeper shot-stopping context",
                  "opponent_lambda": 0.7655
                }
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "saves": 2.9672,
                "goals_prevented": -0.0995,
                "rating": 7.0915,
                "minutes": 90.0,
                "total_pass": 25.5322,
                "accurate_pass": 16.4435,
                "total_long_balls": 14.4622,
                "accurate_long_balls": 5.4118,
                "touches": 38.8499,
                "clearances": 1.0683,
                "ball_recovery": 10.9293,
                "high_claims": 1.8036,
                "punches": 0.6163,
                "aerial_won": 0.2241,
                "sweeper_actions": 1.602,
                "sweeper_accurate": 1.4323,
                "saves_inside_box": 2.0119,
                "possession_lost": 9.2295,
                "duels_won": 0.3381,
                "duels_lost": 0.2329,
                "total_contest": 0.092,
                "won_contest": 0.092,
                "fouls": 0.0,
                "fouls_drawn": 0.1568,
                "total_own_half_passes": 14.6365,
                "accurate_own_half_passes": 13.2887,
                "gk_engine_opponent_lambda": 0.7655,
                "shots_faced": 7.3,
                "expected_saves": 1.79,
                "high_pressure_saves": 0.61,
                "opponent_faced": "Chupete, David Larrubia",
                "matchup_zone": "Goalkeeper shot-stopping context",
                "antagonist_source": "formation_fallback",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 1.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 2 by projected rating, fifa_overall 79.0; not used by the projection)",
              "stats": {
                "saves": 2.9672,
                "goals_prevented": -0.0995,
                "rating": 7.0915,
                "minutes": 90.0,
                "total_pass": 25.5322,
                "accurate_pass": 16.4435,
                "total_long_balls": 14.4622,
                "accurate_long_balls": 5.4118,
                "touches": 38.8499,
                "clearances": 1.0683,
                "ball_recovery": 10.9293,
                "high_claims": 1.8036,
                "punches": 0.6163,
                "aerial_won": 0.2241,
                "sweeper_actions": 1.602,
                "sweeper_accurate": 1.4323,
                "saves_inside_box": 2.0119,
                "possession_lost": 9.2295,
                "duels_won": 0.3381,
                "duels_lost": 0.2329,
                "total_contest": 0.092,
                "won_contest": 0.092,
                "fouls": 0.0,
                "fouls_drawn": 0.1568,
                "total_own_half_passes": 14.6365,
                "accurate_own_half_passes": 13.2887,
                "gk_engine_opponent_lambda": 0.7655,
                "shots_faced": 7.3,
                "expected_saves": 1.79,
                "high_pressure_saves": 0.61,
                "opponent_faced": "Chupete, David Larrubia",
                "matchup_zone": "Goalkeeper shot-stopping context",
                "antagonist_source": "formation_fallback",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 1.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0,
                "fifa_overall": 79.0
              },
              "params": {
                "match_squad_rank": 2,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 1310,
                "fifa_rank": 957.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 79.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "saves": 2.9672,
                "goals_prevented": -0.0995,
                "rating": 7.0915,
                "minutes": 90.0,
                "total_pass": 25.5322,
                "accurate_pass": 16.4435,
                "total_long_balls": 14.4622,
                "accurate_long_balls": 5.4118,
                "touches": 38.8499,
                "clearances": 1.0683,
                "ball_recovery": 10.9293,
                "high_claims": 1.8036,
                "punches": 0.6163,
                "aerial_won": 0.2241,
                "sweeper_actions": 1.602,
                "sweeper_accurate": 1.4323,
                "saves_inside_box": 2.0119,
                "possession_lost": 9.2295,
                "duels_won": 0.3381,
                "duels_lost": 0.2329,
                "total_contest": 0.092,
                "won_contest": 0.092,
                "fouls": 0.0,
                "fouls_drawn": 0.1568,
                "total_own_half_passes": 14.6365,
                "accurate_own_half_passes": 13.2887,
                "gk_engine_opponent_lambda": 0.7655,
                "shots_faced": 7.3,
                "expected_saves": 1.79,
                "high_pressure_saves": 0.61,
                "opponent_faced": "Chupete, David Larrubia",
                "matchup_zone": "Goalkeeper shot-stopping context",
                "antagonist_source": "formation_fallback",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 1.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0,
                "fifa_overall": 79.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.0,
                "scorer_weight": 0.0,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0,
                "finishing_factor": 1.0,
                "appearance_weight": 1.0,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "saves": 2.9672,
                "goals_prevented": -0.0995,
                "rating": 7.0915,
                "minutes": 90.0,
                "total_pass": 25.5322,
                "accurate_pass": 16.4435,
                "total_long_balls": 14.4622,
                "accurate_long_balls": 5.4118,
                "touches": 38.8499,
                "clearances": 1.0683,
                "ball_recovery": 10.9293,
                "high_claims": 1.8036,
                "punches": 0.6163,
                "aerial_won": 0.2241,
                "sweeper_actions": 1.602,
                "sweeper_accurate": 1.4323,
                "saves_inside_box": 2.0119,
                "possession_lost": 9.2295,
                "duels_won": 0.3381,
                "duels_lost": 0.2329,
                "total_contest": 0.092,
                "won_contest": 0.092,
                "fouls": 0.0,
                "fouls_drawn": 0.1568,
                "total_own_half_passes": 14.6365,
                "accurate_own_half_passes": 13.2887,
                "gk_engine_opponent_lambda": 0.7655,
                "shots_faced": 7.3,
                "expected_saves": 1.79,
                "high_pressure_saves": 0.61,
                "opponent_faced": "Chupete, David Larrubia",
                "matchup_zone": "Goalkeeper shot-stopping context",
                "antagonist_source": "formation_fallback",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 1.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0,
                "fifa_overall": 79.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0,
                "provider_weight": 0.0,
                "squad_weight_total": 0.9581,
                "weight_share": 0.0,
                "creation_factor": 1.0,
                "appearance_weight": 1.0,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Omar El Hilali": {
          "player_id": 1064026,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 23,
          "height": 183,
          "market_value": 15900000,
          "stats": {
            "interceptions": 1,
            "tackles": 2,
            "tackles_won": 1,
            "clearances": 4,
            "aerial_won": 1,
            "total_shots": 0,
            "rating": 6.7918,
            "minutes": 88,
            "total_pass": 29,
            "accurate_pass": 23,
            "duels_won": 5,
            "total_long_balls": 4,
            "accurate_long_balls": 2,
            "total_own_half_passes": 16,
            "accurate_own_half_passes": 13,
            "total_opp_half_passes": 13,
            "accurate_opp_half_passes": 10,
            "crosses_total": 3,
            "crosses_accurate": 1,
            "touches": 55,
            "possession_lost": 11.3322,
            "dispossessed": 0.0514,
            "duels_lost": 4,
            "aerial_lost": 1,
            "total_contest": 1,
            "won_contest": 0,
            "ball_recovery": 2,
            "challenges_lost": 1,
            "fouls": 2,
            "fouls_drawn": 1,
            "blocks": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.1266,
            "assists": 0,
            "expected_goals": 0.0,
            "expected_assists": 0.1318,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 11,
            "total_progression": 34,
            "progressive_carries": 1,
            "key_pass": 1,
            "shots_off_target": 0,
            "tackles_in_zone": 2.1,
            "tackles_won_in_zone": 1.8,
            "interceptions_in_zone": 0.9,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.683,
            "opponent_faced": "Joaquín Muñoz",
            "pressing_zone": "Left Mid vs Right Back — Wide Channel",
            "matchup_zone": "Left Mid vs Right Back — Wide Channel",
            "antagonist_source": "defensive_duel",
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.1235,
            "finishing_factor": 1.0,
            "creation_factor": 0.9855,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 90,
                "rating": 7.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0217,
                "total_shots": 0,
                "total_pass": 22,
                "accurate_pass": 16,
                "key_pass": 1,
                "clearances": 3,
                "aerial_won": 4,
                "duels_won": 7,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 90,
                "rating": 8.2,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_assists": 0.7313,
                "total_shots": 0,
                "total_pass": 33,
                "accurate_pass": 30,
                "key_pass": 1,
                "tackles": 5,
                "tackles_won": 3,
                "interceptions": 1,
                "clearances": 10,
                "aerial_won": 1,
                "duels_won": 7,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 75,
                "rating": 7.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0835,
                "total_shots": 0,
                "total_pass": 8,
                "accurate_pass": 5,
                "key_pass": 1,
                "tackles": 4,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 6,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 7.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0954,
                "total_shots": 0,
                "total_pass": 42,
                "accurate_pass": 33,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 3,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416306,
              "match_date": "2026-08-22",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0098,
                "total_shots": 0,
                "total_pass": 19,
                "accurate_pass": 17,
                "tackles": 1,
                "interceptions": 1,
                "clearances": 5,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421053,
              "match_date": "2026-08-16",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0066,
                "total_shots": 0,
                "total_pass": 31,
                "accurate_pass": 26,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 4,
                "aerial_won": 2,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083719,
              "match_date": "2026-05-23",
              "home_team": "Espanyol",
              "away_team": "Real Sociedad",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 11,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0021,
                "total_shots": 0,
                "total_pass": 3,
                "accurate_pass": 3,
                "tackles": 1,
                "clearances": 2,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083696,
              "match_date": "2026-05-17",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0035,
                "total_shots": 0,
                "total_pass": 13,
                "accurate_pass": 10,
                "tackles": 3,
                "tackles_won": 3,
                "interceptions": 2,
                "clearances": 9,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083629,
              "match_date": "2026-05-13",
              "home_team": "Espanyol",
              "away_team": "Athletic Club",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Athletic Club",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0097,
                "total_shots": 0,
                "total_pass": 62,
                "accurate_pass": 47,
                "tackles": 1,
                "clearances": 4,
                "aerial_won": 3,
                "duels_won": 4,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083587,
              "match_date": "2026-05-09",
              "home_team": "Sevilla",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.033,
                "total_shots": 0,
                "total_pass": 27,
                "accurate_pass": 13,
                "key_pass": 1,
                "tackles": 5,
                "tackles_won": 4,
                "interceptions": 3,
                "clearances": 4,
                "aerial_won": 2,
                "duels_won": 7,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 3547,
            "combined_rank_score": 1516.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 622.0,
            "sofascore_rating": 6.7667,
            "sofascore_appearances": 3.0,
            "fifa_rank": 2410.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 8,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7918,
            "source_file": "data/player_rankings.csv",
            "player_name": "Omar El Hilali",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Sergio Camello",
                  "ranking": 3542
                },
                {
                  "player_name": "Mio Backhaus",
                  "ranking": 3543
                },
                {
                  "player_name": "Jindřich Staněk",
                  "ranking": 3544
                },
                {
                  "player_name": "Janis Blaswich",
                  "ranking": 3545
                },
                {
                  "player_name": "Jobe Bellingham",
                  "ranking": 3546
                }
              ],
              "lower": [
                {
                  "player_name": "Matt Turner",
                  "ranking": 3548
                },
                {
                  "player_name": "Jack Rudoni",
                  "ranking": 3549
                },
                {
                  "player_name": "Nemanja Matić",
                  "ranking": 3550
                },
                {
                  "player_name": "Reiss Nelson",
                  "ranking": 3551
                },
                {
                  "player_name": "Tolu Arokodare",
                  "ranking": 3552
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.78,
          "history_matches": 42,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 42,
            "data_confidence": 0.78,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 1.0027,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "minutes": 270.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "shots_per90": 0.0,
              "prior_reliability": 0.2
            },
            "rationale": "XGBoost regressor (D_service) evaluated 42 historical appearances across 7 target models; FBref 2026-2027 prior blended (La Liga, Espanyol, rel: 0.20, gls/90: 0.0, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 1.1168,
                "tackles": 1.7792,
                "tackles_won": 1.1139,
                "clearances": 4.0465,
                "aerial_won": 1.4177,
                "total_shots": 0.3998,
                "rating": 6.7918,
                "minutes": 87.89,
                "total_pass": 28.8825,
                "accurate_pass": 22.9418,
                "duels_won": 4.8726,
                "total_long_balls": 3.703,
                "accurate_long_balls": 1.5991,
                "total_own_half_passes": 15.5583,
                "accurate_own_half_passes": 13.4629,
                "total_opp_half_passes": 13.3243,
                "accurate_opp_half_passes": 9.479,
                "crosses_total": 2.9627,
                "crosses_accurate": 0.8611,
                "touches": 54.4662,
                "possession_lost": 11.3017,
                "dispossessed": 0.0513,
                "duels_lost": 3.9615,
                "aerial_lost": 0.9269,
                "total_contest": 0.6433,
                "won_contest": 0.3819,
                "ball_recovery": 2.2265,
                "challenges_lost": 0.5832,
                "fouls": 2.495,
                "fouls_drawn": 0.7763,
                "blocks": 0.6374,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.1281,
                "assist_rate": 0.1281,
                "expected_goals": 0.0,
                "expected_assists": 0.1289,
                "shots_on_target": 0.0,
                "big_chances_created": 0.1435,
                "xgot": 0.0,
                "ball_carries": 10.5112,
                "total_progression": 33.8803,
                "progressive_carries": 0.9278,
                "key_pass": 0.567,
                "shots_off_target": 0.3998
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1502,
                    "rating": 7.1
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1276,
                    "rating": 8.2
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 75.0,
                    "is_starting": true,
                    "weight": 0.1085,
                    "rating": 7.4
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0922,
                    "rating": 7.6
                  },
                  {
                    "match_date": "2026-08-22",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0784,
                    "rating": 6.0
                  },
                  {
                    "match_date": "2026-08-16",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0666,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-05-23",
                    "opponent": "Real Sociedad",
                    "minutes": 11.0,
                    "is_starting": false,
                    "weight": 0.0566,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Osasuna",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0481,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-05-13",
                    "opponent": "Athletic Club",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0409,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-05-09",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0348,
                    "rating": 6.6
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 1.0,
                  "totalClearance": 4.2892,
                  "aerialWon": 1.5108,
                  "totalClearance_p90": 5.1898,
                  "totalTackle": 2.0666,
                  "totalPass": 27.0176
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 1.1168314218521118,
                    "model_output": 1.1168,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1088
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0511
                        },
                        {
                          "name": "ballRecovery_p90",
                          "contribution": -0.0314
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0252
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.0173
                        }
                      ],
                      "others": 0.0885,
                      "total": 1.1168,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.119435
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.051584
                        },
                        {
                          "name": "ballRecovery_p90",
                          "margin": -0.031334
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.025238
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.016964
                        }
                      ],
                      "others_margin": 0.082609
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 1.779239296913147,
                    "model_output": 1.7792,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.196
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.1013
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": 0.075
                        },
                        {
                          "name": "press_vulnerability",
                          "contribution": -0.0708
                        },
                        {
                          "name": "totalTackle",
                          "contribution": 0.0707
                        }
                      ],
                      "others": 0.0131,
                      "total": 1.7792,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.131544
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.061781
                        },
                        {
                          "name": "defensive_actions",
                          "margin": 0.043377
                        },
                        {
                          "name": "press_vulnerability",
                          "margin": -0.040926
                        },
                        {
                          "name": "totalTackle",
                          "margin": 0.040868
                        }
                      ],
                      "others_margin": 0.007454
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 1.1139415502548218,
                    "model_output": 1.1139,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1231
                        },
                        {
                          "name": "totalTackle",
                          "contribution": 0.0767
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": 0.0771
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.0371
                        },
                        {
                          "name": "press_vulnerability",
                          "contribution": -0.0288
                        }
                      ],
                      "others": -0.0257,
                      "total": 1.1139,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.134559
                        },
                        {
                          "name": "totalTackle",
                          "margin": 0.075499
                        },
                        {
                          "name": "defensive_actions",
                          "margin": 0.070599
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.032282
                        },
                        {
                          "name": "press_vulnerability",
                          "margin": -0.024965
                        }
                      ],
                      "others_margin": -0.022656
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 4.046515464782715,
                    "model_output": 4.0465,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.4573
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.3054
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.2868
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.2036
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.1053
                        }
                      ],
                      "others": 0.0209,
                      "total": 4.0465,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.124422
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.075234
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.070477
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.050539
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.025812
                        }
                      ],
                      "others_margin": 0.005166
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 1.4176512956619263,
                    "model_output": 1.4177,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1578
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.1245
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.1065
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": 0.0671
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0368
                        }
                      ],
                      "others": -0.1704,
                      "total": 1.4177,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.108109
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.077774
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.066147
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": 0.042198
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.022908
                        }
                      ],
                      "others_margin": -0.113578
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.3997921645641327,
                    "model_output": 0.3998,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": -0.1261
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0533
                        },
                        {
                          "name": "rating",
                          "contribution": 0.0343
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": -0.0099
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.0092
                        }
                      ],
                      "others": -0.0137,
                      "total": 0.3998,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": -0.126128
                        },
                        {
                          "name": "is_starting_11",
                          "margin": 0.053261
                        },
                        {
                          "name": "rating",
                          "margin": 0.034256
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": -0.009869
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.009159
                        }
                      ],
                      "others_margin": -0.013701
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.79177188873291,
                    "model_output": 6.7918,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "rating",
                          "contribution": 0.0269
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0169
                        },
                        {
                          "name": "accuratePass",
                          "contribution": -0.0149
                        },
                        {
                          "name": "touches",
                          "contribution": 0.0134
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0129
                        }
                      ],
                      "others": -0.0147,
                      "total": 6.7918,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "rating",
                          "margin": 0.026928
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.016935
                        },
                        {
                          "name": "accuratePass",
                          "margin": -0.014934
                        },
                        {
                          "name": "touches",
                          "margin": 0.013379
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.012882
                        }
                      ],
                      "others_margin": -0.014679
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 42,
                  "role_matches": 38,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 1.0027, quality 0.589)",
              "stats": {
                "interceptions": 1.1198,
                "tackles": 1.784,
                "tackles_won": 1.1169,
                "clearances": 4.0574,
                "aerial_won": 1.4215,
                "total_shots": 0.4009,
                "rating": 6.7918,
                "minutes": 87.89,
                "total_pass": 28.9605,
                "accurate_pass": 23.0037,
                "duels_won": 4.8858,
                "total_long_balls": 3.713,
                "accurate_long_balls": 1.6034,
                "total_own_half_passes": 15.6003,
                "accurate_own_half_passes": 13.4992,
                "total_opp_half_passes": 13.3603,
                "accurate_opp_half_passes": 9.5046,
                "crosses_total": 2.9707,
                "crosses_accurate": 0.8634,
                "touches": 54.6133,
                "possession_lost": 11.3322,
                "dispossessed": 0.0514,
                "duels_lost": 3.9722,
                "aerial_lost": 0.9294,
                "total_contest": 0.645,
                "won_contest": 0.3829,
                "ball_recovery": 2.2325,
                "challenges_lost": 0.5848,
                "fouls": 2.5017,
                "fouls_drawn": 0.7784,
                "blocks": 0.6391,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.1284,
                "assist_rate": 0.1284,
                "expected_goals": 0.0,
                "expected_assists": 0.1292,
                "shots_on_target": 0.0,
                "big_chances_created": 0.1439,
                "xgot": 0.0,
                "ball_carries": 10.5396,
                "total_progression": 33.9718,
                "progressive_carries": 0.9303,
                "key_pass": 0.5685,
                "shots_off_target": 0.4009
              },
              "params": {
                "market_value_eur": 15900000,
                "quality_factor": 0.5889,
                "boost_factor": 1.0027,
                "reference_quality": 0.505,
                "history_matches": 42,
                "history_shrink": 0.1064,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0138)",
              "stats": {
                "interceptions": 1.1223,
                "tackles": 1.784,
                "tackles_won": 1.1105,
                "clearances": 4.0574,
                "aerial_won": 1.4215,
                "total_shots": 0.3954,
                "rating": 6.7918,
                "minutes": 87.89,
                "total_pass": 28.9605,
                "accurate_pass": 23.0037,
                "duels_won": 4.8858,
                "total_long_balls": 3.713,
                "accurate_long_balls": 1.6034,
                "total_own_half_passes": 15.6003,
                "accurate_own_half_passes": 13.4992,
                "total_opp_half_passes": 13.3603,
                "accurate_opp_half_passes": 9.5046,
                "crosses_total": 2.9791,
                "crosses_accurate": 0.8634,
                "touches": 54.6133,
                "possession_lost": 11.3322,
                "dispossessed": 0.0514,
                "duels_lost": 3.9722,
                "aerial_lost": 0.9294,
                "total_contest": 0.645,
                "won_contest": 0.3829,
                "ball_recovery": 2.2325,
                "challenges_lost": 0.5848,
                "fouls": 2.4986,
                "fouls_drawn": 0.7676,
                "blocks": 0.6391,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.1266,
                "assist_rate": 0.1266,
                "expected_goals": 0.0,
                "expected_assists": 0.1292,
                "shots_on_target": 0.0,
                "big_chances_created": 0.1439,
                "xgot": 0.0,
                "ball_carries": 10.5396,
                "total_progression": 33.9718,
                "progressive_carries": 0.9303,
                "key_pass": 0.5685,
                "shots_off_target": 0.4009
              },
              "params": {
                "blend_weight": 0.0138,
                "history_matches": 42,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.9766,
                "prior_reliability": 0.2,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "wasFouled",
                  "before": 0.7784,
                  "after": 0.7676
                },
                {
                  "stat": "totalCross",
                  "before": 2.9707,
                  "after": 2.9791
                },
                {
                  "stat": "wonTackle",
                  "before": 1.1169,
                  "after": 1.1105
                },
                {
                  "stat": "totalShots",
                  "before": 0.4009,
                  "after": 0.3954
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 1.1223,
                "tackles": 1.784,
                "tackles_won": 1.1105,
                "clearances": 4.0574,
                "aerial_won": 1.4215,
                "total_shots": 0.4009,
                "rating": 6.7918,
                "minutes": 87.89,
                "total_pass": 28.9605,
                "accurate_pass": 23.0037,
                "duels_won": 4.8858,
                "total_long_balls": 3.713,
                "accurate_long_balls": 1.6034,
                "total_own_half_passes": 15.6003,
                "accurate_own_half_passes": 13.4992,
                "total_opp_half_passes": 13.3603,
                "accurate_opp_half_passes": 9.5046,
                "crosses_total": 2.9791,
                "crosses_accurate": 0.8634,
                "touches": 54.6133,
                "possession_lost": 11.3322,
                "dispossessed": 0.0514,
                "duels_lost": 3.9722,
                "aerial_lost": 0.9294,
                "total_contest": 0.645,
                "won_contest": 0.3829,
                "ball_recovery": 2.2325,
                "challenges_lost": 0.5848,
                "fouls": 2.4986,
                "fouls_drawn": 0.7676,
                "blocks": 0.6391,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.1266,
                "assist_rate": 0.1266,
                "expected_goals": 0.0,
                "expected_assists": 0.1292,
                "shots_on_target": 0.0,
                "big_chances_created": 0.1439,
                "xgot": 0.0,
                "ball_carries": 10.5396,
                "total_progression": 33.9718,
                "progressive_carries": 0.9303,
                "key_pass": 0.5685,
                "shots_off_target": 0.4009
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "interceptions": 1.1223,
                "tackles": 1.784,
                "tackles_won": 1.1105,
                "clearances": 4.0574,
                "aerial_won": 1.4215,
                "total_shots": 0.4009,
                "rating": 6.7918,
                "minutes": 87.89,
                "total_pass": 28.9605,
                "accurate_pass": 23.0037,
                "duels_won": 4.8858,
                "total_long_balls": 3.713,
                "accurate_long_balls": 1.6034,
                "total_own_half_passes": 15.6003,
                "accurate_own_half_passes": 13.4992,
                "total_opp_half_passes": 13.3603,
                "accurate_opp_half_passes": 9.5046,
                "crosses_total": 2.9791,
                "crosses_accurate": 0.8634,
                "touches": 54.6133,
                "possession_lost": 11.3322,
                "dispossessed": 0.0514,
                "duels_lost": 3.9722,
                "aerial_lost": 0.9294,
                "total_contest": 0.645,
                "won_contest": 0.3829,
                "ball_recovery": 2.2325,
                "challenges_lost": 0.5848,
                "fouls": 2.4986,
                "fouls_drawn": 0.7676,
                "blocks": 0.6391,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.1266,
                "assist_rate": 0.1266,
                "expected_goals": 0.0,
                "expected_assists": 0.1292,
                "shots_on_target": 0.0,
                "big_chances_created": 0.1439,
                "xgot": 0.0,
                "ball_carries": 10.5396,
                "total_progression": 33.9718,
                "progressive_carries": 0.9303,
                "key_pass": 0.5685,
                "shots_off_target": 0.4009,
                "tackles_in_zone": 2.1,
                "tackles_won_in_zone": 1.8,
                "interceptions_in_zone": 0.9,
                "clearances_in_zone": 0.5,
                "aerial_duels_won": 1.1,
                "defensive_success_rate": 0.683,
                "opponent_faced": "Joaquín Muñoz",
                "pressing_zone": "Left Mid vs Right Back — Wide Channel",
                "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                "antagonist_source": "defensive_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Joaquín Muñoz",
                  "matchup_zone": "Left Mid vs Right Back — Wide Channel"
                }
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "interceptions": 1.1223,
                "tackles": 1.784,
                "tackles_won": 1.1105,
                "clearances": 4.0574,
                "aerial_won": 1.4215,
                "total_shots": 0.4009,
                "rating": 6.7918,
                "minutes": 87.89,
                "total_pass": 28.9605,
                "accurate_pass": 23.0037,
                "duels_won": 4.8858,
                "total_long_balls": 3.713,
                "accurate_long_balls": 1.6034,
                "total_own_half_passes": 15.6003,
                "accurate_own_half_passes": 13.4992,
                "total_opp_half_passes": 13.3603,
                "accurate_opp_half_passes": 9.5046,
                "crosses_total": 2.9791,
                "crosses_accurate": 0.8634,
                "touches": 54.6133,
                "possession_lost": 11.3322,
                "dispossessed": 0.0514,
                "duels_lost": 3.9722,
                "aerial_lost": 0.9294,
                "total_contest": 0.645,
                "won_contest": 0.3829,
                "ball_recovery": 2.2325,
                "challenges_lost": 0.5848,
                "fouls": 2.4986,
                "fouls_drawn": 0.7676,
                "blocks": 0.6391,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.1266,
                "assists": 0,
                "expected_goals": 0.0,
                "expected_assists": 0.1318,
                "shots_on_target": 0.0,
                "big_chances_created": 0.1439,
                "xgot": 0.0,
                "ball_carries": 10.5396,
                "total_progression": 33.9718,
                "progressive_carries": 0.9303,
                "key_pass": 0.5685,
                "shots_off_target": 0.4009,
                "tackles_in_zone": 2.1,
                "tackles_won_in_zone": 1.8,
                "interceptions_in_zone": 0.9,
                "clearances_in_zone": 0.5,
                "aerial_duels_won": 1.1,
                "defensive_success_rate": 0.683,
                "opponent_faced": "Joaquín Muñoz",
                "pressing_zone": "Left Mid vs Right Back — Wide Channel",
                "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 0.9855
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 8 by projected rating, fifa_overall 75.0; not used by the projection)",
              "stats": {
                "interceptions": 1.1223,
                "tackles": 1.784,
                "tackles_won": 1.1105,
                "clearances": 4.0574,
                "aerial_won": 1.4215,
                "total_shots": 0.4009,
                "rating": 6.7918,
                "minutes": 87.89,
                "total_pass": 28.9605,
                "accurate_pass": 23.0037,
                "duels_won": 4.8858,
                "total_long_balls": 3.713,
                "accurate_long_balls": 1.6034,
                "total_own_half_passes": 15.6003,
                "accurate_own_half_passes": 13.4992,
                "total_opp_half_passes": 13.3603,
                "accurate_opp_half_passes": 9.5046,
                "crosses_total": 2.9791,
                "crosses_accurate": 0.8634,
                "touches": 54.6133,
                "possession_lost": 11.3322,
                "dispossessed": 0.0514,
                "duels_lost": 3.9722,
                "aerial_lost": 0.9294,
                "total_contest": 0.645,
                "won_contest": 0.3829,
                "ball_recovery": 2.2325,
                "challenges_lost": 0.5848,
                "fouls": 2.4986,
                "fouls_drawn": 0.7676,
                "blocks": 0.6391,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.1266,
                "assists": 0,
                "expected_goals": 0.0,
                "expected_assists": 0.1318,
                "shots_on_target": 0.0,
                "big_chances_created": 0.1439,
                "xgot": 0.0,
                "ball_carries": 10.5396,
                "total_progression": 33.9718,
                "progressive_carries": 0.9303,
                "key_pass": 0.5685,
                "shots_off_target": 0.4009,
                "tackles_in_zone": 2.1,
                "tackles_won_in_zone": 1.8,
                "interceptions_in_zone": 0.9,
                "clearances_in_zone": 0.5,
                "aerial_duels_won": 1.1,
                "defensive_success_rate": 0.683,
                "opponent_faced": "Joaquín Muñoz",
                "pressing_zone": "Left Mid vs Right Back — Wide Channel",
                "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 0.9855,
                "fifa_overall": 75.0
              },
              "params": {
                "match_squad_rank": 8,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3547,
                "fifa_rank": 2410.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 75.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "interceptions": 1.1223,
                "tackles": 1.784,
                "tackles_won": 1.1105,
                "clearances": 4.0574,
                "aerial_won": 1.4215,
                "total_shots": 0.4009,
                "rating": 6.7918,
                "minutes": 87.89,
                "total_pass": 28.9605,
                "accurate_pass": 23.0037,
                "duels_won": 4.8858,
                "total_long_balls": 3.713,
                "accurate_long_balls": 1.6034,
                "total_own_half_passes": 15.6003,
                "accurate_own_half_passes": 13.4992,
                "total_opp_half_passes": 13.3603,
                "accurate_opp_half_passes": 9.5046,
                "crosses_total": 2.9791,
                "crosses_accurate": 0.8634,
                "touches": 54.6133,
                "possession_lost": 11.3322,
                "dispossessed": 0.0514,
                "duels_lost": 3.9722,
                "aerial_lost": 0.9294,
                "total_contest": 0.645,
                "won_contest": 0.3829,
                "ball_recovery": 2.2325,
                "challenges_lost": 0.5848,
                "fouls": 2.4986,
                "fouls_drawn": 0.7676,
                "blocks": 0.6391,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.1266,
                "assists": 0,
                "expected_goals": 0.0,
                "expected_assists": 0.1318,
                "shots_on_target": 0.0,
                "big_chances_created": 0.1439,
                "xgot": 0.0,
                "ball_carries": 10.5396,
                "total_progression": 33.9718,
                "progressive_carries": 0.9303,
                "key_pass": 0.5685,
                "shots_off_target": 0.4009,
                "tackles_in_zone": 2.1,
                "tackles_won_in_zone": 1.8,
                "interceptions_in_zone": 0.9,
                "clearances_in_zone": 0.5,
                "aerial_duels_won": 1.1,
                "defensive_success_rate": 0.683,
                "opponent_faced": "Joaquín Muñoz",
                "pressing_zone": "Left Mid vs Right Back — Wide Channel",
                "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0,
                "creation_factor": 0.9855,
                "fifa_overall": 75.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.0,
                "scorer_weight": 0.001,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0006,
                "finishing_factor": 1.0,
                "appearance_weight": 1.0,
                "weight_rank": 12,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "interceptions": 1.1223,
                "tackles": 1.784,
                "tackles_won": 1.1105,
                "clearances": 4.0574,
                "aerial_won": 1.4215,
                "total_shots": 0.4009,
                "rating": 6.7918,
                "minutes": 87.89,
                "total_pass": 28.9605,
                "accurate_pass": 23.0037,
                "duels_won": 4.8858,
                "total_long_balls": 3.713,
                "accurate_long_balls": 1.6034,
                "total_own_half_passes": 15.6003,
                "accurate_own_half_passes": 13.4992,
                "total_opp_half_passes": 13.3603,
                "accurate_opp_half_passes": 9.5046,
                "crosses_total": 2.9791,
                "crosses_accurate": 0.8634,
                "touches": 54.6133,
                "possession_lost": 11.3322,
                "dispossessed": 0.0514,
                "duels_lost": 3.9722,
                "aerial_lost": 0.9294,
                "total_contest": 0.645,
                "won_contest": 0.3829,
                "ball_recovery": 2.2325,
                "challenges_lost": 0.5848,
                "fouls": 2.4986,
                "fouls_drawn": 0.7676,
                "blocks": 0.6391,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.1266,
                "assists": 0,
                "expected_goals": 0.0,
                "expected_assists": 0.1318,
                "shots_on_target": 0.0,
                "big_chances_created": 0.1439,
                "xgot": 0.0,
                "ball_carries": 10.5396,
                "total_progression": 33.9718,
                "progressive_carries": 0.9303,
                "key_pass": 0.5685,
                "shots_off_target": 0.4009,
                "tackles_in_zone": 2.1,
                "tackles_won_in_zone": 1.8,
                "interceptions_in_zone": 0.9,
                "clearances_in_zone": 0.5,
                "aerial_duels_won": 1.1,
                "defensive_success_rate": 0.683,
                "opponent_faced": "Joaquín Muñoz",
                "pressing_zone": "Left Mid vs Right Back — Wide Channel",
                "matchup_zone": "Left Mid vs Right Back — Wide Channel",
                "antagonist_source": "defensive_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.1235,
                "finishing_factor": 1.0,
                "creation_factor": 0.9855,
                "fifa_overall": 75.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.1235,
                "provider_weight": 0.1299,
                "squad_weight_total": 0.9581,
                "weight_share": 0.1356,
                "creation_factor": 0.9855,
                "appearance_weight": 1.0,
                "weight_rank": 3,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Bryan Zaragoza": {
          "player_id": 1084730,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 15,
          "height": 165,
          "market_value": 7500000,
          "stats": {
            "expected_goals": 0.1294,
            "goal_rate": 0.133,
            "goals": 0,
            "shots_on_target": 1,
            "total_shots": 2,
            "expected_assists": 0.1619,
            "key_pass": 2,
            "rating": 6.996,
            "minutes": 77,
            "total_pass": 24,
            "accurate_pass": 18,
            "duels_won": 4,
            "total_long_balls": 2,
            "accurate_long_balls": 1,
            "total_opp_half_passes": 19,
            "accurate_opp_half_passes": 14,
            "crosses_total": 6,
            "crosses_accurate": 1,
            "touches": 44,
            "possession_lost": 15.6081,
            "dispossessed": 0.3815,
            "duels_lost": 5,
            "aerial_lost": 0,
            "total_contest": 5,
            "won_contest": 2,
            "ball_recovery": 2,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 1,
            "assist_rate": 0.0631,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 1,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.1967,
            "offsides": 0,
            "ball_carries": 21,
            "total_progression": 103,
            "progressive_carries": 7,
            "shots_off_target": 1,
            "duel_xg_multiplier": 0.9483,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.3,
            "aerial_won": 1,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.18,
            "pressing_faced": "LOW",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "numerical_situation": "1v2",
            "opponent_defenders": "Ángel Recio, Fernando Calero",
            "opponent_faced": "Ángel Recio, Fernando Calero",
            "antagonist_source": "attacking_duel",
            "projected_goals": 0,
            "goal_probability": 0.1214,
            "projected_assists": 0,
            "assist_probability": 0.1495,
            "finishing_factor": 1.0327,
            "creation_factor": 0.8,
            "fifa_overall": 77.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 67,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0526,
                "expected_assists": 0.2013,
                "total_shots": 2,
                "shots_on_target": 2,
                "total_pass": 29,
                "accurate_pass": 21,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 45,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0702,
                "expected_assists": 0.1012,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 18,
                "accurate_pass": 13,
                "key_pass": 2,
                "interceptions": 1,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 10,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0,
                "total_shots": 0,
                "total_pass": 3,
                "accurate_pass": 1,
                "duels_won": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 15,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.3444,
                "total_shots": 0,
                "total_pass": 11,
                "accurate_pass": 6,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083136,
              "match_date": "2026-01-25",
              "home_team": "Real Sociedad",
              "away_team": "Celta Vigo",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Celta Vigo",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.3202,
                "expected_assists": 0.3853,
                "total_shots": 4,
                "shots_on_target": 2,
                "total_pass": 38,
                "accurate_pass": 33,
                "key_pass": 1,
                "clearances": 1,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083226,
              "match_date": "2026-01-18",
              "home_team": "Celta Vigo",
              "away_team": "Rayo Vallecano",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Celta Vigo",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 90,
                "rating": 8.3,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.8167,
                "expected_assists": 0.2286,
                "total_shots": 2,
                "shots_on_target": 2,
                "total_pass": 26,
                "accurate_pass": 18,
                "key_pass": 1,
                "tackles": 2,
                "duels_won": 9,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083219,
              "match_date": "2026-01-12",
              "home_team": "Sevilla",
              "away_team": "Celta Vigo",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Celta Vigo",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 67,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1125,
                "expected_assists": 0.0294,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 15,
                "accurate_pass": 11,
                "key_pass": 1,
                "duels_won": 7,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083196,
              "match_date": "2026-01-03",
              "home_team": "Celta Vigo",
              "away_team": "Valencia",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Celta Vigo",
              "opponent": "Valencia",
              "stats": {
                "minutes": 67,
                "rating": 7.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0545,
                "expected_assists": 0.3315,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 13,
                "accurate_pass": 12,
                "key_pass": 1,
                "duels_won": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083192,
              "match_date": "2025-12-20",
              "home_team": "Real Oviedo",
              "away_team": "Celta Vigo",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Celta Vigo",
              "opponent": "Real Oviedo",
              "stats": {
                "minutes": 63,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0124,
                "expected_assists": 0.079,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 15,
                "accurate_pass": 12,
                "key_pass": 2,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083158,
              "match_date": "2025-12-07",
              "home_team": "Real Madrid",
              "away_team": "Celta Vigo",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Celta Vigo",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 71,
                "rating": 6.9,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_assists": 0.2872,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 17,
                "key_pass": 2,
                "clearances": 1,
                "duels_won": 1,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 3033,
            "combined_rank_score": 1005.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 497.0,
            "sofascore_rating": 6.8611,
            "sofascore_appearances": 19.0,
            "fifa_rank": 1513.0,
            "fifa_overall": 77.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 3,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.996,
            "source_file": "data/player_rankings.csv",
            "player_name": "Bryan Zaragoza",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Dumitru Celeadnic",
                  "ranking": 3028
                },
                {
                  "player_name": "Leo Kapilevich",
                  "ranking": 3029
                },
                {
                  "player_name": "Jens Petter Hauge",
                  "ranking": 3030
                },
                {
                  "player_name": "James Justin",
                  "ranking": 3031
                },
                {
                  "player_name": "Jens Hofer",
                  "ranking": 3032
                }
              ],
              "lower": [
                {
                  "player_name": "Wout Weghorst",
                  "ranking": 3034
                },
                {
                  "player_name": "Jake Azzopardi",
                  "ranking": 3035
                },
                {
                  "player_name": "Ki Hyun Lee",
                  "ranking": 3036
                },
                {
                  "player_name": "Jaume Cuéllar",
                  "ranking": 3037
                },
                {
                  "player_name": "Daniel Cordero",
                  "ranking": 3038
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.75,
          "history_matches": 23,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 23,
            "data_confidence": 0.75,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "market_value_adjustment": 0.9993,
            "fbref_prior_metrics": null,
            "rationale": "XGBoost regressor (F_service) evaluated 23 historical appearances across 7 target models."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.1342,
                "goals": 0.1403,
                "goal_rate": 0.1403,
                "shots_on_target": 0.7835,
                "total_shots": 1.7144,
                "expected_assists": 0.1589,
                "key_pass": 1.6996,
                "rating": 6.996,
                "minutes": 76.76,
                "total_pass": 23.7684,
                "accurate_pass": 18.3477,
                "duels_won": 4.0428,
                "total_long_balls": 1.9994,
                "accurate_long_balls": 0.9009,
                "total_opp_half_passes": 18.8736,
                "accurate_opp_half_passes": 14.1455,
                "crosses_total": 5.58,
                "crosses_accurate": 1.3611,
                "touches": 43.8496,
                "possession_lost": 15.619,
                "dispossessed": 0.3818,
                "duels_lost": 4.659,
                "aerial_lost": 0.4742,
                "total_contest": 4.6209,
                "won_contest": 2.0924,
                "ball_recovery": 2.0062,
                "challenges_lost": 0.7578,
                "fouls": 0.5167,
                "fouls_drawn": 1.3738,
                "assists": 0.0631,
                "assist_rate": 0.0631,
                "interceptions": 0.0536,
                "tackles_won": 0.2577,
                "tackles": 0.523,
                "clearances": 0.2331,
                "blocks": 0.0,
                "big_chances_created": 0.3035,
                "big_chances_missed": 0.0,
                "xgot": 0.2039,
                "offsides": 0.3578,
                "ball_carries": 21.3743,
                "total_progression": 103.4386,
                "progressive_carries": 6.5161,
                "shots_off_target": 0.9309
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.1537,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.1306,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 10.0,
                    "is_starting": false,
                    "weight": 0.111,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 15.0,
                    "is_starting": false,
                    "weight": 0.0944,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-01-25",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0802,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-01-18",
                    "opponent": "Rayo Vallecano",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0682,
                    "rating": 8.3
                  },
                  {
                    "match_date": "2026-01-12",
                    "opponent": "Sevilla",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.058,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-01-03",
                    "opponent": "Valencia",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.0493,
                    "rating": 7.6
                  },
                  {
                    "match_date": "2025-12-20",
                    "opponent": "Real Oviedo",
                    "minutes": 63.0,
                    "is_starting": true,
                    "weight": 0.0419,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2025-12-07",
                    "opponent": "Real Madrid",
                    "minutes": 71.0,
                    "is_starting": true,
                    "weight": 0.0356,
                    "rating": 6.9
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 1.0,
                  "expectedGoals": 0.1169,
                  "totalOppositionHalfPasses": 15.6604,
                  "accurateOppositionHalfPasses": 11.0913,
                  "accuratePass": 14.2129,
                  "totalShots": 1.394
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.13416483998298645,
                    "model_output": 0.1342,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.066
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0565
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0197
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.012
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": -0.009
                        }
                      ],
                      "others": -0.0336,
                      "total": 0.1342,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.286346
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.239796
                        },
                        {
                          "name": "goals",
                          "margin": -0.099484
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.065788
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": -0.052514
                        }
                      ],
                      "others_margin": -0.222772
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.14028476178646088,
                    "model_output": 0.1403,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0688
                        },
                        {
                          "name": "goals",
                          "contribution": -0.042
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0345
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0084
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": -0.0076
                        }
                      ],
                      "others": -0.0397,
                      "total": 0.1403,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.290836
                        },
                        {
                          "name": "goals",
                          "margin": -0.167177
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.162245
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.044006
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": -0.041351
                        }
                      ],
                      "others_margin": -0.249273
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.7835196852684021,
                    "model_output": 0.7835,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.1839
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0636
                        },
                        {
                          "name": "ballCarriesCount",
                          "contribution": 0.0584
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0533
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0388
                        }
                      ],
                      "others": 0.0327,
                      "total": 0.7835,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.294544
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.084533
                        },
                        {
                          "name": "ballCarriesCount",
                          "margin": 0.071848
                        },
                        {
                          "name": "goals",
                          "margin": -0.065325
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.05035
                        }
                      ],
                      "others_margin": 0.042586
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 1.7144030332565308,
                    "model_output": 1.7144,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.4336
                        },
                        {
                          "name": "goals",
                          "contribution": -0.0519
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.0486
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0475
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0413
                        }
                      ],
                      "others": 0.0914,
                      "total": 1.7144,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.433569
                        },
                        {
                          "name": "goals",
                          "margin": -0.05189
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.048566
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.047529
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.041298
                        }
                      ],
                      "others_margin": 0.091411
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.15890103578567505,
                    "model_output": 0.1589,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0136
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": 0.0111
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0116
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0107
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.0053
                        }
                      ],
                      "others": 0.0423,
                      "total": 0.1589,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.191514
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": 0.132951
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.122319
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.101207
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.046656
                        }
                      ],
                      "others_margin": 0.310332
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 1.6996458768844604,
                    "model_output": 1.6996,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.2202
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": 0.1311
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "contribution": 0.117
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.0935
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0565
                        }
                      ],
                      "others": 0.4073,
                      "total": 1.6996,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.282724
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": 0.136803
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "margin": 0.108048
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.07871
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.044713
                        }
                      ],
                      "others_margin": 0.273981
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.995956897735596,
                    "model_output": 6.996,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0697
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": 0.0432
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0326
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0258
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.0169
                        }
                      ],
                      "others": 0.0456,
                      "total": 6.996,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.069721
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": 0.043187
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.032626
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.025756
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.01694
                        }
                      ],
                      "others_margin": 0.045566
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 23,
                  "role_matches": 14,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9993, quality 0.493)",
              "stats": {
                "expected_goals": 0.1341,
                "goals": 0.1402,
                "goal_rate": 0.1402,
                "shots_on_target": 0.783,
                "total_shots": 1.7132,
                "expected_assists": 0.1588,
                "key_pass": 1.6985,
                "rating": 6.996,
                "minutes": 76.76,
                "total_pass": 23.7518,
                "accurate_pass": 18.3349,
                "duels_won": 4.04,
                "total_long_balls": 1.998,
                "accurate_long_balls": 0.9003,
                "total_opp_half_passes": 18.8604,
                "accurate_opp_half_passes": 14.1356,
                "crosses_total": 5.5761,
                "crosses_accurate": 1.3601,
                "touches": 43.8189,
                "possession_lost": 15.6081,
                "dispossessed": 0.3815,
                "duels_lost": 4.6557,
                "aerial_lost": 0.4739,
                "total_contest": 4.6177,
                "won_contest": 2.0909,
                "ball_recovery": 2.0048,
                "challenges_lost": 0.7573,
                "fouls": 0.5163,
                "fouls_drawn": 1.3728,
                "assists": 0.0631,
                "assist_rate": 0.0631,
                "interceptions": 0.0536,
                "tackles_won": 0.2575,
                "tackles": 0.5226,
                "clearances": 0.2329,
                "blocks": 0.0,
                "big_chances_created": 0.3033,
                "big_chances_missed": 0.0,
                "xgot": 0.2038,
                "offsides": 0.3575,
                "ball_carries": 21.3593,
                "total_progression": 103.3662,
                "progressive_carries": 6.5115,
                "shots_off_target": 0.9302
              },
              "params": {
                "market_value_eur": 7500000,
                "quality_factor": 0.4927,
                "boost_factor": 0.9993,
                "reference_quality": 0.505,
                "history_matches": 23,
                "history_shrink": 0.1786,
                "market_value_known": true
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.1341,
                "goals": 0.1402,
                "goal_rate": 0.1402,
                "shots_on_target": 0.783,
                "total_shots": 1.7132,
                "expected_assists": 0.1588,
                "key_pass": 1.6985,
                "rating": 6.996,
                "minutes": 76.76,
                "total_pass": 23.7518,
                "accurate_pass": 18.3349,
                "duels_won": 4.04,
                "total_long_balls": 1.998,
                "accurate_long_balls": 0.9003,
                "total_opp_half_passes": 18.8604,
                "accurate_opp_half_passes": 14.1356,
                "crosses_total": 5.5761,
                "crosses_accurate": 1.3601,
                "touches": 43.8189,
                "possession_lost": 15.6081,
                "dispossessed": 0.3815,
                "duels_lost": 4.6557,
                "aerial_lost": 0.4739,
                "total_contest": 4.6177,
                "won_contest": 2.0909,
                "ball_recovery": 2.0048,
                "challenges_lost": 0.7573,
                "fouls": 0.5163,
                "fouls_drawn": 1.3728,
                "assists": 0.0631,
                "assist_rate": 0.0631,
                "interceptions": 0.0536,
                "tackles_won": 0.2575,
                "tackles": 0.5226,
                "clearances": 0.2329,
                "blocks": 0.0,
                "big_chances_created": 0.3033,
                "big_chances_missed": 0.0,
                "xgot": 0.2038,
                "offsides": 0.3575,
                "ball_carries": 21.3593,
                "total_progression": 103.3662,
                "progressive_carries": 6.5115,
                "shots_off_target": 0.9302
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "expected_goals": 0.1272,
                "goals": 0.133,
                "goal_rate": 0.133,
                "shots_on_target": 0.7425,
                "total_shots": 1.6246,
                "expected_assists": 0.1588,
                "key_pass": 1.6985,
                "rating": 6.996,
                "minutes": 76.76,
                "total_pass": 23.7518,
                "accurate_pass": 18.3349,
                "duels_won": 4.04,
                "total_long_balls": 1.998,
                "accurate_long_balls": 0.9003,
                "total_opp_half_passes": 18.8604,
                "accurate_opp_half_passes": 14.1356,
                "crosses_total": 5.5761,
                "crosses_accurate": 1.3601,
                "touches": 43.8189,
                "possession_lost": 15.6081,
                "dispossessed": 0.3815,
                "duels_lost": 4.6557,
                "aerial_lost": 0.4739,
                "total_contest": 4.6177,
                "won_contest": 2.0909,
                "ball_recovery": 2.0048,
                "challenges_lost": 0.7573,
                "fouls": 0.5163,
                "fouls_drawn": 1.3728,
                "assists": 0.0631,
                "assist_rate": 0.0631,
                "interceptions": 0.0536,
                "tackles_won": 0.2575,
                "tackles": 0.5226,
                "clearances": 0.2329,
                "blocks": 0.0,
                "big_chances_created": 0.3033,
                "big_chances_missed": 0.0,
                "xgot": 0.1933,
                "offsides": 0.3575,
                "ball_carries": 21.3593,
                "total_progression": 103.3662,
                "progressive_carries": 6.5115,
                "shots_off_target": 0.8821,
                "duel_xg_multiplier": 0.9483,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.0,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.18,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Ángel Recio, Fernando Calero",
                  "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                  "duel_win_rate": 0.18,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v2",
                  "xg_multiplier": 0.9483,
                  "skill_edge": 0.0249,
                  "height_edge": -0.06,
                  "attacker_skill": 0.4927,
                  "defender_skill": 0.4374,
                  "attacker_role": "ST",
                  "attacker_mv_price_index": 1.0,
                  "defender_adjusted_parts": [
                    {
                      "player": "Ángel Recio",
                      "market_value": 315000,
                      "role": "CB",
                      "price_index": 0.75,
                      "adjusted_quality": 0.4374
                    },
                    {
                      "player": "Fernando Calero",
                      "market_value": 2100000,
                      "role": "CB",
                      "price_index": 0.75,
                      "adjusted_quality": 0.4374
                    }
                  ],
                  "xg_override": 0.1272
                }
              },
              "changes": [
                {
                  "stat": "totalShots",
                  "before": 1.7132,
                  "after": 1.6246
                },
                {
                  "stat": "shotOffTarget",
                  "before": 0.9302,
                  "after": 0.8821
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.783,
                  "after": 0.7425
                },
                {
                  "stat": "expectedGoalsOnTarget",
                  "before": 0.2038,
                  "after": 0.1933
                },
                {
                  "stat": "goals",
                  "before": 0.1402,
                  "after": 0.133
                },
                {
                  "stat": "expectedGoals",
                  "before": 0.1341,
                  "after": 0.1272
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "expected_goals": 0.1294,
                "goal_rate": 0.133,
                "goals": 0,
                "shots_on_target": 0.7425,
                "total_shots": 1.6246,
                "expected_assists": 0.1619,
                "key_pass": 1.6985,
                "rating": 6.996,
                "minutes": 76.76,
                "total_pass": 23.7518,
                "accurate_pass": 18.3349,
                "duels_won": 4.04,
                "total_long_balls": 1.998,
                "accurate_long_balls": 0.9003,
                "total_opp_half_passes": 18.8604,
                "accurate_opp_half_passes": 14.1356,
                "crosses_total": 5.5761,
                "crosses_accurate": 1.3601,
                "touches": 43.8189,
                "possession_lost": 15.6081,
                "dispossessed": 0.3815,
                "duels_lost": 4.6557,
                "aerial_lost": 0.4739,
                "total_contest": 4.6177,
                "won_contest": 2.0909,
                "ball_recovery": 2.0048,
                "challenges_lost": 0.7573,
                "fouls": 0.5163,
                "fouls_drawn": 1.3728,
                "assist_rate": 0.0631,
                "assists": 0,
                "interceptions": 0.0536,
                "tackles_won": 0.2575,
                "tackles": 0.5226,
                "clearances": 0.2329,
                "blocks": 0.0,
                "big_chances_created": 0.3033,
                "big_chances_missed": 0.0,
                "xgot": 0.1967,
                "offsides": 0.3575,
                "ball_carries": 21.3593,
                "total_progression": 103.3662,
                "progressive_carries": 6.5115,
                "shots_off_target": 0.8821,
                "duel_xg_multiplier": 0.9483,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.0,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.18,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0327,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 3 by projected rating, fifa_overall 77.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.1294,
                "goal_rate": 0.133,
                "goals": 0,
                "shots_on_target": 0.7425,
                "total_shots": 1.6246,
                "expected_assists": 0.1619,
                "key_pass": 1.6985,
                "rating": 6.996,
                "minutes": 76.76,
                "total_pass": 23.7518,
                "accurate_pass": 18.3349,
                "duels_won": 4.04,
                "total_long_balls": 1.998,
                "accurate_long_balls": 0.9003,
                "total_opp_half_passes": 18.8604,
                "accurate_opp_half_passes": 14.1356,
                "crosses_total": 5.5761,
                "crosses_accurate": 1.3601,
                "touches": 43.8189,
                "possession_lost": 15.6081,
                "dispossessed": 0.3815,
                "duels_lost": 4.6557,
                "aerial_lost": 0.4739,
                "total_contest": 4.6177,
                "won_contest": 2.0909,
                "ball_recovery": 2.0048,
                "challenges_lost": 0.7573,
                "fouls": 0.5163,
                "fouls_drawn": 1.3728,
                "assist_rate": 0.0631,
                "assists": 0,
                "interceptions": 0.0536,
                "tackles_won": 0.2575,
                "tackles": 0.5226,
                "clearances": 0.2329,
                "blocks": 0.0,
                "big_chances_created": 0.3033,
                "big_chances_missed": 0.0,
                "xgot": 0.1967,
                "offsides": 0.3575,
                "ball_carries": 21.3593,
                "total_progression": 103.3662,
                "progressive_carries": 6.5115,
                "shots_off_target": 0.8821,
                "duel_xg_multiplier": 0.9483,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.0,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.18,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0327,
                "creation_factor": 0.8,
                "fifa_overall": 77.0
              },
              "params": {
                "match_squad_rank": 3,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3033,
                "fifa_rank": 1513.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 77.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "expected_goals": 0.1294,
                "goal_rate": 0.133,
                "goals": 0,
                "shots_on_target": 0.7425,
                "total_shots": 1.6246,
                "expected_assists": 0.1619,
                "key_pass": 1.6985,
                "rating": 6.996,
                "minutes": 76.76,
                "total_pass": 23.7518,
                "accurate_pass": 18.3349,
                "duels_won": 4.04,
                "total_long_balls": 1.998,
                "accurate_long_balls": 0.9003,
                "total_opp_half_passes": 18.8604,
                "accurate_opp_half_passes": 14.1356,
                "crosses_total": 5.5761,
                "crosses_accurate": 1.3601,
                "touches": 43.8189,
                "possession_lost": 15.6081,
                "dispossessed": 0.3815,
                "duels_lost": 4.6557,
                "aerial_lost": 0.4739,
                "total_contest": 4.6177,
                "won_contest": 2.0909,
                "ball_recovery": 2.0048,
                "challenges_lost": 0.7573,
                "fouls": 0.5163,
                "fouls_drawn": 1.3728,
                "assist_rate": 0.0631,
                "assists": 0,
                "interceptions": 0.0536,
                "tackles_won": 0.2575,
                "tackles": 0.5226,
                "clearances": 0.2329,
                "blocks": 0.0,
                "big_chances_created": 0.3033,
                "big_chances_missed": 0.0,
                "xgot": 0.1967,
                "offsides": 0.3575,
                "ball_carries": 21.3593,
                "total_progression": 103.3662,
                "progressive_carries": 6.5115,
                "shots_off_target": 0.8821,
                "duel_xg_multiplier": 0.9483,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.0,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.18,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.1214,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0327,
                "creation_factor": 0.8,
                "fifa_overall": 77.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.1214,
                "scorer_weight": 0.1336,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0819,
                "finishing_factor": 1.0327,
                "appearance_weight": 1.0,
                "weight_rank": 5,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "expected_goals": 0.1294,
                "goal_rate": 0.133,
                "goals": 0,
                "shots_on_target": 0.7425,
                "total_shots": 1.6246,
                "expected_assists": 0.1619,
                "key_pass": 1.6985,
                "rating": 6.996,
                "minutes": 76.76,
                "total_pass": 23.7518,
                "accurate_pass": 18.3349,
                "duels_won": 4.04,
                "total_long_balls": 1.998,
                "accurate_long_balls": 0.9003,
                "total_opp_half_passes": 18.8604,
                "accurate_opp_half_passes": 14.1356,
                "crosses_total": 5.5761,
                "crosses_accurate": 1.3601,
                "touches": 43.8189,
                "possession_lost": 15.6081,
                "dispossessed": 0.3815,
                "duels_lost": 4.6557,
                "aerial_lost": 0.4739,
                "total_contest": 4.6177,
                "won_contest": 2.0909,
                "ball_recovery": 2.0048,
                "challenges_lost": 0.7573,
                "fouls": 0.5163,
                "fouls_drawn": 1.3728,
                "assist_rate": 0.0631,
                "assists": 0,
                "interceptions": 0.0536,
                "tackles_won": 0.2575,
                "tackles": 0.5226,
                "clearances": 0.2329,
                "blocks": 0.0,
                "big_chances_created": 0.3033,
                "big_chances_missed": 0.0,
                "xgot": 0.1967,
                "offsides": 0.3575,
                "ball_carries": 21.3593,
                "total_progression": 103.3662,
                "progressive_carries": 6.5115,
                "shots_off_target": 0.8821,
                "duel_xg_multiplier": 0.9483,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.3,
                "aerial_won": 1.0,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.18,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.1214,
                "projected_assists": 0,
                "assist_probability": 0.1495,
                "finishing_factor": 1.0327,
                "creation_factor": 0.8,
                "fifa_overall": 77.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.1495,
                "provider_weight": 0.1295,
                "squad_weight_total": 0.9581,
                "weight_share": 0.1352,
                "creation_factor": 0.8,
                "appearance_weight": 1.0,
                "weight_rank": 4,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Roberto Fernández": {
          "player_id": 1392592,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 9,
          "height": 186,
          "market_value": 21000000,
          "stats": {
            "expected_goals": 0.4701,
            "goal_rate": 0.5519,
            "goals": 1,
            "shots_on_target": 1,
            "total_shots": 3,
            "expected_assists": 0.0405,
            "key_pass": 1,
            "rating": 6.7783,
            "minutes": 84,
            "total_pass": 11,
            "accurate_pass": 7,
            "duels_won": 4,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 8,
            "accurate_opp_half_passes": 5,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 22,
            "possession_lost": 7.413,
            "dispossessed": 0.6208,
            "duels_lost": 6,
            "aerial_lost": 3,
            "total_contest": 1,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 1,
            "assist_rate": 0.0357,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 1,
            "xgot": 0.5695,
            "offsides": 1,
            "ball_carries": 5,
            "total_progression": 3,
            "progressive_carries": 0,
            "shots_off_target": 1,
            "duel_xg_multiplier": 1.1463,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.5,
            "aerial_won": 2,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.3,
            "pressing_faced": "LOW",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "numerical_situation": "1v2",
            "opponent_defenders": "Ángel Recio, Fernando Calero",
            "opponent_faced": "Ángel Recio, Fernando Calero",
            "antagonist_source": "attacking_duel",
            "projected_goals": 1,
            "goal_probability": 0.3751,
            "projected_assists": 0,
            "assist_probability": 0.0397,
            "finishing_factor": 1.1756,
            "creation_factor": 0.9554,
            "fifa_overall": 74.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 90,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1692,
                "expected_assists": 0.0031,
                "total_shots": 3,
                "shots_off_target": 2,
                "total_pass": 4,
                "accurate_pass": 4,
                "aerial_won": 3,
                "duels_won": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 90,
                "rating": 7.6,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.2843,
                "expected_assists": 0.0447,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 15,
                "accurate_pass": 9,
                "key_pass": 1,
                "aerial_won": 2,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 80,
                "rating": 7.2,
                "goal_rate": 2.0,
                "goals": 2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 1.3134,
                "expected_assists": 0.1532,
                "total_shots": 2,
                "shots_on_target": 2,
                "total_pass": 12,
                "accurate_pass": 4,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 4,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.259,
                "expected_assists": 0.0027,
                "total_shots": 3,
                "shots_off_target": 2,
                "total_pass": 7,
                "accurate_pass": 6,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 83,
                "rating": 7.4,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.2734,
                "expected_assists": 0.0482,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 19,
                "accurate_pass": 14,
                "interceptions": 1,
                "clearances": 3,
                "aerial_won": 3,
                "duels_won": 6,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416306,
              "match_date": "2026-08-22",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.62,
                "expected_assists": 0.0121,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 10,
                "accurate_pass": 8,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 3,
                "aerial_won": 4,
                "duels_won": 6,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421053,
              "match_date": "2026-08-16",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 8.7,
                "goal_rate": 2.0,
                "goals": 2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.4597,
                "expected_assists": 0.0976,
                "total_shots": 2,
                "shots_on_target": 2,
                "total_pass": 12,
                "accurate_pass": 7,
                "key_pass": 2,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083719,
              "match_date": "2026-05-23",
              "home_team": "Espanyol",
              "away_team": "Real Sociedad",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 67,
                "rating": 7.8,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 1.1713,
                "expected_assists": 0.0008,
                "total_shots": 3,
                "shots_on_target": 2,
                "shots_off_target": 1,
                "total_pass": 14,
                "accurate_pass": 11,
                "tackles": 1,
                "tackles_won": 1,
                "aerial_won": 1,
                "duels_won": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083696,
              "match_date": "2026-05-17",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 26,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0005,
                "total_shots": 0,
                "total_pass": 4,
                "accurate_pass": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083629,
              "match_date": "2026-05-13",
              "home_team": "Espanyol",
              "away_team": "Athletic Club",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Athletic Club",
              "stats": {
                "minutes": 84,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1028,
                "expected_assists": 0.018,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 17,
                "accurate_pass": 12,
                "key_pass": 1,
                "interceptions": 1,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 3459,
            "combined_rank_score": 1454.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 6.0,
            "sofascore_rating": 8.7,
            "sofascore_appearances": 1.0,
            "fifa_rank": 2903.0,
            "fifa_overall": 74.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 9,
            "squad_role": "starter",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7783,
            "source_file": "data/player_rankings.csv",
            "player_name": "Roberto Fernández",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Marco Sportiello",
                  "ranking": 3454
                },
                {
                  "player_name": "Arsène Kouassi",
                  "ranking": 3455
                },
                {
                  "player_name": "Leif Davis",
                  "ranking": 3456
                },
                {
                  "player_name": "Ismaëlo Ganiou",
                  "ranking": 3457
                },
                {
                  "player_name": "Olivier Giroud",
                  "ranking": 3458
                }
              ],
              "lower": [
                {
                  "player_name": "Eric Dier",
                  "ranking": 3460
                },
                {
                  "player_name": "Benjamin Nygren",
                  "ranking": 3461
                },
                {
                  "player_name": "Arnau Tenas",
                  "ranking": 3462
                },
                {
                  "player_name": "Yvon Mvogo",
                  "ranking": 3463
                },
                {
                  "player_name": "Duje Ćaleta-Car",
                  "ranking": 3464
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.779,
          "history_matches": 45,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 45,
            "data_confidence": 0.779,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "market_value_adjustment": 1.0041,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "minutes": 262.0,
              "goals_per90": 1.0344827586206895,
              "assists_per90": 0.0,
              "shots_per90": 2.06,
              "shots_on_target_pct": 50.0,
              "prior_reliability": 0.1933
            },
            "rationale": "XGBoost regressor (F_service) evaluated 45 historical appearances across 7 target models; FBref 2026-2027 prior blended (La Liga, Espanyol, rel: 0.19, gls/90: 1.0344827586206895, ast/90: 0.0)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.4013,
                "goals": 0.4734,
                "goal_rate": 0.4734,
                "shots_on_target": 0.9699,
                "total_shots": 2.2659,
                "expected_assists": 0.0396,
                "key_pass": 0.5992,
                "rating": 6.7783,
                "minutes": 83.83,
                "total_pass": 11.0349,
                "accurate_pass": 7.4297,
                "duels_won": 3.9022,
                "total_long_balls": 0.4655,
                "accurate_long_balls": 0.2031,
                "total_opp_half_passes": 7.6949,
                "accurate_opp_half_passes": 4.7578,
                "crosses_total": 0.1873,
                "crosses_accurate": 0.0112,
                "touches": 21.4157,
                "possession_lost": 7.3827,
                "dispossessed": 0.6183,
                "duels_lost": 5.5837,
                "aerial_lost": 2.9339,
                "total_contest": 0.5864,
                "won_contest": 0.3251,
                "ball_recovery": 1.0359,
                "challenges_lost": 0.6182,
                "fouls": 1.3797,
                "fouls_drawn": 1.1738,
                "assists": 0.0361,
                "assist_rate": 0.0361,
                "interceptions": 0.1674,
                "tackles_won": 0.281,
                "tackles": 0.3222,
                "clearances": 0.8198,
                "blocks": 0.1469,
                "big_chances_created": 0.0068,
                "big_chances_missed": 0.4832,
                "xgot": 0.4863,
                "offsides": 1.2449,
                "ball_carries": 4.4938,
                "total_progression": 3.2806,
                "progressive_carries": 0.4119,
                "shots_off_target": 1.296
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1501,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1276,
                    "rating": 7.6
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 80.0,
                    "is_starting": true,
                    "weight": 0.1084,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0922,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 83.0,
                    "is_starting": true,
                    "weight": 0.0784,
                    "rating": 7.4
                  },
                  {
                    "match_date": "2026-08-22",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0666,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-08-16",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0566,
                    "rating": 8.7
                  },
                  {
                    "match_date": "2026-05-23",
                    "opponent": "Real Sociedad",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.0481,
                    "rating": 7.8
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Osasuna",
                    "minutes": 26.0,
                    "is_starting": false,
                    "weight": 0.0409,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-05-13",
                    "opponent": "Athletic Club",
                    "minutes": 84.0,
                    "is_starting": true,
                    "weight": 0.0348,
                    "rating": 6.2
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 1.0,
                  "expectedGoals": 0.4179,
                  "totalOppositionHalfPasses": 7.1775,
                  "accurateOppositionHalfPasses": 4.4205,
                  "accuratePass": 6.9282,
                  "totalShots": 2.03
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.4013298451900482,
                    "model_output": 0.4013,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0658
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0391
                        },
                        {
                          "name": "goals",
                          "contribution": 0.0231
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0155
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": 0.0153
                        }
                      ],
                      "others": 0.0435,
                      "total": 0.4013,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.285767
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.1378
                        },
                        {
                          "name": "goals",
                          "margin": 0.073118
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.046349
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": 0.043748
                        }
                      ],
                      "others_margin": 0.114925
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.47343340516090393,
                    "model_output": 0.4734,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0711
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0483
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0324
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": 0.0282
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0239
                        }
                      ],
                      "others": 0.0658,
                      "total": 0.4734,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.299438
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.16182
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.09549
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": 0.076393
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.06052
                        }
                      ],
                      "others_margin": 0.149459
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.9699299931526184,
                    "model_output": 0.9699,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.172
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0554
                        },
                        {
                          "name": "goals",
                          "contribution": 0.0541
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0468
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.048
                        }
                      ],
                      "others": 0.0566,
                      "total": 0.9699,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.277852
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.075227
                        },
                        {
                          "name": "goals",
                          "margin": 0.068409
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.055608
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.054028
                        }
                      ],
                      "others_margin": 0.060139
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 2.265883207321167,
                    "model_output": 2.2659,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.501
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.2209
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.1111
                        },
                        {
                          "name": "goals",
                          "contribution": 0.0654
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0557
                        }
                      ],
                      "others": 0.0445,
                      "total": 2.2659,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.501013
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.220946
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.111076
                        },
                        {
                          "name": "goals",
                          "margin": 0.065352
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.055665
                        }
                      ],
                      "others_margin": 0.044453
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.03957240283489227,
                    "model_output": 0.0396,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0167
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.01
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0079
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.0044
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "contribution": -0.0031
                        }
                      ],
                      "others": -0.016,
                      "total": 0.0396,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.230687
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.131989
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.117648
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.072295
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "margin": -0.053674
                        }
                      ],
                      "others_margin": -0.340249
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 0.599190354347229,
                    "model_output": 0.5992,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.2086
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0616
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0468
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0436
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.0284
                        }
                      ],
                      "others": -0.103,
                      "total": 0.5992,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.269658
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.072362
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.058685
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.058019
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.039614
                        }
                      ],
                      "others_margin": -0.158595
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.7783002853393555,
                    "model_output": 6.7783,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": 0.0593
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": -0.0365
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": -0.0215
                        },
                        {
                          "name": "aerialLost",
                          "contribution": -0.0164
                        },
                        {
                          "name": "touches_p90",
                          "contribution": 0.0163
                        }
                      ],
                      "others": 0.0149,
                      "total": 6.7783,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": 0.059252
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": -0.036467
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": -0.021515
                        },
                        {
                          "name": "aerialLost",
                          "margin": -0.016409
                        },
                        {
                          "name": "touches_p90",
                          "margin": 0.016277
                        }
                      ],
                      "others_margin": 0.014999
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "starter",
                  "history_matches": 45,
                  "role_matches": 32,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 1.0041, quality 0.641)",
              "stats": {
                "expected_goals": 0.403,
                "goals": 0.4754,
                "goal_rate": 0.4754,
                "shots_on_target": 0.9739,
                "total_shots": 2.2752,
                "expected_assists": 0.0397,
                "key_pass": 0.6016,
                "rating": 6.7783,
                "minutes": 83.83,
                "total_pass": 11.0801,
                "accurate_pass": 7.4602,
                "duels_won": 3.9182,
                "total_long_balls": 0.4674,
                "accurate_long_balls": 0.2039,
                "total_opp_half_passes": 7.7264,
                "accurate_opp_half_passes": 4.7773,
                "crosses_total": 0.1881,
                "crosses_accurate": 0.0112,
                "touches": 21.5035,
                "possession_lost": 7.413,
                "dispossessed": 0.6208,
                "duels_lost": 5.6066,
                "aerial_lost": 2.9459,
                "total_contest": 0.5888,
                "won_contest": 0.3264,
                "ball_recovery": 1.0401,
                "challenges_lost": 0.6207,
                "fouls": 1.3854,
                "fouls_drawn": 1.1786,
                "assists": 0.0362,
                "assist_rate": 0.0362,
                "interceptions": 0.1681,
                "tackles_won": 0.2822,
                "tackles": 0.3235,
                "clearances": 0.8232,
                "blocks": 0.1475,
                "big_chances_created": 0.0068,
                "big_chances_missed": 0.4852,
                "xgot": 0.4883,
                "offsides": 1.25,
                "ball_carries": 4.5122,
                "total_progression": 3.2941,
                "progressive_carries": 0.4136,
                "shots_off_target": 1.3013
              },
              "params": {
                "market_value_eur": 21000000,
                "quality_factor": 0.6408,
                "boost_factor": 1.0041,
                "reference_quality": 0.505,
                "history_matches": 45,
                "history_shrink": 0.1,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0126)",
              "stats": {
                "expected_goals": 0.403,
                "goals": 0.4815,
                "goal_rate": 0.4815,
                "shots_on_target": 0.9737,
                "total_shots": 2.2707,
                "expected_assists": 0.0397,
                "key_pass": 0.6016,
                "rating": 6.7783,
                "minutes": 83.83,
                "total_pass": 11.0801,
                "accurate_pass": 7.4602,
                "duels_won": 3.9182,
                "total_long_balls": 0.4674,
                "accurate_long_balls": 0.2039,
                "total_opp_half_passes": 7.7264,
                "accurate_opp_half_passes": 4.7773,
                "crosses_total": 0.1898,
                "crosses_accurate": 0.0112,
                "touches": 21.5035,
                "possession_lost": 7.413,
                "dispossessed": 0.6208,
                "duels_lost": 5.6066,
                "aerial_lost": 2.9459,
                "total_contest": 0.5888,
                "won_contest": 0.3264,
                "ball_recovery": 1.0401,
                "challenges_lost": 0.6207,
                "fouls": 1.3801,
                "fouls_drawn": 1.184,
                "assists": 0.0357,
                "assist_rate": 0.0357,
                "interceptions": 0.17,
                "tackles_won": 0.2827,
                "tackles": 0.3235,
                "clearances": 0.8232,
                "blocks": 0.1475,
                "big_chances_created": 0.0068,
                "big_chances_missed": 0.4852,
                "xgot": 0.4883,
                "offsides": 1.2343,
                "ball_carries": 4.5122,
                "total_progression": 3.2941,
                "progressive_carries": 0.4136,
                "shots_off_target": 1.3013
              },
              "params": {
                "blend_weight": 0.0126,
                "history_matches": 45,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.9314,
                "prior_reliability": 0.1933,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "totalOffside",
                  "before": 1.25,
                  "after": 1.2343
                },
                {
                  "stat": "goals",
                  "before": 0.4754,
                  "after": 0.4815
                },
                {
                  "stat": "wasFouled",
                  "before": 1.1786,
                  "after": 1.184
                },
                {
                  "stat": "fouls",
                  "before": 1.3854,
                  "after": 1.3801
                }
              ]
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.403,
                "goals": 0.4815,
                "goal_rate": 0.4815,
                "shots_on_target": 0.9737,
                "total_shots": 2.275,
                "expected_assists": 0.0397,
                "key_pass": 0.6016,
                "rating": 6.7783,
                "minutes": 83.83,
                "total_pass": 11.0801,
                "accurate_pass": 7.4602,
                "duels_won": 3.9182,
                "total_long_balls": 0.4674,
                "accurate_long_balls": 0.2039,
                "total_opp_half_passes": 7.7264,
                "accurate_opp_half_passes": 4.7773,
                "crosses_total": 0.1898,
                "crosses_accurate": 0.0112,
                "touches": 21.5035,
                "possession_lost": 7.413,
                "dispossessed": 0.6208,
                "duels_lost": 5.6066,
                "aerial_lost": 2.9459,
                "total_contest": 0.5888,
                "won_contest": 0.3264,
                "ball_recovery": 1.0401,
                "challenges_lost": 0.6207,
                "fouls": 1.3801,
                "fouls_drawn": 1.184,
                "assists": 0.0357,
                "assist_rate": 0.0357,
                "interceptions": 0.17,
                "tackles_won": 0.2827,
                "tackles": 0.3235,
                "clearances": 0.8232,
                "blocks": 0.1475,
                "big_chances_created": 0.0068,
                "big_chances_missed": 0.4852,
                "xgot": 0.4883,
                "offsides": 1.2343,
                "ball_carries": 4.5122,
                "total_progression": 3.2941,
                "progressive_carries": 0.4136,
                "shots_off_target": 1.3013
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "enriched_model_output",
              "description": "Model output after duel-context enrichment (pre router post-processing)",
              "stats": {
                "expected_goals": 0.462,
                "goals": 0.5519,
                "goal_rate": 0.5519,
                "shots_on_target": 1.1162,
                "total_shots": 2.6079,
                "expected_assists": 0.0397,
                "key_pass": 0.6016,
                "rating": 6.7783,
                "minutes": 83.83,
                "total_pass": 11.0801,
                "accurate_pass": 7.4602,
                "duels_won": 3.9182,
                "total_long_balls": 0.4674,
                "accurate_long_balls": 0.2039,
                "total_opp_half_passes": 7.7264,
                "accurate_opp_half_passes": 4.7773,
                "crosses_total": 0.1898,
                "crosses_accurate": 0.0112,
                "touches": 21.5035,
                "possession_lost": 7.413,
                "dispossessed": 0.6208,
                "duels_lost": 5.6066,
                "aerial_lost": 2.9459,
                "total_contest": 0.5888,
                "won_contest": 0.3264,
                "ball_recovery": 1.0401,
                "challenges_lost": 0.6207,
                "fouls": 1.3801,
                "fouls_drawn": 1.184,
                "assists": 0.0357,
                "assist_rate": 0.0357,
                "interceptions": 0.17,
                "tackles_won": 0.2827,
                "tackles": 0.3235,
                "clearances": 0.8232,
                "blocks": 0.1475,
                "big_chances_created": 0.0068,
                "big_chances_missed": 0.5562,
                "xgot": 0.5597,
                "offsides": 1.2343,
                "ball_carries": 4.5122,
                "total_progression": 3.2941,
                "progressive_carries": 0.4136,
                "shots_off_target": 1.4917,
                "duel_xg_multiplier": 1.1463,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.5,
                "aerial_won": 1.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.3,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel"
              },
              "params": {
                "duel_context_applied": true,
                "duel_context": {
                  "opponent_faced": "Ángel Recio, Fernando Calero",
                  "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                  "duel_win_rate": 0.3,
                  "pressing_faced": "LOW",
                  "numerical_situation": "1v2",
                  "xg_multiplier": 1.1463,
                  "skill_edge": 0.0915,
                  "height_edge": 0.008,
                  "attacker_skill": 0.6408,
                  "defender_skill": 0.4374,
                  "attacker_role": "ST",
                  "attacker_mv_price_index": 1.0,
                  "defender_adjusted_parts": [
                    {
                      "player": "Ángel Recio",
                      "market_value": 315000,
                      "role": "CB",
                      "price_index": 0.75,
                      "adjusted_quality": 0.4374
                    },
                    {
                      "player": "Fernando Calero",
                      "market_value": 2100000,
                      "role": "CB",
                      "price_index": 0.75,
                      "adjusted_quality": 0.4374
                    }
                  ],
                  "xg_override": 0.462
                }
              },
              "changes": [
                {
                  "stat": "totalShots",
                  "before": 2.275,
                  "after": 2.6079
                },
                {
                  "stat": "shotOffTarget",
                  "before": 1.3013,
                  "after": 1.4917
                },
                {
                  "stat": "onTargetScoringAttempt",
                  "before": 0.9737,
                  "after": 1.1162
                },
                {
                  "stat": "expectedGoalsOnTarget",
                  "before": 0.4883,
                  "after": 0.5597
                },
                {
                  "stat": "bigChanceMissed",
                  "before": 0.4852,
                  "after": 0.5562
                },
                {
                  "stat": "goals",
                  "before": 0.4815,
                  "after": 0.5519
                },
                {
                  "stat": "expectedGoals",
                  "before": 0.403,
                  "after": 0.462
                }
              ]
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "expected_goals": 0.4701,
                "goal_rate": 0.5519,
                "goals": 0,
                "shots_on_target": 1.1162,
                "total_shots": 2.6079,
                "expected_assists": 0.0405,
                "key_pass": 0.6016,
                "rating": 6.7783,
                "minutes": 83.83,
                "total_pass": 11.0801,
                "accurate_pass": 7.4602,
                "duels_won": 3.9182,
                "total_long_balls": 0.4674,
                "accurate_long_balls": 0.2039,
                "total_opp_half_passes": 7.7264,
                "accurate_opp_half_passes": 4.7773,
                "crosses_total": 0.1898,
                "crosses_accurate": 0.0112,
                "touches": 21.5035,
                "possession_lost": 7.413,
                "dispossessed": 0.6208,
                "duels_lost": 5.6066,
                "aerial_lost": 2.9459,
                "total_contest": 0.5888,
                "won_contest": 0.3264,
                "ball_recovery": 1.0401,
                "challenges_lost": 0.6207,
                "fouls": 1.3801,
                "fouls_drawn": 1.184,
                "assist_rate": 0.0357,
                "assists": 0,
                "interceptions": 0.17,
                "tackles_won": 0.2827,
                "tackles": 0.3235,
                "clearances": 0.8232,
                "blocks": 0.1475,
                "big_chances_created": 0.0068,
                "big_chances_missed": 0.5562,
                "xgot": 0.5695,
                "offsides": 1.2343,
                "ball_carries": 4.5122,
                "total_progression": 3.2941,
                "progressive_carries": 0.4136,
                "shots_off_target": 1.4917,
                "duel_xg_multiplier": 1.1463,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.5,
                "aerial_won": 1.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.3,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1756,
                "creation_factor": 0.9554
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 1.0
              },
              "changes": [
                {
                  "stat": "expected_goals",
                  "before": 0.462,
                  "after": 0.4701
                }
              ]
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 9 by projected rating, fifa_overall 74.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.4701,
                "goal_rate": 0.5519,
                "goals": 0,
                "shots_on_target": 1.1162,
                "total_shots": 2.6079,
                "expected_assists": 0.0405,
                "key_pass": 0.6016,
                "rating": 6.7783,
                "minutes": 83.83,
                "total_pass": 11.0801,
                "accurate_pass": 7.4602,
                "duels_won": 3.9182,
                "total_long_balls": 0.4674,
                "accurate_long_balls": 0.2039,
                "total_opp_half_passes": 7.7264,
                "accurate_opp_half_passes": 4.7773,
                "crosses_total": 0.1898,
                "crosses_accurate": 0.0112,
                "touches": 21.5035,
                "possession_lost": 7.413,
                "dispossessed": 0.6208,
                "duels_lost": 5.6066,
                "aerial_lost": 2.9459,
                "total_contest": 0.5888,
                "won_contest": 0.3264,
                "ball_recovery": 1.0401,
                "challenges_lost": 0.6207,
                "fouls": 1.3801,
                "fouls_drawn": 1.184,
                "assist_rate": 0.0357,
                "assists": 0,
                "interceptions": 0.17,
                "tackles_won": 0.2827,
                "tackles": 0.3235,
                "clearances": 0.8232,
                "blocks": 0.1475,
                "big_chances_created": 0.0068,
                "big_chances_missed": 0.5562,
                "xgot": 0.5695,
                "offsides": 1.2343,
                "ball_carries": 4.5122,
                "total_progression": 3.2941,
                "progressive_carries": 0.4136,
                "shots_off_target": 1.4917,
                "duel_xg_multiplier": 1.1463,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.5,
                "aerial_won": 1.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.3,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1756,
                "creation_factor": 0.9554,
                "fifa_overall": 74.0
              },
              "params": {
                "match_squad_rank": 9,
                "squad_role": "starter",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3459,
                "fifa_rank": 2903.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 74.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "expected_goals": 0.4701,
                "goal_rate": 0.5519,
                "goals": 1,
                "shots_on_target": 1.1162,
                "total_shots": 2.6079,
                "expected_assists": 0.0405,
                "key_pass": 0.6016,
                "rating": 6.7783,
                "minutes": 83.83,
                "total_pass": 11.0801,
                "accurate_pass": 7.4602,
                "duels_won": 3.9182,
                "total_long_balls": 0.4674,
                "accurate_long_balls": 0.2039,
                "total_opp_half_passes": 7.7264,
                "accurate_opp_half_passes": 4.7773,
                "crosses_total": 0.1898,
                "crosses_accurate": 0.0112,
                "touches": 21.5035,
                "possession_lost": 7.413,
                "dispossessed": 0.6208,
                "duels_lost": 5.6066,
                "aerial_lost": 2.9459,
                "total_contest": 0.5888,
                "won_contest": 0.3264,
                "ball_recovery": 1.0401,
                "challenges_lost": 0.6207,
                "fouls": 1.3801,
                "fouls_drawn": 1.184,
                "assist_rate": 0.0357,
                "assists": 0,
                "interceptions": 0.17,
                "tackles_won": 0.2827,
                "tackles": 0.3235,
                "clearances": 0.8232,
                "blocks": 0.1475,
                "big_chances_created": 0.0068,
                "big_chances_missed": 0.5562,
                "xgot": 0.5695,
                "offsides": 1.2343,
                "ball_carries": 4.5122,
                "total_progression": 3.2941,
                "progressive_carries": 0.4136,
                "shots_off_target": 1.4917,
                "duel_xg_multiplier": 1.1463,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.5,
                "aerial_won": 1.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.3,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 1,
                "goal_probability": 0.3751,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.1756,
                "creation_factor": 0.9554,
                "fifa_overall": 74.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 1,
                "goal_probability": 0.3751,
                "scorer_weight": 0.5526,
                "squad_weight_total": 1.6319,
                "weight_share": 0.3386,
                "finishing_factor": 1.1756,
                "appearance_weight": 1.0,
                "weight_rank": 1,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "expected_goals": 0.4701,
                "goal_rate": 0.5519,
                "goals": 1,
                "shots_on_target": 1.1162,
                "total_shots": 2.6079,
                "expected_assists": 0.0405,
                "key_pass": 0.6016,
                "rating": 6.7783,
                "minutes": 83.83,
                "total_pass": 11.0801,
                "accurate_pass": 7.4602,
                "duels_won": 3.9182,
                "total_long_balls": 0.4674,
                "accurate_long_balls": 0.2039,
                "total_opp_half_passes": 7.7264,
                "accurate_opp_half_passes": 4.7773,
                "crosses_total": 0.1898,
                "crosses_accurate": 0.0112,
                "touches": 21.5035,
                "possession_lost": 7.413,
                "dispossessed": 0.6208,
                "duels_lost": 5.6066,
                "aerial_lost": 2.9459,
                "total_contest": 0.5888,
                "won_contest": 0.3264,
                "ball_recovery": 1.0401,
                "challenges_lost": 0.6207,
                "fouls": 1.3801,
                "fouls_drawn": 1.184,
                "assist_rate": 0.0357,
                "assists": 0,
                "interceptions": 0.17,
                "tackles_won": 0.2827,
                "tackles": 0.3235,
                "clearances": 0.8232,
                "blocks": 0.1475,
                "big_chances_created": 0.0068,
                "big_chances_missed": 0.5562,
                "xgot": 0.5695,
                "offsides": 1.2343,
                "ball_carries": 4.5122,
                "total_progression": 3.2941,
                "progressive_carries": 0.4136,
                "shots_off_target": 1.4917,
                "duel_xg_multiplier": 1.1463,
                "dribbles_attempted": 2.0,
                "dribbles_successful": 0.5,
                "aerial_won": 1.8,
                "crosses_attempted": 0.0,
                "duel_win_rate": 0.3,
                "pressing_faced": "LOW",
                "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
                "numerical_situation": "1v2",
                "opponent_defenders": "Ángel Recio, Fernando Calero",
                "opponent_faced": "Ángel Recio, Fernando Calero",
                "antagonist_source": "attacking_duel",
                "projected_goals": 1,
                "goal_probability": 0.3751,
                "projected_assists": 0,
                "assist_probability": 0.0397,
                "finishing_factor": 1.1756,
                "creation_factor": 0.9554,
                "fifa_overall": 74.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0397,
                "provider_weight": 0.0387,
                "squad_weight_total": 0.9581,
                "weight_share": 0.0404,
                "creation_factor": 0.9554,
                "appearance_weight": 1.0,
                "weight_rank": 8,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        }
      },
      "bench_players": {
        "Angel Fortuno": {
          "player_id": 1082734,
          "position": "G",
          "position_depth": "G_BENCH",
          "is_starter": false,
          "shirt_number": 1,
          "height": 183,
          "market_value": 290000,
          "stats": {
            "saves": 0,
            "goals_prevented": 0.0104,
            "rating": 6.991,
            "minutes": 4,
            "total_pass": 3,
            "accurate_pass": 3,
            "total_long_balls": 2,
            "accurate_long_balls": 1,
            "touches": 6,
            "clearances": 0,
            "ball_recovery": 2,
            "high_claims": 1,
            "punches": 0.0,
            "aerial_won": 0,
            "sweeper_actions": 0,
            "sweeper_accurate": 0,
            "saves_inside_box": 0,
            "possession_lost": 0.606,
            "duels_won": 0,
            "duels_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "total_own_half_passes": 3,
            "accurate_own_half_passes": 3,
            "bench_appearance_probability": 0.109,
            "bench_expected_minutes": 4.39,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 2,
            "projected_substitution_expected_count": 2.144,
            "projected_substitution_game_state_adjustment": 0,
            "substitution_usage": "available_bench_not_projected_used",
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 89.0
          },
          "latest_10_games": [
            {
              "match_id": 14083719,
              "match_date": "2026-05-23",
              "home_team": "Espanyol",
              "away_team": "Real Sociedad",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 7.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0029,
                "total_shots": 0,
                "total_pass": 23,
                "accurate_pass": 21,
                "aerial_won": 2,
                "duels_won": 2,
                "ball_recovery": 10,
                "saves": 2,
                "goals_prevented": 0.2618
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 24,
            "combined_rank_score": 25.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 35.0,
            "sofascore_rating": 7.9,
            "sofascore_appearances": 1.0,
            "fifa_rank": 15.0,
            "fifa_overall": 89.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 4,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.991,
            "source_file": "data/player_rankings.csv",
            "player_name": "Angel Fortuno",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Gustavo Henrique",
                  "ranking": 19
                },
                {
                  "player_name": "Alejandro Grimaldo",
                  "ranking": 20
                },
                {
                  "player_name": "Marc Bartra",
                  "ranking": 21
                },
                {
                  "player_name": "Khvicha Kvaratskhelia",
                  "ranking": 22
                },
                {
                  "player_name": "Danijel Petković",
                  "ranking": 23
                }
              ],
              "lower": [
                {
                  "player_name": "Hyun-woo Cho",
                  "ranking": 25
                },
                {
                  "player_name": "Joshua Kimmich",
                  "ranking": 26
                },
                {
                  "player_name": "Ljupche Doriev",
                  "ranking": 27
                },
                {
                  "player_name": "Rafael Romo",
                  "ranking": 28
                },
                {
                  "player_name": "Michael Olise",
                  "ranking": 29
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.312,
          "history_matches": 1,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "G_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "accurateLongBalls",
              "totalOwnHalfPasses",
              "accurateOwnHalfPasses",
              "saves",
              "savedShotsFromInsideTheBox",
              "goodHighClaim",
              "punches",
              "aerialWon",
              "totalKeeperSweeper",
              "accurateKeeperSweeper",
              "totalClearance",
              "ballRecovery",
              "touches",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "goalkeeperValueNormalized",
              "goalsPrevented",
              "rating",
              "pass_accuracy",
              "long_ball_accuracy",
              "save_contribution",
              "inside_box_save_rate",
              "sweeper_accuracy",
              "sweeper_actions_p90",
              "distribution_accuracy",
              "commanding_index",
              "history_matches"
            ],
            "targets_predicted": [
              "saves",
              "goalsPrevented",
              "rating"
            ],
            "history_matches": 1,
            "data_confidence": 0.312,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 4.392222187561249,
            "bench_appearance_prob": 0.10873737216187492,
            "market_value_adjustment": 0.9831,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost G_service (1 historical appearances) to 4.4 expected mins (appearance prob 0.11)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost G_service raw output over 3 target models",
              "stats": {
                "saves": 2.5174,
                "goals_prevented": 0.0689,
                "rating": 6.991,
                "minutes": 28.5,
                "total_pass": 23.0,
                "accurate_pass": 21.0,
                "total_long_balls": 10.0,
                "accurate_long_balls": 8.0,
                "touches": 41.0,
                "clearances": 0.0,
                "ball_recovery": 10.0,
                "high_claims": 5.0,
                "punches": 0.0,
                "aerial_won": 2.0,
                "sweeper_actions": 0.0,
                "sweeper_accurate": 0.0,
                "saves_inside_box": 2.0,
                "possession_lost": 4.0,
                "duels_won": 2.0,
                "duels_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 18.0,
                "accurate_own_half_passes": 17.0
              },
              "trace": {
                "model": {
                  "position_service": "G",
                  "schema_version": 5,
                  "trained_at": "2026-10-09T10:02:40.828652+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 199,
                    "rows": 6796
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-05-23",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 1.0,
                    "rating": 7.9
                  }
                ],
                "feature_row": {
                  "history_matches": 1.0,
                  "is_starting_11": 0.0,
                  "sweeper_actions_p90": 0.0,
                  "distribution_accuracy": 0.9444,
                  "sweeper_accuracy": 0.0,
                  "goalkeeperValueNormalized": 0.31,
                  "save_contribution": 2.2618,
                  "accurateKeeperSweeper": 0.0
                },
                "per_target": [
                  {
                    "target": "saves",
                    "predicted": 2.517385721206665,
                    "model_output": 2.5174,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "distribution_accuracy",
                        "importance": 0.0415
                      },
                      {
                        "name": "sweeper_actions_p90",
                        "importance": 0.0394
                      },
                      {
                        "name": "pass_accuracy",
                        "importance": 0.0368
                      },
                      {
                        "name": "accurateOwnHalfPasses",
                        "importance": 0.0362
                      },
                      {
                        "name": "sweeper_accuracy",
                        "importance": 0.0362
                      }
                    ],
                    "decomposition": {
                      "base": 2.9286,
                      "items": [
                        {
                          "name": "goodHighClaim",
                          "contribution": -0.201
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1636
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0384
                        },
                        {
                          "name": "saves",
                          "contribution": -0.0168
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": -0.0137
                        }
                      ],
                      "others": 0.0223,
                      "total": 2.5174,
                      "log_link": true,
                      "margin_base": 1.074537,
                      "item_margins": [
                        {
                          "name": "goodHighClaim",
                          "margin": -0.071084
                        },
                        {
                          "name": "is_starting_11",
                          "margin": -0.061842
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.015101
                        },
                        {
                          "name": "saves",
                          "margin": -0.006661
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": -0.005457
                        }
                      ],
                      "others_margin": 0.008829
                    }
                  },
                  {
                    "target": "goalsPrevented",
                    "predicted": 0.06886529177427292,
                    "model_output": 0.0689,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "punches",
                        "importance": 0.041
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0398
                      },
                      {
                        "name": "sweeper_accuracy",
                        "importance": 0.0385
                      },
                      {
                        "name": "goalkeeperValueNormalized",
                        "importance": 0.0374
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0356
                      }
                    ],
                    "decomposition": {
                      "base": -0.0166,
                      "items": [
                        {
                          "name": "pass_accuracy",
                          "contribution": 0.0739
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.0326
                        },
                        {
                          "name": "inside_box_save_rate",
                          "contribution": 0.0299
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.0216
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.0192
                        }
                      ],
                      "others": -0.0101,
                      "total": 0.0689,
                      "log_link": false,
                      "margin_base": -0.016613,
                      "item_margins": [
                        {
                          "name": "pass_accuracy",
                          "margin": 0.073919
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.032598
                        },
                        {
                          "name": "inside_box_save_rate",
                          "margin": 0.029898
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.02162
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.019167
                        }
                      ],
                      "others_margin": -0.01015
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.990954875946045,
                    "model_output": 6.991,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "sweeper_actions_p90",
                        "importance": 0.0429
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0382
                      },
                      {
                        "name": "distribution_accuracy",
                        "importance": 0.0371
                      },
                      {
                        "name": "goalkeeperValueNormalized",
                        "importance": 0.036
                      },
                      {
                        "name": "accurateOwnHalfPasses",
                        "importance": 0.0359
                      }
                    ],
                    "decomposition": {
                      "base": 7.0091,
                      "items": [
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.0382
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.0249
                        },
                        {
                          "name": "long_ball_accuracy",
                          "contribution": 0.0181
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0178
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.0162
                        }
                      ],
                      "others": -0.0155,
                      "total": 6.991,
                      "log_link": false,
                      "margin_base": 7.009122,
                      "item_margins": [
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.038177
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.024906
                        },
                        {
                          "name": "long_ball_accuracy",
                          "margin": 0.018078
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.017836
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.016226
                        }
                      ],
                      "others_margin": -0.015455
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 1,
                  "role_matches": 0,
                  "minutes_source": "position_median",
                  "volume_basis": "all_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9831, quality 0.437)",
              "stats": {
                "saves": 2.4748,
                "goals_prevented": 0.0677,
                "rating": 6.991,
                "minutes": 28.5,
                "total_pass": 22.6113,
                "accurate_pass": 20.6451,
                "total_long_balls": 9.831,
                "accurate_long_balls": 7.8648,
                "touches": 40.3071,
                "clearances": 0.0,
                "ball_recovery": 9.831,
                "high_claims": 4.9155,
                "punches": 0.0,
                "aerial_won": 1.9662,
                "sweeper_actions": 0.0,
                "sweeper_accurate": 0.0,
                "saves_inside_box": 1.9662,
                "possession_lost": 3.9324,
                "duels_won": 1.9662,
                "duels_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 17.6958,
                "accurate_own_half_passes": 16.7127
              },
              "params": {
                "market_value_eur": 290000,
                "quality_factor": 0.4374,
                "boost_factor": 0.9831,
                "reference_quality": 0.505,
                "history_matches": 1,
                "history_shrink": 0.8333,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 28.5 to 4.4 expected minutes (appearance prob 0.11)",
              "stats": {
                "saves": 0.3814,
                "goals_prevented": 0.0104,
                "rating": 6.991,
                "minutes": 4.39,
                "total_pass": 3.4847,
                "accurate_pass": 3.1817,
                "total_long_balls": 1.5151,
                "accurate_long_balls": 1.2121,
                "touches": 6.2119,
                "clearances": 0.0,
                "ball_recovery": 1.5151,
                "high_claims": 0.7575,
                "punches": 0.0,
                "aerial_won": 0.303,
                "sweeper_actions": 0.0,
                "sweeper_accurate": 0.0,
                "saves_inside_box": 0.303,
                "possession_lost": 0.606,
                "duels_won": 0.303,
                "duels_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 2.7272,
                "accurate_own_half_passes": 2.5756,
                "bench_appearance_probability": 0.109,
                "bench_expected_minutes": 4.39
              },
              "params": {
                "expected_minutes": 4.39,
                "projection_minutes": 28.5,
                "minutes_scale": 0.1541,
                "appearance_probability": 0.109
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "saves": 0.3814,
                "goals_prevented": 0.0104,
                "rating": 6.991,
                "minutes": 4.39,
                "total_pass": 3.4847,
                "accurate_pass": 3.1817,
                "total_long_balls": 1.5151,
                "accurate_long_balls": 1.2121,
                "touches": 6.2119,
                "clearances": 0.0,
                "ball_recovery": 1.5151,
                "high_claims": 0.7575,
                "punches": 0.0,
                "aerial_won": 0.303,
                "sweeper_actions": 0.0,
                "sweeper_accurate": 0.0,
                "saves_inside_box": 0.303,
                "possession_lost": 0.606,
                "duels_won": 0.303,
                "duels_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 2.7272,
                "accurate_own_half_passes": 2.5756,
                "bench_appearance_probability": 0.109,
                "bench_expected_minutes": 4.39
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "not_projected_to_play",
              "description": "Not among the projected substitutes: no share of the team's goals or assists",
              "stats": {
                "saves": 0.3814,
                "goals_prevented": 0.0104,
                "rating": 6.991,
                "minutes": 4.39,
                "total_pass": 3.4847,
                "accurate_pass": 3.1817,
                "total_long_balls": 1.5151,
                "accurate_long_balls": 1.2121,
                "touches": 6.2119,
                "clearances": 0.0,
                "ball_recovery": 1.5151,
                "high_claims": 0.7575,
                "punches": 0.0,
                "aerial_won": 0.303,
                "sweeper_actions": 0.0,
                "sweeper_accurate": 0.0,
                "saves_inside_box": 0.303,
                "possession_lost": 0.606,
                "duels_won": 0.303,
                "duels_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 2.7272,
                "accurate_own_half_passes": 2.5756,
                "bench_appearance_probability": 0.109,
                "bench_expected_minutes": 4.39,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "available_bench_not_projected_used",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0
              },
              "params": {
                "appearance_probability": 0.109,
                "projected_substitutes": 2,
                "scoreline_reset": true
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 4 by projected rating, fifa_overall 89.0; not used by the projection)",
              "stats": {
                "saves": 0.3814,
                "goals_prevented": 0.0104,
                "rating": 6.991,
                "minutes": 4.39,
                "total_pass": 3.4847,
                "accurate_pass": 3.1817,
                "total_long_balls": 1.5151,
                "accurate_long_balls": 1.2121,
                "touches": 6.2119,
                "clearances": 0.0,
                "ball_recovery": 1.5151,
                "high_claims": 0.7575,
                "punches": 0.0,
                "aerial_won": 0.303,
                "sweeper_actions": 0.0,
                "sweeper_accurate": 0.0,
                "saves_inside_box": 0.303,
                "possession_lost": 0.606,
                "duels_won": 0.303,
                "duels_lost": 0.0,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "fouls": 0.0,
                "fouls_drawn": 0.0,
                "total_own_half_passes": 2.7272,
                "accurate_own_half_passes": 2.5756,
                "bench_appearance_probability": 0.109,
                "bench_expected_minutes": 4.39,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "available_bench_not_projected_used",
                "goals": 0,
                "projected_goals": 0,
                "goal_probability": 0.0,
                "assists": 0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "fifa_overall": 89.0
              },
              "params": {
                "match_squad_rank": 4,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 24,
                "fifa_rank": 15.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 89.0
              }
            }
          ]
        },
        "Vanja Drkušić": {
          "player_id": 908617,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 16,
          "height": 186,
          "market_value": 5500000,
          "stats": {
            "interceptions": 1,
            "tackles": 1,
            "tackles_won": 0,
            "clearances": 2,
            "aerial_won": 1,
            "total_shots": 0,
            "rating": 6.5991,
            "minutes": 20,
            "total_pass": 28,
            "accurate_pass": 23,
            "duels_won": 3,
            "total_long_balls": 6,
            "accurate_long_balls": 1,
            "total_own_half_passes": 19,
            "accurate_own_half_passes": 17,
            "total_opp_half_passes": 9,
            "accurate_opp_half_passes": 6,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 36,
            "possession_lost": 5.6137,
            "dispossessed": 0.0,
            "duels_lost": 2,
            "aerial_lost": 1,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 0,
            "fouls": 1,
            "fouls_drawn": 1,
            "blocks": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "expected_goals": 0.0,
            "expected_assists": 0.0028,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 9,
            "total_progression": 10,
            "progressive_carries": 0,
            "key_pass": 0,
            "shots_off_target": 0,
            "bench_appearance_probability": 0.412,
            "bench_expected_minutes": 19.91,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 2,
            "projected_substitution_expected_count": 2.144,
            "projected_substitution_game_state_adjustment": 0,
            "substitution_usage": "available_bench_not_projected_used",
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "total_shots": 0
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0026,
                "total_shots": 0,
                "total_pass": 56,
                "accurate_pass": 45,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 4,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416306,
              "match_date": "2026-08-22",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 24,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0046,
                "total_shots": 0,
                "total_pass": 9,
                "accurate_pass": 7,
                "tackles": 2,
                "tackles_won": 1,
                "clearances": 4,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            }
          ],
          "ranking": {
            "global_player_rank": 811,
            "combined_rank_score": 532.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 391.0,
            "sofascore_rating": 6.95,
            "sofascore_appearances": 6.0,
            "fifa_rank": 673.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 18,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.5991,
            "source_file": "data/player_rankings.csv",
            "player_name": "Vanja Drkušić",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Chang-woo Park",
                  "ranking": 806
                },
                {
                  "player_name": "Ronan",
                  "ranking": 807
                },
                {
                  "player_name": "Roy Revivo",
                  "ranking": 808
                },
                {
                  "player_name": "Hugo Magallanes",
                  "ranking": 809
                },
                {
                  "player_name": "Dženis Burnić",
                  "ranking": 810
                }
              ],
              "lower": [
                {
                  "player_name": "Hugo Souza",
                  "ranking": 812
                },
                {
                  "player_name": "Teddy Teuma",
                  "ranking": 813
                },
                {
                  "player_name": "Yoel Bárcenas",
                  "ranking": 814
                },
                {
                  "player_name": "Piero Quispe",
                  "ranking": 815
                },
                {
                  "player_name": "Seung-wan Ryu",
                  "ranking": 816
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.451,
          "history_matches": 3,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 3,
            "data_confidence": 0.451,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "bench_expected_minutes": 19.91,
            "bench_appearance_prob": 0.412,
            "market_value_adjustment": 0.9931,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 2.0,
              "starts": 1.0,
              "sub_appearances": 1.0,
              "minutes_per_sub": 25.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "prior_reliability": 0.0867
            },
            "rationale": "Bench projection scaled from XGBoost D_service (3 historical appearances) to 19.9 expected mins (appearance prob 0.41); FBref playing time empirical prior: 1.0 sub appearances, 25.0 mins/sub."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 0.4244,
                "tackles": 0.5286,
                "tackles_won": 0.3014,
                "clearances": 1.5605,
                "aerial_won": 0.3865,
                "total_shots": 0.135,
                "rating": 6.5991,
                "minutes": 14.78,
                "total_pass": 21.0311,
                "accurate_pass": 16.8348,
                "duels_won": 2.2138,
                "total_long_balls": 4.1963,
                "accurate_long_balls": 0.9417,
                "total_own_half_passes": 14.0097,
                "accurate_own_half_passes": 12.3576,
                "total_opp_half_passes": 7.0214,
                "accurate_opp_half_passes": 4.4772,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 26.9621,
                "possession_lost": 4.1963,
                "dispossessed": 0.0,
                "duels_lost": 1.6025,
                "aerial_lost": 0.6608,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9913,
                "challenges_lost": 0.0,
                "fouls": 0.9417,
                "fouls_drawn": 0.9913,
                "blocks": 0.6608,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0021,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 6.8892,
                "total_progression": 7.7852,
                "progressive_carries": 0.0,
                "key_pass": 0.0,
                "shots_off_target": 0.135
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 1.0,
                    "is_starting": false,
                    "weight": 0.3887,
                    "rating": 0.0
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.3304,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-08-22",
                    "opponent": "Real Madrid",
                    "minutes": 24.0,
                    "is_starting": false,
                    "weight": 0.2809,
                    "rating": 6.6
                  }
                ],
                "feature_row": {
                  "history_matches": 3.0,
                  "is_starting_11": 0.0,
                  "totalClearance": 2.4451,
                  "aerialWon": 0.6608,
                  "totalClearance_p90": 5.5345,
                  "totalTackle": 0.8921,
                  "totalPass": 21.0311
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 0.4243799149990082,
                    "model_output": 0.4244,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.4162
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": 0.0571
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": -0.0543
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0166
                        },
                        {
                          "name": "aerial_dominance",
                          "contribution": -0.0135
                        }
                      ],
                      "others": -0.0226,
                      "total": 0.4244,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.664435
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": 0.121692
                        },
                        {
                          "name": "interceptionWon",
                          "margin": -0.115292
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.036764
                        },
                        {
                          "name": "aerial_dominance",
                          "margin": -0.029727
                        }
                      ],
                      "others_margin": -0.052128
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 0.5286116600036621,
                    "model_output": 0.5286,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.7452
                        },
                        {
                          "name": "challengeLost",
                          "contribution": -0.0288
                        },
                        {
                          "name": "press_vulnerability",
                          "contribution": -0.0234
                        },
                        {
                          "name": "totalTackle_p90",
                          "contribution": 0.0183
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0188
                        }
                      ],
                      "others": -0.105,
                      "total": 0.5286,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.764933
                        },
                        {
                          "name": "challengeLost",
                          "margin": -0.045387
                        },
                        {
                          "name": "press_vulnerability",
                          "margin": -0.038563
                        },
                        {
                          "name": "totalTackle_p90",
                          "margin": 0.030299
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.030128
                        }
                      ],
                      "others_margin": -0.181132
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 0.301439106464386,
                    "model_output": 0.3014,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.449
                        },
                        {
                          "name": "press_vulnerability",
                          "contribution": -0.024
                        },
                        {
                          "name": "challengeLost",
                          "contribution": -0.0171
                        },
                        {
                          "name": "totalTackle",
                          "contribution": -0.0147
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": -0.0116
                        }
                      ],
                      "others": -0.0366,
                      "total": 0.3014,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.745469
                        },
                        {
                          "name": "press_vulnerability",
                          "margin": -0.061068
                        },
                        {
                          "name": "challengeLost",
                          "margin": -0.045745
                        },
                        {
                          "name": "totalTackle",
                          "margin": -0.041221
                        },
                        {
                          "name": "defensive_actions",
                          "margin": -0.033836
                        }
                      ],
                      "others_margin": -0.114435
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 1.560529112815857,
                    "model_output": 1.5605,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -2.1337
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.1927
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.1835
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": 0.11
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": 0.0638
                        }
                      ],
                      "others": 0.0782,
                      "total": 1.5605,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.962851
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.158073
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.151086
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": 0.080748
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": 0.043974
                        }
                      ],
                      "others_margin": 0.051358
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 0.3865395784378052,
                    "model_output": 0.3865,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.8671
                        },
                        {
                          "name": "aerialWon",
                          "contribution": -0.1314
                        },
                        {
                          "name": "totalClearance",
                          "contribution": -0.0325
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0323
                        },
                        {
                          "name": "minutesPlayed",
                          "contribution": 0.0215
                        }
                      ],
                      "others": -0.0183,
                      "total": 0.3865,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.987353
                        },
                        {
                          "name": "aerialWon",
                          "margin": -0.294746
                        },
                        {
                          "name": "totalClearance",
                          "margin": -0.088654
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.088177
                        },
                        {
                          "name": "minutesPlayed",
                          "margin": 0.054633
                        }
                      ],
                      "others_margin": -0.04613
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.13500593602657318,
                    "model_output": 0.135,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1734
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0703
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0123
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0111
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": -0.0093
                        }
                      ],
                      "others": -0.0597,
                      "total": 0.135,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.173391
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.070269
                        },
                        {
                          "name": "rating",
                          "margin": -0.012304
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.01112
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": -0.00928
                        }
                      ],
                      "others_margin": -0.059761
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.599063396453857,
                    "model_output": 6.5991,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "totalPass",
                          "contribution": -0.0273
                        },
                        {
                          "name": "accuratePass",
                          "contribution": -0.0221
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0188
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0171
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0167
                        }
                      ],
                      "others": -0.084,
                      "total": 6.5991,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "totalPass",
                          "margin": -0.027278
                        },
                        {
                          "name": "accuratePass",
                          "margin": -0.022095
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.018843
                        },
                        {
                          "name": "rating",
                          "margin": -0.017148
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.016719
                        }
                      ],
                      "others_margin": -0.083986
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 3,
                  "role_matches": 2,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "all_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9931, quality 0.468)",
              "stats": {
                "interceptions": 0.4215,
                "tackles": 0.525,
                "tackles_won": 0.2994,
                "clearances": 1.5498,
                "aerial_won": 0.3839,
                "total_shots": 0.1341,
                "rating": 6.5991,
                "minutes": 14.78,
                "total_pass": 20.886,
                "accurate_pass": 16.7186,
                "duels_won": 2.1985,
                "total_long_balls": 4.1673,
                "accurate_long_balls": 0.9352,
                "total_own_half_passes": 13.913,
                "accurate_own_half_passes": 12.2723,
                "total_opp_half_passes": 6.973,
                "accurate_opp_half_passes": 4.4463,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 26.7761,
                "possession_lost": 4.1673,
                "dispossessed": 0.0,
                "duels_lost": 1.5914,
                "aerial_lost": 0.6562,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9845,
                "challenges_lost": 0.0,
                "fouls": 0.9352,
                "fouls_drawn": 0.9845,
                "blocks": 0.6562,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0021,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 6.8417,
                "total_progression": 7.7315,
                "progressive_carries": 0.0,
                "key_pass": 0.0,
                "shots_off_target": 0.1341
              },
              "params": {
                "market_value_eur": 5500000,
                "quality_factor": 0.4683,
                "boost_factor": 0.9931,
                "reference_quality": 0.505,
                "history_matches": 3,
                "history_shrink": 0.625,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0352)",
              "stats": {
                "interceptions": 0.4067,
                "tackles": 0.525,
                "tackles_won": 0.2978,
                "clearances": 1.5498,
                "aerial_won": 0.3839,
                "total_shots": 0.1294,
                "rating": 6.5991,
                "minutes": 14.78,
                "total_pass": 20.886,
                "accurate_pass": 16.7186,
                "duels_won": 2.1985,
                "total_long_balls": 4.1673,
                "accurate_long_balls": 0.9352,
                "total_own_half_passes": 13.913,
                "accurate_own_half_passes": 12.2723,
                "total_opp_half_passes": 6.973,
                "accurate_opp_half_passes": 4.4463,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 26.7761,
                "possession_lost": 4.1673,
                "dispossessed": 0.0,
                "duels_lost": 1.5914,
                "aerial_lost": 0.6562,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.9845,
                "challenges_lost": 0.0,
                "fouls": 0.9156,
                "fouls_drawn": 0.9632,
                "blocks": 0.6562,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0021,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 6.8417,
                "total_progression": 7.7315,
                "progressive_carries": 0.0,
                "key_pass": 0.0,
                "shots_off_target": 0.1341
              },
              "params": {
                "blend_weight": 0.0352,
                "history_matches": 3,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.1642,
                "prior_reliability": 0.0867,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "wasFouled",
                  "before": 0.9845,
                  "after": 0.9632
                },
                {
                  "stat": "fouls",
                  "before": 0.9352,
                  "after": 0.9156
                },
                {
                  "stat": "interceptionWon",
                  "before": 0.4215,
                  "after": 0.4067
                }
              ]
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 14.8 to 19.9 expected minutes (appearance prob 0.41)",
              "stats": {
                "interceptions": 0.5479,
                "tackles": 0.7072,
                "tackles_won": 0.4012,
                "clearances": 2.0877,
                "aerial_won": 0.5171,
                "total_shots": 0.1806,
                "rating": 6.5991,
                "minutes": 19.91,
                "total_pass": 28.1353,
                "accurate_pass": 22.5215,
                "duels_won": 2.9616,
                "total_long_balls": 5.6137,
                "accurate_long_balls": 1.2598,
                "total_own_half_passes": 18.7421,
                "accurate_own_half_passes": 16.5319,
                "total_opp_half_passes": 9.3933,
                "accurate_opp_half_passes": 5.9896,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 36.0698,
                "possession_lost": 5.6137,
                "dispossessed": 0.0,
                "duels_lost": 2.1438,
                "aerial_lost": 0.6562,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 1.3262,
                "challenges_lost": 0.0,
                "fouls": 1.2334,
                "fouls_drawn": 1.2975,
                "blocks": 0.884,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0028,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.2164,
                "total_progression": 10.415,
                "progressive_carries": 0.0,
                "key_pass": 0.0,
                "shots_off_target": 0.1806,
                "bench_appearance_probability": 0.412,
                "bench_expected_minutes": 19.91
              },
              "params": {
                "expected_minutes": 19.91,
                "projection_minutes": 14.78,
                "minutes_scale": 1.3471,
                "appearance_probability": 0.412
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 0.5479,
                "tackles": 0.7072,
                "tackles_won": 0.4012,
                "clearances": 2.0877,
                "aerial_won": 0.5171,
                "total_shots": 0.1806,
                "rating": 6.5991,
                "minutes": 19.91,
                "total_pass": 28.1353,
                "accurate_pass": 22.5215,
                "duels_won": 2.9616,
                "total_long_balls": 5.6137,
                "accurate_long_balls": 1.2598,
                "total_own_half_passes": 18.7421,
                "accurate_own_half_passes": 16.5319,
                "total_opp_half_passes": 9.3933,
                "accurate_opp_half_passes": 5.9896,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 36.0698,
                "possession_lost": 5.6137,
                "dispossessed": 0.0,
                "duels_lost": 2.1438,
                "aerial_lost": 0.6562,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 1.3262,
                "challenges_lost": 0.0,
                "fouls": 1.2334,
                "fouls_drawn": 1.2975,
                "blocks": 0.884,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0028,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.2164,
                "total_progression": 10.415,
                "progressive_carries": 0.0,
                "key_pass": 0.0,
                "shots_off_target": 0.1806,
                "bench_appearance_probability": 0.412,
                "bench_expected_minutes": 19.91
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "not_projected_to_play",
              "description": "Not among the projected substitutes: no share of the team's goals or assists",
              "stats": {
                "interceptions": 0.5479,
                "tackles": 0.7072,
                "tackles_won": 0.4012,
                "clearances": 2.0877,
                "aerial_won": 0.5171,
                "total_shots": 0.1806,
                "rating": 6.5991,
                "minutes": 19.91,
                "total_pass": 28.1353,
                "accurate_pass": 22.5215,
                "duels_won": 2.9616,
                "total_long_balls": 5.6137,
                "accurate_long_balls": 1.2598,
                "total_own_half_passes": 18.7421,
                "accurate_own_half_passes": 16.5319,
                "total_opp_half_passes": 9.3933,
                "accurate_opp_half_passes": 5.9896,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 36.0698,
                "possession_lost": 5.6137,
                "dispossessed": 0.0,
                "duels_lost": 2.1438,
                "aerial_lost": 0.6562,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 1.3262,
                "challenges_lost": 0.0,
                "fouls": 1.2334,
                "fouls_drawn": 1.2975,
                "blocks": 0.884,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0,
                "expected_assists": 0.0028,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.2164,
                "total_progression": 10.415,
                "progressive_carries": 0.0,
                "key_pass": 0.0,
                "shots_off_target": 0.1806,
                "bench_appearance_probability": 0.412,
                "bench_expected_minutes": 19.91,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0
              },
              "params": {
                "appearance_probability": 0.412,
                "projected_substitutes": 2,
                "scoreline_reset": true
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 18 by projected rating, fifa_overall 80.0; not used by the projection)",
              "stats": {
                "interceptions": 0.5479,
                "tackles": 0.7072,
                "tackles_won": 0.4012,
                "clearances": 2.0877,
                "aerial_won": 0.5171,
                "total_shots": 0.1806,
                "rating": 6.5991,
                "minutes": 19.91,
                "total_pass": 28.1353,
                "accurate_pass": 22.5215,
                "duels_won": 2.9616,
                "total_long_balls": 5.6137,
                "accurate_long_balls": 1.2598,
                "total_own_half_passes": 18.7421,
                "accurate_own_half_passes": 16.5319,
                "total_opp_half_passes": 9.3933,
                "accurate_opp_half_passes": 5.9896,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 36.0698,
                "possession_lost": 5.6137,
                "dispossessed": 0.0,
                "duels_lost": 2.1438,
                "aerial_lost": 0.6562,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 1.3262,
                "challenges_lost": 0.0,
                "fouls": 1.2334,
                "fouls_drawn": 1.2975,
                "blocks": 0.884,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0,
                "expected_assists": 0.0028,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 9.2164,
                "total_progression": 10.415,
                "progressive_carries": 0.0,
                "key_pass": 0.0,
                "shots_off_target": 0.1806,
                "bench_appearance_probability": 0.412,
                "bench_expected_minutes": 19.91,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "fifa_overall": 80.0
              },
              "params": {
                "match_squad_rank": 18,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 811,
                "fifa_rank": 673.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 80.0
              }
            }
          ]
        },
        "Unai Núñez": {
          "player_id": 892521,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 14,
          "height": 186,
          "market_value": 3300000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 1,
            "aerial_won": 0,
            "total_shots": 0,
            "rating": 6.8167,
            "minutes": 14,
            "total_pass": 10,
            "accurate_pass": 8,
            "duels_won": 1,
            "total_long_balls": 2,
            "accurate_long_balls": 1,
            "total_own_half_passes": 5,
            "accurate_own_half_passes": 5,
            "total_opp_half_passes": 5,
            "accurate_opp_half_passes": 3,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 15,
            "possession_lost": 1.9408,
            "dispossessed": 0.3871,
            "duels_lost": 1,
            "aerial_lost": 1,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 0,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "blocks": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "expected_goals": 0.0,
            "expected_assists": 0.0021,
            "shots_on_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 3,
            "total_progression": 8,
            "progressive_carries": 0,
            "key_pass": 0,
            "shots_off_target": 0,
            "bench_appearance_probability": 0.217,
            "bench_expected_minutes": 13.59,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 2,
            "projected_substitution_expected_count": 2.144,
            "projected_substitution_game_state_adjustment": 0,
            "substitution_usage": "available_bench_not_projected_used",
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 67,
                "rating": 7.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0537,
                "expected_assists": 0.0331,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 65,
                "accurate_pass": 61,
                "key_pass": 2,
                "tackles": 3,
                "tackles_won": 2,
                "interceptions": 5,
                "clearances": 3,
                "aerial_won": 5,
                "duels_won": 9,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 86,
                "rating": 6.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0238,
                "expected_assists": 0.0192,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 62,
                "accurate_pass": 45,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 5,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.3866,
                "total_shots": 0,
                "total_pass": 54,
                "accurate_pass": 42,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 7,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416306,
              "match_date": "2026-08-22",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0027,
                "total_shots": 0,
                "total_pass": 39,
                "accurate_pass": 37,
                "clearances": 5,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421053,
              "match_date": "2026-08-16",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 90,
                "rating": 7.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0042,
                "total_shots": 0,
                "total_pass": 70,
                "accurate_pass": 65,
                "tackles": 2,
                "tackles_won": 1,
                "clearances": 6,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083739,
              "match_date": "2026-05-23",
              "home_team": "Valencia",
              "away_team": "FC Barcelona",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Valencia",
              "opponent": "FC Barcelona",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.2023,
                "expected_assists": 0.1132,
                "total_shots": 4,
                "shots_on_target": 1,
                "shots_off_target": 3,
                "total_pass": 20,
                "accurate_pass": 16,
                "key_pass": 1,
                "tackles": 3,
                "tackles_won": 1,
                "clearances": 4,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083687,
              "match_date": "2026-05-17",
              "home_team": "Real Sociedad",
              "away_team": "Valencia",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Valencia",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 83,
                "rating": 6.1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0073,
                "total_shots": 0,
                "total_pass": 40,
                "accurate_pass": 32,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 4,
                "aerial_won": 2,
                "duels_won": 4,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083639,
              "match_date": "2026-05-14",
              "home_team": "Valencia",
              "away_team": "Rayo Vallecano",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Valencia",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 58,
                "rating": 7.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0107,
                "total_shots": 0,
                "total_pass": 47,
                "accurate_pass": 39,
                "tackles": 3,
                "interceptions": 3,
                "clearances": 2,
                "duels_won": 3,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083539,
              "match_date": "2026-05-10",
              "home_team": "Athletic Club",
              "away_team": "Valencia",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Valencia",
              "opponent": "Athletic Club",
              "stats": {
                "minutes": 16,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "total_shots": 0,
                "clearances": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083255,
              "match_date": "2026-04-25",
              "home_team": "Valencia",
              "away_team": "Girona FC",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Valencia",
              "opponent": "Girona FC",
              "stats": {
                "minutes": 19,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0002,
                "total_shots": 0,
                "total_pass": 6,
                "accurate_pass": 6,
                "clearances": 2,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 3298,
            "combined_rank_score": 1247.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 91.0,
            "sofascore_rating": 7.5,
            "sofascore_appearances": 1.0,
            "fifa_rank": 2403.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 6,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.8167,
            "source_file": "data/player_rankings.csv",
            "player_name": "Unai Núñez",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Nobel Mendy",
                  "ranking": 3293
                },
                {
                  "player_name": "Michael Zetterer",
                  "ranking": 3294
                },
                {
                  "player_name": "Lukas Nmecha",
                  "ranking": 3295
                },
                {
                  "player_name": "Ruslan Malinovskyi",
                  "ranking": 3296
                },
                {
                  "player_name": "Ibrahim Mbaye",
                  "ranking": 3297
                }
              ],
              "lower": [
                {
                  "player_name": "Rodrigo Muniz",
                  "ranking": 3299
                },
                {
                  "player_name": "Raíllo",
                  "ranking": 3300
                },
                {
                  "player_name": "Gelson Martins",
                  "ranking": 3301
                },
                {
                  "player_name": "Abel Bretones",
                  "ranking": 3302
                },
                {
                  "player_name": "Chiquinho",
                  "ranking": 3303
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.78,
          "history_matches": 18,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "D_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalLongBalls",
              "totalOppositionHalfPasses",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "ballRecovery",
              "touches",
              "totalClearance",
              "wonTackle",
              "interceptionWon",
              "dispossessed",
              "challengeLost",
              "errorLeadToAShot",
              "errorLeadToAGoal",
              "possessionLostCtrl",
              "passValueNormalized",
              "defensiveValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "totalTackle",
              "totalShots",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "long_ball_accuracy",
              "defensive_actions",
              "tackle_success_rate",
              "touches_p90",
              "totalTackle_p90",
              "interceptionWon_p90",
              "totalClearance_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "press_vulnerability",
              "error_severity",
              "aerial_dominance",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "interceptionWon",
              "totalTackle",
              "wonTackle",
              "totalClearance",
              "aerialWon",
              "totalShots",
              "rating"
            ],
            "history_matches": 18,
            "data_confidence": 0.78,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "bench_expected_minutes": 13.586980405874904,
            "bench_appearance_prob": 0.217,
            "market_value_adjustment": 0.9958,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "sub_appearances": 0.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "prior_reliability": 0.2
            },
            "rationale": "Bench projection scaled from XGBoost D_service (18 historical appearances) to 13.6 expected mins (appearance prob 0.22); FBref playing time empirical prior: 0.0 sub appearances, 0 mins/sub."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost D_service raw output over 7 target models",
              "stats": {
                "interceptions": 0.3942,
                "tackles": 0.6986,
                "tackles_won": 0.4248,
                "clearances": 1.6235,
                "aerial_won": 0.6286,
                "total_shots": 0.181,
                "rating": 6.8167,
                "minutes": 27.1,
                "total_pass": 19.9553,
                "accurate_pass": 16.8455,
                "duels_won": 1.7279,
                "total_long_balls": 4.1681,
                "accurate_long_balls": 2.6132,
                "total_own_half_passes": 10.345,
                "accurate_own_half_passes": 9.9563,
                "total_opp_half_passes": 9.6103,
                "accurate_opp_half_passes": 6.8892,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 30.5724,
                "possession_lost": 3.8873,
                "dispossessed": 0.3887,
                "duels_lost": 1.447,
                "aerial_lost": 0.6696,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.7775,
                "challenges_lost": 0.0,
                "fouls": 0.3887,
                "fouls_drawn": 0.5617,
                "blocks": 0.0,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0042,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 6.5005,
                "total_progression": 16.6841,
                "progressive_carries": 0.3887,
                "key_pass": 0.0,
                "shots_off_target": 0.181
              },
              "trace": {
                "model": {
                  "position_service": "D",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:03:23.701438+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 622,
                    "rows": 20280
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 67.0,
                    "is_starting": true,
                    "weight": 0.1585,
                    "rating": 7.7
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 86.0,
                    "is_starting": true,
                    "weight": 0.1347,
                    "rating": 6.1
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1145,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-08-22",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0973,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-08-16",
                    "opponent": "Levante UD",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0827,
                    "rating": 7.5
                  },
                  {
                    "match_date": "2026-05-23",
                    "opponent": "FC Barcelona",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0703,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Real Sociedad",
                    "minutes": 83.0,
                    "is_starting": true,
                    "weight": 0.0598,
                    "rating": 6.1
                  },
                  {
                    "match_date": "2026-05-14",
                    "opponent": "Rayo Vallecano",
                    "minutes": 58.0,
                    "is_starting": false,
                    "weight": 0.0508,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2026-05-10",
                    "opponent": "Athletic Club",
                    "minutes": 16.0,
                    "is_starting": false,
                    "weight": 0.0432,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-04-25",
                    "opponent": "Girona FC",
                    "minutes": 19.0,
                    "is_starting": false,
                    "weight": 0.0367,
                    "rating": 6.9
                  }
                ],
                "feature_row": {
                  "history_matches": 18.0,
                  "is_starting_11": 0.0,
                  "totalClearance": 4.1628,
                  "aerialWon": 1.6729,
                  "totalClearance_p90": 4.9495,
                  "totalTackle": 1.6907,
                  "totalPass": 46.7447
                },
                "per_target": [
                  {
                    "target": "interceptionWon",
                    "predicted": 0.394194632768631,
                    "model_output": 0.3942,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3029
                      },
                      {
                        "name": "interceptionWon",
                        "importance": 0.0395
                      },
                      {
                        "name": "touches",
                        "importance": 0.0282
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0236
                      },
                      {
                        "name": "interceptionWon_p90",
                        "importance": 0.0208
                      }
                    ],
                    "decomposition": {
                      "base": 0.8573,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.4893
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0352
                        },
                        {
                          "name": "interceptionWon_p90",
                          "contribution": 0.0131
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": 0.0079
                        },
                        {
                          "name": "long_ball_accuracy",
                          "contribution": -0.0073
                        }
                      ],
                      "others": -0.0227,
                      "total": 0.3942,
                      "log_link": true,
                      "margin_base": -0.154,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.845776
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.091264
                        },
                        {
                          "name": "interceptionWon_p90",
                          "margin": 0.031982
                        },
                        {
                          "name": "ballRecovery",
                          "margin": 0.018915
                        },
                        {
                          "name": "long_ball_accuracy",
                          "margin": -0.017469
                        }
                      ],
                      "others_margin": -0.055828
                    }
                  },
                  {
                    "target": "totalTackle",
                    "predicted": 0.6986215114593506,
                    "model_output": 0.6986,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2622
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.0638
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0451
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.043
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0317
                      }
                    ],
                    "decomposition": {
                      "base": 1.3939,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.7213
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": 0.0264
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.0247
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": -0.0227
                        },
                        {
                          "name": "totalTackle",
                          "contribution": 0.0149
                        }
                      ],
                      "others": 0.0321,
                      "total": 0.6986,
                      "log_link": true,
                      "margin_base": 0.332089,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.728789
                        },
                        {
                          "name": "defensive_actions",
                          "margin": 0.038453
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.035921
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": -0.034187
                        },
                        {
                          "name": "totalTackle",
                          "margin": 0.022682
                        }
                      ],
                      "others_margin": 0.047026
                    }
                  },
                  {
                    "target": "wonTackle",
                    "predicted": 0.4248293936252594,
                    "model_output": 0.4248,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2392
                      },
                      {
                        "name": "totalTackle",
                        "importance": 0.06
                      },
                      {
                        "name": "totalTackle_p90",
                        "importance": 0.0413
                      },
                      {
                        "name": "defensive_actions",
                        "importance": 0.0398
                      },
                      {
                        "name": "press_vulnerability",
                        "importance": 0.0279
                      }
                    ],
                    "decomposition": {
                      "base": 0.8544,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.4349
                        },
                        {
                          "name": "defensive_actions",
                          "contribution": 0.0247
                        },
                        {
                          "name": "totalTackle",
                          "contribution": 0.0155
                        },
                        {
                          "name": "accuratePass",
                          "contribution": -0.0101
                        },
                        {
                          "name": "totalClearance_p90",
                          "contribution": -0.0092
                        }
                      ],
                      "others": -0.0156,
                      "total": 0.4248,
                      "log_link": true,
                      "margin_base": -0.157413,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.711487
                        },
                        {
                          "name": "defensive_actions",
                          "margin": 0.05731
                        },
                        {
                          "name": "totalTackle",
                          "margin": 0.034255
                        },
                        {
                          "name": "accuratePass",
                          "margin": -0.022203
                        },
                        {
                          "name": "totalClearance_p90",
                          "margin": -0.020648
                        }
                      ],
                      "others_margin": -0.035881
                    }
                  },
                  {
                    "target": "totalClearance",
                    "predicted": 1.6235219240188599,
                    "model_output": 1.6235,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.3045
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.1682
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0854
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0285
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.0201
                      }
                    ],
                    "decomposition": {
                      "base": 3.4514,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -2.1334
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.1936
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": 0.1407
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": -0.0691
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0622
                        }
                      ],
                      "others": -0.0219,
                      "total": 1.6235,
                      "log_link": true,
                      "margin_base": 1.238783,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.962659
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.137083
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": 0.089001
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": -0.042709
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.038505
                        }
                      ],
                      "others_margin": -0.013406
                    }
                  },
                  {
                    "target": "aerialWon",
                    "predicted": 0.628642201423645,
                    "model_output": 0.6286,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1616
                      },
                      {
                        "name": "aerialWon",
                        "importance": 0.1408
                      },
                      {
                        "name": "totalClearance",
                        "importance": 0.0969
                      },
                      {
                        "name": "totalClearance_p90",
                        "importance": 0.0424
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0269
                      }
                    ],
                    "decomposition": {
                      "base": 1.382,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.8219
                        },
                        {
                          "name": "aerialWon",
                          "contribution": 0.1192
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": -0.0377
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0364
                        },
                        {
                          "name": "error_severity",
                          "contribution": 0.0252
                        }
                      ],
                      "others": -0.0746,
                      "total": 0.6286,
                      "log_link": true,
                      "margin_base": 0.323553,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.903127
                        },
                        {
                          "name": "aerialWon",
                          "margin": 0.192877
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": -0.057036
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.055206
                        },
                        {
                          "name": "error_severity",
                          "margin": 0.036533
                        }
                      ],
                      "others_margin": -0.1122
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.18097037076950073,
                    "model_output": 0.181,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1182
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0615
                      },
                      {
                        "name": "possessionLostCtrl",
                        "importance": 0.0311
                      },
                      {
                        "name": "rating",
                        "importance": 0.0298
                      },
                      {
                        "name": "history_matches",
                        "importance": 0.0297
                      }
                    ],
                    "decomposition": {
                      "base": 0.4711,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2714
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": 0.0181
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.01
                        },
                        {
                          "name": "touches",
                          "contribution": -0.0089
                        },
                        {
                          "name": "totalLongBalls",
                          "contribution": 0.0089
                        }
                      ],
                      "others": -0.0468,
                      "total": 0.181,
                      "log_link": false,
                      "margin_base": 0.471132,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.271364
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": 0.018134
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.009965
                        },
                        {
                          "name": "touches",
                          "margin": -0.008938
                        },
                        {
                          "name": "totalLongBalls",
                          "margin": 0.008869
                        }
                      ],
                      "others_margin": -0.046827
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.816734313964844,
                    "model_output": 6.8167,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0688
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0582
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0551
                      },
                      {
                        "name": "touches",
                        "importance": 0.037
                      },
                      {
                        "name": "rating",
                        "importance": 0.0327
                      }
                    ],
                    "decomposition": {
                      "base": 6.7851,
                      "items": [
                        {
                          "name": "totalShots",
                          "contribution": 0.0253
                        },
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0219
                        },
                        {
                          "name": "totalClearance",
                          "contribution": 0.0119
                        },
                        {
                          "name": "rating",
                          "contribution": 0.0118
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0113
                        }
                      ],
                      "others": 0.0158,
                      "total": 6.8167,
                      "log_link": false,
                      "margin_base": 6.785131,
                      "item_margins": [
                        {
                          "name": "totalShots",
                          "margin": 0.025259
                        },
                        {
                          "name": "is_starting_11",
                          "margin": -0.021917
                        },
                        {
                          "name": "totalClearance",
                          "margin": 0.011919
                        },
                        {
                          "name": "rating",
                          "margin": 0.011812
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.01134
                        }
                      ],
                      "others_margin": 0.01587
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 18,
                  "role_matches": 3,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9958, quality 0.441)",
              "stats": {
                "interceptions": 0.3925,
                "tackles": 0.6957,
                "tackles_won": 0.423,
                "clearances": 1.6167,
                "aerial_won": 0.626,
                "total_shots": 0.1802,
                "rating": 6.8167,
                "minutes": 27.1,
                "total_pass": 19.8715,
                "accurate_pass": 16.7747,
                "duels_won": 1.7206,
                "total_long_balls": 4.1506,
                "accurate_long_balls": 2.6022,
                "total_own_half_passes": 10.3016,
                "accurate_own_half_passes": 9.9145,
                "total_opp_half_passes": 9.5699,
                "accurate_opp_half_passes": 6.8603,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 30.444,
                "possession_lost": 3.871,
                "dispossessed": 0.3871,
                "duels_lost": 1.4409,
                "aerial_lost": 0.6668,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.7742,
                "challenges_lost": 0.0,
                "fouls": 0.3871,
                "fouls_drawn": 0.5593,
                "blocks": 0.0,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0042,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 6.4732,
                "total_progression": 16.614,
                "progressive_carries": 0.3871,
                "key_pass": 0.0,
                "shots_off_target": 0.1802
              },
              "params": {
                "market_value_eur": 3300000,
                "quality_factor": 0.4412,
                "boost_factor": 0.9958,
                "reference_quality": 0.505,
                "history_matches": 18,
                "history_shrink": 0.2174,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0283)",
              "stats": {
                "interceptions": 0.3871,
                "tackles": 0.6957,
                "tackles_won": 0.4167,
                "clearances": 1.6167,
                "aerial_won": 0.626,
                "total_shots": 0.1751,
                "rating": 6.8167,
                "minutes": 27.1,
                "total_pass": 19.8715,
                "accurate_pass": 16.7747,
                "duels_won": 1.7206,
                "total_long_balls": 4.1506,
                "accurate_long_balls": 2.6022,
                "total_own_half_passes": 10.3016,
                "accurate_own_half_passes": 9.9145,
                "total_opp_half_passes": 9.5699,
                "accurate_opp_half_passes": 6.8603,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 30.444,
                "possession_lost": 3.871,
                "dispossessed": 0.3871,
                "duels_lost": 1.4409,
                "aerial_lost": 0.6668,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.7742,
                "challenges_lost": 0.0,
                "fouls": 0.3762,
                "fouls_drawn": 0.552,
                "blocks": 0.0,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0042,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 6.4732,
                "total_progression": 16.614,
                "progressive_carries": 0.3871,
                "key_pass": 0.0,
                "shots_off_target": 0.1802
              },
              "params": {
                "blend_weight": 0.0283,
                "history_matches": 18,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.3011,
                "prior_reliability": 0.2,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "fouls",
                  "before": 0.3871,
                  "after": 0.3762
                },
                {
                  "stat": "wasFouled",
                  "before": 0.5593,
                  "after": 0.552
                },
                {
                  "stat": "wonTackle",
                  "before": 0.423,
                  "after": 0.4167
                },
                {
                  "stat": "interceptionWon",
                  "before": 0.3925,
                  "after": 0.3871
                },
                {
                  "stat": "totalShots",
                  "before": 0.1802,
                  "after": 0.1751
                }
              ]
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 27.1 to 13.6 expected minutes (appearance prob 0.22)",
              "stats": {
                "interceptions": 0.1941,
                "tackles": 0.3488,
                "tackles_won": 0.2089,
                "clearances": 0.8106,
                "aerial_won": 0.3139,
                "total_shots": 0.0903,
                "rating": 6.8167,
                "minutes": 13.59,
                "total_pass": 9.9629,
                "accurate_pass": 8.4102,
                "duels_won": 0.8626,
                "total_long_balls": 2.081,
                "accurate_long_balls": 1.3047,
                "total_own_half_passes": 5.1649,
                "accurate_own_half_passes": 4.9708,
                "total_opp_half_passes": 4.798,
                "accurate_opp_half_passes": 3.4395,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 15.2635,
                "possession_lost": 1.9408,
                "dispossessed": 0.3871,
                "duels_lost": 0.7224,
                "aerial_lost": 0.6668,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.3882,
                "challenges_lost": 0.0,
                "fouls": 0.1886,
                "fouls_drawn": 0.2768,
                "blocks": 0.0,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0021,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 3.2454,
                "total_progression": 8.3297,
                "progressive_carries": 0.1941,
                "key_pass": 0.0,
                "shots_off_target": 0.0903,
                "bench_appearance_probability": 0.217,
                "bench_expected_minutes": 13.59
              },
              "params": {
                "expected_minutes": 13.59,
                "projection_minutes": 27.1,
                "minutes_scale": 0.5014,
                "appearance_probability": 0.217
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "interceptions": 0.1941,
                "tackles": 0.3488,
                "tackles_won": 0.2089,
                "clearances": 0.8106,
                "aerial_won": 0.3139,
                "total_shots": 0.0903,
                "rating": 6.8167,
                "minutes": 13.59,
                "total_pass": 9.9629,
                "accurate_pass": 8.4102,
                "duels_won": 0.8626,
                "total_long_balls": 2.081,
                "accurate_long_balls": 1.3047,
                "total_own_half_passes": 5.1649,
                "accurate_own_half_passes": 4.9708,
                "total_opp_half_passes": 4.798,
                "accurate_opp_half_passes": 3.4395,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 15.2635,
                "possession_lost": 1.9408,
                "dispossessed": 0.3871,
                "duels_lost": 0.7224,
                "aerial_lost": 0.6668,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.3882,
                "challenges_lost": 0.0,
                "fouls": 0.1886,
                "fouls_drawn": 0.2768,
                "blocks": 0.0,
                "goals": 0.0,
                "goal_rate": 0.0,
                "assists": 0.0,
                "assist_rate": 0.0,
                "expected_goals": 0.0,
                "expected_assists": 0.0021,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 3.2454,
                "total_progression": 8.3297,
                "progressive_carries": 0.1941,
                "key_pass": 0.0,
                "shots_off_target": 0.0903,
                "bench_appearance_probability": 0.217,
                "bench_expected_minutes": 13.59
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "not_projected_to_play",
              "description": "Not among the projected substitutes: no share of the team's goals or assists",
              "stats": {
                "interceptions": 0.1941,
                "tackles": 0.3488,
                "tackles_won": 0.2089,
                "clearances": 0.8106,
                "aerial_won": 0.3139,
                "total_shots": 0.0903,
                "rating": 6.8167,
                "minutes": 13.59,
                "total_pass": 9.9629,
                "accurate_pass": 8.4102,
                "duels_won": 0.8626,
                "total_long_balls": 2.081,
                "accurate_long_balls": 1.3047,
                "total_own_half_passes": 5.1649,
                "accurate_own_half_passes": 4.9708,
                "total_opp_half_passes": 4.798,
                "accurate_opp_half_passes": 3.4395,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 15.2635,
                "possession_lost": 1.9408,
                "dispossessed": 0.3871,
                "duels_lost": 0.7224,
                "aerial_lost": 0.6668,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.3882,
                "challenges_lost": 0.0,
                "fouls": 0.1886,
                "fouls_drawn": 0.2768,
                "blocks": 0.0,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0,
                "expected_assists": 0.0021,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 3.2454,
                "total_progression": 8.3297,
                "progressive_carries": 0.1941,
                "key_pass": 0.0,
                "shots_off_target": 0.0903,
                "bench_appearance_probability": 0.217,
                "bench_expected_minutes": 13.59,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0
              },
              "params": {
                "appearance_probability": 0.217,
                "projected_substitutes": 2,
                "scoreline_reset": true
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 6 by projected rating, fifa_overall 75.0; not used by the projection)",
              "stats": {
                "interceptions": 0.1941,
                "tackles": 0.3488,
                "tackles_won": 0.2089,
                "clearances": 0.8106,
                "aerial_won": 0.3139,
                "total_shots": 0.0903,
                "rating": 6.8167,
                "minutes": 13.59,
                "total_pass": 9.9629,
                "accurate_pass": 8.4102,
                "duels_won": 0.8626,
                "total_long_balls": 2.081,
                "accurate_long_balls": 1.3047,
                "total_own_half_passes": 5.1649,
                "accurate_own_half_passes": 4.9708,
                "total_opp_half_passes": 4.798,
                "accurate_opp_half_passes": 3.4395,
                "crosses_total": 0.0,
                "crosses_accurate": 0.0,
                "touches": 15.2635,
                "possession_lost": 1.9408,
                "dispossessed": 0.3871,
                "duels_lost": 0.7224,
                "aerial_lost": 0.6668,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "ball_recovery": 0.3882,
                "challenges_lost": 0.0,
                "fouls": 0.1886,
                "fouls_drawn": 0.2768,
                "blocks": 0.0,
                "goal_rate": 0.0,
                "goals": 0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0,
                "expected_assists": 0.0021,
                "shots_on_target": 0.0,
                "big_chances_created": 0.0,
                "xgot": 0.0,
                "ball_carries": 3.2454,
                "total_progression": 8.3297,
                "progressive_carries": 0.1941,
                "key_pass": 0.0,
                "shots_off_target": 0.0903,
                "bench_appearance_probability": 0.217,
                "bench_expected_minutes": 13.59,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "fifa_overall": 75.0
              },
              "params": {
                "match_squad_rank": 6,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3298,
                "fifa_rank": 2403.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 75.0
              }
            }
          ]
        },
        "Urko González": {
          "player_id": 1064009,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 4,
          "height": 189,
          "market_value": 11600000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0182,
            "assist_rate": 0.037,
            "assists": 0,
            "expected_goals": 0.0163,
            "goal_rate": 0.0251,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 0,
            "rating": 6.6895,
            "minutes": 22,
            "total_pass": 12,
            "accurate_pass": 9,
            "duels_won": 2,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_own_half_passes": 3,
            "accurate_own_half_passes": 2,
            "total_opp_half_passes": 9,
            "accurate_opp_half_passes": 7,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 17,
            "possession_lost": 3.2986,
            "dispossessed": 0.3078,
            "duels_lost": 2,
            "aerial_won": 1,
            "aerial_lost": 1,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 1,
            "total_contest": 0,
            "won_contest": 0,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 7,
            "total_progression": 48,
            "progressive_carries": 2,
            "shots_off_target": 0,
            "bench_appearance_probability": 0.315,
            "bench_expected_minutes": 22.38,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 2,
            "projected_substitution_expected_count": 2.144,
            "projected_substitution_game_state_adjustment": 0,
            "substitution_usage": "available_bench_not_projected_used",
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 76.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 45,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0127,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 21
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416345,
              "match_date": "2026-09-15",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 84,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0092,
                "expected_assists": 0.0489,
                "total_shots": 1,
                "total_pass": 30,
                "accurate_pass": 26,
                "interceptions": 2,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 90,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0036,
                "total_shots": 0,
                "total_pass": 27,
                "accurate_pass": 24,
                "interceptions": 1,
                "clearances": 4,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 31,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0109,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 16,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 45,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0017,
                "total_shots": 0,
                "total_pass": 20,
                "accurate_pass": 19,
                "tackles": 1,
                "clearances": 1,
                "duels_won": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416306,
              "match_date": "2026-08-22",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 75,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0151,
                "total_shots": 0,
                "total_pass": 28,
                "accurate_pass": 28,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421053,
              "match_date": "2026-08-16",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 72,
                "rating": 6.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0196,
                "total_shots": 0,
                "total_pass": 31,
                "accurate_pass": 27,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 2,
                "duels_won": 3,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083719,
              "match_date": "2026-05-23",
              "home_team": "Espanyol",
              "away_team": "Real Sociedad",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0136,
                "expected_assists": 0.1222,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 42,
                "accurate_pass": 36,
                "tackles": 2,
                "tackles_won": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083696,
              "match_date": "2026-05-17",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.001,
                "total_shots": 0,
                "total_pass": 22,
                "accurate_pass": 14,
                "tackles": 4,
                "tackles_won": 3,
                "interceptions": 1,
                "clearances": 4,
                "duels_won": 7,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083629,
              "match_date": "2026-05-13",
              "home_team": "Espanyol",
              "away_team": "Athletic Club",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Athletic Club",
              "stats": {
                "minutes": 89,
                "rating": 7.9,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0083,
                "expected_assists": 0.0202,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 54,
                "accurate_pass": 46,
                "tackles": 3,
                "tackles_won": 1,
                "interceptions": 5,
                "clearances": 3,
                "aerial_won": 5,
                "duels_won": 10,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 3267,
            "combined_rank_score": 1211.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 445.0,
            "sofascore_rating": 6.9,
            "sofascore_appearances": 1.0,
            "fifa_rank": 1978.0,
            "fifa_overall": 76.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 13,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.6895,
            "source_file": "data/player_rankings.csv",
            "player_name": "Urko González",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Félix Correia",
                  "ranking": 3262
                },
                {
                  "player_name": "Kenneth Taylor",
                  "ranking": 3263
                },
                {
                  "player_name": "Johan Vásquez",
                  "ranking": 3264
                },
                {
                  "player_name": "Mamadou Sarr",
                  "ranking": 3265
                },
                {
                  "player_name": "Yoan Bonny",
                  "ranking": 3266
                }
              ],
              "lower": [
                {
                  "player_name": "Tasos Douvikas",
                  "ranking": 3268
                },
                {
                  "player_name": "Sam Beukema",
                  "ranking": 3269
                },
                {
                  "player_name": "Máximo Perrone",
                  "ranking": 3270
                },
                {
                  "player_name": "Federico Viñas",
                  "ranking": 3271
                },
                {
                  "player_name": "Marco Reus",
                  "ranking": 3272
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.771,
          "history_matches": 43,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 43,
            "data_confidence": 0.771,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "bench_expected_minutes": 22.382626929085877,
            "bench_appearance_prob": 0.315,
            "market_value_adjustment": 1.0011,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "sub_appearances": 0.0,
              "goals_per90": 0.0,
              "assists_per90": 0.0,
              "prior_reliability": 0.14
            },
            "rationale": "Bench projection scaled from XGBoost M_service (43 historical appearances) to 22.4 expected mins (appearance prob 0.32); FBref playing time empirical prior: 0.0 sub appearances, 0 mins/sub."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 0.2967,
                "expected_assists": 0.0175,
                "assists": 0.0357,
                "assist_rate": 0.0357,
                "expected_goals": 0.0156,
                "goals": 0.0243,
                "goal_rate": 0.0243,
                "shots_on_target": 0.0739,
                "total_shots": 0.2758,
                "rating": 6.6895,
                "minutes": 21.48,
                "total_pass": 11.0886,
                "accurate_pass": 8.8331,
                "duels_won": 2.2889,
                "total_long_balls": 0.2511,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 2.5833,
                "accurate_own_half_passes": 1.9782,
                "total_opp_half_passes": 8.5053,
                "accurate_opp_half_passes": 6.8549,
                "crosses_total": 0.1659,
                "crosses_accurate": 0.0,
                "touches": 15.9235,
                "possession_lost": 3.1621,
                "dispossessed": 0.3075,
                "duels_lost": 1.6743,
                "aerial_won": 0.5216,
                "aerial_lost": 0.7673,
                "interceptions": 0.2398,
                "tackles_won": 1.0615,
                "tackles": 1.0615,
                "clearances": 0.7496,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.4976,
                "fouls": 0.1019,
                "fouls_drawn": 0.7058,
                "blocks": 0.0532,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 7.0811,
                "total_progression": 45.9219,
                "progressive_carries": 2.1622,
                "shots_off_target": 0.2019
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 45.0,
                    "is_starting": true,
                    "weight": 0.1501,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-09-15",
                    "opponent": "Rayo Vallecano",
                    "minutes": 84.0,
                    "is_starting": true,
                    "weight": 0.1276,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1085,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 31.0,
                    "is_starting": false,
                    "weight": 0.0922,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 45.0,
                    "is_starting": true,
                    "weight": 0.0784,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-08-22",
                    "opponent": "Real Madrid",
                    "minutes": 75.0,
                    "is_starting": true,
                    "weight": 0.0666,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2026-08-16",
                    "opponent": "Levante UD",
                    "minutes": 72.0,
                    "is_starting": true,
                    "weight": 0.0566,
                    "rating": 6.9
                  },
                  {
                    "match_date": "2026-05-23",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0481,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Osasuna",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0409,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-05-13",
                    "opponent": "Athletic Club",
                    "minutes": 89.0,
                    "is_starting": true,
                    "weight": 0.0348,
                    "rating": 7.9
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 0.0,
                  "totalShots": 0.3068,
                  "creative_index": 0.0601,
                  "expectedGoals": 0.0061,
                  "expectedAssists": 0.0224,
                  "onTargetScoringAttempt": 0.003
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 0.29666611552238464,
                    "model_output": 0.2967,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.3715
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0553
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0493
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0352
                        },
                        {
                          "name": "creative_efficiency",
                          "contribution": -0.0242
                        }
                      ],
                      "others": -0.054,
                      "total": 0.2967,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.543292
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.113716
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.113402
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.089847
                        },
                        {
                          "name": "creative_efficiency",
                          "margin": -0.066677
                        }
                      ],
                      "others_margin": -0.167398
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.01749003492295742,
                    "model_output": 0.0175,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0357
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0115
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": -0.0064
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0038
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": -0.0023
                        }
                      ],
                      "others": -0.0086,
                      "total": 0.0175,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.537604
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.26188
                        },
                        {
                          "name": "expectedAssists",
                          "margin": -0.181477
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.124419
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": -0.082683
                        }
                      ],
                      "others_margin": -0.402013
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.03571626543998718,
                    "model_output": 0.0357,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0235
                        },
                        {
                          "name": "totalCross",
                          "contribution": -0.0083
                        },
                        {
                          "name": "creative_index",
                          "contribution": -0.0052
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0038
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "contribution": 0.003
                        }
                      ],
                      "others": -0.0117,
                      "total": 0.0357,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.323294
                        },
                        {
                          "name": "totalCross",
                          "margin": -0.144225
                        },
                        {
                          "name": "creative_index",
                          "margin": -0.101954
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.082576
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "margin": 0.065305
                        }
                      ],
                      "others_margin": -0.283
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.015584283508360386,
                    "model_output": 0.0156,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.042
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0176
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0072
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0039
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0019
                        }
                      ],
                      "others": -0.0062,
                      "total": 0.0156,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.587924
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.408004
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.231048
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.150462
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.084919
                        }
                      ],
                      "others_margin": -0.339217
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.024287117645144463,
                    "model_output": 0.0243,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0362
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0154
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0106
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0029
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0023
                        }
                      ],
                      "others": -0.0059,
                      "total": 0.0243,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.46345
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.287834
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.261709
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.084957
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.074742
                        }
                      ],
                      "others_margin": -0.218702
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.07392621785402298,
                    "model_output": 0.0739,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1462
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.042
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0273
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.0135
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.004
                        }
                      ],
                      "others": -0.0171,
                      "total": 0.0739,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.599875
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.26942
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.224712
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.13301
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.042941
                        }
                      ],
                      "others_margin": -0.207692
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.27579519152641296,
                    "model_output": 0.2758,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.3363
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.1795
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": -0.043
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0321
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0308
                        }
                      ],
                      "others": -0.093,
                      "total": 0.2758,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.336272
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.17951
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": -0.04304
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.032103
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.030766
                        }
                      ],
                      "others_margin": -0.092979
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.689518928527832,
                    "model_output": 6.6895,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0717
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0374
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0152
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "contribution": -0.0069
                        },
                        {
                          "name": "creative_efficiency",
                          "contribution": -0.0063
                        }
                      ],
                      "others": -0.0219,
                      "total": 6.6895,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.071717
                        },
                        {
                          "name": "rating",
                          "margin": -0.037428
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.015243
                        },
                        {
                          "name": "ballCarriesCount_p90",
                          "margin": -0.006935
                        },
                        {
                          "name": "creative_efficiency",
                          "margin": -0.006289
                        }
                      ],
                      "others_margin": -0.02174
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 43,
                  "role_matches": 9,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 1.0011, quality 0.541)",
              "stats": {
                "key_pass": 0.297,
                "expected_assists": 0.0175,
                "assists": 0.0358,
                "assist_rate": 0.0358,
                "expected_goals": 0.0156,
                "goals": 0.0243,
                "goal_rate": 0.0243,
                "shots_on_target": 0.074,
                "total_shots": 0.2761,
                "rating": 6.6895,
                "minutes": 21.48,
                "total_pass": 11.1008,
                "accurate_pass": 8.8428,
                "duels_won": 2.2914,
                "total_long_balls": 0.2514,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 2.5861,
                "accurate_own_half_passes": 1.9804,
                "total_opp_half_passes": 8.5147,
                "accurate_opp_half_passes": 6.8624,
                "crosses_total": 0.1661,
                "crosses_accurate": 0.0,
                "touches": 15.941,
                "possession_lost": 3.1656,
                "dispossessed": 0.3078,
                "duels_lost": 1.6761,
                "aerial_won": 0.5222,
                "aerial_lost": 0.7681,
                "interceptions": 0.2401,
                "tackles_won": 1.0627,
                "tackles": 1.0627,
                "clearances": 0.7504,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.4981,
                "fouls": 0.102,
                "fouls_drawn": 0.7066,
                "blocks": 0.0533,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 7.0889,
                "total_progression": 45.9724,
                "progressive_carries": 2.1646,
                "shots_off_target": 0.2021
              },
              "params": {
                "market_value_eur": 11600000,
                "quality_factor": 0.5411,
                "boost_factor": 1.0011,
                "reference_quality": 0.505,
                "history_matches": 43,
                "history_shrink": 0.1042,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0095)",
              "stats": {
                "key_pass": 0.297,
                "expected_assists": 0.0175,
                "assists": 0.0355,
                "assist_rate": 0.0355,
                "expected_goals": 0.0156,
                "goals": 0.0241,
                "goal_rate": 0.0241,
                "shots_on_target": 0.0733,
                "total_shots": 0.2735,
                "rating": 6.6895,
                "minutes": 21.48,
                "total_pass": 11.1008,
                "accurate_pass": 8.8428,
                "duels_won": 2.2914,
                "total_long_balls": 0.2514,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 2.5861,
                "accurate_own_half_passes": 1.9804,
                "total_opp_half_passes": 8.5147,
                "accurate_opp_half_passes": 6.8624,
                "crosses_total": 0.1645,
                "crosses_accurate": 0.0,
                "touches": 15.941,
                "possession_lost": 3.1656,
                "dispossessed": 0.3078,
                "duels_lost": 1.6761,
                "aerial_won": 0.5222,
                "aerial_lost": 0.7681,
                "interceptions": 0.24,
                "tackles_won": 1.0537,
                "tackles": 1.0627,
                "clearances": 0.7504,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.4981,
                "fouls": 0.1032,
                "fouls_drawn": 0.7021,
                "blocks": 0.0533,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 7.0889,
                "total_progression": 45.9724,
                "progressive_carries": 2.1646,
                "shots_off_target": 0.2021
              },
              "params": {
                "blend_weight": 0.0095,
                "history_matches": 43,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.2387,
                "prior_reliability": 0.14,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "wonTackle",
                  "before": 1.0627,
                  "after": 1.0537
                }
              ]
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 21.5 to 22.4 expected minutes (appearance prob 0.32)",
              "stats": {
                "key_pass": 0.3095,
                "expected_assists": 0.0182,
                "assists": 0.037,
                "assist_rate": 0.037,
                "expected_goals": 0.0163,
                "goals": 0.0251,
                "goal_rate": 0.0251,
                "shots_on_target": 0.0764,
                "total_shots": 0.287,
                "rating": 6.6895,
                "minutes": 22.38,
                "total_pass": 11.5673,
                "accurate_pass": 9.2144,
                "duels_won": 2.3877,
                "total_long_balls": 0.262,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 2.6948,
                "accurate_own_half_passes": 2.0636,
                "total_opp_half_passes": 8.8725,
                "accurate_opp_half_passes": 7.1508,
                "crosses_total": 0.1714,
                "crosses_accurate": 0.0,
                "touches": 16.6109,
                "possession_lost": 3.2986,
                "dispossessed": 0.3078,
                "duels_lost": 1.7465,
                "aerial_won": 0.5441,
                "aerial_lost": 0.7681,
                "interceptions": 0.2501,
                "tackles_won": 1.098,
                "tackles": 1.1074,
                "clearances": 0.7819,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.4981,
                "fouls": 0.1075,
                "fouls_drawn": 0.7316,
                "blocks": 0.0555,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 7.3868,
                "total_progression": 47.9042,
                "progressive_carries": 2.2556,
                "shots_off_target": 0.2106,
                "bench_appearance_probability": 0.315,
                "bench_expected_minutes": 22.38
              },
              "params": {
                "expected_minutes": 22.38,
                "projection_minutes": 21.48,
                "minutes_scale": 1.042,
                "appearance_probability": 0.315
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 0.3095,
                "expected_assists": 0.0182,
                "assists": 0.037,
                "assist_rate": 0.037,
                "expected_goals": 0.0163,
                "goals": 0.0251,
                "goal_rate": 0.0251,
                "shots_on_target": 0.0764,
                "total_shots": 0.287,
                "rating": 6.6895,
                "minutes": 22.38,
                "total_pass": 11.5673,
                "accurate_pass": 9.2144,
                "duels_won": 2.3877,
                "total_long_balls": 0.262,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 2.6948,
                "accurate_own_half_passes": 2.0636,
                "total_opp_half_passes": 8.8725,
                "accurate_opp_half_passes": 7.1508,
                "crosses_total": 0.1714,
                "crosses_accurate": 0.0,
                "touches": 16.6109,
                "possession_lost": 3.2986,
                "dispossessed": 0.3078,
                "duels_lost": 1.7465,
                "aerial_won": 0.5441,
                "aerial_lost": 0.7681,
                "interceptions": 0.2501,
                "tackles_won": 1.098,
                "tackles": 1.1074,
                "clearances": 0.7819,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.4981,
                "fouls": 0.1075,
                "fouls_drawn": 0.7316,
                "blocks": 0.0555,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 7.3868,
                "total_progression": 47.9042,
                "progressive_carries": 2.2556,
                "shots_off_target": 0.2106,
                "bench_appearance_probability": 0.315,
                "bench_expected_minutes": 22.38
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": true
              }
            },
            {
              "step": "not_projected_to_play",
              "description": "Not among the projected substitutes: no share of the team's goals or assists",
              "stats": {
                "key_pass": 0.3095,
                "expected_assists": 0.0182,
                "assist_rate": 0.037,
                "assists": 0,
                "expected_goals": 0.0163,
                "goal_rate": 0.0251,
                "goals": 0,
                "shots_on_target": 0.0764,
                "total_shots": 0.287,
                "rating": 6.6895,
                "minutes": 22.38,
                "total_pass": 11.5673,
                "accurate_pass": 9.2144,
                "duels_won": 2.3877,
                "total_long_balls": 0.262,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 2.6948,
                "accurate_own_half_passes": 2.0636,
                "total_opp_half_passes": 8.8725,
                "accurate_opp_half_passes": 7.1508,
                "crosses_total": 0.1714,
                "crosses_accurate": 0.0,
                "touches": 16.6109,
                "possession_lost": 3.2986,
                "dispossessed": 0.3078,
                "duels_lost": 1.7465,
                "aerial_won": 0.5441,
                "aerial_lost": 0.7681,
                "interceptions": 0.2501,
                "tackles_won": 1.098,
                "tackles": 1.1074,
                "clearances": 0.7819,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.4981,
                "fouls": 0.1075,
                "fouls_drawn": 0.7316,
                "blocks": 0.0555,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 7.3868,
                "total_progression": 47.9042,
                "progressive_carries": 2.2556,
                "shots_off_target": 0.2106,
                "bench_appearance_probability": 0.315,
                "bench_expected_minutes": 22.38,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0
              },
              "params": {
                "appearance_probability": 0.315,
                "projected_substitutes": 2,
                "scoreline_reset": true
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 13 by projected rating, fifa_overall 76.0; not used by the projection)",
              "stats": {
                "key_pass": 0.3095,
                "expected_assists": 0.0182,
                "assist_rate": 0.037,
                "assists": 0,
                "expected_goals": 0.0163,
                "goal_rate": 0.0251,
                "goals": 0,
                "shots_on_target": 0.0764,
                "total_shots": 0.287,
                "rating": 6.6895,
                "minutes": 22.38,
                "total_pass": 11.5673,
                "accurate_pass": 9.2144,
                "duels_won": 2.3877,
                "total_long_balls": 0.262,
                "accurate_long_balls": 0.0,
                "total_own_half_passes": 2.6948,
                "accurate_own_half_passes": 2.0636,
                "total_opp_half_passes": 8.8725,
                "accurate_opp_half_passes": 7.1508,
                "crosses_total": 0.1714,
                "crosses_accurate": 0.0,
                "touches": 16.6109,
                "possession_lost": 3.2986,
                "dispossessed": 0.3078,
                "duels_lost": 1.7465,
                "aerial_won": 0.5441,
                "aerial_lost": 0.7681,
                "interceptions": 0.2501,
                "tackles_won": 1.098,
                "tackles": 1.1074,
                "clearances": 0.7819,
                "total_contest": 0.0,
                "won_contest": 0.0,
                "challenges_lost": 0.4981,
                "fouls": 0.1075,
                "fouls_drawn": 0.7316,
                "blocks": 0.0555,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0,
                "xgot": 0.0,
                "ball_carries": 7.3868,
                "total_progression": 47.9042,
                "progressive_carries": 2.2556,
                "shots_off_target": 0.2106,
                "bench_appearance_probability": 0.315,
                "bench_expected_minutes": 22.38,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "fifa_overall": 76.0
              },
              "params": {
                "match_squad_rank": 13,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3267,
                "fifa_rank": 1978.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 76.0
              }
            }
          ]
        },
        "Cyril Ngonge": {
          "player_id": 877037,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 16,
          "height": 179,
          "market_value": 6800000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0873,
            "assist_rate": 0.0981,
            "assists": 0,
            "expected_goals": 0.0671,
            "goal_rate": 0.0989,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "rating": 6.7018,
            "minutes": 22,
            "total_pass": 9,
            "accurate_pass": 8,
            "duels_won": 2,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_own_half_passes": 2,
            "accurate_own_half_passes": 2,
            "total_opp_half_passes": 7,
            "accurate_opp_half_passes": 6,
            "crosses_total": 3,
            "crosses_accurate": 1,
            "touches": 17,
            "possession_lost": 4.0372,
            "dispossessed": 0.0,
            "duels_lost": 2,
            "aerial_won": 0,
            "aerial_lost": 0,
            "interceptions": 1,
            "tackles_won": 0,
            "tackles": 1,
            "clearances": 0,
            "total_contest": 1,
            "won_contest": 0,
            "challenges_lost": 0,
            "fouls": 1,
            "fouls_drawn": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0271,
            "ball_carries": 6,
            "total_progression": 20,
            "progressive_carries": 1,
            "shots_off_target": 1,
            "bench_appearance_probability": 0.507,
            "bench_expected_minutes": 22.16,
            "projected_substitution_order": 2,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 2,
            "projected_substitution_expected_count": 2.144,
            "projected_substitution_game_state_adjustment": 0,
            "substitution_usage": "projected_used_substitute",
            "projected_goals": 0,
            "goal_probability": 0.0329,
            "projected_assists": 0,
            "assist_probability": 0.0424,
            "finishing_factor": 1.25,
            "creation_factor": 1.0922,
            "fifa_overall": 72.0
          },
          "latest_10_games": [
            {
              "match_id": 14083221,
              "match_date": "2026-04-27",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 58,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0146,
                "expected_assists": 0.2677,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 14,
                "accurate_pass": 11,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083330,
              "match_date": "2026-04-23",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 12,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0848,
                "expected_assists": 0.1093,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 4,
                "accurate_pass": 4,
                "key_pass": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083113,
              "match_date": "2026-04-11",
              "home_team": "FC Barcelona",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "FC Barcelona",
              "stats": {
                "minutes": 64,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0834,
                "total_shots": 0,
                "total_pass": 9,
                "accurate_pass": 4,
                "key_pass": 1,
                "tackles": 2,
                "duels_won": 4,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14081811,
              "match_date": "2026-04-04",
              "home_team": "Real Betis",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Betis",
              "stats": {
                "minutes": 78,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0153,
                "expected_assists": 0.0016,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 11,
                "accurate_pass": 8,
                "aerial_won": 1,
                "duels_won": 6,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083673,
              "match_date": "2026-03-21",
              "home_team": "Espanyol",
              "away_team": "Getafe",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Getafe",
              "stats": {
                "minutes": 45,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1223,
                "expected_assists": 0.1253,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 18,
                "accurate_pass": 9,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 2,
                "aerial_won": 4,
                "duels_won": 7,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14081800,
              "match_date": "2026-03-09",
              "home_team": "Espanyol",
              "away_team": "Real Oviedo",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Oviedo",
              "stats": {
                "minutes": 62,
                "rating": 6.5,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.1511,
                "expected_assists": 0.185,
                "total_shots": 3,
                "shots_on_target": 2,
                "shots_off_target": 1,
                "total_pass": 27,
                "accurate_pass": 20,
                "key_pass": 3,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083561,
              "match_date": "2026-02-21",
              "home_team": "Atlético Madrid",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 20,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0343,
                "expected_assists": 0.0078,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 8,
                "accurate_pass": 8,
                "interceptions": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083524,
              "match_date": "2026-02-14",
              "home_team": "Espanyol",
              "away_team": "Celta Vigo",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 56,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.1116,
                "total_shots": 0,
                "total_pass": 17,
                "accurate_pass": 17,
                "key_pass": 1,
                "interceptions": 1,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083303,
              "match_date": "2026-02-09",
              "home_team": "Villarreal",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 31,
                "rating": 7.2,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.0491,
                "expected_assists": 0.0633,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 14,
                "accurate_pass": 10,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 1,
                "aerial_won": 1,
                "duels_won": 5,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 4446,
            "combined_rank_score": 2464.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 784.0,
            "sofascore_rating": 6.6333,
            "sofascore_appearances": 9.0,
            "fifa_rank": 4144.0,
            "fifa_overall": 72.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 11,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7018,
            "source_file": "data/player_rankings.csv",
            "player_name": "Cyril Ngonge",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Lyle Foster",
                  "ranking": 4441
                },
                {
                  "player_name": "Bruma",
                  "ranking": 4442
                },
                {
                  "player_name": "João Carvalho",
                  "ranking": 4443
                },
                {
                  "player_name": "Herman Johansson",
                  "ranking": 4444
                },
                {
                  "player_name": "Jordan Holsgrove",
                  "ranking": 4445
                }
              ],
              "lower": [
                {
                  "player_name": "Patrick Roberts",
                  "ranking": 4447
                },
                {
                  "player_name": "Yanis Begraoui",
                  "ranking": 4448
                },
                {
                  "player_name": "Vítor Carvalho",
                  "ranking": 4449
                },
                {
                  "player_name": "Pau Víctor",
                  "ranking": 4450
                },
                {
                  "player_name": "Mike Trésor",
                  "ranking": 4451
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.75,
          "history_matches": 9,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 9,
            "data_confidence": 0.75,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 22.157394470824215,
            "bench_appearance_prob": 0.5071542941283733,
            "market_value_adjustment": 0.9978,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost M_service (9 historical appearances) to 22.2 expected mins (appearance prob 0.51)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 0.6117,
                "expected_assists": 0.0759,
                "assists": 0.0869,
                "assist_rate": 0.0869,
                "expected_goals": 0.0584,
                "goals": 0.0876,
                "goal_rate": 0.0876,
                "shots_on_target": 0.2488,
                "total_shots": 0.7809,
                "rating": 6.7018,
                "minutes": 19.59,
                "total_pass": 8.1302,
                "accurate_pass": 7.0068,
                "duels_won": 1.4043,
                "total_long_balls": 0.9417,
                "accurate_long_balls": 0.6608,
                "total_own_half_passes": 2.0651,
                "accurate_own_half_passes": 2.0651,
                "total_opp_half_passes": 6.0651,
                "accurate_opp_half_passes": 4.9417,
                "crosses_total": 2.2313,
                "crosses_accurate": 0.6696,
                "touches": 15.3188,
                "possession_lost": 3.5773,
                "dispossessed": 0.0,
                "duels_lost": 1.6113,
                "aerial_won": 0.2809,
                "aerial_lost": 0.0,
                "interceptions": 0.6113,
                "tackles_won": 0.2808,
                "tackles": 0.5617,
                "clearances": 0.0,
                "total_contest": 0.8921,
                "won_contest": 0.0,
                "challenges_lost": 0.3304,
                "fouls": 0.7191,
                "fouls_drawn": 0.5617,
                "blocks": 0.0,
                "big_chances_created": 0.3887,
                "big_chances_missed": 0.0,
                "xgot": 0.0236,
                "ball_carries": 5.6268,
                "total_progression": 17.5558,
                "progressive_carries": 1.0,
                "shots_off_target": 0.5321
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-04-27",
                    "opponent": "Levante UD",
                    "minutes": 58.0,
                    "is_starting": true,
                    "weight": 0.1952,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-04-23",
                    "opponent": "Rayo Vallecano",
                    "minutes": 12.0,
                    "is_starting": false,
                    "weight": 0.1659,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-04-11",
                    "opponent": "FC Barcelona",
                    "minutes": 64.0,
                    "is_starting": true,
                    "weight": 0.141,
                    "rating": 6.2
                  },
                  {
                    "match_date": "2026-04-04",
                    "opponent": "Real Betis",
                    "minutes": 78.0,
                    "is_starting": true,
                    "weight": 0.1199,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-03-21",
                    "opponent": "Getafe",
                    "minutes": 45.0,
                    "is_starting": true,
                    "weight": 0.1019,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-03-09",
                    "opponent": "Real Oviedo",
                    "minutes": 62.0,
                    "is_starting": true,
                    "weight": 0.0866,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-02-21",
                    "opponent": "Atlético Madrid",
                    "minutes": 20.0,
                    "is_starting": false,
                    "weight": 0.0736,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-02-14",
                    "opponent": "Celta Vigo",
                    "minutes": 56.0,
                    "is_starting": true,
                    "weight": 0.0626,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-02-09",
                    "opponent": "Villarreal",
                    "minutes": 31.0,
                    "is_starting": false,
                    "weight": 0.0532,
                    "rating": 7.2
                  }
                ],
                "feature_row": {
                  "history_matches": 9.0,
                  "is_starting_11": 0.0,
                  "totalShots": 1.1887,
                  "creative_index": 0.4244,
                  "expectedGoals": 0.0494,
                  "expectedAssists": 0.1221,
                  "onTargetScoringAttempt": 0.5344
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 0.6117101311683655,
                    "model_output": 0.6117,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.3807
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0421
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0359
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": -0.0229
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "contribution": 0.0178
                        }
                      ],
                      "others": 0.0333,
                      "total": 0.6117,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.561411
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.079993
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.06345
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": -0.039966
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "margin": 0.031239
                        }
                      ],
                      "others_margin": 0.056014
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.07589277625083923,
                    "model_output": 0.0759,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0332
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0111
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0042
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": 0.0043
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0029
                        }
                      ],
                      "others": 0.0066,
                      "total": 0.0759,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.488586
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.190962
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.064403
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": 0.060968
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.041356
                        }
                      ],
                      "others_margin": 0.091223
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.08688738942146301,
                    "model_output": 0.0869,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0216
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.006
                        },
                        {
                          "name": "creative_index",
                          "contribution": 0.0058
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0062
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "contribution": 0.0039
                        }
                      ],
                      "others": 0.0014,
                      "total": 0.0869,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.291838
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.090187
                        },
                        {
                          "name": "creative_index",
                          "margin": 0.080619
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.079101
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "margin": 0.046793
                        }
                      ],
                      "others_margin": 0.0144
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.05839943140745163,
                    "model_output": 0.0584,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0419
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0064
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0059
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0047
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0035
                        }
                      ],
                      "others": -0.0028,
                      "total": 0.0584,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.586546
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.114203
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.105214
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.084375
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.058569
                        }
                      ],
                      "others_margin": -0.045918
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.08758551627397537,
                    "model_output": 0.0876,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.038
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0114
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0063
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0045
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0042
                        }
                      ],
                      "others": 0.0016,
                      "total": 0.0876,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.493072
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.17452
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.085035
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.056466
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.050341
                        }
                      ],
                      "others_margin": 0.017985
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.24884746968746185,
                    "model_output": 0.2488,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1507
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0421
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0145
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": 0.0146
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0102
                        }
                      ],
                      "others": 0.0145,
                      "total": 0.2488,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.625502
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.217447
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.065331
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": 0.061694
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.042758
                        }
                      ],
                      "others_margin": 0.059912
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.7809035778045654,
                    "model_output": 0.7809,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.5147
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.1606
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0452
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0446
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0361
                        }
                      ],
                      "others": 0.0186,
                      "total": 0.7809,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.514674
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.160612
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.045173
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.044627
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.036068
                        }
                      ],
                      "others_margin": 0.018632
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.7017903327941895,
                    "model_output": 6.7018,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.076
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0509
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0321
                        },
                        {
                          "name": "creative_efficiency",
                          "contribution": 0.013
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0091
                        }
                      ],
                      "others": 0.008,
                      "total": 6.7018,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.076019
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.050915
                        },
                        {
                          "name": "rating",
                          "margin": -0.032142
                        },
                        {
                          "name": "creative_efficiency",
                          "margin": 0.012951
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.009116
                        }
                      ],
                      "others_margin": 0.008164
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 9,
                  "role_matches": 3,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9978, quality 0.484)",
              "stats": {
                "key_pass": 0.6104,
                "expected_assists": 0.0757,
                "assists": 0.0867,
                "assist_rate": 0.0867,
                "expected_goals": 0.0583,
                "goals": 0.0874,
                "goal_rate": 0.0874,
                "shots_on_target": 0.2483,
                "total_shots": 0.7792,
                "rating": 6.7018,
                "minutes": 19.59,
                "total_pass": 8.1123,
                "accurate_pass": 6.9914,
                "duels_won": 1.4012,
                "total_long_balls": 0.9396,
                "accurate_long_balls": 0.6593,
                "total_own_half_passes": 2.0606,
                "accurate_own_half_passes": 2.0606,
                "total_opp_half_passes": 6.0518,
                "accurate_opp_half_passes": 4.9308,
                "crosses_total": 2.2264,
                "crosses_accurate": 0.6681,
                "touches": 15.2851,
                "possession_lost": 3.5694,
                "dispossessed": 0.0,
                "duels_lost": 1.6078,
                "aerial_won": 0.2803,
                "aerial_lost": 0.0,
                "interceptions": 0.61,
                "tackles_won": 0.2802,
                "tackles": 0.5605,
                "clearances": 0.0,
                "total_contest": 0.8901,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.7175,
                "fouls_drawn": 0.5605,
                "blocks": 0.0,
                "big_chances_created": 0.3878,
                "big_chances_missed": 0.0,
                "xgot": 0.0235,
                "ball_carries": 5.6144,
                "total_progression": 17.5172,
                "progressive_carries": 0.9978,
                "shots_off_target": 0.5309
              },
              "params": {
                "market_value_eur": 6800000,
                "quality_factor": 0.4842,
                "boost_factor": 0.9978,
                "reference_quality": 0.505,
                "history_matches": 9,
                "history_shrink": 0.3571,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 19.6 to 22.2 expected minutes (appearance prob 0.51)",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0856,
                "assists": 0.0981,
                "assist_rate": 0.0981,
                "expected_goals": 0.0659,
                "goals": 0.0989,
                "goal_rate": 0.0989,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0266,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16
              },
              "params": {
                "expected_minutes": 22.16,
                "projection_minutes": 19.59,
                "minutes_scale": 1.1311,
                "appearance_probability": 0.507
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0856,
                "assists": 0.0981,
                "assist_rate": 0.0981,
                "expected_goals": 0.0659,
                "goals": 0.0989,
                "goal_rate": 0.0989,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0266,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0873,
                "assist_rate": 0.0981,
                "assists": 0,
                "expected_goals": 0.0671,
                "goal_rate": 0.0989,
                "goals": 0,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0271,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.0922
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 0.507
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 11 by projected rating, fifa_overall 72.0; not used by the projection)",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0873,
                "assist_rate": 0.0981,
                "assists": 0,
                "expected_goals": 0.0671,
                "goal_rate": 0.0989,
                "goals": 0,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0271,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.0922,
                "fifa_overall": 72.0
              },
              "params": {
                "match_squad_rank": 11,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 4446,
                "fifa_rank": 4144.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 72.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0873,
                "assist_rate": 0.0981,
                "assists": 0,
                "expected_goals": 0.0671,
                "goal_rate": 0.0989,
                "goals": 0,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0271,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0329,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.0922,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.0329,
                "scorer_weight": 0.0425,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0261,
                "finishing_factor": 1.25,
                "appearance_weight": 0.507,
                "weight_rank": 8,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0873,
                "assist_rate": 0.0981,
                "assists": 0,
                "expected_goals": 0.0671,
                "goal_rate": 0.0989,
                "goals": 0,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0271,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0329,
                "projected_assists": 0,
                "assist_probability": 0.0424,
                "finishing_factor": 1.25,
                "creation_factor": 1.0922,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0424,
                "provider_weight": 0.0483,
                "squad_weight_total": 0.9581,
                "weight_share": 0.0505,
                "creation_factor": 1.0922,
                "appearance_weight": 0.507,
                "weight_rank": 7,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Tyrhys Dolan": {
          "player_id": 1063015,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 24,
          "height": 170,
          "market_value": 10800000,
          "stats": {
            "expected_goals": 0.0399,
            "goal_rate": 0.0495,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 0,
            "expected_assists": 0.0414,
            "key_pass": 0,
            "rating": 6.6496,
            "minutes": 26,
            "total_pass": 8,
            "accurate_pass": 7,
            "duels_won": 2,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 6,
            "accurate_opp_half_passes": 5,
            "crosses_total": 2,
            "crosses_accurate": 0,
            "touches": 17,
            "possession_lost": 5.7271,
            "dispossessed": 0.1363,
            "duels_lost": 2,
            "aerial_lost": 1,
            "total_contest": 1,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 1,
            "assist_rate": 0.0,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0418,
            "offsides": 0,
            "ball_carries": 6,
            "total_progression": 21,
            "progressive_carries": 1,
            "shots_off_target": 0,
            "bench_appearance_probability": 0.342,
            "bench_expected_minutes": 25.67,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 2,
            "projected_substitution_expected_count": 2.144,
            "projected_substitution_game_state_adjustment": 0,
            "substitution_usage": "available_bench_not_projected_used",
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 74.0
          },
          "latest_10_games": [
            {
              "match_id": 16416299,
              "match_date": "2026-09-18",
              "home_team": "Espanyol",
              "away_team": "Elche",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Elche",
              "stats": {
                "minutes": 23,
                "rating": 6.7,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1388,
                "expected_assists": 0.0858,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 13,
                "accurate_pass": 9,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416327,
              "match_date": "2026-09-12",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 66,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.1573,
                "total_shots": 0,
                "total_pass": 12,
                "accurate_pass": 11,
                "clearances": 1,
                "duels_won": 1,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416323,
              "match_date": "2026-09-06",
              "home_team": "Espanyol",
              "away_team": "Sevilla",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0118,
                "total_shots": 0,
                "total_pass": 23,
                "accurate_pass": 19,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "duels_won": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416310,
              "match_date": "2026-08-29",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 83,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.1341,
                "total_shots": 0,
                "total_pass": 16,
                "accurate_pass": 15,
                "key_pass": 1,
                "interceptions": 1,
                "clearances": 1,
                "duels_won": 5,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16416306,
              "match_date": "2026-08-22",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 5.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.1023,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 18,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 1,
                "duels_won": 2,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 16421053,
              "match_date": "2026-08-16",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 81,
                "rating": 7.7,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.2108,
                "expected_assists": 0.0398,
                "total_shots": 4,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 29,
                "accurate_pass": 24,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 2,
                "duels_won": 2,
                "ball_recovery": 11
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "97268",
              "season_name": "LaLiga 26/27",
              "season_year": "26/27"
            },
            {
              "match_id": 14083719,
              "match_date": "2026-05-23",
              "home_team": "Espanyol",
              "away_team": "Real Sociedad",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 45,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1364,
                "expected_assists": 0.0032,
                "total_shots": 2,
                "shots_on_target": 1,
                "total_pass": 10,
                "accurate_pass": 9,
                "tackles": 3,
                "tackles_won": 2,
                "clearances": 1,
                "duels_won": 5,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083696,
              "match_date": "2026-05-17",
              "home_team": "Osasuna",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 76,
                "rating": 7.1,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_assists": 0.5799,
                "total_shots": 0,
                "total_pass": 10,
                "accurate_pass": 9,
                "key_pass": 2,
                "tackles": 3,
                "tackles_won": 1,
                "clearances": 1,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083587,
              "match_date": "2026-05-09",
              "home_team": "Sevilla",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Sevilla",
              "stats": {
                "minutes": 90,
                "rating": 7.5,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.2114,
                "expected_assists": 0.0036,
                "total_shots": 3,
                "shots_on_target": 2,
                "shots_off_target": 1,
                "total_pass": 8,
                "accurate_pass": 5,
                "interceptions": 1,
                "clearances": 1,
                "duels_won": 4,
                "ball_recovery": 9
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083422,
              "match_date": "2026-05-03",
              "home_team": "Espanyol",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 73,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0215,
                "total_shots": 0,
                "total_pass": 14,
                "accurate_pass": 11,
                "key_pass": 3,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 1,
                "duels_won": 4,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 3488,
            "combined_rank_score": 1474.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 52.0,
            "sofascore_rating": 7.7,
            "sofascore_appearances": 1.0,
            "fifa_rank": 2897.0,
            "fifa_overall": 74.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 16,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.6496,
            "source_file": "data/player_rankings.csv",
            "player_name": "Tyrhys Dolan",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Leandro González Pírez",
                  "ranking": 3483
                },
                {
                  "player_name": "Mahdi Camara",
                  "ranking": 3484
                },
                {
                  "player_name": "Saud Abdulhamid",
                  "ranking": 3485
                },
                {
                  "player_name": "Orel Mangala",
                  "ranking": 3486
                },
                {
                  "player_name": "Lassine Sinayoko",
                  "ranking": 3487
                }
              ],
              "lower": [
                {
                  "player_name": "Yann Gboho",
                  "ranking": 3489
                },
                {
                  "player_name": "Ansu Fati",
                  "ranking": 3490
                },
                {
                  "player_name": "Marcus Edwards",
                  "ranking": 3491
                },
                {
                  "player_name": "Ismaël Doukouré",
                  "ranking": 3492
                },
                {
                  "player_name": "Unai Marrero",
                  "ranking": 3493
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value",
            "fbref_season"
          ],
          "data_confidence": 0.778,
          "history_matches": 42,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 42,
            "data_confidence": 0.778,
            "data_sources": [
              "match_history",
              "market_value",
              "fbref_season"
            ],
            "bench_expected_minutes": 25.665977174234964,
            "bench_appearance_prob": 0.342,
            "market_value_adjustment": 1.0009,
            "fbref_prior_metrics": {
              "squad": "Espanyol",
              "competition": "La Liga",
              "season": "2026-2027",
              "appearances": 3.0,
              "starts": 3.0,
              "sub_appearances": 0.0,
              "goals_per90": 0.3571428571428571,
              "assists_per90": 0.0,
              "prior_reliability": 0.1867
            },
            "rationale": "Bench projection scaled from XGBoost F_service (42 historical appearances) to 25.7 expected mins (appearance prob 0.34); FBref playing time empirical prior: 0.0 sub appearances, 0 mins/sub."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.0474,
                "goals": 0.058,
                "goal_rate": 0.058,
                "shots_on_target": 0.1902,
                "total_shots": 0.5655,
                "expected_assists": 0.0493,
                "key_pass": 0.386,
                "rating": 6.6496,
                "minutes": 30.57,
                "total_pass": 9.8686,
                "accurate_pass": 7.8339,
                "duels_won": 2.5444,
                "total_long_balls": 0.2036,
                "accurate_long_balls": 0.0626,
                "total_opp_half_passes": 7.5364,
                "accurate_opp_half_passes": 5.8684,
                "crosses_total": 2.3072,
                "crosses_accurate": 0.3016,
                "touches": 20.8009,
                "possession_lost": 6.8153,
                "dispossessed": 0.1362,
                "duels_lost": 2.0678,
                "aerial_lost": 0.6091,
                "total_contest": 1.2819,
                "won_contest": 0.5162,
                "ball_recovery": 1.7568,
                "challenges_lost": 0.275,
                "fouls": 0.3555,
                "fouls_drawn": 0.661,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.5069,
                "tackles_won": 0.6633,
                "tackles": 1.0227,
                "clearances": 0.1659,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0626,
                "xgot": 0.0498,
                "offsides": 0.2325,
                "ball_carries": 7.1159,
                "total_progression": 25.0623,
                "progressive_carries": 0.8931,
                "shots_off_target": 0.3753
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-09-18",
                    "opponent": "Elche",
                    "minutes": 23.0,
                    "is_starting": false,
                    "weight": 0.1502,
                    "rating": 6.7
                  },
                  {
                    "match_date": "2026-09-12",
                    "opponent": "Osasuna",
                    "minutes": 66.0,
                    "is_starting": true,
                    "weight": 0.1276,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-09-06",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1085,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-08-29",
                    "opponent": "Real Sociedad",
                    "minutes": 83.0,
                    "is_starting": true,
                    "weight": 0.0922,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-08-22",
                    "opponent": "Real Madrid",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0784,
                    "rating": 5.8
                  },
                  {
                    "match_date": "2026-08-16",
                    "opponent": "Levante UD",
                    "minutes": 81.0,
                    "is_starting": true,
                    "weight": 0.0666,
                    "rating": 7.7
                  },
                  {
                    "match_date": "2026-05-23",
                    "opponent": "Real Sociedad",
                    "minutes": 45.0,
                    "is_starting": false,
                    "weight": 0.0566,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-05-17",
                    "opponent": "Osasuna",
                    "minutes": 76.0,
                    "is_starting": true,
                    "weight": 0.0481,
                    "rating": 7.1
                  },
                  {
                    "match_date": "2026-05-09",
                    "opponent": "Sevilla",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0409,
                    "rating": 7.5
                  },
                  {
                    "match_date": "2026-05-03",
                    "opponent": "Real Madrid",
                    "minutes": 73.0,
                    "is_starting": true,
                    "weight": 0.0348,
                    "rating": 6.6
                  }
                ],
                "feature_row": {
                  "history_matches": 20.0,
                  "is_starting_11": 0.0,
                  "expectedGoals": 0.0598,
                  "totalOppositionHalfPasses": 10.5436,
                  "accurateOppositionHalfPasses": 8.7696,
                  "accuratePass": 13.0633,
                  "totalShots": 0.9159
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.047438088804483414,
                    "model_output": 0.0474,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.085
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0205
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": -0.009
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0059
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.004
                        }
                      ],
                      "others": -0.0272,
                      "total": 0.0474,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.55771
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.198016
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": -0.101287
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.072602
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.052649
                        }
                      ],
                      "others_margin": -0.451388
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.058001842349767685,
                    "model_output": 0.058,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0804
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0171
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0126
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0078
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": -0.0071
                        }
                      ],
                      "others": -0.0207,
                      "total": 0.058,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.502253
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.14976
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.125884
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.086871
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": -0.086057
                        }
                      ],
                      "others_margin": -0.305591
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.1901760697364807,
                    "model_output": 0.1902,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2011
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.0297
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0234
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0194
                        },
                        {
                          "name": "xg_per_shot",
                          "contribution": -0.0157
                        }
                      ],
                      "others": -0.0575,
                      "total": 0.1902,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.469248
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.092504
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.079503
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.071247
                        },
                        {
                          "name": "xg_per_shot",
                          "margin": -0.061589
                        }
                      ],
                      "others_margin": -0.263919
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.5654326677322388,
                    "model_output": 0.5654,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.4914
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.1114
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": -0.0281
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0278
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.0234
                        }
                      ],
                      "others": -0.1312,
                      "total": 0.5654,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.491401
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.111443
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": -0.02808
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.027844
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.023402
                        }
                      ],
                      "others_margin": -0.131104
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.04930455982685089,
                    "model_output": 0.0493,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0209
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0058
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0031
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": 0.0019
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0019
                        }
                      ],
                      "others": 0.0032,
                      "total": 0.0493,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.392907
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.12445
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.065658
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": 0.039726
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.039445
                        }
                      ],
                      "others_margin": 0.06855
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 0.38599470257759094,
                    "model_output": 0.386,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2781
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0237
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0188
                        },
                        {
                          "name": "totalProgression",
                          "contribution": -0.013
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0115
                        }
                      ],
                      "others": 0.0195,
                      "total": 0.386,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.532104
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.061675
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.049343
                        },
                        {
                          "name": "totalProgression",
                          "margin": -0.033869
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.030817
                        }
                      ],
                      "others_margin": 0.051751
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.649640083312988,
                    "model_output": 6.6496,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0531
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": -0.0127
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.0119
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0106
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "contribution": 0.0098
                        }
                      ],
                      "others": -0.0341,
                      "total": 6.6496,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.053122
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": -0.01267
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.011854
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.010619
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "margin": 0.00981
                        }
                      ],
                      "others_margin": -0.034065
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 42,
                  "role_matches": 9,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 1.0009, quality 0.532)",
              "stats": {
                "expected_goals": 0.0475,
                "goals": 0.0581,
                "goal_rate": 0.0581,
                "shots_on_target": 0.1903,
                "total_shots": 0.566,
                "expected_assists": 0.0493,
                "key_pass": 0.3863,
                "rating": 6.6496,
                "minutes": 30.57,
                "total_pass": 9.8775,
                "accurate_pass": 7.841,
                "duels_won": 2.5467,
                "total_long_balls": 0.2038,
                "accurate_long_balls": 0.0627,
                "total_opp_half_passes": 7.5432,
                "accurate_opp_half_passes": 5.8737,
                "crosses_total": 2.3093,
                "crosses_accurate": 0.3019,
                "touches": 20.8196,
                "possession_lost": 6.8214,
                "dispossessed": 0.1363,
                "duels_lost": 2.0697,
                "aerial_lost": 0.6096,
                "total_contest": 1.2831,
                "won_contest": 0.5167,
                "ball_recovery": 1.7584,
                "challenges_lost": 0.2752,
                "fouls": 0.3558,
                "fouls_drawn": 0.6616,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.5074,
                "tackles_won": 0.6639,
                "tackles": 1.0236,
                "clearances": 0.166,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0627,
                "xgot": 0.0498,
                "offsides": 0.2327,
                "ball_carries": 7.1223,
                "total_progression": 25.0849,
                "progressive_carries": 0.8939,
                "shots_off_target": 0.3756
              },
              "params": {
                "market_value_eur": 10800000,
                "quality_factor": 0.5318,
                "boost_factor": 1.0009,
                "reference_quality": 0.505,
                "history_matches": 42,
                "history_shrink": 0.1064,
                "market_value_known": true
              }
            },
            {
              "step": "fbref_prior_blend",
              "description": "FBref 2026-27 prior blended (weight 0.0129)",
              "stats": {
                "expected_goals": 0.0475,
                "goals": 0.0589,
                "goal_rate": 0.0589,
                "shots_on_target": 0.1894,
                "total_shots": 0.565,
                "expected_assists": 0.0493,
                "key_pass": 0.3863,
                "rating": 6.6496,
                "minutes": 30.57,
                "total_pass": 9.8775,
                "accurate_pass": 7.841,
                "duels_won": 2.5467,
                "total_long_balls": 0.2038,
                "accurate_long_balls": 0.0627,
                "total_opp_half_passes": 7.5432,
                "accurate_opp_half_passes": 5.8737,
                "crosses_total": 2.292,
                "crosses_accurate": 0.3019,
                "touches": 20.8196,
                "possession_lost": 6.8214,
                "dispossessed": 0.1363,
                "duels_lost": 2.0697,
                "aerial_lost": 0.6096,
                "total_contest": 1.2831,
                "won_contest": 0.5167,
                "ball_recovery": 1.7584,
                "challenges_lost": 0.2752,
                "fouls": 0.359,
                "fouls_drawn": 0.6593,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.5087,
                "tackles_won": 0.6585,
                "tackles": 1.0236,
                "clearances": 0.166,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0627,
                "xgot": 0.0498,
                "offsides": 0.2313,
                "ball_carries": 7.1223,
                "total_progression": 25.0849,
                "progressive_carries": 0.8939,
                "shots_off_target": 0.3756
              },
              "params": {
                "blend_weight": 0.0129,
                "history_matches": 42,
                "season_overlap_discount": 1.0,
                "per90_to_match_factor": 0.3397,
                "prior_reliability": 0.1867,
                "competition": "La Liga",
                "squad": "Espanyol"
              },
              "changes": [
                {
                  "stat": "totalCross",
                  "before": 2.3093,
                  "after": 2.292
                },
                {
                  "stat": "wonTackle",
                  "before": 0.6639,
                  "after": 0.6585
                }
              ]
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 30.6 to 25.7 expected minutes (appearance prob 0.34)",
              "stats": {
                "expected_goals": 0.0399,
                "goals": 0.0495,
                "goal_rate": 0.0495,
                "shots_on_target": 0.159,
                "total_shots": 0.4744,
                "expected_assists": 0.0414,
                "key_pass": 0.3243,
                "rating": 6.6496,
                "minutes": 25.67,
                "total_pass": 8.293,
                "accurate_pass": 6.5832,
                "duels_won": 2.1382,
                "total_long_balls": 0.1711,
                "accurate_long_balls": 0.0526,
                "total_opp_half_passes": 6.3331,
                "accurate_opp_half_passes": 4.9314,
                "crosses_total": 1.9243,
                "crosses_accurate": 0.2535,
                "touches": 17.4797,
                "possession_lost": 5.7271,
                "dispossessed": 0.1363,
                "duels_lost": 1.7377,
                "aerial_lost": 0.6096,
                "total_contest": 1.0773,
                "won_contest": 0.4338,
                "ball_recovery": 1.4763,
                "challenges_lost": 0.2752,
                "fouls": 0.3014,
                "fouls_drawn": 0.5535,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.4271,
                "tackles_won": 0.5529,
                "tackles": 0.8594,
                "clearances": 0.1394,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0526,
                "xgot": 0.0418,
                "offsides": 0.2313,
                "ball_carries": 5.9797,
                "total_progression": 21.0608,
                "progressive_carries": 0.7505,
                "shots_off_target": 0.3153,
                "bench_appearance_probability": 0.342,
                "bench_expected_minutes": 25.67
              },
              "params": {
                "expected_minutes": 25.67,
                "projection_minutes": 30.57,
                "minutes_scale": 0.8396,
                "appearance_probability": 0.342
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.0399,
                "goals": 0.0495,
                "goal_rate": 0.0495,
                "shots_on_target": 0.159,
                "total_shots": 0.4744,
                "expected_assists": 0.0414,
                "key_pass": 0.3243,
                "rating": 6.6496,
                "minutes": 25.67,
                "total_pass": 8.293,
                "accurate_pass": 6.5832,
                "duels_won": 2.1382,
                "total_long_balls": 0.1711,
                "accurate_long_balls": 0.0526,
                "total_opp_half_passes": 6.3331,
                "accurate_opp_half_passes": 4.9314,
                "crosses_total": 1.9243,
                "crosses_accurate": 0.2535,
                "touches": 17.4797,
                "possession_lost": 5.7271,
                "dispossessed": 0.1363,
                "duels_lost": 1.7377,
                "aerial_lost": 0.6096,
                "total_contest": 1.0773,
                "won_contest": 0.4338,
                "ball_recovery": 1.4763,
                "challenges_lost": 0.2752,
                "fouls": 0.3014,
                "fouls_drawn": 0.5535,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.4271,
                "tackles_won": 0.5529,
                "tackles": 0.8594,
                "clearances": 0.1394,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0526,
                "xgot": 0.0418,
                "offsides": 0.2313,
                "ball_carries": 5.9797,
                "total_progression": 21.0608,
                "progressive_carries": 0.7505,
                "shots_off_target": 0.3153,
                "bench_appearance_probability": 0.342,
                "bench_expected_minutes": 25.67
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "not_projected_to_play",
              "description": "Not among the projected substitutes: no share of the team's goals or assists",
              "stats": {
                "expected_goals": 0.0399,
                "goal_rate": 0.0495,
                "goals": 0,
                "shots_on_target": 0.159,
                "total_shots": 0.4744,
                "expected_assists": 0.0414,
                "key_pass": 0.3243,
                "rating": 6.6496,
                "minutes": 25.67,
                "total_pass": 8.293,
                "accurate_pass": 6.5832,
                "duels_won": 2.1382,
                "total_long_balls": 0.1711,
                "accurate_long_balls": 0.0526,
                "total_opp_half_passes": 6.3331,
                "accurate_opp_half_passes": 4.9314,
                "crosses_total": 1.9243,
                "crosses_accurate": 0.2535,
                "touches": 17.4797,
                "possession_lost": 5.7271,
                "dispossessed": 0.1363,
                "duels_lost": 1.7377,
                "aerial_lost": 0.6096,
                "total_contest": 1.0773,
                "won_contest": 0.4338,
                "ball_recovery": 1.4763,
                "challenges_lost": 0.2752,
                "fouls": 0.3014,
                "fouls_drawn": 0.5535,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.4271,
                "tackles_won": 0.5529,
                "tackles": 0.8594,
                "clearances": 0.1394,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0526,
                "xgot": 0.0418,
                "offsides": 0.2313,
                "ball_carries": 5.9797,
                "total_progression": 21.0608,
                "progressive_carries": 0.7505,
                "shots_off_target": 0.3153,
                "bench_appearance_probability": 0.342,
                "bench_expected_minutes": 25.67,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0
              },
              "params": {
                "appearance_probability": 0.342,
                "projected_substitutes": 2,
                "scoreline_reset": true
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 16 by projected rating, fifa_overall 74.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.0399,
                "goal_rate": 0.0495,
                "goals": 0,
                "shots_on_target": 0.159,
                "total_shots": 0.4744,
                "expected_assists": 0.0414,
                "key_pass": 0.3243,
                "rating": 6.6496,
                "minutes": 25.67,
                "total_pass": 8.293,
                "accurate_pass": 6.5832,
                "duels_won": 2.1382,
                "total_long_balls": 0.1711,
                "accurate_long_balls": 0.0526,
                "total_opp_half_passes": 6.3331,
                "accurate_opp_half_passes": 4.9314,
                "crosses_total": 1.9243,
                "crosses_accurate": 0.2535,
                "touches": 17.4797,
                "possession_lost": 5.7271,
                "dispossessed": 0.1363,
                "duels_lost": 1.7377,
                "aerial_lost": 0.6096,
                "total_contest": 1.0773,
                "won_contest": 0.4338,
                "ball_recovery": 1.4763,
                "challenges_lost": 0.2752,
                "fouls": 0.3014,
                "fouls_drawn": 0.5535,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.4271,
                "tackles_won": 0.5529,
                "tackles": 0.8594,
                "clearances": 0.1394,
                "blocks": 0.0,
                "big_chances_created": 0.0,
                "big_chances_missed": 0.0526,
                "xgot": 0.0418,
                "offsides": 0.2313,
                "ball_carries": 5.9797,
                "total_progression": 21.0608,
                "progressive_carries": 0.7505,
                "shots_off_target": 0.3153,
                "bench_appearance_probability": 0.342,
                "bench_expected_minutes": 25.67,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "available_bench_not_projected_used",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "fifa_overall": 74.0
              },
              "params": {
                "match_squad_rank": 16,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 3488,
                "fifa_rank": 2897.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 74.0
              }
            }
          ]
        },
        "Javi Puado": {
          "player_id": 891511,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 7,
          "height": 178,
          "market_value": 7000000,
          "stats": {
            "expected_goals": 0.174,
            "goal_rate": 0.1797,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "expected_assists": 0.0651,
            "key_pass": 1,
            "rating": 6.6418,
            "minutes": 25,
            "total_pass": 26,
            "accurate_pass": 22,
            "duels_won": 2,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_opp_half_passes": 17,
            "accurate_opp_half_passes": 14,
            "crosses_total": 2,
            "crosses_accurate": 1,
            "touches": 40,
            "possession_lost": 9.7116,
            "dispossessed": 0.4326,
            "duels_lost": 5,
            "aerial_lost": 1,
            "total_contest": 2,
            "won_contest": 1,
            "ball_recovery": 4,
            "challenges_lost": 0,
            "fouls": 1,
            "fouls_drawn": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 1,
            "xgot": 0.5319,
            "offsides": 0,
            "ball_carries": 4,
            "total_progression": 0,
            "progressive_carries": 0,
            "shots_off_target": 1,
            "bench_appearance_probability": 0.568,
            "bench_expected_minutes": 25.49,
            "projected_substitution_order": 1,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 2,
            "projected_substitution_expected_count": 2.144,
            "projected_substitution_game_state_adjustment": 0,
            "substitution_usage": "projected_used_substitute",
            "projected_goals": 0,
            "goal_probability": 0.0907,
            "projected_assists": 0,
            "assist_probability": 0.0358,
            "finishing_factor": 1.0394,
            "creation_factor": 0.8,
            "fifa_overall": 79.0
          },
          "latest_10_games": [
            {
              "match_id": 14083222,
              "match_date": "2026-01-11",
              "home_team": "Levante UD",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 4,
                "assist_rate": 0.0,
                "assists": 0,
                "total_shots": 0
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083203,
              "match_date": "2026-01-03",
              "home_team": "Espanyol",
              "away_team": "FC Barcelona",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "FC Barcelona",
              "stats": {
                "minutes": 8,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0001,
                "total_shots": 0,
                "total_pass": 4,
                "accurate_pass": 3,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083635,
              "match_date": "2025-10-05",
              "home_team": "Espanyol",
              "away_team": "Real Betis",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Betis",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 1.168,
                "expected_assists": 0.1238,
                "total_shots": 4,
                "shots_on_target": 2,
                "shots_off_target": 2,
                "total_pass": 47,
                "accurate_pass": 40,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083595,
              "match_date": "2025-09-26",
              "home_team": "Girona FC",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Girona FC",
              "stats": {
                "minutes": 75,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0325,
                "expected_assists": 0.1577,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 17,
                "accurate_pass": 17,
                "key_pass": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083407,
              "match_date": "2025-09-23",
              "home_team": "Espanyol",
              "away_team": "Valencia",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Valencia",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 1.2083,
                "expected_assists": 0.2352,
                "total_shots": 5,
                "shots_on_target": 3,
                "shots_off_target": 2,
                "total_pass": 20,
                "accurate_pass": 15,
                "key_pass": 2,
                "interceptions": 1,
                "clearances": 1,
                "duels_won": 1,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083333,
              "match_date": "2025-09-20",
              "home_team": "Real Madrid",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 77,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.1166,
                "total_shots": 0,
                "total_pass": 13,
                "accurate_pass": 12,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 1,
                "clearances": 1,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083234,
              "match_date": "2025-09-15",
              "home_team": "Espanyol",
              "away_team": "Mallorca",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Mallorca",
              "stats": {
                "minutes": 72,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0834,
                "total_shots": 0,
                "total_pass": 20,
                "accurate_pass": 16,
                "key_pass": 1,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083138,
              "match_date": "2025-08-31",
              "home_team": "Espanyol",
              "away_team": "Osasuna",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 84,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.161,
                "expected_assists": 0.0426,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 24,
                "accurate_pass": 18,
                "key_pass": 2,
                "tackles": 1,
                "clearances": 1,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14082867,
              "match_date": "2025-08-24",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.8859,
                "expected_assists": 0.0246,
                "total_shots": 3,
                "shots_on_target": 2,
                "shots_off_target": 1,
                "total_pass": 23,
                "accurate_pass": 21,
                "key_pass": 2,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "duels_won": 3,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14082853,
              "match_date": "2025-08-17",
              "home_team": "Espanyol",
              "away_team": "Atlético Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 88,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0172,
                "expected_assists": 0.0416,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 31,
                "accurate_pass": 25,
                "interceptions": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 2281,
            "combined_rank_score": 901.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 834.0,
            "sofascore_rating": 6.5889,
            "sofascore_appearances": 10.0,
            "fifa_rank": 968.0,
            "fifa_overall": 79.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 17,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.6418,
            "source_file": "data/player_rankings.csv",
            "player_name": "Javi Puado",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Yves Bissouma",
                  "ranking": 2276
                },
                {
                  "player_name": "Nuriddin  Nuriddinov",
                  "ranking": 2277
                },
                {
                  "player_name": "Kim Min-Ho",
                  "ranking": 2278
                },
                {
                  "player_name": "Manuel Ugarte",
                  "ranking": 2279
                },
                {
                  "player_name": "Endrick",
                  "ranking": 2280
                }
              ],
              "lower": [
                {
                  "player_name": "Bekhruz Jumatov",
                  "ranking": 2282
                },
                {
                  "player_name": "Odilon Kossounou",
                  "ranking": 2283
                },
                {
                  "player_name": "Lennart Karl",
                  "ranking": 2284
                },
                {
                  "player_name": "André",
                  "ranking": 2285
                },
                {
                  "player_name": "Tim Payne",
                  "ranking": 2286
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.75,
          "history_matches": 10,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 10,
            "data_confidence": 0.75,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 25.48700561251263,
            "bench_appearance_prob": 0.5675911642051195,
            "market_value_adjustment": 0.9982,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost F_service (10 historical appearances) to 25.5 expected mins (appearance prob 0.57)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.1142,
                "goals": 0.12,
                "goal_rate": 0.12,
                "shots_on_target": 0.2582,
                "total_shots": 0.7669,
                "expected_assists": 0.0426,
                "key_pass": 0.5896,
                "rating": 6.6418,
                "minutes": 12.92,
                "total_pass": 17.3118,
                "accurate_pass": 14.6358,
                "duels_won": 1.4238,
                "total_long_balls": 0.9345,
                "accurate_long_balls": 0.6137,
                "total_opp_half_passes": 11.4415,
                "accurate_opp_half_passes": 9.1338,
                "crosses_total": 1.6329,
                "crosses_accurate": 0.4088,
                "touches": 26.7141,
                "possession_lost": 6.4861,
                "dispossessed": 0.4334,
                "duels_lost": 3.4948,
                "aerial_lost": 0.8423,
                "total_contest": 1.5774,
                "won_contest": 0.6611,
                "ball_recovery": 2.7858,
                "challenges_lost": 0.4148,
                "fouls": 0.9898,
                "fouls_drawn": 0.3081,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.1916,
                "tackles_won": 0.1338,
                "tackles": 0.2765,
                "clearances": 0.2402,
                "blocks": 0.0509,
                "big_chances_created": 0.2203,
                "big_chances_missed": 0.6222,
                "xgot": 0.3491,
                "offsides": 0.0,
                "ball_carries": 2.3784,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.5087
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-01-11",
                    "opponent": "Levante UD",
                    "minutes": 4.0,
                    "is_starting": false,
                    "weight": 0.1868,
                    "rating": 0.0
                  },
                  {
                    "match_date": "2026-01-03",
                    "opponent": "FC Barcelona",
                    "minutes": 8.0,
                    "is_starting": false,
                    "weight": 0.1588,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2025-10-05",
                    "opponent": "Real Betis",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1349,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2025-09-26",
                    "opponent": "Girona FC",
                    "minutes": 75.0,
                    "is_starting": true,
                    "weight": 0.1147,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2025-09-23",
                    "opponent": "Valencia",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0975,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2025-09-20",
                    "opponent": "Real Madrid",
                    "minutes": 77.0,
                    "is_starting": true,
                    "weight": 0.0829,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2025-09-15",
                    "opponent": "Mallorca",
                    "minutes": 72.0,
                    "is_starting": true,
                    "weight": 0.0704,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2025-08-31",
                    "opponent": "Osasuna",
                    "minutes": 84.0,
                    "is_starting": true,
                    "weight": 0.0599,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2025-08-24",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0509,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2025-08-17",
                    "opponent": "Atlético Madrid",
                    "minutes": 88.0,
                    "is_starting": true,
                    "weight": 0.0433,
                    "rating": 6.5
                  }
                ],
                "feature_row": {
                  "history_matches": 10.0,
                  "is_starting_11": 0.0,
                  "expectedGoals": 0.3346,
                  "totalOppositionHalfPasses": 11.4415,
                  "accurateOppositionHalfPasses": 9.1338,
                  "accuratePass": 14.6357,
                  "totalShots": 1.3978
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.11424385756254196,
                    "model_output": 0.1142,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0858
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0199
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0096
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": 0.0082
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.006
                        }
                      ],
                      "others": -0.0115,
                      "total": 0.1142,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.564015
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.161899
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.074759
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": 0.063947
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.046608
                        }
                      ],
                      "others_margin": -0.095206
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.12000365555286407,
                    "model_output": 0.12,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0811
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0252
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0239
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": 0.0086
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.0075
                        }
                      ],
                      "others": -0.005,
                      "total": 0.12,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.507344
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.187079
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.176457
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": 0.066894
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.057847
                        }
                      ],
                      "others_margin": -0.041693
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.2581588327884674,
                    "model_output": 0.2582,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2339
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.029
                        },
                        {
                          "name": "totalShots_p90",
                          "contribution": -0.018
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0161
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": 0.0117
                        }
                      ],
                      "others": -0.0257,
                      "total": 0.2582,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.571812
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.10049
                        },
                        {
                          "name": "totalShots_p90",
                          "margin": -0.067917
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.061042
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": 0.042165
                        }
                      ],
                      "others_margin": -0.095373
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.7668654322624207,
                    "model_output": 0.7669,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.5294
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0443
                        },
                        {
                          "name": "totalShots_p90",
                          "contribution": -0.0417
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.0296
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": 0.0242
                        }
                      ],
                      "others": 0.009,
                      "total": 0.7669,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.529361
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.044335
                        },
                        {
                          "name": "totalShots_p90",
                          "margin": -0.041672
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.029614
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": 0.024243
                        }
                      ],
                      "others_margin": 0.008898
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.04260228946805,
                    "model_output": 0.0426,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0171
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0059
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0043
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0026
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.002
                        }
                      ],
                      "others": -0.0016,
                      "total": 0.0426,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.308725
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.116837
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.083702
                        },
                        {
                          "name": "rating",
                          "margin": -0.05571
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.044015
                        }
                      ],
                      "others_margin": -0.036077
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 0.5896349549293518,
                    "model_output": 0.5896,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.199
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": 0.0924
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0203
                        },
                        {
                          "name": "totalPass",
                          "contribution": 0.0194
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0192
                        }
                      ],
                      "others": 0.0423,
                      "total": 0.5896,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.349856
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": 0.177826
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.036449
                        },
                        {
                          "name": "totalPass",
                          "margin": 0.034802
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.034502
                        }
                      ],
                      "others_margin": 0.074487
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.641824245452881,
                    "model_output": 6.6418,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0691
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0249
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.0142
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": 0.0131
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0114
                        }
                      ],
                      "others": -0.0367,
                      "total": 6.6418,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.069113
                        },
                        {
                          "name": "rating",
                          "margin": -0.024863
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.014194
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": 0.013073
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.011374
                        }
                      ],
                      "others_margin": -0.036614
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 10,
                  "role_matches": 2,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "all_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9982, quality 0.487)",
              "stats": {
                "expected_goals": 0.114,
                "goals": 0.1198,
                "goal_rate": 0.1198,
                "shots_on_target": 0.2577,
                "total_shots": 0.7655,
                "expected_assists": 0.0425,
                "key_pass": 0.5886,
                "rating": 6.6418,
                "minutes": 12.92,
                "total_pass": 17.2806,
                "accurate_pass": 14.6095,
                "duels_won": 1.4212,
                "total_long_balls": 0.9328,
                "accurate_long_balls": 0.6126,
                "total_opp_half_passes": 11.4209,
                "accurate_opp_half_passes": 9.1174,
                "crosses_total": 1.63,
                "crosses_accurate": 0.4081,
                "touches": 26.666,
                "possession_lost": 6.4744,
                "dispossessed": 0.4326,
                "duels_lost": 3.4885,
                "aerial_lost": 0.8408,
                "total_contest": 1.5746,
                "won_contest": 0.6599,
                "ball_recovery": 2.7808,
                "challenges_lost": 0.4141,
                "fouls": 0.988,
                "fouls_drawn": 0.3075,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.1913,
                "tackles_won": 0.1336,
                "tackles": 0.276,
                "clearances": 0.2398,
                "blocks": 0.0508,
                "big_chances_created": 0.2199,
                "big_chances_missed": 0.6211,
                "xgot": 0.3485,
                "offsides": 0.0,
                "ball_carries": 2.3741,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.5078
              },
              "params": {
                "market_value_eur": 7000000,
                "quality_factor": 0.4866,
                "boost_factor": 0.9982,
                "reference_quality": 0.505,
                "history_matches": 10,
                "history_shrink": 0.3333,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 12.9 to 25.5 expected minutes (appearance prob 0.57)",
              "stats": {
                "expected_goals": 0.171,
                "goals": 0.1797,
                "goal_rate": 0.1797,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0638,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5227,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49
              },
              "params": {
                "expected_minutes": 25.49,
                "projection_minutes": 12.92,
                "minutes_scale": 1.5,
                "appearance_probability": 0.568
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.171,
                "goals": 0.1797,
                "goal_rate": 0.1797,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0638,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5227,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "expected_goals": 0.174,
                "goal_rate": 0.1797,
                "goals": 0,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0651,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5319,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0394,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 0.568
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 17 by projected rating, fifa_overall 79.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.174,
                "goal_rate": 0.1797,
                "goals": 0,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0651,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5319,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0394,
                "creation_factor": 0.8,
                "fifa_overall": 79.0
              },
              "params": {
                "match_squad_rank": 17,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 2281,
                "fifa_rank": 968.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 79.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "expected_goals": 0.174,
                "goal_rate": 0.1797,
                "goals": 0,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0651,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5319,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0907,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0394,
                "creation_factor": 0.8,
                "fifa_overall": 79.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.0907,
                "scorer_weight": 0.1027,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0629,
                "finishing_factor": 1.0394,
                "appearance_weight": 0.568,
                "weight_rank": 6,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "expected_goals": 0.174,
                "goal_rate": 0.1797,
                "goals": 0,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0651,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5319,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0907,
                "projected_assists": 0,
                "assist_probability": 0.0358,
                "finishing_factor": 1.0394,
                "creation_factor": 0.8,
                "fifa_overall": 79.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0358,
                "provider_weight": 0.0296,
                "squad_weight_total": 0.9581,
                "weight_share": 0.0309,
                "creation_factor": 0.8,
                "appearance_weight": 0.568,
                "weight_rank": 11,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        }
      },
      "substitutes": {
        "Javi Puado": {
          "player_id": 891511,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 7,
          "height": 178,
          "market_value": 7000000,
          "stats": {
            "expected_goals": 0.174,
            "goal_rate": 0.1797,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "expected_assists": 0.0651,
            "key_pass": 1,
            "rating": 6.6418,
            "minutes": 25,
            "total_pass": 26,
            "accurate_pass": 22,
            "duels_won": 2,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_opp_half_passes": 17,
            "accurate_opp_half_passes": 14,
            "crosses_total": 2,
            "crosses_accurate": 1,
            "touches": 40,
            "possession_lost": 9.7116,
            "dispossessed": 0.4326,
            "duels_lost": 5,
            "aerial_lost": 1,
            "total_contest": 2,
            "won_contest": 1,
            "ball_recovery": 4,
            "challenges_lost": 0,
            "fouls": 1,
            "fouls_drawn": 0,
            "assist_rate": 0.0,
            "assists": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 1,
            "xgot": 0.5319,
            "offsides": 0,
            "ball_carries": 4,
            "total_progression": 0,
            "progressive_carries": 0,
            "shots_off_target": 1,
            "bench_appearance_probability": 0.568,
            "bench_expected_minutes": 25.49,
            "projected_substitution_order": 1,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 2,
            "projected_substitution_expected_count": 2.144,
            "projected_substitution_game_state_adjustment": 0,
            "substitution_usage": "projected_used_substitute",
            "projected_goals": 0,
            "goal_probability": 0.0907,
            "projected_assists": 0,
            "assist_probability": 0.0358,
            "finishing_factor": 1.0394,
            "creation_factor": 0.8,
            "fifa_overall": 79.0
          },
          "latest_10_games": [
            {
              "match_id": 14083222,
              "match_date": "2026-01-11",
              "home_team": "Levante UD",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 4,
                "assist_rate": 0.0,
                "assists": 0,
                "total_shots": 0
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083203,
              "match_date": "2026-01-03",
              "home_team": "Espanyol",
              "away_team": "FC Barcelona",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "FC Barcelona",
              "stats": {
                "minutes": 8,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0001,
                "total_shots": 0,
                "total_pass": 4,
                "accurate_pass": 3,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083635,
              "match_date": "2025-10-05",
              "home_team": "Espanyol",
              "away_team": "Real Betis",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Betis",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 1.168,
                "expected_assists": 0.1238,
                "total_shots": 4,
                "shots_on_target": 2,
                "shots_off_target": 2,
                "total_pass": 47,
                "accurate_pass": 40,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083595,
              "match_date": "2025-09-26",
              "home_team": "Girona FC",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Girona FC",
              "stats": {
                "minutes": 75,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0325,
                "expected_assists": 0.1577,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 17,
                "accurate_pass": 17,
                "key_pass": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083407,
              "match_date": "2025-09-23",
              "home_team": "Espanyol",
              "away_team": "Valencia",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Valencia",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 1.2083,
                "expected_assists": 0.2352,
                "total_shots": 5,
                "shots_on_target": 3,
                "shots_off_target": 2,
                "total_pass": 20,
                "accurate_pass": 15,
                "key_pass": 2,
                "interceptions": 1,
                "clearances": 1,
                "duels_won": 1,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083333,
              "match_date": "2025-09-20",
              "home_team": "Real Madrid",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 77,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.1166,
                "total_shots": 0,
                "total_pass": 13,
                "accurate_pass": 12,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 1,
                "clearances": 1,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083234,
              "match_date": "2025-09-15",
              "home_team": "Espanyol",
              "away_team": "Mallorca",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Mallorca",
              "stats": {
                "minutes": 72,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0834,
                "total_shots": 0,
                "total_pass": 20,
                "accurate_pass": 16,
                "key_pass": 1,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083138,
              "match_date": "2025-08-31",
              "home_team": "Espanyol",
              "away_team": "Osasuna",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Osasuna",
              "stats": {
                "minutes": 84,
                "rating": 6.3,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.161,
                "expected_assists": 0.0426,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 24,
                "accurate_pass": 18,
                "key_pass": 2,
                "tackles": 1,
                "clearances": 1,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14082867,
              "match_date": "2025-08-24",
              "home_team": "Real Sociedad",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Sociedad",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "goal_rate": 1.0,
                "goals": 1,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.8859,
                "expected_assists": 0.0246,
                "total_shots": 3,
                "shots_on_target": 2,
                "shots_off_target": 1,
                "total_pass": 23,
                "accurate_pass": 21,
                "key_pass": 2,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "duels_won": 3,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14082853,
              "match_date": "2025-08-17",
              "home_team": "Espanyol",
              "away_team": "Atlético Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 88,
                "rating": 6.5,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0172,
                "expected_assists": 0.0416,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 31,
                "accurate_pass": 25,
                "interceptions": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 2281,
            "combined_rank_score": 901.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 834.0,
            "sofascore_rating": 6.5889,
            "sofascore_appearances": 10.0,
            "fifa_rank": 968.0,
            "fifa_overall": 79.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 17,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.6418,
            "source_file": "data/player_rankings.csv",
            "player_name": "Javi Puado",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Yves Bissouma",
                  "ranking": 2276
                },
                {
                  "player_name": "Nuriddin  Nuriddinov",
                  "ranking": 2277
                },
                {
                  "player_name": "Kim Min-Ho",
                  "ranking": 2278
                },
                {
                  "player_name": "Manuel Ugarte",
                  "ranking": 2279
                },
                {
                  "player_name": "Endrick",
                  "ranking": 2280
                }
              ],
              "lower": [
                {
                  "player_name": "Bekhruz Jumatov",
                  "ranking": 2282
                },
                {
                  "player_name": "Odilon Kossounou",
                  "ranking": 2283
                },
                {
                  "player_name": "Lennart Karl",
                  "ranking": 2284
                },
                {
                  "player_name": "André",
                  "ranking": 2285
                },
                {
                  "player_name": "Tim Payne",
                  "ranking": 2286
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.75,
          "history_matches": 10,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "F_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "onTargetScoringAttempt",
              "shotOffTarget",
              "bigChanceMissed",
              "expectedAssists",
              "keyPass",
              "duelWon",
              "duelLost",
              "aerialWon",
              "aerialLost",
              "touches",
              "dispossessed",
              "wasFouled",
              "ballRecovery",
              "possessionLostCtrl",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "expectedGoals",
              "goals",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "shot_accuracy",
              "xg_per_shot",
              "touches_p90",
              "totalShots_p90",
              "duelWon_p90",
              "ballCarriesCount_p90",
              "big_chance_conversion",
              "shot_waste_rate",
              "aerial_dominance",
              "press_resistance_fwd",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "expectedAssists",
              "keyPass",
              "rating"
            ],
            "history_matches": 10,
            "data_confidence": 0.75,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 25.48700561251263,
            "bench_appearance_prob": 0.5675911642051195,
            "market_value_adjustment": 0.9982,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost F_service (10 historical appearances) to 25.5 expected mins (appearance prob 0.57)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost F_service raw output over 7 target models",
              "stats": {
                "expected_goals": 0.1142,
                "goals": 0.12,
                "goal_rate": 0.12,
                "shots_on_target": 0.2582,
                "total_shots": 0.7669,
                "expected_assists": 0.0426,
                "key_pass": 0.5896,
                "rating": 6.6418,
                "minutes": 12.92,
                "total_pass": 17.3118,
                "accurate_pass": 14.6358,
                "duels_won": 1.4238,
                "total_long_balls": 0.9345,
                "accurate_long_balls": 0.6137,
                "total_opp_half_passes": 11.4415,
                "accurate_opp_half_passes": 9.1338,
                "crosses_total": 1.6329,
                "crosses_accurate": 0.4088,
                "touches": 26.7141,
                "possession_lost": 6.4861,
                "dispossessed": 0.4334,
                "duels_lost": 3.4948,
                "aerial_lost": 0.8423,
                "total_contest": 1.5774,
                "won_contest": 0.6611,
                "ball_recovery": 2.7858,
                "challenges_lost": 0.4148,
                "fouls": 0.9898,
                "fouls_drawn": 0.3081,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.1916,
                "tackles_won": 0.1338,
                "tackles": 0.2765,
                "clearances": 0.2402,
                "blocks": 0.0509,
                "big_chances_created": 0.2203,
                "big_chances_missed": 0.6222,
                "xgot": 0.3491,
                "offsides": 0.0,
                "ball_carries": 2.3784,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.5087
              },
              "trace": {
                "model": {
                  "position_service": "F",
                  "schema_version": 6,
                  "trained_at": "2026-10-09T10:04:40.622139+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 603,
                    "rows": 15398
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-01-11",
                    "opponent": "Levante UD",
                    "minutes": 4.0,
                    "is_starting": false,
                    "weight": 0.1868,
                    "rating": 0.0
                  },
                  {
                    "match_date": "2026-01-03",
                    "opponent": "FC Barcelona",
                    "minutes": 8.0,
                    "is_starting": false,
                    "weight": 0.1588,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2025-10-05",
                    "opponent": "Real Betis",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.1349,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2025-09-26",
                    "opponent": "Girona FC",
                    "minutes": 75.0,
                    "is_starting": true,
                    "weight": 0.1147,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2025-09-23",
                    "opponent": "Valencia",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0975,
                    "rating": 7.2
                  },
                  {
                    "match_date": "2025-09-20",
                    "opponent": "Real Madrid",
                    "minutes": 77.0,
                    "is_starting": true,
                    "weight": 0.0829,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2025-09-15",
                    "opponent": "Mallorca",
                    "minutes": 72.0,
                    "is_starting": true,
                    "weight": 0.0704,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2025-08-31",
                    "opponent": "Osasuna",
                    "minutes": 84.0,
                    "is_starting": true,
                    "weight": 0.0599,
                    "rating": 6.3
                  },
                  {
                    "match_date": "2025-08-24",
                    "opponent": "Real Sociedad",
                    "minutes": 90.0,
                    "is_starting": true,
                    "weight": 0.0509,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2025-08-17",
                    "opponent": "Atlético Madrid",
                    "minutes": 88.0,
                    "is_starting": true,
                    "weight": 0.0433,
                    "rating": 6.5
                  }
                ],
                "feature_row": {
                  "history_matches": 10.0,
                  "is_starting_11": 0.0,
                  "expectedGoals": 0.3346,
                  "totalOppositionHalfPasses": 11.4415,
                  "accurateOppositionHalfPasses": 9.1338,
                  "accuratePass": 14.6357,
                  "totalShots": 1.3978
                },
                "per_target": [
                  {
                    "target": "expectedGoals",
                    "predicted": 0.11424385756254196,
                    "model_output": 0.1142,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.267
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0946
                      },
                      {
                        "name": "goals",
                        "importance": 0.0367
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0304
                      },
                      {
                        "name": "bigChanceMissed",
                        "importance": 0.0219
                      }
                    ],
                    "decomposition": {
                      "base": 0.199,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0858
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0199
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0096
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": 0.0082
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.006
                        }
                      ],
                      "others": -0.0115,
                      "total": 0.1142,
                      "log_link": true,
                      "margin_base": -1.614679,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.564015
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.161899
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.074759
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": 0.063947
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.046608
                        }
                      ],
                      "others_margin": -0.095206
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.12000365555286407,
                    "model_output": 0.12,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1205
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0899
                      },
                      {
                        "name": "goals",
                        "importance": 0.0562
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0317
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0288
                      }
                    ],
                    "decomposition": {
                      "base": 0.2037,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0811
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0252
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "contribution": -0.0239
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": 0.0086
                        },
                        {
                          "name": "passValueNormalized",
                          "contribution": -0.0075
                        }
                      ],
                      "others": -0.005,
                      "total": 0.12,
                      "log_link": true,
                      "margin_base": -1.590865,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.507344
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.187079
                        },
                        {
                          "name": "defensiveValueNormalized",
                          "margin": -0.176457
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": 0.066894
                        },
                        {
                          "name": "passValueNormalized",
                          "margin": -0.057847
                        }
                      ],
                      "others_margin": -0.041693
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.2581588327884674,
                    "model_output": 0.2582,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1975
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0606
                      },
                      {
                        "name": "goals",
                        "importance": 0.0481
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.047
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0391
                      }
                    ],
                    "decomposition": {
                      "base": 0.537,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.2339
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.029
                        },
                        {
                          "name": "totalShots_p90",
                          "contribution": -0.018
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0161
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": 0.0117
                        }
                      ],
                      "others": -0.0257,
                      "total": 0.2582,
                      "log_link": true,
                      "margin_base": -0.621795,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.571812
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.10049
                        },
                        {
                          "name": "totalShots_p90",
                          "margin": -0.067917
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.061042
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": 0.042165
                        }
                      ],
                      "others_margin": -0.095373
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.7668654322624207,
                    "model_output": 0.7669,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.2742
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0628
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0421
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0391
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0333
                      }
                    ],
                    "decomposition": {
                      "base": 1.3787,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.5294
                        },
                        {
                          "name": "totalShots",
                          "contribution": -0.0443
                        },
                        {
                          "name": "totalShots_p90",
                          "contribution": -0.0417
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.0296
                        },
                        {
                          "name": "pass_accuracy",
                          "contribution": 0.0242
                        }
                      ],
                      "others": 0.009,
                      "total": 0.7669,
                      "log_link": false,
                      "margin_base": 1.378707,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.529361
                        },
                        {
                          "name": "totalShots",
                          "margin": -0.044335
                        },
                        {
                          "name": "totalShots_p90",
                          "margin": -0.041672
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.029614
                        },
                        {
                          "name": "pass_accuracy",
                          "margin": 0.024243
                        }
                      ],
                      "others_margin": 0.008898
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.04260228946805,
                    "model_output": 0.0426,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.1224
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0695
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0686
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0588
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.057
                      }
                    ],
                    "decomposition": {
                      "base": 0.0643,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0171
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0059
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0043
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0026
                        },
                        {
                          "name": "totalPass",
                          "contribution": -0.002
                        }
                      ],
                      "others": -0.0016,
                      "total": 0.0426,
                      "log_link": true,
                      "margin_base": -2.744455,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.308725
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.116837
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.083702
                        },
                        {
                          "name": "rating",
                          "margin": -0.05571
                        },
                        {
                          "name": "totalPass",
                          "margin": -0.044015
                        }
                      ],
                      "others_margin": -0.036077
                    }
                  },
                  {
                    "target": "keyPass",
                    "predicted": 0.5896349549293518,
                    "model_output": 0.5896,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "is_starting_11",
                        "importance": 0.1529
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.1213
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.055
                      },
                      {
                        "name": "totalPass",
                        "importance": 0.0489
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0452
                      }
                    ],
                    "decomposition": {
                      "base": 0.674,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.199
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": 0.0924
                        },
                        {
                          "name": "touches_p90",
                          "contribution": -0.0203
                        },
                        {
                          "name": "totalPass",
                          "contribution": 0.0194
                        },
                        {
                          "name": "possessionLostCtrl",
                          "contribution": -0.0192
                        }
                      ],
                      "others": 0.0423,
                      "total": 0.5896,
                      "log_link": true,
                      "margin_base": -0.394559,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.349856
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": 0.177826
                        },
                        {
                          "name": "touches_p90",
                          "margin": -0.036449
                        },
                        {
                          "name": "totalPass",
                          "margin": 0.034802
                        },
                        {
                          "name": "possessionLostCtrl",
                          "margin": -0.034502
                        }
                      ],
                      "others_margin": 0.074487
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.641824245452881,
                    "model_output": 6.6418,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "totalPass",
                        "importance": 0.0739
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0574
                      },
                      {
                        "name": "accuratePass",
                        "importance": 0.0442
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0409
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0331
                      }
                    ],
                    "decomposition": {
                      "base": 6.7622,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0691
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0249
                        },
                        {
                          "name": "ballRecovery",
                          "contribution": -0.0142
                        },
                        {
                          "name": "bigChanceMissed",
                          "contribution": 0.0131
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0114
                        }
                      ],
                      "others": -0.0367,
                      "total": 6.6418,
                      "log_link": false,
                      "margin_base": 6.762162,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.069113
                        },
                        {
                          "name": "rating",
                          "margin": -0.024863
                        },
                        {
                          "name": "ballRecovery",
                          "margin": -0.014194
                        },
                        {
                          "name": "bigChanceMissed",
                          "margin": 0.013073
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.011374
                        }
                      ],
                      "others_margin": -0.036614
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 10,
                  "role_matches": 2,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "all_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9982, quality 0.487)",
              "stats": {
                "expected_goals": 0.114,
                "goals": 0.1198,
                "goal_rate": 0.1198,
                "shots_on_target": 0.2577,
                "total_shots": 0.7655,
                "expected_assists": 0.0425,
                "key_pass": 0.5886,
                "rating": 6.6418,
                "minutes": 12.92,
                "total_pass": 17.2806,
                "accurate_pass": 14.6095,
                "duels_won": 1.4212,
                "total_long_balls": 0.9328,
                "accurate_long_balls": 0.6126,
                "total_opp_half_passes": 11.4209,
                "accurate_opp_half_passes": 9.1174,
                "crosses_total": 1.63,
                "crosses_accurate": 0.4081,
                "touches": 26.666,
                "possession_lost": 6.4744,
                "dispossessed": 0.4326,
                "duels_lost": 3.4885,
                "aerial_lost": 0.8408,
                "total_contest": 1.5746,
                "won_contest": 0.6599,
                "ball_recovery": 2.7808,
                "challenges_lost": 0.4141,
                "fouls": 0.988,
                "fouls_drawn": 0.3075,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.1913,
                "tackles_won": 0.1336,
                "tackles": 0.276,
                "clearances": 0.2398,
                "blocks": 0.0508,
                "big_chances_created": 0.2199,
                "big_chances_missed": 0.6211,
                "xgot": 0.3485,
                "offsides": 0.0,
                "ball_carries": 2.3741,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.5078
              },
              "params": {
                "market_value_eur": 7000000,
                "quality_factor": 0.4866,
                "boost_factor": 0.9982,
                "reference_quality": 0.505,
                "history_matches": 10,
                "history_shrink": 0.3333,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 12.9 to 25.5 expected minutes (appearance prob 0.57)",
              "stats": {
                "expected_goals": 0.171,
                "goals": 0.1797,
                "goal_rate": 0.1797,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0638,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5227,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49
              },
              "params": {
                "expected_minutes": 25.49,
                "projection_minutes": 12.92,
                "minutes_scale": 1.5,
                "appearance_probability": 0.568
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "expected_goals": 0.171,
                "goals": 0.1797,
                "goal_rate": 0.1797,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0638,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assists": 0.0,
                "assist_rate": 0.0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5227,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "expected_goals": 0.174,
                "goal_rate": 0.1797,
                "goals": 0,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0651,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5319,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0394,
                "creation_factor": 0.8
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 0.568
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 17 by projected rating, fifa_overall 79.0; not used by the projection)",
              "stats": {
                "expected_goals": 0.174,
                "goal_rate": 0.1797,
                "goals": 0,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0651,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5319,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0394,
                "creation_factor": 0.8,
                "fifa_overall": 79.0
              },
              "params": {
                "match_squad_rank": 17,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv_filled",
                "ranking_status": "combined",
                "global_player_rank": 2281,
                "fifa_rank": 968.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 79.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "expected_goals": 0.174,
                "goal_rate": 0.1797,
                "goals": 0,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0651,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5319,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0907,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.0394,
                "creation_factor": 0.8,
                "fifa_overall": 79.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.0907,
                "scorer_weight": 0.1027,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0629,
                "finishing_factor": 1.0394,
                "appearance_weight": 0.568,
                "weight_rank": 6,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "expected_goals": 0.174,
                "goal_rate": 0.1797,
                "goals": 0,
                "shots_on_target": 0.3865,
                "total_shots": 1.1482,
                "expected_assists": 0.0651,
                "key_pass": 0.8829,
                "rating": 6.6418,
                "minutes": 25.49,
                "total_pass": 25.9209,
                "accurate_pass": 21.9143,
                "duels_won": 2.1318,
                "total_long_balls": 1.3992,
                "accurate_long_balls": 0.9189,
                "total_opp_half_passes": 17.1313,
                "accurate_opp_half_passes": 13.6761,
                "crosses_total": 2.445,
                "crosses_accurate": 0.6121,
                "touches": 39.999,
                "possession_lost": 9.7116,
                "dispossessed": 0.4326,
                "duels_lost": 5.2328,
                "aerial_lost": 0.8408,
                "total_contest": 2.3619,
                "won_contest": 0.9899,
                "ball_recovery": 4.1712,
                "challenges_lost": 0.4141,
                "fouls": 1.482,
                "fouls_drawn": 0.4612,
                "assist_rate": 0.0,
                "assists": 0,
                "interceptions": 0.2869,
                "tackles_won": 0.2004,
                "tackles": 0.414,
                "clearances": 0.3597,
                "blocks": 0.0762,
                "big_chances_created": 0.3299,
                "big_chances_missed": 0.9316,
                "xgot": 0.5319,
                "offsides": 0.0,
                "ball_carries": 3.5611,
                "total_progression": 0.0,
                "progressive_carries": 0.0,
                "shots_off_target": 0.7617,
                "bench_appearance_probability": 0.568,
                "bench_expected_minutes": 25.49,
                "projected_substitution_order": 1,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0907,
                "projected_assists": 0,
                "assist_probability": 0.0358,
                "finishing_factor": 1.0394,
                "creation_factor": 0.8,
                "fifa_overall": 79.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0358,
                "provider_weight": 0.0296,
                "squad_weight_total": 0.9581,
                "weight_share": 0.0309,
                "creation_factor": 0.8,
                "appearance_weight": 0.568,
                "weight_rank": 11,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        },
        "Cyril Ngonge": {
          "player_id": 877037,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 16,
          "height": 179,
          "market_value": 6800000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0873,
            "assist_rate": 0.0981,
            "assists": 0,
            "expected_goals": 0.0671,
            "goal_rate": 0.0989,
            "goals": 0,
            "shots_on_target": 0,
            "total_shots": 1,
            "rating": 6.7018,
            "minutes": 22,
            "total_pass": 9,
            "accurate_pass": 8,
            "duels_won": 2,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_own_half_passes": 2,
            "accurate_own_half_passes": 2,
            "total_opp_half_passes": 7,
            "accurate_opp_half_passes": 6,
            "crosses_total": 3,
            "crosses_accurate": 1,
            "touches": 17,
            "possession_lost": 4.0372,
            "dispossessed": 0.0,
            "duels_lost": 2,
            "aerial_won": 0,
            "aerial_lost": 0,
            "interceptions": 1,
            "tackles_won": 0,
            "tackles": 1,
            "clearances": 0,
            "total_contest": 1,
            "won_contest": 0,
            "challenges_lost": 0,
            "fouls": 1,
            "fouls_drawn": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0271,
            "ball_carries": 6,
            "total_progression": 20,
            "progressive_carries": 1,
            "shots_off_target": 1,
            "bench_appearance_probability": 0.507,
            "bench_expected_minutes": 22.16,
            "projected_substitution_order": 2,
            "substitution_rule_cap": 5,
            "projected_team_substitution_count": 2,
            "projected_substitution_expected_count": 2.144,
            "projected_substitution_game_state_adjustment": 0,
            "substitution_usage": "projected_used_substitute",
            "projected_goals": 0,
            "goal_probability": 0.0329,
            "projected_assists": 0,
            "assist_probability": 0.0424,
            "finishing_factor": 1.25,
            "creation_factor": 1.0922,
            "fifa_overall": 72.0
          },
          "latest_10_games": [
            {
              "match_id": 14083221,
              "match_date": "2026-04-27",
              "home_team": "Espanyol",
              "away_team": "Levante UD",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Levante UD",
              "stats": {
                "minutes": 58,
                "rating": 7.0,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0146,
                "expected_assists": 0.2677,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 14,
                "accurate_pass": 11,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083330,
              "match_date": "2026-04-23",
              "home_team": "Rayo Vallecano",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Rayo Vallecano",
              "stats": {
                "minutes": 12,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0848,
                "expected_assists": 0.1093,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 4,
                "accurate_pass": 4,
                "key_pass": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083113,
              "match_date": "2026-04-11",
              "home_team": "FC Barcelona",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "FC Barcelona",
              "stats": {
                "minutes": 64,
                "rating": 6.2,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.0834,
                "total_shots": 0,
                "total_pass": 9,
                "accurate_pass": 4,
                "key_pass": 1,
                "tackles": 2,
                "duels_won": 4,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14081811,
              "match_date": "2026-04-04",
              "home_team": "Real Betis",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Betis",
              "stats": {
                "minutes": 78,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0153,
                "expected_assists": 0.0016,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 11,
                "accurate_pass": 8,
                "aerial_won": 1,
                "duels_won": 6,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083673,
              "match_date": "2026-03-21",
              "home_team": "Espanyol",
              "away_team": "Getafe",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Getafe",
              "stats": {
                "minutes": 45,
                "rating": 6.8,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.1223,
                "expected_assists": 0.1253,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 18,
                "accurate_pass": 9,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 2,
                "aerial_won": 4,
                "duels_won": 7,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14081800,
              "match_date": "2026-03-09",
              "home_team": "Espanyol",
              "away_team": "Real Oviedo",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Real Oviedo",
              "stats": {
                "minutes": 62,
                "rating": 6.5,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.1511,
                "expected_assists": 0.185,
                "total_shots": 3,
                "shots_on_target": 2,
                "shots_off_target": 1,
                "total_pass": 27,
                "accurate_pass": 20,
                "key_pass": 3,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083561,
              "match_date": "2026-02-21",
              "home_team": "Atlético Madrid",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 20,
                "rating": 6.4,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_goals": 0.0343,
                "expected_assists": 0.0078,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 8,
                "accurate_pass": 8,
                "interceptions": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083524,
              "match_date": "2026-02-14",
              "home_team": "Espanyol",
              "away_team": "Celta Vigo",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Espanyol",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 56,
                "rating": 6.6,
                "assist_rate": 0.0,
                "assists": 0,
                "expected_assists": 0.1116,
                "total_shots": 0,
                "total_pass": 17,
                "accurate_pass": 17,
                "key_pass": 1,
                "interceptions": 1,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083303,
              "match_date": "2026-02-09",
              "home_team": "Villarreal",
              "away_team": "Espanyol",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Espanyol",
              "opponent": "Villarreal",
              "stats": {
                "minutes": 31,
                "rating": 7.2,
                "assist_rate": 1.0,
                "assists": 1,
                "expected_goals": 0.0491,
                "expected_assists": 0.0633,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 14,
                "accurate_pass": 10,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 1,
                "aerial_won": 1,
                "duels_won": 5,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 4446,
            "combined_rank_score": 2464.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 784.0,
            "sofascore_rating": 6.6333,
            "sofascore_appearances": 9.0,
            "fifa_rank": 4144.0,
            "fifa_overall": 72.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 11,
            "squad_role": "substitute",
            "ranking_match": "player_id",
            "projected_match_rating": 6.7018,
            "source_file": "data/player_rankings.csv",
            "player_name": "Cyril Ngonge",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Lyle Foster",
                  "ranking": 4441
                },
                {
                  "player_name": "Bruma",
                  "ranking": 4442
                },
                {
                  "player_name": "João Carvalho",
                  "ranking": 4443
                },
                {
                  "player_name": "Herman Johansson",
                  "ranking": 4444
                },
                {
                  "player_name": "Jordan Holsgrove",
                  "ranking": 4445
                }
              ],
              "lower": [
                {
                  "player_name": "Patrick Roberts",
                  "ranking": 4447
                },
                {
                  "player_name": "Yanis Begraoui",
                  "ranking": 4448
                },
                {
                  "player_name": "Vítor Carvalho",
                  "ranking": 4449
                },
                {
                  "player_name": "Pau Víctor",
                  "ranking": 4450
                },
                {
                  "player_name": "Mike Trésor",
                  "ranking": 4451
                }
              ]
            }
          },
          "data_sources": [
            "match_history",
            "market_value"
          ],
          "data_confidence": 0.75,
          "history_matches": 9,
          "xgboost_reasoning": {
            "model_source": "xgboost_regressor",
            "position_service": "M_service",
            "features_evaluated": [
              "minutesPlayed",
              "is_starting_11",
              "totalPass",
              "accuratePass",
              "totalOppositionHalfPasses",
              "accurateOppositionHalfPasses",
              "totalShots",
              "keyPass",
              "expectedAssists",
              "totalCross",
              "accurateCross",
              "duelWon",
              "duelLost",
              "aerialWon",
              "ballRecovery",
              "touches",
              "interceptionWon",
              "wonTackle",
              "possessionLostCtrl",
              "dispossessed",
              "passValueNormalized",
              "dribbleValueNormalized",
              "defensiveValueNormalized",
              "shotValueNormalized",
              "ballCarriesCount",
              "totalProgression",
              "progressiveBallCarriesCount",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "rating",
              "pass_accuracy",
              "duel_win_rate",
              "opp_half_pass_pct",
              "creative_index",
              "touches_p90",
              "totalPass_p90",
              "keyPass_p90",
              "duelWon_p90",
              "ballRecovery_p90",
              "ballCarriesCount_p90",
              "creative_efficiency",
              "cross_accuracy",
              "cross_creative_contribution",
              "defensive_midfield_actions",
              "press_vulnerability",
              "progressive_carries_p90",
              "history_matches"
            ],
            "targets_predicted": [
              "keyPass",
              "expectedAssists",
              "goalAssist",
              "expectedGoals",
              "goals",
              "onTargetScoringAttempt",
              "totalShots",
              "rating"
            ],
            "history_matches": 9,
            "data_confidence": 0.75,
            "data_sources": [
              "match_history",
              "market_value"
            ],
            "bench_expected_minutes": 22.157394470824215,
            "bench_appearance_prob": 0.5071542941283733,
            "market_value_adjustment": 0.9978,
            "fbref_prior_metrics": null,
            "rationale": "Bench projection scaled from XGBoost M_service (9 historical appearances) to 22.2 expected mins (appearance prob 0.51)."
          },
          "stat_evolution": [
            {
              "step": "xgboost_raw",
              "description": "XGBoost M_service raw output over 8 target models",
              "stats": {
                "key_pass": 0.6117,
                "expected_assists": 0.0759,
                "assists": 0.0869,
                "assist_rate": 0.0869,
                "expected_goals": 0.0584,
                "goals": 0.0876,
                "goal_rate": 0.0876,
                "shots_on_target": 0.2488,
                "total_shots": 0.7809,
                "rating": 6.7018,
                "minutes": 19.59,
                "total_pass": 8.1302,
                "accurate_pass": 7.0068,
                "duels_won": 1.4043,
                "total_long_balls": 0.9417,
                "accurate_long_balls": 0.6608,
                "total_own_half_passes": 2.0651,
                "accurate_own_half_passes": 2.0651,
                "total_opp_half_passes": 6.0651,
                "accurate_opp_half_passes": 4.9417,
                "crosses_total": 2.2313,
                "crosses_accurate": 0.6696,
                "touches": 15.3188,
                "possession_lost": 3.5773,
                "dispossessed": 0.0,
                "duels_lost": 1.6113,
                "aerial_won": 0.2809,
                "aerial_lost": 0.0,
                "interceptions": 0.6113,
                "tackles_won": 0.2808,
                "tackles": 0.5617,
                "clearances": 0.0,
                "total_contest": 0.8921,
                "won_contest": 0.0,
                "challenges_lost": 0.3304,
                "fouls": 0.7191,
                "fouls_drawn": 0.5617,
                "blocks": 0.0,
                "big_chances_created": 0.3887,
                "big_chances_missed": 0.0,
                "xgot": 0.0236,
                "ball_carries": 5.6268,
                "total_progression": 17.5558,
                "progressive_carries": 1.0,
                "shots_off_target": 0.5321
              },
              "trace": {
                "model": {
                  "position_service": "M",
                  "schema_version": 7,
                  "trained_at": "2026-10-09T10:04:11.914604+00:00",
                  "trained_on": {
                    "matches": 1318,
                    "players": 892,
                    "rows": 23283
                  }
                },
                "player_history": [
                  {
                    "match_date": "2026-04-27",
                    "opponent": "Levante UD",
                    "minutes": 58.0,
                    "is_starting": true,
                    "weight": 0.1952,
                    "rating": 7.0
                  },
                  {
                    "match_date": "2026-04-23",
                    "opponent": "Rayo Vallecano",
                    "minutes": 12.0,
                    "is_starting": false,
                    "weight": 0.1659,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-04-11",
                    "opponent": "FC Barcelona",
                    "minutes": 64.0,
                    "is_starting": true,
                    "weight": 0.141,
                    "rating": 6.2
                  },
                  {
                    "match_date": "2026-04-04",
                    "opponent": "Real Betis",
                    "minutes": 78.0,
                    "is_starting": true,
                    "weight": 0.1199,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-03-21",
                    "opponent": "Getafe",
                    "minutes": 45.0,
                    "is_starting": true,
                    "weight": 0.1019,
                    "rating": 6.8
                  },
                  {
                    "match_date": "2026-03-09",
                    "opponent": "Real Oviedo",
                    "minutes": 62.0,
                    "is_starting": true,
                    "weight": 0.0866,
                    "rating": 6.5
                  },
                  {
                    "match_date": "2026-02-21",
                    "opponent": "Atlético Madrid",
                    "minutes": 20.0,
                    "is_starting": false,
                    "weight": 0.0736,
                    "rating": 6.4
                  },
                  {
                    "match_date": "2026-02-14",
                    "opponent": "Celta Vigo",
                    "minutes": 56.0,
                    "is_starting": true,
                    "weight": 0.0626,
                    "rating": 6.6
                  },
                  {
                    "match_date": "2026-02-09",
                    "opponent": "Villarreal",
                    "minutes": 31.0,
                    "is_starting": false,
                    "weight": 0.0532,
                    "rating": 7.2
                  }
                ],
                "feature_row": {
                  "history_matches": 9.0,
                  "is_starting_11": 0.0,
                  "totalShots": 1.1887,
                  "creative_index": 0.4244,
                  "expectedGoals": 0.0494,
                  "expectedAssists": 0.1221,
                  "onTargetScoringAttempt": 0.5344
                },
                "per_target": [
                  {
                    "target": "keyPass",
                    "predicted": 0.6117101311683655,
                    "model_output": 0.6117,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.1676
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1369
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0599
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0498
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0339
                      }
                    ],
                    "decomposition": {
                      "base": 0.8862,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.3807
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0421
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0359
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "contribution": -0.0229
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "contribution": 0.0178
                        }
                      ],
                      "others": 0.0333,
                      "total": 0.6117,
                      "log_link": true,
                      "margin_base": -0.120816,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.561411
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.079993
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.06345
                        },
                        {
                          "name": "dribbleValueNormalized",
                          "margin": -0.039966
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "margin": 0.031239
                        }
                      ],
                      "others_margin": 0.056014
                    }
                  },
                  {
                    "target": "expectedAssists",
                    "predicted": 0.07589277625083923,
                    "model_output": 0.0759,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedAssists",
                        "importance": 0.1257
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1072
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0611
                      },
                      {
                        "name": "creative_index",
                        "importance": 0.0554
                      },
                      {
                        "name": "creative_efficiency",
                        "importance": 0.0543
                      }
                    ],
                    "decomposition": {
                      "base": 0.0858,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0332
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0111
                        },
                        {
                          "name": "expectedAssists",
                          "contribution": 0.0042
                        },
                        {
                          "name": "cross_creative_contribution",
                          "contribution": 0.0043
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0029
                        }
                      ],
                      "others": 0.0066,
                      "total": 0.0759,
                      "log_link": true,
                      "margin_base": -2.456047,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.488586
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.190962
                        },
                        {
                          "name": "expectedAssists",
                          "margin": 0.064403
                        },
                        {
                          "name": "cross_creative_contribution",
                          "margin": 0.060968
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.041356
                        }
                      ],
                      "others_margin": 0.091223
                    }
                  },
                  {
                    "target": "goalAssist",
                    "predicted": 0.08688738942146301,
                    "model_output": 0.0869,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "creative_index",
                        "importance": 0.0535
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0459
                      },
                      {
                        "name": "expectedAssists",
                        "importance": 0.0393
                      },
                      {
                        "name": "totalCross",
                        "importance": 0.0321
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0306
                      }
                    ],
                    "decomposition": {
                      "base": 0.0852,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0216
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.006
                        },
                        {
                          "name": "creative_index",
                          "contribution": 0.0058
                        },
                        {
                          "name": "totalCross",
                          "contribution": 0.0062
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "contribution": 0.0039
                        }
                      ],
                      "others": 0.0014,
                      "total": 0.0869,
                      "log_link": true,
                      "margin_base": -2.462406,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.291838
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.090187
                        },
                        {
                          "name": "creative_index",
                          "margin": 0.080619
                        },
                        {
                          "name": "totalCross",
                          "margin": 0.079101
                        },
                        {
                          "name": "progressiveBallCarriesCount",
                          "margin": 0.046793
                        }
                      ],
                      "others_margin": 0.0144
                    }
                  },
                  {
                    "target": "expectedGoals",
                    "predicted": 0.05839943140745163,
                    "model_output": 0.0584,
                    "scale": "per match (raw)",
                    "top_features": [
                      {
                        "name": "expectedGoals",
                        "importance": 0.1316
                      },
                      {
                        "name": "totalShots",
                        "importance": 0.0794
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0663
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0546
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0244
                      }
                    ],
                    "decomposition": {
                      "base": 0.0944,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.0419
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0064
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0059
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0047
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0035
                        }
                      ],
                      "others": -0.0028,
                      "total": 0.0584,
                      "log_link": true,
                      "margin_base": -2.359917,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.586546
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.114203
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.105214
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.084375
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.058569
                        }
                      ],
                      "others_margin": -0.045918
                    }
                  },
                  {
                    "target": "goals",
                    "predicted": 0.08758551627397537,
                    "model_output": 0.0876,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.0916
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0421
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0418
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0374
                      },
                      {
                        "name": "goals",
                        "importance": 0.0259
                      }
                    ],
                    "decomposition": {
                      "base": 0.0976,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.038
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0114
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0063
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0045
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": 0.0042
                        }
                      ],
                      "others": 0.0016,
                      "total": 0.0876,
                      "log_link": true,
                      "margin_base": -2.326414,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.493072
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.17452
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.085035
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.056466
                        },
                        {
                          "name": "expectedGoals",
                          "margin": 0.050341
                        }
                      ],
                      "others_margin": 0.017985
                    }
                  },
                  {
                    "target": "onTargetScoringAttempt",
                    "predicted": 0.24884746968746185,
                    "model_output": 0.2488,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.127
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0728
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0694
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0373
                      },
                      {
                        "name": "opp_half_pass_pct",
                        "importance": 0.0266
                      }
                    ],
                    "decomposition": {
                      "base": 0.324,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.1507
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.0421
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0145
                        },
                        {
                          "name": "progressive_carries_p90",
                          "contribution": 0.0146
                        },
                        {
                          "name": "expectedGoals",
                          "contribution": -0.0102
                        }
                      ],
                      "others": 0.0145,
                      "total": 0.2488,
                      "log_link": true,
                      "margin_base": -1.127039,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.625502
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.217447
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.065331
                        },
                        {
                          "name": "progressive_carries_p90",
                          "margin": 0.061694
                        },
                        {
                          "name": "expectedGoals",
                          "margin": -0.042758
                        }
                      ],
                      "others_margin": 0.059912
                    }
                  },
                  {
                    "target": "totalShots",
                    "predicted": 0.7809035778045654,
                    "model_output": 0.7809,
                    "scale": "count per match",
                    "top_features": [
                      {
                        "name": "totalShots",
                        "importance": 0.1313
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.1243
                      },
                      {
                        "name": "onTargetScoringAttempt",
                        "importance": 0.0616
                      },
                      {
                        "name": "expectedGoals",
                        "importance": 0.0455
                      },
                      {
                        "name": "dribbleValueNormalized",
                        "importance": 0.0284
                      }
                    ],
                    "decomposition": {
                      "base": 0.9905,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.5147
                        },
                        {
                          "name": "totalShots",
                          "contribution": 0.1606
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "contribution": 0.0452
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "contribution": 0.0446
                        },
                        {
                          "name": "interceptionWon",
                          "contribution": 0.0361
                        }
                      ],
                      "others": 0.0186,
                      "total": 0.7809,
                      "log_link": false,
                      "margin_base": 0.990465,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.514674
                        },
                        {
                          "name": "totalShots",
                          "margin": 0.160612
                        },
                        {
                          "name": "opp_half_pass_pct",
                          "margin": 0.045173
                        },
                        {
                          "name": "onTargetScoringAttempt",
                          "margin": 0.044627
                        },
                        {
                          "name": "interceptionWon",
                          "margin": 0.036068
                        }
                      ],
                      "others_margin": 0.018632
                    }
                  },
                  {
                    "target": "rating",
                    "predicted": 6.7017903327941895,
                    "model_output": 6.7018,
                    "scale": "0-10",
                    "top_features": [
                      {
                        "name": "rating",
                        "importance": 0.0814
                      },
                      {
                        "name": "totalOppositionHalfPasses",
                        "importance": 0.0732
                      },
                      {
                        "name": "accurateOppositionHalfPasses",
                        "importance": 0.0525
                      },
                      {
                        "name": "is_starting_11",
                        "importance": 0.0416
                      },
                      {
                        "name": "keyPass",
                        "importance": 0.0311
                      }
                    ],
                    "decomposition": {
                      "base": 6.8489,
                      "items": [
                        {
                          "name": "is_starting_11",
                          "contribution": -0.076
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "contribution": -0.0509
                        },
                        {
                          "name": "rating",
                          "contribution": -0.0321
                        },
                        {
                          "name": "creative_efficiency",
                          "contribution": 0.013
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "contribution": -0.0091
                        }
                      ],
                      "others": 0.008,
                      "total": 6.7018,
                      "log_link": false,
                      "margin_base": 6.848871,
                      "item_margins": [
                        {
                          "name": "is_starting_11",
                          "margin": -0.076019
                        },
                        {
                          "name": "totalOppositionHalfPasses",
                          "margin": -0.050915
                        },
                        {
                          "name": "rating",
                          "margin": -0.032142
                        },
                        {
                          "name": "creative_efficiency",
                          "margin": 0.012951
                        },
                        {
                          "name": "accurateOppositionHalfPasses",
                          "margin": -0.009116
                        }
                      ],
                      "others_margin": 0.008164
                    }
                  }
                ],
                "prediction_basis": {
                  "source": "xgboost_regressor",
                  "role": "substitute",
                  "history_matches": 9,
                  "role_matches": 3,
                  "minutes_source": "role_history_shrunk",
                  "volume_basis": "role_history"
                },
                "caveat": "Raw XGBoost output: no per-90 normalization; minutesPlayed is the recency-weighted average of his appearances in this role (starter / substitute). Missing provider values count as 0 only when the provider recorded that stat for the match."
              }
            },
            {
              "step": "market_value_boost",
              "description": "Market-value quality scaling (boost 0.9978, quality 0.484)",
              "stats": {
                "key_pass": 0.6104,
                "expected_assists": 0.0757,
                "assists": 0.0867,
                "assist_rate": 0.0867,
                "expected_goals": 0.0583,
                "goals": 0.0874,
                "goal_rate": 0.0874,
                "shots_on_target": 0.2483,
                "total_shots": 0.7792,
                "rating": 6.7018,
                "minutes": 19.59,
                "total_pass": 8.1123,
                "accurate_pass": 6.9914,
                "duels_won": 1.4012,
                "total_long_balls": 0.9396,
                "accurate_long_balls": 0.6593,
                "total_own_half_passes": 2.0606,
                "accurate_own_half_passes": 2.0606,
                "total_opp_half_passes": 6.0518,
                "accurate_opp_half_passes": 4.9308,
                "crosses_total": 2.2264,
                "crosses_accurate": 0.6681,
                "touches": 15.2851,
                "possession_lost": 3.5694,
                "dispossessed": 0.0,
                "duels_lost": 1.6078,
                "aerial_won": 0.2803,
                "aerial_lost": 0.0,
                "interceptions": 0.61,
                "tackles_won": 0.2802,
                "tackles": 0.5605,
                "clearances": 0.0,
                "total_contest": 0.8901,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.7175,
                "fouls_drawn": 0.5605,
                "blocks": 0.0,
                "big_chances_created": 0.3878,
                "big_chances_missed": 0.0,
                "xgot": 0.0235,
                "ball_carries": 5.6144,
                "total_progression": 17.5172,
                "progressive_carries": 0.9978,
                "shots_off_target": 0.5309
              },
              "params": {
                "market_value_eur": 6800000,
                "quality_factor": 0.4842,
                "boost_factor": 0.9978,
                "reference_quality": 0.505,
                "history_matches": 9,
                "history_shrink": 0.3571,
                "market_value_known": true
              }
            },
            {
              "step": "minutes_scale",
              "description": "Bench projection scaled from 19.6 to 22.2 expected minutes (appearance prob 0.51)",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0856,
                "assists": 0.0981,
                "assist_rate": 0.0981,
                "expected_goals": 0.0659,
                "goals": 0.0989,
                "goal_rate": 0.0989,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0266,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16
              },
              "params": {
                "expected_minutes": 22.16,
                "projection_minutes": 19.59,
                "minutes_scale": 1.1311,
                "appearance_probability": 0.507
              }
            },
            {
              "step": "final_cap",
              "description": "Stats clamped to historical constraints and shot-component identity",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0856,
                "assists": 0.0981,
                "assist_rate": 0.0981,
                "expected_goals": 0.0659,
                "goals": 0.0989,
                "goal_rate": 0.0989,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0266,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16
              },
              "params": {
                "stats_clamped": 0,
                "shot_identity_applied": false
              }
            },
            {
              "step": "team_lambda_rescale",
              "description": "Player expected_goals/expected_assists rescaled so squad sum equals team lambda 1.48 (squad xG sum 1.4515, xG scale 1.0175, xA scale 1.0198, team xA 0.96 = 0.65 x lambda)",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0873,
                "assist_rate": 0.0981,
                "assists": 0,
                "expected_goals": 0.0671,
                "goal_rate": 0.0989,
                "goals": 0,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0271,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.0922
              },
              "params": {
                "team_lambda": 1.477,
                "squad_xg_sum": 1.4515,
                "squad_xa_sum": 0.9414,
                "team_expected_assists": 0.9601,
                "team_xa_to_xg_ratio": 0.65,
                "bench_appearance_weighted": true,
                "xg_scale": 1.0175,
                "xa_scale": 1.0198,
                "opponent_lambda": 0.765,
                "scoreline_reset": true,
                "appearance_weight": 0.507
              }
            },
            {
              "step": "rankings_attached",
              "description": "Global ranking attached for display (match squad rank 11 by projected rating, fifa_overall 72.0; not used by the projection)",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0873,
                "assist_rate": 0.0981,
                "assists": 0,
                "expected_goals": 0.0671,
                "goal_rate": 0.0989,
                "goals": 0,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0271,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.0922,
                "fifa_overall": 72.0
              },
              "params": {
                "match_squad_rank": 11,
                "squad_role": "substitute",
                "squad_rank_basis": "projected_rating",
                "affects_projection": false,
                "ranking_source": "sofascore_plus_fifa_csv",
                "ranking_status": "combined",
                "global_player_rank": 4446,
                "fifa_rank": 4144.0,
                "fifa_source": "EA SPORTS FC official ratings",
                "ranking_match": "player_id",
                "fifa_overall": 72.0
              }
            },
            {
              "step": "integer_goal_projection",
              "description": "Team scoreline allocation: 1 projected goals distributed by scorer weight (xG x finishing x appearance)",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0873,
                "assist_rate": 0.0981,
                "assists": 0,
                "expected_goals": 0.0671,
                "goal_rate": 0.0989,
                "goals": 0,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0271,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0329,
                "projected_assists": 0,
                "assist_probability": 0.0,
                "finishing_factor": 1.25,
                "creation_factor": 1.0922,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": true,
                "team_goals": 1,
                "goals_allocated": 0,
                "goal_probability": 0.0329,
                "scorer_weight": 0.0425,
                "squad_weight_total": 1.6319,
                "weight_share": 0.0261,
                "finishing_factor": 1.25,
                "appearance_weight": 0.507,
                "weight_rank": 8,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Roberto Fernández",
                    "weight": 0.5526,
                    "already": 0,
                    "effective_weight": 0.5526,
                    "runner_up": "Marcos Fernández",
                    "runner_up_effective_weight": 0.2932
                  }
                ]
              }
            },
            {
              "step": "integer_assist_projection",
              "description": "Team scoreline allocation: 1 projected assists distributed by provider weight (xA x creation x appearance; nobody assists his own goal)",
              "stats": {
                "key_pass": 0.6904,
                "expected_assists": 0.0873,
                "assist_rate": 0.0981,
                "assists": 0,
                "expected_goals": 0.0671,
                "goal_rate": 0.0989,
                "goals": 0,
                "shots_on_target": 0.2808,
                "total_shots": 0.8813,
                "rating": 6.7018,
                "minutes": 22.16,
                "total_pass": 9.1755,
                "accurate_pass": 7.9077,
                "duels_won": 1.5848,
                "total_long_balls": 1.0627,
                "accurate_long_balls": 0.7457,
                "total_own_half_passes": 2.3307,
                "accurate_own_half_passes": 2.3307,
                "total_opp_half_passes": 6.8449,
                "accurate_opp_half_passes": 5.577,
                "crosses_total": 2.5182,
                "crosses_accurate": 0.7557,
                "touches": 17.2883,
                "possession_lost": 4.0372,
                "dispossessed": 0.0,
                "duels_lost": 1.8185,
                "aerial_won": 0.317,
                "aerial_lost": 0.0,
                "interceptions": 0.6899,
                "tackles_won": 0.3169,
                "tackles": 0.634,
                "clearances": 0.0,
                "total_contest": 1.0068,
                "won_contest": 0.0,
                "challenges_lost": 0.3297,
                "fouls": 0.8115,
                "fouls_drawn": 0.634,
                "blocks": 0.0,
                "big_chances_created": 0.4386,
                "big_chances_missed": 0.0,
                "xgot": 0.0271,
                "ball_carries": 6.3502,
                "total_progression": 19.8129,
                "progressive_carries": 1.1286,
                "shots_off_target": 0.6005,
                "bench_appearance_probability": 0.507,
                "bench_expected_minutes": 22.16,
                "projected_substitution_order": 2,
                "substitution_rule_cap": 5,
                "projected_team_substitution_count": 2,
                "projected_substitution_expected_count": 2.144,
                "projected_substitution_game_state_adjustment": 0,
                "substitution_usage": "projected_used_substitute",
                "projected_goals": 0,
                "goal_probability": 0.0329,
                "projected_assists": 0,
                "assist_probability": 0.0424,
                "finishing_factor": 1.25,
                "creation_factor": 1.0922,
                "fifa_overall": 72.0
              },
              "params": {
                "allocation_applied": true,
                "team_assists": 1,
                "assists_allocated": 0,
                "assist_probability": 0.0424,
                "provider_weight": 0.0483,
                "squad_weight_total": 0.9581,
                "weight_share": 0.0505,
                "creation_factor": 1.0922,
                "appearance_weight": 0.507,
                "weight_rank": 7,
                "eligible_players": 12,
                "allocation_rounds": [
                  {
                    "n": 1,
                    "player": "Javier Hernández",
                    "weight": 0.1889,
                    "already": 0,
                    "effective_weight": 0.1889,
                    "runner_up": "Edu Expósito",
                    "runner_up_effective_weight": 0.1344,
                    "blocked_own_goal": [
                      "Roberto Fernández"
                    ]
                  }
                ]
              }
            }
          ]
        }
      },
      "team_totals": {
        "projected_goals": 1,
        "expected_goals": 1.48,
        "expected_assists": 0.96,
        "total_shots": 15,
        "shots_on_target": 5,
        "total_passes": 345,
        "interceptions": 6,
        "tackles": 13,
        "avg_rating": 6.85,
        "possession_estimated_pct": 50.0,
        "pressing_actions_per_90": 6.3
      }
    }
  },
  "antagonist_report": {
    "home_attacking_duels": [
      {
        "attacker": "Chupete",
        "attacker_role": "ST",
        "attacker_market_value": 10700000,
        "attacker_height": 185,
        "attacker_skill_quality": 0.531,
        "defenders": [
          "Quilindschy Hartman",
          "Leandro Cabrera"
        ],
        "defender_roles": [
          "CB",
          "CB"
        ],
        "def_skill_quality_avg": 0.511,
        "duel_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "numerical_situation": "1v2",
        "duel_win_rate": 0.191,
        "xg_contribution": 0.3175,
        "xg_multiplier": 0.9867,
        "shots_in_zone": 2.1,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.3,
        "aerial_duels": 3,
        "aerial_won": 1.8,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.5,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Quilindschy Hartman",
            "role": "CB",
            "market_value": 15500000,
            "tackles_attempted": 1.0,
            "tackles_won": 0.9,
            "fouls_committed": 0.5,
            "interceptions_in_zone": 0.9,
            "clearances_in_zone": 0.8,
            "aerial_duels_won": 0.6,
            "defensive_success_rate": 0.809
          },
          {
            "player": "Leandro Cabrera",
            "role": "CB",
            "market_value": 930000,
            "tackles_attempted": 1.0,
            "tackles_won": 0.9,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.6,
            "defensive_success_rate": 0.809
          }
        ],
        "duel_analysis": "Chupete (ST) is evenly matched against Quilindschy Hartman and Leandro Cabrera in a 2-defender block. Duel win probability: 19%.  Matchup xG multiplier ×0.99 (×1.00 = his usual level). Projected xG contribution: 0.318 — with neither side clearly dominant."
      },
      {
        "attacker": "Joaquín Muñoz",
        "attacker_role": "LM",
        "attacker_market_value": 1400000,
        "attacker_height": 172,
        "attacker_skill_quality": 0.437,
        "defenders": [
          "Omar El Hilali"
        ],
        "defender_roles": [
          "RB"
        ],
        "def_skill_quality_avg": 0.589,
        "duel_zone": "Left Mid vs Right Back — Wide Channel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.317,
        "xg_contribution": 0.0776,
        "xg_multiplier": 0.7901,
        "shots_in_zone": 1.3,
        "dribbles_attempted": 3,
        "dribbles_successful": 0.8,
        "aerial_duels": 2,
        "aerial_won": 0.8,
        "crosses_in_zone": 2.0,
        "fouls_drawn": 1.3,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Omar El Hilali",
            "role": "RB",
            "market_value": 15900000,
            "tackles_attempted": 2.1,
            "tackles_won": 1.8,
            "fouls_committed": 0.5,
            "interceptions_in_zone": 0.9,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.683
          }
        ],
        "duel_analysis": "Joaquín Muñoz (LM) is heavily outmatched defensively against Omar El Hilali in a direct 1v1 contest. Duel win probability: 32%.  Matchup xG multiplier ×0.79 (×1.00 = his usual level). Projected xG contribution: 0.078 — with very limited chance creation expected."
      },
      {
        "attacker": "Pablo Martínez",
        "attacker_role": "RM",
        "attacker_market_value": 3100000,
        "attacker_height": 182,
        "attacker_skill_quality": 0.439,
        "defenders": [
          "Clemens Riedel"
        ],
        "defender_roles": [
          "LB"
        ],
        "def_skill_quality_avg": 0.449,
        "duel_zone": "Right Mid vs Left Back — Wide Channel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.432,
        "xg_contribution": 0.0457,
        "xg_multiplier": 0.9591,
        "shots_in_zone": 1.5,
        "dribbles_attempted": 3,
        "dribbles_successful": 1.1,
        "aerial_duels": 2,
        "aerial_won": 1.1,
        "crosses_in_zone": 2.0,
        "fouls_drawn": 1.1,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Clemens Riedel",
            "role": "LB",
            "market_value": 3900000,
            "tackles_attempted": 1.9,
            "tackles_won": 1.6,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.9,
            "defensive_success_rate": 0.568
          }
        ],
        "duel_analysis": "Pablo Martínez (RM) is evenly matched against Clemens Riedel in a direct 1v1 contest. Duel win probability: 43%.  Matchup xG multiplier ×0.96 (×1.00 = his usual level). Projected xG contribution: 0.046 — with neither side clearly dominant."
      },
      {
        "attacker": "David Larrubia",
        "attacker_role": "CM",
        "attacker_market_value": 5300000,
        "attacker_height": 172,
        "attacker_skill_quality": 0.466,
        "defenders": [
          "Gabriel Moscardo"
        ],
        "defender_roles": [
          "CDM"
        ],
        "def_skill_quality_avg": 0.493,
        "duel_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.382,
        "xg_contribution": 0.0784,
        "xg_multiplier": 0.9001,
        "shots_in_zone": 1.5,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.7,
        "aerial_duels": 2,
        "aerial_won": 0.8,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Gabriel Moscardo",
            "role": "CDM",
            "market_value": 7500000,
            "tackles_attempted": 2.0,
            "tackles_won": 1.6,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.618
          }
        ],
        "duel_analysis": "David Larrubia (CM) faces tough defensive resistance against Gabriel Moscardo in a direct 1v1 contest. Duel win probability: 38%.  Matchup xG multiplier ×0.90 (×1.00 = his usual level). Projected xG contribution: 0.078 — and is restricted in space and time on the ball."
      },
      {
        "attacker": "Carlos Dotor",
        "attacker_role": "CM",
        "attacker_market_value": 1200000,
        "attacker_height": 180,
        "attacker_skill_quality": 0.437,
        "defenders": [
          "Gabriel Moscardo"
        ],
        "defender_roles": [
          "CDM"
        ],
        "def_skill_quality_avg": 0.493,
        "duel_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.398,
        "xg_contribution": 0.0662,
        "xg_multiplier": 0.9236,
        "shots_in_zone": 1.5,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.7,
        "aerial_duels": 2,
        "aerial_won": 1.1,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Gabriel Moscardo",
            "role": "CDM",
            "market_value": 7500000,
            "tackles_attempted": 2.0,
            "tackles_won": 1.6,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.9,
            "defensive_success_rate": 0.602
          }
        ],
        "duel_analysis": "Carlos Dotor (CM) faces tough defensive resistance against Gabriel Moscardo in a direct 1v1 contest. Duel win probability: 40%.  Matchup xG multiplier ×0.92 (×1.00 = his usual level). Projected xG contribution: 0.066 — and is restricted in space and time on the ball."
      },
      {
        "attacker": "Dani Lorenzo",
        "attacker_role": "CM",
        "attacker_market_value": 1400000,
        "attacker_height": 176,
        "attacker_skill_quality": 0.437,
        "defenders": [
          "Gabriel Moscardo"
        ],
        "defender_roles": [
          "CDM"
        ],
        "def_skill_quality_avg": 0.493,
        "duel_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.382,
        "xg_contribution": 0.0435,
        "xg_multiplier": 0.9,
        "shots_in_zone": 1.5,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.7,
        "aerial_duels": 2,
        "aerial_won": 0.9,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Gabriel Moscardo",
            "role": "CDM",
            "market_value": 7500000,
            "tackles_attempted": 2.0,
            "tackles_won": 1.6,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.618
          }
        ],
        "duel_analysis": "Dani Lorenzo (CM) faces tough defensive resistance against Gabriel Moscardo in a direct 1v1 contest. Duel win probability: 38%.  Matchup xG multiplier ×0.90 (×1.00 = his usual level). Projected xG contribution: 0.043 — and is restricted in space and time on the ball."
      }
    ],
    "away_attacking_duels": [
      {
        "attacker": "Javier Hernández",
        "attacker_role": "LW",
        "attacker_market_value": 1600000,
        "attacker_height": 175,
        "attacker_skill_quality": 0.437,
        "defenders": [
          "Rafa Garrido"
        ],
        "defender_roles": [
          "RB"
        ],
        "def_skill_quality_avg": 0.437,
        "duel_zone": "Left Wing vs Right Back — Flank Battle",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.5,
        "xg_contribution": 0.1584,
        "xg_multiplier": 1.0294,
        "shots_in_zone": 2.0,
        "dribbles_attempted": 3,
        "dribbles_successful": 1.3,
        "aerial_duels": 2,
        "aerial_won": 0.9,
        "crosses_in_zone": 1.9,
        "fouls_drawn": 1.0,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Rafa Garrido",
            "role": "RB",
            "market_value": 1400000,
            "tackles_attempted": 1.9,
            "tackles_won": 1.5,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.5
          }
        ],
        "duel_analysis": "Javier Hernández (LW) is evenly matched against Rafa Garrido in a direct 1v1 contest. Duel win probability: 50%.  Matchup xG multiplier ×1.03 (×1.00 = his usual level). Projected xG contribution: 0.158 — with neither side clearly dominant."
      },
      {
        "attacker": "Roberto Fernández",
        "attacker_role": "ST",
        "attacker_market_value": 21000000,
        "attacker_height": 186,
        "attacker_skill_quality": 0.641,
        "defenders": [
          "Ángel Recio",
          "Fernando Calero"
        ],
        "defender_roles": [
          "CB",
          "CB"
        ],
        "def_skill_quality_avg": 0.437,
        "duel_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "numerical_situation": "1v2",
        "duel_win_rate": 0.3,
        "xg_contribution": 0.4619,
        "xg_multiplier": 1.1463,
        "shots_in_zone": 2.5,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.5,
        "aerial_duels": 3,
        "aerial_won": 1.8,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.5,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Ángel Recio",
            "role": "CB",
            "market_value": 315000,
            "tackles_attempted": 1.0,
            "tackles_won": 0.8,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.6,
            "defensive_success_rate": 0.7
          },
          {
            "player": "Fernando Calero",
            "role": "CB",
            "market_value": 2100000,
            "tackles_attempted": 1.0,
            "tackles_won": 0.8,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.6,
            "defensive_success_rate": 0.7
          }
        ],
        "duel_analysis": "Roberto Fernández (ST) is slightly favored against Ángel Recio and Fernando Calero in a 2-defender block. Duel win probability: 30%. The quality gap is significant (€21M vs €1M avg). Matchup xG multiplier ×1.15 (×1.00 = his usual level). Projected xG contribution: 0.462 — creating consistent moderate threat."
      },
      {
        "attacker": "Marcos Fernández",
        "attacker_role": "ST",
        "attacker_market_value": 1500000,
        "attacker_height": 176,
        "attacker_skill_quality": 0.437,
        "defenders": [
          "Ángel Recio",
          "Fernando Calero"
        ],
        "defender_roles": [
          "CB",
          "CB"
        ],
        "def_skill_quality_avg": 0.437,
        "duel_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "numerical_situation": "1v2",
        "duel_win_rate": 0.18,
        "xg_contribution": 0.2828,
        "xg_multiplier": 0.953,
        "shots_in_zone": 2.0,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.3,
        "aerial_duels": 3,
        "aerial_won": 1.4,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.4,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Ángel Recio",
            "role": "CB",
            "market_value": 315000,
            "tackles_attempted": 1.0,
            "tackles_won": 0.9,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.8,
            "defensive_success_rate": 0.82
          },
          {
            "player": "Fernando Calero",
            "role": "CB",
            "market_value": 2100000,
            "tackles_attempted": 1.0,
            "tackles_won": 0.9,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.8,
            "defensive_success_rate": 0.82
          }
        ],
        "duel_analysis": "Marcos Fernández (ST) is evenly matched against Ángel Recio and Fernando Calero in a 2-defender block. Duel win probability: 18%.  Matchup xG multiplier ×0.95 (×1.00 = his usual level). Projected xG contribution: 0.283 — with neither side clearly dominant."
      },
      {
        "attacker": "Bryan Zaragoza",
        "attacker_role": "ST",
        "attacker_market_value": 7500000,
        "attacker_height": 165,
        "attacker_skill_quality": 0.493,
        "defenders": [
          "Ángel Recio",
          "Fernando Calero"
        ],
        "defender_roles": [
          "CB",
          "CB"
        ],
        "def_skill_quality_avg": 0.437,
        "duel_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "numerical_situation": "1v2",
        "duel_win_rate": 0.18,
        "xg_contribution": 0.1272,
        "xg_multiplier": 0.9483,
        "shots_in_zone": 2.0,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.3,
        "aerial_duels": 3,
        "aerial_won": 1.0,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.5,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Ángel Recio",
            "role": "CB",
            "market_value": 315000,
            "tackles_attempted": 1.0,
            "tackles_won": 0.9,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 1.0,
            "defensive_success_rate": 0.82
          },
          {
            "player": "Fernando Calero",
            "role": "CB",
            "market_value": 2100000,
            "tackles_attempted": 1.0,
            "tackles_won": 0.9,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 1.0,
            "defensive_success_rate": 0.82
          }
        ],
        "duel_analysis": "Bryan Zaragoza (ST) is evenly matched against Ángel Recio and Fernando Calero in a 2-defender block. Duel win probability: 18%.  Matchup xG multiplier ×0.95 (×1.00 = his usual level). Projected xG contribution: 0.127 — with neither side clearly dominant."
      },
      {
        "attacker": "Gabriel Moscardo",
        "attacker_role": "CDM",
        "attacker_market_value": 7500000,
        "attacker_height": 185,
        "attacker_skill_quality": 0.493,
        "defenders": [
          "David Larrubia"
        ],
        "defender_roles": [
          "CM"
        ],
        "def_skill_quality_avg": 0.466,
        "duel_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.468,
        "xg_contribution": 0.0753,
        "xg_multiplier": 1.0999,
        "shots_in_zone": 1.1,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.8,
        "aerial_duels": 2,
        "aerial_won": 1.2,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.1,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "David Larrubia",
            "role": "CM",
            "market_value": 5300000,
            "tackles_attempted": 1.9,
            "tackles_won": 1.5,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.8,
            "defensive_success_rate": 0.532
          }
        ],
        "duel_analysis": "Gabriel Moscardo (CDM) is slightly favored against David Larrubia in a direct 1v1 contest. Duel win probability: 47%.  Matchup xG multiplier ×1.10 (×1.00 = his usual level). Projected xG contribution: 0.075 — creating consistent moderate threat."
      },
      {
        "attacker": "Edu Expósito",
        "attacker_role": "CDM",
        "attacker_market_value": 4500000,
        "attacker_height": 175,
        "attacker_skill_quality": 0.456,
        "defenders": [
          "David Larrubia"
        ],
        "defender_roles": [
          "CM"
        ],
        "def_skill_quality_avg": 0.466,
        "duel_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.409,
        "xg_contribution": 0.1394,
        "xg_multiplier": 1.0128,
        "shots_in_zone": 1.0,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.7,
        "aerial_duels": 2,
        "aerial_won": 0.9,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "David Larrubia",
            "role": "CM",
            "market_value": 5300000,
            "tackles_attempted": 1.9,
            "tackles_won": 1.6,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.591
          }
        ],
        "duel_analysis": "Edu Expósito (CDM) is evenly matched against David Larrubia in a direct 1v1 contest. Duel win probability: 41%.  Matchup xG multiplier ×1.01 (×1.00 = his usual level). Projected xG contribution: 0.139 — with neither side clearly dominant."
      }
    ],
    "midfield_battle": {
      "home_midfield_power": 0.493,
      "away_midfield_power": 0.462,
      "home_creative_power": 0.403,
      "away_creative_power": 0.482,
      "home_defensive_power": 0.378,
      "away_defensive_power": 0.419,
      "home_dominance_ratio": 0.516,
      "home_midfield_count": 5,
      "away_midfield_count": 3,
      "home_midfield_players": [
        "David Larrubia",
        "Dani Lorenzo",
        "Joaquín Muñoz",
        "Pablo Martínez",
        "Carlos Dotor"
      ],
      "away_midfield_players": [
        "Javier Hernández",
        "Gabriel Moscardo",
        "Edu Expósito"
      ],
      "possession_advantage": "neutral",
      "estimated_possession_home_pct": 50.0,
      "estimated_possession_away_pct": 50.0,
      "home_pressing_actions_per_90": 6.1,
      "away_pressing_actions_per_90": 6.3,
      "home_key_passes_projected": 3.9,
      "away_key_passes_projected": 4.4,
      "home_throughball_threat": 1.8,
      "away_throughball_threat": 2.0,
      "key_personal_duel": "David Larrubia vs Gabriel Moscardo",
      "midfield_lambda_factor_home": 1.002,
      "midfield_lambda_factor_away": 1.005
    },
    "formation_analysis": {
      "home_formation": "4-4-2",
      "away_formation": "4-2-3-1",
      "home_tactical_bonus": -0.04,
      "away_tactical_bonus": 0.07,
      "formation_verdict": "Tactical parity between 4-4-2 and 4-2-3-1. Match outcome driven primarily by individual player quality."
    },
    "home_lambda": 0.765,
    "away_lambda": 1.477,
    "home_top_threat_zones": [
      "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
      "Central Mid vs Defensive Mid — Pressing/Creation Duel"
    ],
    "away_top_threat_zones": [
      "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
      "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle"
    ],
    "home_player_antagonists": {
      "Chupete": {
        "opponents": [
          "Quilindschy Hartman",
          "Leandro Cabrera"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "attacking_duel"
      },
      "Joaquín Muñoz": {
        "opponents": [
          "Omar El Hilali",
          "Gabriel Moscardo"
        ],
        "primary_zone": "Left Mid vs Right Back — Wide Channel",
        "source": "attacking_duel, midfield_pairing"
      },
      "Pablo Martínez": {
        "opponents": [
          "Clemens Riedel",
          "Edu Expósito"
        ],
        "primary_zone": "Right Mid vs Left Back — Wide Channel",
        "source": "attacking_duel, midfield_pairing"
      },
      "David Larrubia": {
        "opponents": [
          "Gabriel Moscardo",
          "Edu Expósito"
        ],
        "primary_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "source": "attacking_duel, defensive_duel, midfield_pairing"
      },
      "Carlos Dotor": {
        "opponents": [
          "Gabriel Moscardo",
          "Edu Expósito"
        ],
        "primary_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "source": "attacking_duel, midfield_pairing"
      },
      "Dani Lorenzo": {
        "opponents": [
          "Gabriel Moscardo",
          "Javier Hernández"
        ],
        "primary_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "source": "attacking_duel, midfield_pairing"
      },
      "Rafa Garrido": {
        "opponents": [
          "Javier Hernández"
        ],
        "primary_zone": "Left Wing vs Right Back — Flank Battle",
        "source": "defensive_duel"
      },
      "Ángel Recio": {
        "opponents": [
          "Roberto Fernández",
          "Marcos Fernández",
          "Bryan Zaragoza"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "defensive_duel"
      },
      "Fernando Calero": {
        "opponents": [
          "Roberto Fernández",
          "Marcos Fernández",
          "Bryan Zaragoza"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "defensive_duel"
      },
      "Alfonso Herrero": {
        "opponents": [
          "Roberto Fernández",
          "Bryan Zaragoza"
        ],
        "primary_zone": "Shape fallback",
        "source": "formation_fallback"
      },
      "Carlos Puga": {
        "opponents": [
          "Marcos Fernández"
        ],
        "primary_zone": "Shape fallback",
        "source": "formation_fallback"
      }
    },
    "away_player_antagonists": {
      "Quilindschy Hartman": {
        "opponents": [
          "Chupete"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "defensive_duel"
      },
      "Leandro Cabrera": {
        "opponents": [
          "Chupete"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "defensive_duel"
      },
      "Omar El Hilali": {
        "opponents": [
          "Joaquín Muñoz"
        ],
        "primary_zone": "Left Mid vs Right Back — Wide Channel",
        "source": "defensive_duel"
      },
      "Clemens Riedel": {
        "opponents": [
          "Pablo Martínez"
        ],
        "primary_zone": "Right Mid vs Left Back — Wide Channel",
        "source": "defensive_duel"
      },
      "Gabriel Moscardo": {
        "opponents": [
          "David Larrubia",
          "Carlos Dotor",
          "Dani Lorenzo",
          "Joaquín Muñoz"
        ],
        "primary_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "source": "defensive_duel, attacking_duel, midfield_pairing"
      },
      "Javier Hernández": {
        "opponents": [
          "Rafa Garrido",
          "Dani Lorenzo"
        ],
        "primary_zone": "Left Wing vs Right Back — Flank Battle",
        "source": "attacking_duel, midfield_pairing"
      },
      "Roberto Fernández": {
        "opponents": [
          "Ángel Recio",
          "Fernando Calero"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "attacking_duel"
      },
      "Marcos Fernández": {
        "opponents": [
          "Ángel Recio",
          "Fernando Calero"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "attacking_duel"
      },
      "Bryan Zaragoza": {
        "opponents": [
          "Ángel Recio",
          "Fernando Calero"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "attacking_duel"
      },
      "Edu Expósito": {
        "opponents": [
          "David Larrubia",
          "Carlos Dotor",
          "Pablo Martínez"
        ],
        "primary_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
        "source": "attacking_duel, midfield_pairing"
      },
      "Marko Dmitrović": {
        "opponents": [
          "Chupete",
          "David Larrubia"
        ],
        "primary_zone": "Shape fallback",
        "source": "formation_fallback"
      }
    },
    "key_tactical_insight": "Midfield is evenly contested — David Larrubia vs Gabriel Moscardo will be the pivotal duel. Total antagonist xG — Home: 0.63, Away: 1.24. Home danger zone: Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle. Away danger zone: Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle.",
    "lambda_factors": {
      "league_anchor": 1.35,
      "home_advantage_factor": 1.15,
      "home_gk_opposition_factor": 1.0107,
      "away_gk_opposition_factor": 1.0107,
      "home_set_piece_bonus": 0.0,
      "away_set_piece_bonus": 0.088,
      "home_defensive_solidity_vs": 0.9849,
      "away_defensive_solidity_vs": 1.0063,
      "home_midfield_factor": 1.002,
      "away_midfield_factor": 1.005,
      "stage_discount": 1.0,
      "quality_gap_applied": true,
      "home_avg_quality": 0.4497,
      "away_avg_quality": 0.5017,
      "avg_quality_gap": -0.0519,
      "squad_value_gap_log": -0.8672,
      "top5_value_gap_log": -0.8647,
      "attack_value_gap_log": -0.482,
      "elite_count_gap": 0,
      "combined_quality_gap": -0.1468,
      "stronger_lambda_boost": 0.0807,
      "weaker_lambda_suppression": 0.047,
      "home_lambda_chain": [
        {
          "label": "league_anchor",
          "value": 1.35
        },
        {
          "label": "duel_blend",
          "raw_xg": 0.6289,
          "n_duels": 6,
          "duel_confidence": 0.75,
          "result": 0.8092
        },
        {
          "label": "midfield_factor",
          "factor": 1.002,
          "result": 0.8108
        },
        {
          "label": "formation_bonus",
          "factor": 0.96,
          "result": 0.7784
        },
        {
          "label": "home_advantage",
          "factor": 1.15,
          "result": 0.8951
        },
        {
          "label": "standing_factor",
          "factor": 0.8756,
          "result": 0.7838
        },
        {
          "label": "gk_opposition",
          "factor": 1.0107,
          "result": 0.7921
        },
        {
          "label": "defensive_solidity",
          "factor": 0.9849,
          "result": 0.7802
        },
        {
          "label": "set_piece_bonus",
          "bonus": 0.0,
          "result": 0.7802
        },
        {
          "label": "engine_clamp",
          "pre": 0.7802,
          "result": 0.7802,
          "band": [
            0.6,
            4.0
          ],
          "clamped": false
        },
        {
          "label": "quality_gap",
          "applied": true,
          "combined_quality_gap": -0.1468,
          "factor": 0.953,
          "pre": 0.7802,
          "result": 0.7435
        },
        {
          "label": "stage_discount",
          "applied": false,
          "factor": 1.0,
          "result": 0.7435
        },
        {
          "label": "bench_bonus",
          "side": "home",
          "bonus": 0.1258,
          "result": 0.8698
        },
        {
          "label": "fbref_blend",
          "side": "home",
          "applied": true,
          "blending_weight": 0.228,
          "empirical_lambda": 0.4123,
          "result": 0.7655
        },
        {
          "label": "router_clamp",
          "pre": 0.7655,
          "result": 0.765,
          "band": [
            0.65,
            4.8
          ]
        },
        {
          "label": "mismatch_pressure",
          "applied": false,
          "reason": "quality gap below 0.30",
          "result": 0.765
        },
        {
          "label": "underdog_floor",
          "applied": false,
          "mode": "disabled_ablation",
          "result": 0.765
        },
        {
          "label": "final_clamp",
          "applied": false,
          "pre": 0.765,
          "result": 0.765,
          "band": [
            0.65,
            4.8
          ]
        },
        {
          "label": "competition_calibration",
          "applied": false,
          "reason": "no_sofascore_matches_data",
          "samples": 0,
          "scale": 1.0,
          "observed_total_goals": 0.0,
          "result": 0.765
        }
      ],
      "away_lambda_chain": [
        {
          "label": "league_anchor",
          "value": 1.35
        },
        {
          "label": "duel_blend",
          "raw_xg": 1.245,
          "n_duels": 6,
          "duel_confidence": 0.75,
          "result": 1.2712
        },
        {
          "label": "midfield_factor",
          "factor": 1.005,
          "result": 1.2776
        },
        {
          "label": "formation_bonus",
          "factor": 1.07,
          "result": 1.367
        },
        {
          "label": "home_advantage",
          "factor": 1.0,
          "result": 1.367
        },
        {
          "label": "standing_factor",
          "factor": 1.0139,
          "result": 1.386
        },
        {
          "label": "gk_opposition",
          "factor": 1.0107,
          "result": 1.4008
        },
        {
          "label": "defensive_solidity",
          "factor": 1.0063,
          "result": 1.4096
        },
        {
          "label": "set_piece_bonus",
          "bonus": 0.088,
          "result": 1.4976
        },
        {
          "label": "engine_clamp",
          "pre": 1.4976,
          "result": 1.4976,
          "band": [
            0.6,
            4.0
          ],
          "clamped": false
        },
        {
          "label": "quality_gap",
          "applied": true,
          "combined_quality_gap": -0.1468,
          "factor": 1.0807,
          "pre": 1.4976,
          "result": 1.6185
        },
        {
          "label": "stage_discount",
          "applied": false,
          "factor": 1.0,
          "result": 1.6185
        },
        {
          "label": "bench_bonus",
          "side": "away",
          "bonus": 0.1745,
          "result": 1.7925
        },
        {
          "label": "fbref_blend",
          "side": "away",
          "applied": true,
          "blending_weight": 0.228,
          "empirical_lambda": 0.4074,
          "result": 1.4767
        },
        {
          "label": "router_clamp",
          "pre": 1.4767,
          "result": 1.477,
          "band": [
            0.65,
            4.8
          ]
        },
        {
          "label": "mismatch_pressure",
          "applied": false,
          "reason": "quality gap below 0.30",
          "result": 1.477
        },
        {
          "label": "underdog_floor",
          "applied": false,
          "mode": "disabled_ablation",
          "result": 1.477
        },
        {
          "label": "final_clamp",
          "applied": false,
          "pre": 1.477,
          "result": 1.477,
          "band": [
            0.65,
            4.8
          ]
        },
        {
          "label": "competition_calibration",
          "applied": false,
          "reason": "no_sofascore_matches_data",
          "samples": 0,
          "scale": 1.0,
          "observed_total_goals": 0.0,
          "result": 1.477
        }
      ],
      "home_bench_lambda_bonus": 0.1258,
      "away_bench_lambda_bonus": 0.1745,
      "home_bench_players_modelled": 7,
      "away_bench_players_modelled": 7,
      "fbref_team_priors": {
        "applied": true,
        "home_squad": "Málaga CF",
        "away_squad": "Espanyol",
        "home_goals_per90": 0.3333333333333333,
        "away_goals_against_per90": 1.67,
        "away_goals_per90": 1.6666666666666667,
        "home_goals_against_per90": 0.33,
        "home_empirical_lambda": 0.412,
        "away_empirical_lambda": 0.407,
        "blending_weight": 0.228
      },
      "mismatch_score_pressure_applied": false,
      "competitive_underdog_floor_applied": false,
      "competitive_underdog_floor": 1.0,
      "competitive_underdog_floor_mode": "disabled_ablation",
      "pre_competitive_floor_home_lambda": 0.765,
      "pre_competitive_floor_away_lambda": 1.477,
      "pre_calibration_home_lambda": 0.7655,
      "pre_calibration_away_lambda": 1.4767,
      "competition_calibration_applied": false,
      "competition_calibration_reason": "no_sofascore_matches_data",
      "competition_calibration_samples": 0,
      "competition_observed_total_goals": 0.0,
      "competition_calibration_scale": 1.0,
      "neutral_share_preserved": false,
      "final_home_lambda": 0.765,
      "final_away_lambda": 1.477
    }
  },
  "home_standing": {
    "available": true,
    "team_position": 20,
    "opponent_position": 15,
    "standing_lambda_multiplier": 0.8756,
    "attack_index": 0.776,
    "defense_concede_index": 0.929,
    "form_multiplier": 0.982,
    "team_attack_rate_contextual": 1.18,
    "opp_defense_rate_contextual": 1.41,
    "team_ppg": 0.87,
    "opponent_ppg": 1.17
  },
  "away_standing": {
    "available": true,
    "team_position": 15,
    "opponent_position": 20,
    "standing_lambda_multiplier": 1.0139,
    "attack_index": 0.929,
    "defense_concede_index": 1.105,
    "form_multiplier": 1.018,
    "team_attack_rate_contextual": 1.41,
    "opp_defense_rate_contextual": 1.68,
    "team_ppg": 1.17,
    "opponent_ppg": 0.87
  },
  "xgboost_reasoning": {
    "summary": "Antagonist + XGBoost match analysis for Málaga vs Espanyol. Player statistics regressed using position-specific XGBoost models (G, D, M, F) with 2026-2027 FBref priors. Micro-duels resolved across 4-4-2 vs 4-2-3-1 (duel lambdas: Home 0.765, Away 1.477). Final calibrated Poisson lambdas: Home 0.765, Away 1.477 (most likely score 0-1).",
    "competition": "LaLiga",
    "model_coverage": {
      "home_starters_count": 11,
      "home_xgboost_players": 11,
      "home_fbref_players": 7,
      "away_starters_count": 11,
      "away_xgboost_players": 11,
      "away_fbref_players": 8,
      "home_bench_modelled": 7,
      "away_bench_modelled": 7
    },
    "team_priors": {
      "applied": true,
      "home_squad": "Málaga CF",
      "away_squad": "Espanyol",
      "home_goals_per90": 0.3333333333333333,
      "away_goals_against_per90": 1.67,
      "away_goals_per90": 1.6666666666666667,
      "home_goals_against_per90": 0.33,
      "home_empirical_lambda": 0.412,
      "away_empirical_lambda": 0.407,
      "blending_weight": 0.228
    },
    "pipeline_stages": [
      "1. XGBoost player regressions for volume & event rates with market-value quality scaling",
      "2. Multi-source prior blending (FBref 2026-2027 tables + Sofascore season history)",
      "3. Antagonist formation duel matrix resolving 1v1 and zonal matchups",
      "4. Team-level prior calibration (FBref possession and attack/defense efficiencies)",
      "5. Bivariate Poisson matrix with Dixon-Coles low-score correction"
    ],
    "final_lambdas": {
      "home_lambda": 0.765,
      "away_lambda": 1.477,
      "micro_duel_home_lambda": 0.765,
      "micro_duel_away_lambda": 1.477
    },
    "calibration_and_pressure": {
      "competition_calibration_applied": false,
      "competition_calibration_scale": 1.0,
      "mismatch_pressure_applied": false,
      "underdog_floor_applied": false
    }
  },
  "timestamp": "2026-10-09T13:31:07Z",
  "stat_limits": {
    "saves": 15.0,
    "goalsPrevented": 5.0,
    "keeperSaveValue": 3.0,
    "interceptionWon": 10.0,
    "totalTackle": 12.0,
    "wonTackle": 10.0,
    "totalClearance": 18.0,
    "aerialWon": 15.0,
    "aerialLost": 12.0,
    "totalPass": 150.0,
    "accuratePass": 145.0,
    "keyPass": 8.0,
    "expectedAssists": 1.5,
    "goalAssist": 4.0,
    "expectedGoals": 3.0,
    "expectedGoalsOnTarget": 6.0,
    "xgot": 6.0,
    "goals": 5.0,
    "totalShots": 12.0,
    "onTargetScoringAttempt": 8.0,
    "shotOffTarget": 8.0,
    "rating": 10.0,
    "minutesPlayed": 130.0,
    "duelWon": 20.0,
    "duelLost": 20.0,
    "ballRecovery": 18.0,
    "fouls": 12.0
  }
}