{
  "match_info": {
    "home_team": "Austria",
    "away_team": "Jordan",
    "tournament": "FIFA World Cup",
    "date": "20260617",
    "timezone": "America/New_York",
    "home_formation": "4-2-3-1",
    "away_formation": "3-4-3"
  },
  "prediction": {
    "most_likely_score": "1-1",
    "home_goals": 1,
    "away_goals": 1,
    "most_likely_score_probability": 0.1075,
    "top_5_scorelines": [
      {
        "score": "1-1",
        "probability": 0.1075
      },
      {
        "score": "1-0",
        "probability": 0.1019
      },
      {
        "score": "2-1",
        "probability": 0.0988
      },
      {
        "score": "2-0",
        "probability": 0.0941
      },
      {
        "score": "3-1",
        "probability": 0.0607
      }
    ],
    "scoreline_probabilities": {
      "0-0": 0.0557,
      "0-1": 0.0579,
      "0-2": 0.0305,
      "0-3": 0.0107,
      "0-4": 0.0028,
      "0-5": 0.0006,
      "1-0": 0.1019,
      "1-1": 0.1075,
      "1-2": 0.0563,
      "1-3": 0.0197,
      "1-4": 0.0052,
      "1-5": 0.0011,
      "2-0": 0.0941,
      "2-1": 0.0988,
      "2-2": 0.0519,
      "2-3": 0.0182,
      "2-4": 0.0048,
      "2-5": 0.001,
      "3-0": 0.0578,
      "3-1": 0.0607,
      "3-2": 0.0319,
      "3-3": 0.0112,
      "3-4": 0.0029,
      "3-5": 0.0006,
      "4-0": 0.0266,
      "4-1": 0.028,
      "4-2": 0.0147,
      "4-3": 0.0051,
      "4-4": 0.0013,
      "5-0": 0.0098,
      "5-1": 0.0103,
      "5-2": 0.0054,
      "5-3": 0.0019,
      "6-0": 0.003,
      "6-1": 0.0032,
      "6-2": 0.0017,
      "6-3": 0.0006,
      "7-0": 0.0008,
      "7-1": 0.0008
    },
    "outcome": {
      "home_win": 0.559,
      "draw": 0.2277,
      "away_win": 0.2133
    },
    "markets": {
      "over_2_5_goals": 0.5524,
      "under_2_5_goals": 0.4476,
      "btts_yes": 0.5474,
      "btts_no": 0.4526,
      "home_clean_sheet": 0.3499,
      "away_clean_sheet": 0.1583
    },
    "home_ratings": {
      "DR": 87.28,
      "MCR": 85.73,
      "ATR": 87.82,
      "GK": 79.71
    },
    "away_ratings": {
      "DR": 84.88,
      "MCR": 88.2,
      "ATR": 88.92,
      "GK": 87.67
    },
    "insights": {
      "summary": "Antagonist matchup analysis for Austria vs Jordan. Most likely scoreline: 1-1. Lambdas derived from 4 home and 7 away individual player duels.",
      "key_player": "Projected scorer(s): Michael Gregoritsch, Odeh Fakhoury",
      "tactical_analysis": "Tactical parity between 4-2-3-1 and 3-4-3. Match outcome driven primarily by individual player quality. Home midfield dominates with ~53% possession expected (Nicolas Seiwald vs Nizar Al-Rashdan). Total antagonist xG — Home: 0.72, Away: 0.67. Home danger zone: RW vs CB. Away danger zone: Shadow Striker vs Centre Back — Half-Space Threat."
    },
    "confidence": 0.77,
    "home_lambda": 1.843,
    "away_lambda": 1.05
  },
  "teams": {
    "Austria": {
      "formation": "4-2-3-1",
      "players": {
        "Alexander Schlager": {
          "player_id": 282073,
          "position": "G",
          "position_depth": "G",
          "is_starter": true,
          "shirt_number": 1,
          "height": 184,
          "market_value": 1900000,
          "stats": {
            "saves": 2,
            "goals_prevented": 0.0712,
            "rating": 79.7063,
            "minutes": 88,
            "total_pass": 24,
            "accurate_pass": 17,
            "total_long_balls": 12,
            "accurate_long_balls": 6,
            "touches": 33,
            "clearances": 1,
            "ball_recovery": 10,
            "high_claims": 2,
            "punches": 0.9812,
            "aerial_won": 0,
            "sweeper_actions": 1,
            "sweeper_accurate": 1,
            "saves_inside_box": 1,
            "possession_lost": 7.8498,
            "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": 14,
            "expected_saves": 1.4,
            "high_pressure_saves": 0.53,
            "shots_faced": 3.0,
            "opponent_faced": "Odeh Fakhoury, Mousa Tamari",
            "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,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 73.0
          },
          "latest_10_games": [
            {
              "match_id": 15690648,
              "match_date": "2026-05-17",
              "home_team": "Red Bull Salzburg",
              "away_team": "TSV Hartberg",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Red Bull Salzburg",
              "opponent": "TSV Hartberg",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assists": 0,
                "expected_assists": 0.0004,
                "total_shots": 0,
                "total_pass": 13,
                "accurate_pass": 13,
                "ball_recovery": 12,
                "saves": 3,
                "goals_prevented": -0.3454
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690637,
              "match_date": "2026-05-10",
              "home_team": "LASK",
              "away_team": "Red Bull Salzburg",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Red Bull Salzburg",
              "opponent": "LASK",
              "stats": {
                "minutes": 90,
                "rating": 7.6,
                "assists": 0,
                "expected_assists": 0.0004,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 19,
                "clearances": 1,
                "ball_recovery": 10,
                "saves": 4,
                "goals_prevented": 0.051
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690639,
              "match_date": "2026-05-03",
              "home_team": "Red Bull Salzburg",
              "away_team": "SK Sturm Graz",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Red Bull Salzburg",
              "opponent": "SK Sturm Graz",
              "stats": {
                "minutes": 90,
                "rating": 7.4,
                "assists": 0,
                "expected_assists": 0.0036,
                "total_shots": 0,
                "total_pass": 25,
                "accurate_pass": 12,
                "clearances": 1,
                "ball_recovery": 10,
                "saves": 2,
                "goals_prevented": 0.3663
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690645,
              "match_date": "2026-04-26",
              "home_team": "SK Rapid Wien",
              "away_team": "Red Bull Salzburg",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Red Bull Salzburg",
              "opponent": "SK Rapid Wien",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assists": 0,
                "expected_assists": 0.0249,
                "total_shots": 0,
                "total_pass": 30,
                "accurate_pass": 19,
                "ball_recovery": 10,
                "saves": 1,
                "goals_prevented": 0.3942
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690627,
              "match_date": "2026-04-22",
              "home_team": "Red Bull Salzburg",
              "away_team": "FK Austria Wien",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Red Bull Salzburg",
              "opponent": "FK Austria Wien",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assists": 0,
                "expected_assists": 0.0023,
                "total_shots": 0,
                "total_pass": 33,
                "accurate_pass": 23,
                "ball_recovery": 9,
                "saves": 1,
                "goals_prevented": 0.1366
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 90,
                "rating": 6.6,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 24,
                "accurate_pass": 21,
                "clearances": 2,
                "ball_recovery": 10
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 17254,
            "combined_rank_score": 1842.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 532.0,
            "sofascore_rating": 6.8,
            "sofascore_appearances": 5.0,
            "fifa_rank": 3152.0,
            "fifa_overall": 73.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 17,
            "squad_role": "starter",
            "projected_match_rating": 6.7063,
            "source_file": "data/player_rankings.csv",
            "player_name": "Alexander Schlager",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Danilo",
                  "ranking": 17249
                },
                {
                  "player_name": "Koki Machida",
                  "ranking": 17250
                },
                {
                  "player_name": "Danny Namaso",
                  "ranking": 17251
                },
                {
                  "player_name": "Taras Stepanenko",
                  "ranking": 17252
                },
                {
                  "player_name": "Nicolas Cozza",
                  "ranking": 17253
                }
              ],
              "lower": [
                {
                  "player_name": "Bartosz Slisz",
                  "ranking": 17255
                },
                {
                  "player_name": "Woo-Yeong Jeong",
                  "ranking": 17256
                },
                {
                  "player_name": "Jiří Pavlenka",
                  "ranking": 17257
                },
                {
                  "player_name": "Hugo Rincón",
                  "ranking": 17258
                },
                {
                  "player_name": "Dennis Geiger",
                  "ranking": 17259
                }
              ]
            }
          }
        },
        "Stefan Posch": {
          "player_id": 355486,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 5,
          "height": 188,
          "market_value": 6200000,
          "stats": {
            "interceptions": 1,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 3,
            "aerial_won": 2,
            "rating": 85.6466,
            "minutes": 61,
            "total_pass": 37,
            "accurate_pass": 30,
            "duels_won": 5,
            "total_long_balls": 6,
            "accurate_long_balls": 3,
            "total_own_half_passes": 20,
            "accurate_own_half_passes": 18,
            "total_opp_half_passes": 16,
            "accurate_opp_half_passes": 11,
            "crosses_total": 2,
            "crosses_accurate": 0,
            "touches": 48,
            "possession_lost": 8.6893,
            "dispossessed": 0.0,
            "duels_lost": 2,
            "aerial_lost": 3,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 5,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 1,
            "blocks": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.1039,
            "expected_assists": 0.0993,
            "total_shots": 1,
            "shots_on_target": 1,
            "shots_off_target": 2,
            "big_chances_created": 1,
            "xgot": 0.0397,
            "ball_carries": 20,
            "total_progression": 73,
            "progressive_carries": 1,
            "key_pass": 1,
            "tackles_in_zone": 2.0,
            "tackles_won_in_zone": 1.9,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.9,
            "defensive_success_rate": 0.665,
            "opponent_faced": "Ehsan Haddad",
            "pressing_zone": "Right Wingback vs Left Back — Overlapping Run",
            "matchup_zone": "Right Wingback vs Left Back — Overlapping Run",
            "antagonist_source": "defensive_duel",
            "projected_goals": 0,
            "goal_probability": 0.0479,
            "projected_assists": 0,
            "assist_probability": 0.0749,
            "fifa_overall": 79.0
          },
          "latest_10_games": [
            {
              "match_id": 14065562,
              "match_date": "2026-05-16",
              "home_team": "1. FC Heidenheim",
              "away_team": "1. FSV Mainz 05",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "1. FSV Mainz 05",
              "opponent": "1. FC Heidenheim",
              "stats": {
                "minutes": 45,
                "rating": 6.8,
                "assists": 0,
                "expected_assists": 0.0049,
                "total_shots": 0,
                "total_pass": 26,
                "accurate_pass": 18,
                "key_pass": 1,
                "interceptions": 1,
                "clearances": 3,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065247,
              "match_date": "2026-05-10",
              "home_team": "1. FSV Mainz 05",
              "away_team": "1. FC Union Berlin",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "1. FSV Mainz 05",
              "opponent": "1. FC Union Berlin",
              "stats": {
                "minutes": 90,
                "rating": 6.3,
                "assists": 0,
                "expected_goals": 0.0795,
                "expected_assists": 0.0191,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 52,
                "accurate_pass": 44,
                "interceptions": 1,
                "clearances": 6,
                "aerial_won": 6,
                "duels_won": 7,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065246,
              "match_date": "2026-05-03",
              "home_team": "FC St. Pauli",
              "away_team": "1. FSV Mainz 05",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "1. FSV Mainz 05",
              "opponent": "FC St. Pauli",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assists": 0,
                "expected_goals": 0.0637,
                "expected_assists": 0.2702,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 63,
                "accurate_pass": 52,
                "key_pass": 2,
                "tackles": 3,
                "tackles_won": 1,
                "interceptions": 3,
                "clearances": 6,
                "aerial_won": 3,
                "duels_won": 6,
                "ball_recovery": 8
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 21,
                "rating": 6.6,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 7,
                "accurate_pass": 5
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 14010,
            "combined_rank_score": 502.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 109.0,
            "sofascore_rating": 7.3857,
            "sofascore_appearances": 7.0,
            "fifa_rank": 896.0,
            "fifa_overall": 79.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 11,
            "squad_role": "starter",
            "projected_match_rating": 6.6466,
            "source_file": "data/player_rankings.csv",
            "player_name": "Stefan Posch",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Callum McGregor",
                  "ranking": 14005
                },
                {
                  "player_name": "Gayà",
                  "ranking": 14006
                },
                {
                  "player_name": "Wesley Fofana",
                  "ranking": 14007
                },
                {
                  "player_name": "Alexander Freeman",
                  "ranking": 14008
                },
                {
                  "player_name": "Chris Smalling",
                  "ranking": 14009
                }
              ],
              "lower": [
                {
                  "player_name": "Diego Llorente",
                  "ranking": 14011
                },
                {
                  "player_name": "Rafael Caroca",
                  "ranking": 14012
                },
                {
                  "player_name": "Lionel Altamirano",
                  "ranking": 14013
                },
                {
                  "player_name": "Brody Burkitt",
                  "ranking": 14014
                },
                {
                  "player_name": "Pablo Fornals",
                  "ranking": 14015
                }
              ]
            }
          }
        },
        "Philipp Lienhart": {
          "player_id": 576266,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 15,
          "height": 189,
          "market_value": 9600000,
          "stats": {
            "interceptions": 0,
            "tackles": 2,
            "tackles_won": 0,
            "clearances": 4,
            "aerial_won": 0,
            "rating": 85.5815,
            "minutes": 66,
            "total_pass": 49,
            "accurate_pass": 42,
            "duels_won": 3,
            "total_long_balls": 6,
            "accurate_long_balls": 3,
            "total_own_half_passes": 29,
            "accurate_own_half_passes": 27,
            "total_opp_half_passes": 20,
            "accurate_opp_half_passes": 15,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 60,
            "possession_lost": 8.2236,
            "dispossessed": 0.0,
            "duels_lost": 2,
            "aerial_lost": 1,
            "total_contest": 1,
            "won_contest": 0,
            "ball_recovery": 4,
            "challenges_lost": 1,
            "fouls": 2,
            "fouls_drawn": 1,
            "blocks": 1,
            "goal_rate": 1.0053,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.3909,
            "expected_assists": 0.0101,
            "total_shots": 1,
            "shots_on_target": 1,
            "shots_off_target": 1,
            "big_chances_created": 1,
            "xgot": 0.5429,
            "ball_carries": 18,
            "total_progression": 76,
            "progressive_carries": 1,
            "key_pass": 1,
            "tackles_in_zone": 2.0,
            "tackles_won_in_zone": 1.9,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.9,
            "defensive_success_rate": 0.638,
            "opponent_faced": "Odeh Fakhoury",
            "pressing_zone": "Shadow Striker vs Centre Back — Half-Space Threat",
            "matchup_zone": "Shadow Striker vs Centre Back — Half-Space Threat",
            "antagonist_source": "defensive_duel",
            "projected_goals": 0,
            "goal_probability": 0.1329,
            "projected_assists": 0,
            "assist_probability": 0.0508,
            "fifa_overall": 79.0
          },
          "latest_10_games": [
            {
              "match_id": 15632626,
              "match_date": "2026-05-20",
              "home_team": "SC Freiburg",
              "away_team": "Aston Villa",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "SC Freiburg",
              "opponent": "Aston Villa",
              "stats": {
                "minutes": 61,
                "rating": 6.2,
                "assists": 0,
                "expected_assists": 0.0018,
                "total_shots": 0,
                "total_pass": 44,
                "accurate_pass": 38,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 1,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "UEFA Europa League",
              "league_id": "679",
              "league_slug": "uefa-europa-league",
              "league_country": "Europe",
              "season_id": "76984",
              "season_name": "UEFA Europa League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065555,
              "match_date": "2026-05-16",
              "home_team": "SC Freiburg",
              "away_team": "RB Leipzig",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "SC Freiburg",
              "opponent": "RB Leipzig",
              "stats": {
                "minutes": 90,
                "rating": 6.3,
                "assists": 0,
                "expected_assists": 0.0027,
                "total_shots": 0,
                "total_pass": 39,
                "accurate_pass": 31,
                "clearances": 8,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065255,
              "match_date": "2026-05-10",
              "home_team": "Hamburger SV",
              "away_team": "SC Freiburg",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "SC Freiburg",
              "opponent": "Hamburger SV",
              "stats": {
                "minutes": 22,
                "rating": 7.1,
                "assists": 0,
                "expected_assists": 0.0067,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 18,
                "tackles": 2,
                "tackles_won": 2,
                "interceptions": 1,
                "clearances": 4,
                "aerial_won": 1,
                "duels_won": 4
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15632624,
              "match_date": "2026-05-07",
              "home_team": "SC Freiburg",
              "away_team": "Sporting Braga",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "SC Freiburg",
              "opponent": "Sporting Braga",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assists": 0,
                "expected_goals": 0.4529,
                "expected_assists": 0.0276,
                "total_shots": 2,
                "shots_off_target": 1,
                "total_pass": 78,
                "accurate_pass": 66,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 5,
                "aerial_won": 3,
                "duels_won": 5,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "UEFA Europa League",
              "league_id": "679",
              "league_slug": "uefa-europa-league",
              "league_country": "Europe",
              "season_id": "76984",
              "season_name": "UEFA Europa League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065240,
              "match_date": "2026-05-03",
              "home_team": "SC Freiburg",
              "away_team": "VfL Wolfsburg",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "SC Freiburg",
              "opponent": "VfL Wolfsburg",
              "stats": {
                "minutes": 32,
                "rating": 8.1,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 0,
                "expected_goals": 0.1781,
                "expected_assists": 0.0053,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 37,
                "accurate_pass": 35,
                "tackles": 1,
                "clearances": 5,
                "aerial_won": 2,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15632622,
              "match_date": "2026-04-30",
              "home_team": "Sporting Braga",
              "away_team": "SC Freiburg",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "SC Freiburg",
              "opponent": "Sporting Braga",
              "stats": {
                "minutes": 90,
                "rating": 5.7,
                "assists": 0,
                "expected_assists": 0.0029,
                "total_shots": 0,
                "total_pass": 56,
                "accurate_pass": 46,
                "tackles": 2,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 5,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "UEFA Europa League",
              "league_id": "679",
              "league_slug": "uefa-europa-league",
              "league_country": "Europe",
              "season_id": "76984",
              "season_name": "UEFA Europa League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065228,
              "match_date": "2026-04-26",
              "home_team": "Borussia Dortmund",
              "away_team": "SC Freiburg",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "SC Freiburg",
              "opponent": "Borussia Dortmund",
              "stats": {
                "minutes": 75,
                "rating": 6.3,
                "assists": 0,
                "expected_assists": 0.0407,
                "total_shots": 0,
                "total_pass": 39,
                "accurate_pass": 33,
                "key_pass": 1,
                "tackles": 1,
                "clearances": 3,
                "aerial_won": 2,
                "duels_won": 3,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15632619,
              "match_date": "2026-04-16",
              "home_team": "Celta Vigo",
              "away_team": "SC Freiburg",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "SC Freiburg",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 71,
                "rating": 7.0,
                "assists": 0,
                "expected_assists": 0.0079,
                "total_shots": 0,
                "total_pass": 34,
                "accurate_pass": 28,
                "tackles": 2,
                "tackles_won": 1,
                "clearances": 4,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "UEFA Europa League",
              "league_id": "679",
              "league_slug": "uefa-europa-league",
              "league_country": "Europe",
              "season_id": "76984",
              "season_name": "UEFA Europa League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15632615,
              "match_date": "2026-04-09",
              "home_team": "SC Freiburg",
              "away_team": "Celta Vigo",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "SC Freiburg",
              "opponent": "Celta Vigo",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assists": 0,
                "expected_assists": 0.0108,
                "total_shots": 0,
                "total_pass": 65,
                "accurate_pass": 56,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 2,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "UEFA Europa League",
              "league_id": "679",
              "league_slug": "uefa-europa-league",
              "league_country": "Europe",
              "season_id": "76984",
              "season_name": "UEFA Europa League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15631838,
              "match_date": "2026-03-19",
              "home_team": "SC Freiburg",
              "away_team": "KRC Genk",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "SC Freiburg",
              "opponent": "KRC Genk",
              "stats": {
                "minutes": 9,
                "rating": 6.7,
                "assists": 0,
                "expected_goals": 0.14,
                "expected_assists": 0.0002,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 6,
                "accurate_pass": 5,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "UEFA Europa League",
              "league_id": "679",
              "league_slug": "uefa-europa-league",
              "league_country": "Europe",
              "season_id": "76984",
              "season_name": "UEFA Europa League 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 14169,
            "combined_rank_score": 548.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 134.0,
            "sofascore_rating": 7.3143,
            "sofascore_appearances": 7.0,
            "fifa_rank": 963.0,
            "fifa_overall": 79.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 8,
            "squad_role": "starter",
            "projected_match_rating": 6.5815,
            "source_file": "data/player_rankings.csv",
            "player_name": "Philipp Lienhart",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Samandar Ochilov",
                  "ranking": 14164
                },
                {
                  "player_name": "Oleg Zoteev",
                  "ranking": 14165
                },
                {
                  "player_name": "Ridle Baku",
                  "ranking": 14166
                },
                {
                  "player_name": "Morata",
                  "ranking": 14167
                },
                {
                  "player_name": "Riccardo Calafiori",
                  "ranking": 14168
                }
              ],
              "lower": [
                {
                  "player_name": "Seong-uh Park",
                  "ranking": 14170
                },
                {
                  "player_name": "Sebastian Szymański",
                  "ranking": 14171
                },
                {
                  "player_name": "Álex Berenguer",
                  "ranking": 14172
                },
                {
                  "player_name": "Marko Livaja",
                  "ranking": 14173
                },
                {
                  "player_name": "Raoul Bellanova",
                  "ranking": 14174
                }
              ]
            }
          }
        },
        "Marko Arnautović": {
          "player_id": 21927,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 7,
          "height": 192,
          "market_value": 2100000,
          "stats": {
            "expected_goals": 0.3046,
            "goal_rate": 0.0049,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0,
            "key_pass": 0,
            "rating": 93.7272,
            "minutes": 71,
            "total_shots": 2,
            "duels_won": 5,
            "aerial_won": 1,
            "total_pass": 21,
            "accurate_pass": 15,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 16,
            "accurate_opp_half_passes": 12,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 29,
            "possession_lost": 6.8686,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_lost": 0,
            "total_contest": 2,
            "won_contest": 2,
            "ball_recovery": 1,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 1,
            "assists": 0,
            "shots_off_target": 2,
            "interceptions": 0,
            "tackles_won": 2,
            "tackles": 2,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 1,
            "xgot": 0.0,
            "offsides": 1,
            "ball_carries": 15,
            "total_progression": 0,
            "progressive_carries": 2,
            "dribbles_attempted": 3,
            "dribbles_successful": 1.3,
            "crosses_attempted": 1.8,
            "duel_win_rate": 0.475,
            "pressing_faced": "LOW",
            "matchup_zone": "RW vs CB",
            "numerical_situation": "1v1",
            "opponent_defenders": "Saleem Obaid",
            "opponent_faced": "Saleem Obaid",
            "antagonist_source": "attacking_duel",
            "projected_goals": 0,
            "goal_probability": 0.1304,
            "projected_assists": 0,
            "assist_probability": 0.0134,
            "fifa_overall": 87.0
          },
          "latest_10_games": [
            {
              "match_id": 15986033,
              "match_date": "2026-05-09",
              "home_team": "FK Crvena zvezda",
              "away_team": "FK Novi Pazar",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FK Crvena zvezda",
              "opponent": "FK Novi Pazar",
              "stats": {
                "minutes": 62,
                "rating": 7.4,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 0,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 2,
                "total_pass": 21,
                "accurate_pass": 17,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "Mozzart Bet Superliga",
              "league_id": "210",
              "league_slug": "mozzart-bet-superliga",
              "league_country": "Serbia",
              "season_id": "76909",
              "season_name": "Superliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 82,
                "rating": 7.2,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 21,
                "accurate_pass": 14,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 2,
                "aerial_won": 2,
                "duels_won": 7,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 23,
            "combined_rank_score": 42.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": 34.0,
            "sofascore_rating": 7.8714,
            "sofascore_appearances": 7.0,
            "fifa_rank": 51.0,
            "fifa_overall": 87.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 16,
            "squad_role": "starter",
            "projected_match_rating": 6.7272,
            "source_file": "data/player_rankings.csv",
            "player_name": "Marko Arnautović",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Danijel Petković",
                  "ranking": 18
                },
                {
                  "player_name": "Angel Fortuno",
                  "ranking": 19
                },
                {
                  "player_name": "Cole Palmer",
                  "ranking": 20
                },
                {
                  "player_name": "Kevin De Bruyne",
                  "ranking": 21
                },
                {
                  "player_name": "Ljupche Doriev",
                  "ranking": 22
                }
              ],
              "lower": [
                {
                  "player_name": "Mikel Oyarzabal",
                  "ranking": 24
                },
                {
                  "player_name": "Martin Ødegaard",
                  "ranking": 25
                },
                {
                  "player_name": "Vitinha",
                  "ranking": 26
                },
                {
                  "player_name": "Federico Valverde",
                  "ranking": 27
                },
                {
                  "player_name": "Bianneider Tamayo",
                  "ranking": 28
                }
              ]
            }
          }
        },
        "Michael Gregoritsch": {
          "player_id": 111483,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 11,
          "height": 193,
          "market_value": 1600000,
          "stats": {
            "expected_goals": 0.3012,
            "goal_rate": 0.0511,
            "goals": 1,
            "shots_on_target": 1,
            "expected_assists": 0.1094,
            "key_pass": 0,
            "rating": 81.9149,
            "minutes": 62,
            "total_shots": 2,
            "duels_won": 3,
            "aerial_won": 2,
            "total_pass": 12,
            "accurate_pass": 7,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_opp_half_passes": 9,
            "accurate_opp_half_passes": 4,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 21,
            "possession_lost": 8.0951,
            "dispossessed": 2.9437,
            "duels_lost": 4,
            "aerial_lost": 2,
            "total_contest": 1,
            "won_contest": 0,
            "ball_recovery": 2,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 1,
            "assists": 0,
            "shots_off_target": 2,
            "interceptions": 1,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 1,
            "blocks": 1,
            "big_chances_created": 1,
            "big_chances_missed": 1,
            "xgot": 2.0998,
            "offsides": 1,
            "ball_carries": 4,
            "total_progression": 12,
            "progressive_carries": 0,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.4,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.248,
            "pressing_faced": "LOW",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "numerical_situation": "1v2",
            "opponent_defenders": "Saleem Obaid, Abdallah Nasib",
            "opponent_faced": "Saleem Obaid, Abdallah Nasib",
            "antagonist_source": "attacking_duel",
            "projected_goals": 1,
            "goal_probability": 0.4012,
            "projected_assists": 0,
            "assist_probability": 0.0715,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 14065558,
              "match_date": "2026-05-16",
              "home_team": "1. FC Union Berlin",
              "away_team": "FC Augsburg",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "FC Augsburg",
              "opponent": "1. FC Union Berlin",
              "stats": {
                "minutes": 77,
                "rating": 6.3,
                "assists": 0,
                "expected_assists": 0.0228,
                "total_shots": 0,
                "total_pass": 13,
                "accurate_pass": 8,
                "interceptions": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065249,
              "match_date": "2026-05-09",
              "home_team": "FC Augsburg",
              "away_team": "Borussia M'gladbach",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Augsburg",
              "opponent": "Borussia M'gladbach",
              "stats": {
                "minutes": 79,
                "rating": 7.8,
                "goal_rate": 2.0,
                "goals": 2,
                "assists": 0,
                "expected_goals": 1.4467,
                "expected_assists": 0.1018,
                "total_shots": 4,
                "shots_on_target": 3,
                "shots_off_target": 1,
                "total_pass": 15,
                "accurate_pass": 9,
                "key_pass": 1,
                "interceptions": 1,
                "aerial_won": 3,
                "duels_won": 4
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065241,
              "match_date": "2026-05-02",
              "home_team": "SV Werder Bremen",
              "away_team": "FC Augsburg",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "FC Augsburg",
              "opponent": "SV Werder Bremen",
              "stats": {
                "minutes": 67,
                "rating": 6.7,
                "assists": 1,
                "expected_goals": 0.4213,
                "expected_assists": 0.3095,
                "total_shots": 3,
                "shots_off_target": 3,
                "total_pass": 14,
                "accurate_pass": 8,
                "key_pass": 3,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 2,
                "duels_won": 3
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 31,
                "rating": 7.1,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 0,
                "total_shots": 2,
                "shots_on_target": 2,
                "total_pass": 6,
                "accurate_pass": 2,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 16503,
            "combined_rank_score": 1265.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 181.0,
            "sofascore_rating": 7.2,
            "sofascore_appearances": 8.0,
            "fifa_rank": 2350.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 18,
            "squad_role": "starter",
            "projected_match_rating": 6.9149,
            "source_file": "data/player_rankings.csv",
            "player_name": "Michael Gregoritsch",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Patrick Dorgu",
                  "ranking": 16498
                },
                {
                  "player_name": "Sebastian Nanasi",
                  "ranking": 16499
                },
                {
                  "player_name": "Yasin Ayari",
                  "ranking": 16500
                },
                {
                  "player_name": "Aïssa Mandi",
                  "ranking": 16501
                },
                {
                  "player_name": "Flavien-Enzo Boyomo",
                  "ranking": 16502
                }
              ],
              "lower": [
                {
                  "player_name": "Lorenzo Lucca",
                  "ranking": 16504
                },
                {
                  "player_name": "Alexandru Mitriță",
                  "ranking": 16505
                },
                {
                  "player_name": "Nikola Krstović",
                  "ranking": 16506
                },
                {
                  "player_name": "Lucas Beltrán",
                  "ranking": 16507
                },
                {
                  "player_name": "Paulo Victor",
                  "ranking": 16508
                }
              ]
            }
          }
        },
        "Marcel Sabitzer": {
          "player_id": 133908,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 9,
          "height": 177,
          "market_value": 6200000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.1536,
            "assists": 0,
            "expected_goals": 0.0,
            "rating": 86.9926,
            "minutes": 86,
            "total_pass": 49,
            "accurate_pass": 42,
            "ball_recovery": 2,
            "duels_won": 4,
            "total_shots": 0,
            "total_long_balls": 2,
            "accurate_long_balls": 2,
            "total_own_half_passes": 17,
            "accurate_own_half_passes": 15,
            "total_opp_half_passes": 32,
            "accurate_opp_half_passes": 24,
            "crosses_total": 8,
            "crosses_accurate": 1,
            "touches": 63,
            "possession_lost": 12.1651,
            "dispossessed": 0.9931,
            "duels_lost": 3,
            "aerial_won": 1,
            "aerial_lost": 2,
            "interceptions": 1,
            "tackles_won": 2,
            "tackles": 3,
            "clearances": 1,
            "total_contest": 1,
            "won_contest": 0,
            "challenges_lost": 1,
            "fouls": 2,
            "fouls_drawn": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 1,
            "blocks": 1,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 14,
            "total_progression": 35,
            "progressive_carries": 1,
            "opponent_faced": "Nizar Al-Rashdan, Mohannad Abu Taha",
            "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
            "antagonist_source": "defensive_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.0039,
            "projected_assists": 0,
            "assist_probability": 0.173,
            "fifa_overall": 80.0
          },
          "latest_10_games": [
            {
              "match_id": 14065245,
              "match_date": "2026-05-08",
              "home_team": "Borussia Dortmund",
              "away_team": "Eintracht Frankfurt",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Borussia Dortmund",
              "opponent": "Eintracht Frankfurt",
              "stats": {
                "minutes": 78,
                "rating": 7.2,
                "assists": 0,
                "expected_goals": 0.0603,
                "expected_assists": 0.3521,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 34,
                "accurate_pass": 32,
                "key_pass": 1,
                "tackles": 4,
                "tackles_won": 3,
                "interceptions": 1,
                "duels_won": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065243,
              "match_date": "2026-05-03",
              "home_team": "Borussia M'gladbach",
              "away_team": "Borussia Dortmund",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Borussia Dortmund",
              "opponent": "Borussia M'gladbach",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assists": 0,
                "expected_goals": 0.0503,
                "expected_assists": 0.033,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 51,
                "accurate_pass": 43,
                "tackles": 2,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 4,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065228,
              "match_date": "2026-04-26",
              "home_team": "Borussia Dortmund",
              "away_team": "SC Freiburg",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Borussia Dortmund",
              "opponent": "SC Freiburg",
              "stats": {
                "minutes": 90,
                "rating": 7.4,
                "assists": 0,
                "expected_assists": 0.1701,
                "total_shots": 0,
                "total_pass": 53,
                "accurate_pass": 45,
                "key_pass": 1,
                "tackles": 4,
                "tackles_won": 1,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 59,
                "accurate_pass": 49,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 1,
                "duels_won": 2,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 2460,
            "combined_rank_score": 314.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 46.0,
            "sofascore_rating": 7.6875,
            "sofascore_appearances": 8.0,
            "fifa_rank": 582.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 10,
            "squad_role": "starter",
            "projected_match_rating": 6.9926,
            "source_file": "data/player_rankings.csv",
            "player_name": "Marcel Sabitzer",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Keon-woo Bak",
                  "ranking": 2455
                },
                {
                  "player_name": "Ratinho",
                  "ranking": 2456
                },
                {
                  "player_name": "Anwar El Ghazi",
                  "ranking": 2457
                },
                {
                  "player_name": "Filip Mielke",
                  "ranking": 2458
                },
                {
                  "player_name": "Dragan Bojat",
                  "ranking": 2459
                }
              ],
              "lower": [
                {
                  "player_name": "Nadiem Amiri",
                  "ranking": 2461
                },
                {
                  "player_name": "Leon Belcar",
                  "ranking": 2462
                },
                {
                  "player_name": "Yassine Labhiri",
                  "ranking": 2463
                },
                {
                  "player_name": "Kyo Sato",
                  "ranking": 2464
                },
                {
                  "player_name": "Jan Král",
                  "ranking": 2465
                }
              ]
            }
          }
        },
        "Romano Schmid": {
          "player_id": 830127,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 18,
          "height": 168,
          "market_value": 16500000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.1273,
            "assists": 1,
            "expected_goals": 0.0,
            "rating": 84.665,
            "minutes": 62,
            "total_pass": 29,
            "accurate_pass": 22,
            "ball_recovery": 3,
            "duels_won": 1,
            "total_shots": 2,
            "total_long_balls": 4,
            "accurate_long_balls": 3,
            "total_own_half_passes": 11,
            "accurate_own_half_passes": 9,
            "total_opp_half_passes": 18,
            "accurate_opp_half_passes": 13,
            "crosses_total": 2,
            "crosses_accurate": 1,
            "touches": 37,
            "possession_lost": 10.975,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_won": 1,
            "aerial_lost": 0,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 1,
            "total_contest": 1,
            "won_contest": 1,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 17,
            "total_progression": 74,
            "progressive_carries": 2,
            "dribbles_attempted": 3,
            "dribbles_successful": 1.2,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.444,
            "pressing_faced": "LOW",
            "matchup_zone": "CAM vs CM",
            "numerical_situation": "1v1",
            "opponent_defenders": "Nizar Al-Rashdan",
            "opponent_faced": "Nizar Al-Rashdan",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.0162,
            "projected_assists": 1,
            "assist_probability": 0.2705,
            "fifa_overall": 78.0
          },
          "latest_10_games": [
            {
              "match_id": 14065561,
              "match_date": "2026-05-16",
              "home_team": "SV Werder Bremen",
              "away_team": "Borussia Dortmund",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "SV Werder Bremen",
              "opponent": "Borussia Dortmund",
              "stats": {
                "minutes": 89,
                "rating": 6.8,
                "assists": 0,
                "expected_goals": 0.1621,
                "expected_assists": 0.2075,
                "total_shots": 2,
                "total_pass": 49,
                "accurate_pass": 41,
                "key_pass": 1,
                "duels_won": 1,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065252,
              "match_date": "2026-05-09",
              "home_team": "TSG Hoffenheim",
              "away_team": "SV Werder Bremen",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "SV Werder Bremen",
              "opponent": "TSG Hoffenheim",
              "stats": {
                "minutes": 71,
                "rating": 6.4,
                "assists": 0,
                "expected_assists": 0.082,
                "total_shots": 0,
                "total_pass": 29,
                "accurate_pass": 16,
                "key_pass": 4,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 1,
                "duels_won": 1,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065241,
              "match_date": "2026-05-02",
              "home_team": "SV Werder Bremen",
              "away_team": "FC Augsburg",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "SV Werder Bremen",
              "opponent": "FC Augsburg",
              "stats": {
                "minutes": 90,
                "rating": 8.7,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 0,
                "expected_goals": 0.1027,
                "expected_assists": 0.6637,
                "total_shots": 2,
                "shots_on_target": 2,
                "total_pass": 80,
                "accurate_pass": 67,
                "key_pass": 4,
                "tackles": 2,
                "tackles_won": 1,
                "duels_won": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 22,
                "rating": 6.2,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 8,
                "accurate_pass": 7,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 14702,
            "combined_rank_score": 687.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 239.0,
            "sofascore_rating": 7.1,
            "sofascore_appearances": 8.0,
            "fifa_rank": 1135.0,
            "fifa_overall": 78.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 7,
            "squad_role": "starter",
            "projected_match_rating": 6.665,
            "source_file": "data/player_rankings.csv",
            "player_name": "Romano Schmid",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Eduardo Darias",
                  "ranking": 14697
                },
                {
                  "player_name": "Helibelton Palacios",
                  "ranking": 14698
                },
                {
                  "player_name": "Lee Jae-wook",
                  "ranking": 14699
                },
                {
                  "player_name": "Javier Saldías",
                  "ranking": 14700
                },
                {
                  "player_name": "Je-wook Woo",
                  "ranking": 14701
                }
              ],
              "lower": [
                {
                  "player_name": "Matteo Gabbia",
                  "ranking": 14703
                },
                {
                  "player_name": "Arnau Martínez",
                  "ranking": 14704
                },
                {
                  "player_name": "Dominik Greif",
                  "ranking": 14705
                },
                {
                  "player_name": "João Pedro",
                  "ranking": 14706
                },
                {
                  "player_name": "João Pedro",
                  "ranking": 14707
                }
              ]
            }
          }
        },
        "Nicolas Seiwald": {
          "player_id": 976575,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 6,
          "height": 179,
          "market_value": 24000000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0713,
            "assists": 0,
            "expected_goals": 0.0,
            "rating": 84.054,
            "minutes": 65,
            "total_pass": 45,
            "accurate_pass": 41,
            "ball_recovery": 2,
            "duels_won": 4,
            "total_shots": 1,
            "total_long_balls": 3,
            "accurate_long_balls": 3,
            "total_own_half_passes": 19,
            "accurate_own_half_passes": 17,
            "total_opp_half_passes": 26,
            "accurate_opp_half_passes": 24,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 53,
            "possession_lost": 4.9901,
            "dispossessed": 1.0506,
            "duels_lost": 1,
            "aerial_won": 1,
            "aerial_lost": 1,
            "interceptions": 2,
            "tackles_won": 4,
            "tackles": 3,
            "clearances": 3,
            "total_contest": 0,
            "won_contest": 0,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "shots_on_target": 1,
            "shots_off_target": 1,
            "blocks": 0,
            "big_chances_created": 1,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 11,
            "total_progression": 46,
            "progressive_carries": 1,
            "opponent_faced": "Noor Al-Deen Al Rawabdeh",
            "matchup_zone": "Midfield lane",
            "antagonist_source": "midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.0272,
            "projected_assists": 0,
            "assist_probability": 0.1051,
            "fifa_overall": 77.0
          },
          "latest_10_games": [
            {
              "match_id": 14065555,
              "match_date": "2026-05-16",
              "home_team": "SC Freiburg",
              "away_team": "RB Leipzig",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "RB Leipzig",
              "opponent": "SC Freiburg",
              "stats": {
                "minutes": 73,
                "rating": 6.9,
                "assists": 0,
                "expected_assists": 0.0316,
                "total_shots": 0,
                "total_pass": 46,
                "accurate_pass": 43,
                "key_pass": 1,
                "tackles": 5,
                "tackles_won": 4,
                "aerial_won": 1,
                "duels_won": 6,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065250,
              "match_date": "2026-05-09",
              "home_team": "RB Leipzig",
              "away_team": "FC St. Pauli",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "RB Leipzig",
              "opponent": "FC St. Pauli",
              "stats": {
                "minutes": 21,
                "rating": 6.3,
                "assists": 0,
                "expected_assists": 0.0099,
                "total_shots": 0,
                "total_pass": 26,
                "accurate_pass": 22,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065236,
              "match_date": "2026-05-02",
              "home_team": "Bayer 04 Leverkusen",
              "away_team": "RB Leipzig",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "RB Leipzig",
              "opponent": "Bayer 04 Leverkusen",
              "stats": {
                "minutes": 65,
                "rating": 6.9,
                "assists": 0,
                "expected_goals": 0.0772,
                "expected_assists": 0.2038,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 35,
                "accurate_pass": 34,
                "key_pass": 1,
                "tackles": 3,
                "tackles_won": 3,
                "interceptions": 1,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "assists": 0,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 64,
                "accurate_pass": 57,
                "tackles": 1,
                "interceptions": 3,
                "clearances": 3,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 15313,
            "combined_rank_score": 827.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 329.0,
            "sofascore_rating": 6.9875,
            "sofascore_appearances": 8.0,
            "fifa_rank": 1326.0,
            "fifa_overall": 77.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 3,
            "squad_role": "starter",
            "projected_match_rating": 7.054,
            "source_file": "data/player_rankings.csv",
            "player_name": "Nicolas Seiwald",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Teófilo Gutiérrez",
                  "ranking": 15308
                },
                {
                  "player_name": "Santiago Londoño",
                  "ranking": 15309
                },
                {
                  "player_name": "Gonzalo Lencina",
                  "ranking": 15310
                },
                {
                  "player_name": "Philipp Köhn",
                  "ranking": 15311
                },
                {
                  "player_name": "Abdessamad Ezzalzouli",
                  "ranking": 15312
                }
              ],
              "lower": [
                {
                  "player_name": "Nico Elvedi",
                  "ranking": 15314
                },
                {
                  "player_name": "Javier Rojas",
                  "ranking": 15315
                },
                {
                  "player_name": "Hwang In-beom",
                  "ranking": 15316
                },
                {
                  "player_name": "Davy Klaassen",
                  "ranking": 15317
                },
                {
                  "player_name": "Wilfried Zaha",
                  "ranking": 15318
                }
              ]
            }
          }
        },
        "Xaver Schlager": {
          "player_id": 791079,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 4,
          "height": 174,
          "market_value": 9500000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0481,
            "assists": 0,
            "expected_goals": 0.1546,
            "rating": 87.2207,
            "minutes": 83,
            "total_pass": 52,
            "accurate_pass": 47,
            "ball_recovery": 7,
            "duels_won": 6,
            "total_shots": 2,
            "total_long_balls": 2,
            "accurate_long_balls": 1,
            "total_own_half_passes": 19,
            "accurate_own_half_passes": 19,
            "total_opp_half_passes": 33,
            "accurate_opp_half_passes": 27,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 68,
            "possession_lost": 10.3813,
            "dispossessed": 2.0099,
            "duels_lost": 4,
            "aerial_won": 1,
            "aerial_lost": 5,
            "interceptions": 0,
            "tackles_won": 2,
            "tackles": 2,
            "clearances": 1,
            "total_contest": 2,
            "won_contest": 2,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 2,
            "goal_rate": 1.005,
            "goals": 0,
            "shots_on_target": 1,
            "shots_off_target": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.7336,
            "ball_carries": 26,
            "total_progression": 173,
            "progressive_carries": 5,
            "dribbles_attempted": 3,
            "dribbles_successful": 1.2,
            "crosses_attempted": 2.0,
            "duel_win_rate": 0.444,
            "pressing_faced": "LOW",
            "matchup_zone": "LW vs CB",
            "numerical_situation": "1v1",
            "opponent_defenders": "Saleem Obaid",
            "opponent_faced": "Saleem Obaid",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.2163,
            "projected_assists": 0,
            "assist_probability": 0.2,
            "fifa_overall": 80.0
          },
          "latest_10_games": [
            {
              "match_id": 14065250,
              "match_date": "2026-05-09",
              "home_team": "RB Leipzig",
              "away_team": "FC St. Pauli",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "RB Leipzig",
              "opponent": "FC St. Pauli",
              "stats": {
                "minutes": 90,
                "rating": 7.7,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 0,
                "expected_goals": 0.1226,
                "expected_assists": 0.0623,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 65,
                "accurate_pass": 57,
                "tackles": 2,
                "tackles_won": 1,
                "clearances": 1,
                "duels_won": 6,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065236,
              "match_date": "2026-05-02",
              "home_team": "Bayer 04 Leverkusen",
              "away_team": "RB Leipzig",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "RB Leipzig",
              "opponent": "Bayer 04 Leverkusen",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assists": 0,
                "expected_goals": 0.0188,
                "expected_assists": 0.1084,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 49,
                "accurate_pass": 45,
                "key_pass": 4,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 1,
                "duels_won": 5,
                "ball_recovery": 8
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 68,
                "rating": 7.0,
                "assists": 0,
                "total_shots": 2,
                "shots_off_target": 1,
                "total_pass": 42,
                "accurate_pass": 37,
                "tackles": 3,
                "tackles_won": 3,
                "clearances": 2,
                "aerial_won": 2,
                "duels_won": 7,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 13944,
            "combined_rank_score": 481.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 340.0,
            "sofascore_rating": 6.98,
            "sofascore_appearances": 5.0,
            "fifa_rank": 622.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 9,
            "squad_role": "starter",
            "projected_match_rating": 7.2207,
            "source_file": "data/player_rankings.csv",
            "player_name": "Xaver Schlager",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Iliman Ndiaye",
                  "ranking": 13939
                },
                {
                  "player_name": "Lucas Chevalier",
                  "ranking": 13940
                },
                {
                  "player_name": "Đorđe Petrović",
                  "ranking": 13941
                },
                {
                  "player_name": "Jon Moncayola",
                  "ranking": 13942
                },
                {
                  "player_name": "Éderson",
                  "ranking": 13943
                }
              ],
              "lower": [
                {
                  "player_name": "César Munder",
                  "ranking": 13945
                },
                {
                  "player_name": "Sebastián Díaz",
                  "ranking": 13946
                },
                {
                  "player_name": "Bilol Tupliyev",
                  "ranking": 13947
                },
                {
                  "player_name": "Iván Colman",
                  "ranking": 13948
                },
                {
                  "player_name": "Pijus Širvys",
                  "ranking": 13949
                }
              ]
            }
          }
        },
        "Konrad Laimer": {
          "player_id": 355492,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 20,
          "height": 180,
          "market_value": 31000000,
          "stats": {
            "interceptions": 0,
            "tackles": 2,
            "tackles_won": 1,
            "clearances": 0,
            "aerial_won": 0,
            "rating": 88.9512,
            "minutes": 76,
            "total_pass": 41,
            "accurate_pass": 38,
            "duels_won": 4,
            "total_long_balls": 2,
            "accurate_long_balls": 1,
            "total_own_half_passes": 12,
            "accurate_own_half_passes": 12,
            "total_opp_half_passes": 29,
            "accurate_opp_half_passes": 26,
            "crosses_total": 1,
            "crosses_accurate": 1,
            "touches": 59,
            "possession_lost": 7.1201,
            "dispossessed": 1.0675,
            "duels_lost": 6,
            "aerial_lost": 2,
            "total_contest": 1,
            "won_contest": 1,
            "ball_recovery": 4,
            "challenges_lost": 2,
            "fouls": 3,
            "fouls_drawn": 1,
            "blocks": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.1437,
            "expected_assists": 0.0534,
            "total_shots": 0,
            "shots_on_target": 0,
            "shots_off_target": 1,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 11,
            "total_progression": 48,
            "progressive_carries": 1,
            "key_pass": 0,
            "tackles_in_zone": 1.1,
            "tackles_won_in_zone": 1.2,
            "interceptions_in_zone": 1.2,
            "clearances_in_zone": 1.0,
            "aerial_duels_won": 0.7,
            "defensive_success_rate": 0.82,
            "opponent_faced": "Ali Olwan",
            "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.0149,
            "projected_assists": 0,
            "assist_probability": 0.028,
            "fifa_overall": 82.0
          },
          "latest_10_games": [
            {
              "match_id": 14065556,
              "match_date": "2026-05-16",
              "home_team": "FC Bayern München",
              "away_team": "1. FC Köln",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Bayern München",
              "opponent": "1. FC Köln",
              "stats": {
                "minutes": 45,
                "rating": 6.4,
                "assists": 0,
                "expected_assists": 0.0502,
                "total_shots": 0,
                "total_pass": 43,
                "accurate_pass": 41,
                "tackles": 4,
                "tackles_won": 2,
                "clearances": 1,
                "duels_won": 5,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065251,
              "match_date": "2026-05-09",
              "home_team": "VfL Wolfsburg",
              "away_team": "FC Bayern München",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "FC Bayern München",
              "opponent": "VfL Wolfsburg",
              "stats": {
                "minutes": 45,
                "rating": 6.9,
                "assists": 1,
                "expected_assists": 0.1061,
                "total_shots": 0,
                "total_pass": 52,
                "accurate_pass": 44,
                "key_pass": 2,
                "tackles": 4,
                "tackles_won": 1,
                "duels_won": 4,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15632634,
              "match_date": "2026-05-06",
              "home_team": "FC Bayern München",
              "away_team": "Paris Saint-Germain",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Bayern München",
              "opponent": "Paris Saint-Germain",
              "stats": {
                "minutes": 90,
                "rating": 6.2,
                "assists": 0,
                "expected_goals": 0.0741,
                "expected_assists": 0.0489,
                "total_shots": 1,
                "total_pass": 47,
                "accurate_pass": 44,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 2,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "UEFA Champions League",
              "league_id": "7",
              "league_slug": "uefa-champions-league",
              "league_country": "Europe",
              "season_id": "76953",
              "season_name": "UEFA Champions League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065232,
              "match_date": "2026-05-02",
              "home_team": "FC Bayern München",
              "away_team": "1. FC Heidenheim",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Bayern München",
              "opponent": "1. FC Heidenheim",
              "stats": {
                "minutes": 90,
                "rating": 6.6,
                "assists": 0,
                "expected_assists": 0.1098,
                "total_shots": 0,
                "total_pass": 46,
                "accurate_pass": 45,
                "key_pass": 3,
                "clearances": 2,
                "duels_won": 1,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15632632,
              "match_date": "2026-04-28",
              "home_team": "Paris Saint-Germain",
              "away_team": "FC Bayern München",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "FC Bayern München",
              "opponent": "Paris Saint-Germain",
              "stats": {
                "minutes": 45,
                "rating": 6.6,
                "assists": 0,
                "expected_goals": 0.5361,
                "expected_assists": 0.0121,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 27,
                "accurate_pass": 20,
                "tackles": 2,
                "interceptions": 1,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "UEFA Champions League",
              "league_id": "7",
              "league_slug": "uefa-champions-league",
              "league_country": "Europe",
              "season_id": "76953",
              "season_name": "UEFA Champions League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15632088,
              "match_date": "2026-04-15",
              "home_team": "FC Bayern München",
              "away_team": "Real Madrid",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Bayern München",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 90,
                "rating": 6.1,
                "assists": 0,
                "expected_assists": 0.1073,
                "total_shots": 0,
                "total_pass": 45,
                "accurate_pass": 39,
                "tackles": 2,
                "tackles_won": 2,
                "duels_won": 4,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "UEFA Champions League",
              "league_id": "7",
              "league_slug": "uefa-champions-league",
              "league_country": "Europe",
              "season_id": "76953",
              "season_name": "UEFA Champions League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15632084,
              "match_date": "2026-04-07",
              "home_team": "Real Madrid",
              "away_team": "FC Bayern München",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "FC Bayern München",
              "opponent": "Real Madrid",
              "stats": {
                "minutes": 69,
                "rating": 6.5,
                "assists": 0,
                "expected_goals": 0.0978,
                "expected_assists": 0.0335,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 23,
                "accurate_pass": 23,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "UEFA Champions League",
              "league_id": "7",
              "league_slug": "uefa-champions-league",
              "league_country": "Europe",
              "season_id": "76953",
              "season_name": "UEFA Champions League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15631361,
              "match_date": "2026-03-10",
              "home_team": "Atalanta",
              "away_team": "FC Bayern München",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "FC Bayern München",
              "opponent": "Atalanta",
              "stats": {
                "minutes": 45,
                "rating": 7.2,
                "assists": 0,
                "expected_assists": 0.0176,
                "total_shots": 0,
                "total_pass": 29,
                "accurate_pass": 28,
                "tackles": 4,
                "tackles_won": 3,
                "interceptions": 1,
                "duels_won": 6,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "UEFA Champions League",
              "league_id": "7",
              "league_slug": "uefa-champions-league",
              "league_country": "Europe",
              "season_id": "76953",
              "season_name": "UEFA Champions League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 45,
                "accurate_pass": 40,
                "tackles": 2,
                "tackles_won": 2,
                "interceptions": 1,
                "clearances": 3,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 1043,
            "combined_rank_score": 250.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 161.0,
            "sofascore_rating": 7.2375,
            "sofascore_appearances": 8.0,
            "fifa_rank": 340.0,
            "fifa_overall": 82.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 2,
            "squad_role": "starter",
            "projected_match_rating": 6.9512,
            "source_file": "data/player_rankings.csv",
            "player_name": "Konrad Laimer",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Oday Dabbagh",
                  "ranking": 1038
                },
                {
                  "player_name": "Mahmudu Bajo",
                  "ranking": 1039
                },
                {
                  "player_name": "Alexis Steimbach",
                  "ranking": 1040
                },
                {
                  "player_name": "Marley Aké",
                  "ranking": 1041
                },
                {
                  "player_name": "Cristian Romero",
                  "ranking": 1042
                }
              ],
              "lower": [
                {
                  "player_name": "Fejsal Mulić",
                  "ranking": 1044
                },
                {
                  "player_name": "Christian Kouamé",
                  "ranking": 1045
                },
                {
                  "player_name": "Tino Kadewere",
                  "ranking": 1046
                },
                {
                  "player_name": "Oscar Kabwit",
                  "ranking": 1047
                },
                {
                  "player_name": "Amine Zouhzouh",
                  "ranking": 1048
                }
              ]
            }
          }
        },
        "David Alaba": {
          "player_id": 66492,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 8,
          "height": 180,
          "market_value": 2700000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 2,
            "aerial_won": 0,
            "rating": 88.9272,
            "minutes": 57,
            "total_pass": 58,
            "accurate_pass": 54,
            "duels_won": 1,
            "total_long_balls": 5,
            "accurate_long_balls": 3,
            "total_own_half_passes": 41,
            "accurate_own_half_passes": 39,
            "total_opp_half_passes": 17,
            "accurate_opp_half_passes": 15,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 64,
            "possession_lost": 5.23,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_lost": 1,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 3,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "blocks": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.0881,
            "expected_assists": 0.0098,
            "total_shots": 0,
            "shots_on_target": 0,
            "shots_off_target": 1,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 20,
            "total_progression": 76,
            "progressive_carries": 0,
            "key_pass": 0,
            "tackles_in_zone": 1.9,
            "tackles_won_in_zone": 1.8,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.0,
            "defensive_success_rate": 0.617,
            "opponent_faced": "Noor Al-Deen Al Rawabdeh",
            "pressing_zone": "Left Wingback vs Right Back — Overlapping Run",
            "matchup_zone": "Left Wingback vs Right Back — Overlapping Run",
            "antagonist_source": "defensive_duel",
            "projected_goals": 0,
            "goal_probability": 0.0091,
            "projected_assists": 0,
            "assist_probability": 0.0128,
            "fifa_overall": 82.0
          },
          "latest_10_games": [
            {
              "match_id": 14083731,
              "match_date": "2026-05-23",
              "home_team": "Real Madrid",
              "away_team": "Athletic Club",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Real Madrid",
              "opponent": "Athletic Club",
              "stats": {
                "minutes": 70,
                "rating": 6.9,
                "assists": 0,
                "expected_goals": 0.0562,
                "expected_assists": 0.0105,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 97,
                "accurate_pass": 90,
                "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": 14083649,
              "match_date": "2026-05-14",
              "home_team": "Real Madrid",
              "away_team": "Real Oviedo",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Real Madrid",
              "opponent": "Real Oviedo",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "assists": 0,
                "expected_assists": 0.0091,
                "total_shots": 0,
                "total_pass": 63,
                "accurate_pass": 60,
                "clearances": 4,
                "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": 15452752,
              "match_date": "2026-02-25",
              "home_team": "Real Madrid",
              "away_team": "Benfica",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Real Madrid",
              "opponent": "Benfica",
              "stats": {
                "minutes": 13,
                "rating": 6.8,
                "assists": 0,
                "expected_assists": 0.0019,
                "total_shots": 0,
                "total_pass": 16,
                "accurate_pass": 15,
                "clearances": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "UEFA Champions League",
              "league_id": "7",
              "league_slug": "uefa-champions-league",
              "league_country": "Europe",
              "season_id": "76953",
              "season_name": "UEFA Champions League 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 2008,
            "combined_rank_score": 284.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 224.0,
            "sofascore_rating": 7.125,
            "sofascore_appearances": 4.0,
            "fifa_rank": 345.0,
            "fifa_overall": 82.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 14,
            "squad_role": "starter",
            "projected_match_rating": 6.9272,
            "source_file": "data/player_rankings.csv",
            "player_name": "David Alaba",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Tsiki Ntsabeleng",
                  "ranking": 2003
                },
                {
                  "player_name": "Jesper Uneken",
                  "ranking": 2004
                },
                {
                  "player_name": "George Hemmings",
                  "ranking": 2005
                },
                {
                  "player_name": "Aiden  Hezarkhani",
                  "ranking": 2006
                },
                {
                  "player_name": "Palhinha",
                  "ranking": 2007
                }
              ],
              "lower": [
                {
                  "player_name": "Stefan Milić",
                  "ranking": 2009
                },
                {
                  "player_name": "Diogo Oliveira",
                  "ranking": 2010
                },
                {
                  "player_name": "Denilson Bolaños",
                  "ranking": 2011
                },
                {
                  "player_name": "Sherel Constancio Floranus",
                  "ranking": 2012
                },
                {
                  "player_name": "Ronaldo Pájaro",
                  "ranking": 2013
                }
              ]
            }
          }
        }
      },
      "bench_players": {
        "Florian Wiegele": {
          "player_id": 869476,
          "position": "G",
          "position_depth": "G_BENCH",
          "is_starter": false,
          "shirt_number": 44,
          "height": 204,
          "market_value": 2100000,
          "stats": {
            "saves": 0,
            "goals_prevented": 0.0055,
            "rating": 73.8142,
            "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.0,
            "aerial_won": 0,
            "sweeper_actions": 0,
            "sweeper_accurate": 0,
            "saves_inside_box": 0,
            "possession_lost": 0.3194,
            "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,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 67.0
          },
          "latest_10_games": [
            {
              "match_id": 16073311,
              "match_date": "2026-05-17",
              "home_team": "FC Viktoria Plzeň",
              "away_team": "FK Jablonec",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Viktoria Plzeň",
              "opponent": "FK Jablonec",
              "stats": {
                "minutes": 90,
                "rating": 7.4,
                "expected_assists": 0.0001,
                "total_shots": 0,
                "total_pass": 23,
                "accurate_pass": 21,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 7,
                "saves": 2,
                "goals_prevented": 0.0603
              },
              "has_player_stats": true,
              "league_name": "Czech First League",
              "league_id": "172",
              "league_slug": "1-liga",
              "league_country": "Czech Republic",
              "season_id": "77019",
              "season_name": "Chance Liga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 16073302,
              "match_date": "2026-05-12",
              "home_team": "AC Sparta Praha",
              "away_team": "FC Viktoria Plzeň",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "FC Viktoria Plzeň",
              "opponent": "AC Sparta Praha",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "expected_assists": 0.0004,
                "total_shots": 0,
                "total_pass": 34,
                "accurate_pass": 24,
                "ball_recovery": 10,
                "saves": 2,
                "goals_prevented": 0.114
              },
              "has_player_stats": true,
              "league_name": "Czech First League",
              "league_id": "172",
              "league_slug": "1-liga",
              "league_country": "Czech Republic",
              "season_id": "77019",
              "season_name": "Chance Liga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 16073306,
              "match_date": "2026-05-09",
              "home_team": "FC Viktoria Plzeň",
              "away_team": "FC Slovan Liberec",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Viktoria Plzeň",
              "opponent": "FC Slovan Liberec",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "expected_assists": 0.001,
                "total_shots": 0,
                "total_pass": 34,
                "accurate_pass": 26,
                "duels_won": 1,
                "ball_recovery": 10,
                "saves": 2,
                "goals_prevented": 0.0825
              },
              "has_player_stats": true,
              "league_name": "Czech First League",
              "league_id": "172",
              "league_slug": "1-liga",
              "league_country": "Czech Republic",
              "season_id": "77019",
              "season_name": "Chance Liga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 20617,
            "combined_rank_score": 4603.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 8957.0,
            "fifa_overall": 67.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 15,
            "squad_role": "substitute",
            "projected_match_rating": 6.8142,
            "source_file": "data/player_rankings.csv",
            "player_name": "Florian Wiegele",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "César Falletti",
                  "ranking": 20612
                },
                {
                  "player_name": "Felipe Augusto",
                  "ranking": 20613
                },
                {
                  "player_name": "Martín Luciano",
                  "ranking": 20614
                },
                {
                  "player_name": "Renzo Giampaoli",
                  "ranking": 20615
                },
                {
                  "player_name": "Ignacio Rodríguez",
                  "ranking": 20616
                }
              ],
              "lower": [
                {
                  "player_name": "Mattes Hansen",
                  "ranking": 20618
                },
                {
                  "player_name": "Adrian Grbić",
                  "ranking": 20619
                },
                {
                  "player_name": "Ruben Kluivert",
                  "ranking": 20620
                },
                {
                  "player_name": "Héctor Villalba",
                  "ranking": 20621
                },
                {
                  "player_name": "Alfred Canales",
                  "ranking": 20622
                }
              ]
            }
          }
        },
        "Kevin Danso": {
          "player_id": 794953,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 4,
          "height": 190,
          "market_value": 19400000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 1,
            "aerial_won": 1,
            "rating": 86.0919,
            "minutes": 14,
            "total_pass": 10,
            "accurate_pass": 9,
            "duels_won": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_own_half_passes": 6,
            "accurate_own_half_passes": 6,
            "total_opp_half_passes": 4,
            "accurate_opp_half_passes": 3,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 12,
            "possession_lost": 1.4308,
            "dispossessed": 1.0375,
            "duels_lost": 1,
            "aerial_lost": 3,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 2,
            "fouls": 0,
            "fouls_drawn": 0,
            "blocks": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.0296,
            "expected_assists": 0.0033,
            "total_shots": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 2,
            "total_progression": 7,
            "progressive_carries": 0,
            "key_pass": 0,
            "bench_appearance_probability": 0.333,
            "bench_expected_minutes": 14.32,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 79.0
          },
          "latest_10_games": [
            {
              "match_id": 14023967,
              "match_date": "2026-05-24",
              "home_team": "Tottenham Hotspur",
              "away_team": "Everton",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Tottenham Hotspur",
              "opponent": "Everton",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "assists": 0,
                "expected_goals": 0.1966,
                "expected_assists": 0.0059,
                "total_shots": 4,
                "shots_off_target": 2,
                "total_pass": 47,
                "accurate_pass": 43,
                "interceptions": 1,
                "clearances": 10,
                "aerial_won": 5,
                "duels_won": 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"
            },
            {
              "match_id": 16087727,
              "match_date": "2026-05-19",
              "home_team": "Chelsea",
              "away_team": "Tottenham Hotspur",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Tottenham Hotspur",
              "opponent": "Chelsea",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assists": 0,
                "expected_assists": 0.0068,
                "total_shots": 0,
                "total_pass": 73,
                "accurate_pass": 67,
                "tackles": 1,
                "interceptions": 6,
                "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": 14023944,
              "match_date": "2026-05-11",
              "home_team": "Tottenham Hotspur",
              "away_team": "Leeds United",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Tottenham Hotspur",
              "opponent": "Leeds United",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assists": 0,
                "expected_goals": 0.0399,
                "expected_assists": 0.0228,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 62,
                "accurate_pass": 52,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 8,
                "aerial_won": 8,
                "duels_won": 9,
                "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": 15631370,
              "match_date": "2026-03-18",
              "home_team": "Tottenham Hotspur",
              "away_team": "Atlético Madrid",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Tottenham Hotspur",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 9,
                "rating": 6.8,
                "assists": 0,
                "expected_assists": 0.0002,
                "total_shots": 0,
                "total_pass": 14,
                "accurate_pass": 11,
                "clearances": 1,
                "aerial_won": 3,
                "duels_won": 4
              },
              "has_player_stats": true,
              "league_name": "UEFA Champions League",
              "league_id": "7",
              "league_slug": "uefa-champions-league",
              "league_country": "Europe",
              "season_id": "76953",
              "season_name": "UEFA Champions League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15631356,
              "match_date": "2026-03-10",
              "home_team": "Atlético Madrid",
              "away_team": "Tottenham Hotspur",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Tottenham Hotspur",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 90,
                "rating": 5.5,
                "assists": 0,
                "expected_assists": 0.0524,
                "total_shots": 0,
                "total_pass": 42,
                "accurate_pass": 33,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "UEFA Champions League",
              "league_id": "7",
              "league_slug": "uefa-champions-league",
              "league_country": "Europe",
              "season_id": "76953",
              "season_name": "UEFA Champions League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 90,
                "rating": 7.5,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 115,
                "accurate_pass": 110,
                "tackles": 1,
                "clearances": 9,
                "aerial_won": 3,
                "duels_won": 4,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 14203,
            "combined_rank_score": 562.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 164.0,
            "sofascore_rating": 7.2333,
            "sofascore_appearances": 6.0,
            "fifa_rank": 960.0,
            "fifa_overall": 79.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 4,
            "squad_role": "substitute",
            "projected_match_rating": 7.0919,
            "source_file": "data/player_rankings.csv",
            "player_name": "Kevin Danso",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Sebastián Cabrera",
                  "ranking": 14198
                },
                {
                  "player_name": "Kim Min-jae",
                  "ranking": 14199
                },
                {
                  "player_name": "Nuno Tavares",
                  "ranking": 14200
                },
                {
                  "player_name": "Ben White",
                  "ranking": 14201
                },
                {
                  "player_name": "Lucas Zelarayán",
                  "ranking": 14202
                }
              ],
              "lower": [
                {
                  "player_name": "Dodô",
                  "ranking": 14204
                },
                {
                  "player_name": "Juan Foyth",
                  "ranking": 14205
                },
                {
                  "player_name": "Matty Cash",
                  "ranking": 14206
                },
                {
                  "player_name": "Nicolás Palma",
                  "ranking": 14207
                },
                {
                  "player_name": "Bekhruz Shaydulov",
                  "ranking": 14208
                }
              ]
            }
          }
        },
        "Leopold Querfeld": {
          "player_id": 1086547,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 14,
          "height": 190,
          "market_value": 17000000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 1,
            "aerial_won": 0,
            "rating": 75.7412,
            "minutes": 14,
            "total_pass": 0,
            "accurate_pass": 0,
            "duels_won": 0,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_own_half_passes": 0,
            "accurate_own_half_passes": 0,
            "total_opp_half_passes": 0,
            "accurate_opp_half_passes": 0,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 1,
            "possession_lost": 0.0,
            "dispossessed": 0.0,
            "duels_lost": 0,
            "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,
            "assists": 0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "total_shots": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 0,
            "total_progression": 0,
            "progressive_carries": 0,
            "key_pass": 0,
            "bench_appearance_probability": 0.328,
            "bench_expected_minutes": 14.22,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 14065558,
              "match_date": "2026-05-16",
              "home_team": "1. FC Union Berlin",
              "away_team": "FC Augsburg",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "1. FC Union Berlin",
              "opponent": "FC Augsburg",
              "stats": {
                "minutes": 4,
                "assists": 0,
                "expected_assists": 0.0,
                "total_shots": 0,
                "total_pass": 1,
                "accurate_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 5,
                "aerial_won": 1,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 16753,
            "combined_rank_score": 1451.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 532.0,
            "sofascore_rating": 6.8,
            "sofascore_appearances": 1.0,
            "fifa_rank": 2370.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 6,
            "squad_role": "substitute",
            "projected_match_rating": 0.7412,
            "source_file": "data/player_rankings.csv",
            "player_name": "Leopold Querfeld",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Adam Gnezda Čerin",
                  "ranking": 16748
                },
                {
                  "player_name": "Arnau Tenas",
                  "ranking": 16749
                },
                {
                  "player_name": "Mailson",
                  "ranking": 16750
                },
                {
                  "player_name": "Stefano Turati",
                  "ranking": 16751
                },
                {
                  "player_name": "Eren Elmalı",
                  "ranking": 16752
                }
              ],
              "lower": [
                {
                  "player_name": "Franco Vázquez",
                  "ranking": 16754
                },
                {
                  "player_name": "Neal Maupay",
                  "ranking": 16755
                },
                {
                  "player_name": "Sammie Szmodics",
                  "ranking": 16756
                },
                {
                  "player_name": "Kevin Kampl",
                  "ranking": 16757
                },
                {
                  "player_name": "Giorgi Chakvetadze",
                  "ranking": 16758
                }
              ]
            }
          }
        },
        "Christoph Baumgartner": {
          "player_id": 825956,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 14,
          "height": 180,
          "market_value": 42000000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0221,
            "assists": 0,
            "expected_goals": 0.1003,
            "rating": 84.1644,
            "minutes": 23,
            "total_pass": 12,
            "accurate_pass": 10,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 1,
            "total_own_half_passes": 4,
            "accurate_own_half_passes": 4,
            "total_opp_half_passes": 8,
            "accurate_opp_half_passes": 6,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 17,
            "possession_lost": 4.3765,
            "dispossessed": 1.6309,
            "duels_lost": 2,
            "aerial_won": 1,
            "aerial_lost": 2,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "total_contest": 1,
            "won_contest": 0,
            "challenges_lost": 3,
            "fouls": 1,
            "fouls_drawn": 0,
            "goal_rate": 0.2824,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.1412,
            "ball_carries": 4,
            "total_progression": 12,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.562,
            "bench_expected_minutes": 23.37,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 77.0
          },
          "latest_10_games": [
            {
              "match_id": 14065555,
              "match_date": "2026-05-16",
              "home_team": "SC Freiburg",
              "away_team": "RB Leipzig",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "RB Leipzig",
              "opponent": "SC Freiburg",
              "stats": {
                "minutes": 90,
                "rating": 6.1,
                "assists": 0,
                "expected_goals": 0.0784,
                "expected_assists": 0.1291,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 43,
                "accurate_pass": 33,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065250,
              "match_date": "2026-05-09",
              "home_team": "RB Leipzig",
              "away_team": "FC St. Pauli",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "RB Leipzig",
              "opponent": "FC St. Pauli",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assists": 1,
                "expected_goals": 0.4819,
                "expected_assists": 0.0873,
                "total_shots": 4,
                "shots_on_target": 1,
                "shots_off_target": 2,
                "total_pass": 62,
                "accurate_pass": 49,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 2,
                "aerial_won": 2,
                "duels_won": 4,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065236,
              "match_date": "2026-05-02",
              "home_team": "Bayer 04 Leverkusen",
              "away_team": "RB Leipzig",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "RB Leipzig",
              "opponent": "Bayer 04 Leverkusen",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 0,
                "expected_goals": 0.4138,
                "expected_assists": 0.0493,
                "total_shots": 2,
                "shots_on_target": 1,
                "total_pass": 34,
                "accurate_pass": 28,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 1,
                "aerial_won": 3,
                "duels_won": 4,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 90,
                "rating": 6.2,
                "assists": 0,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 38,
                "accurate_pass": 28,
                "key_pass": 1,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 15830,
            "combined_rank_score": 914.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 349.0,
            "sofascore_rating": 6.9714,
            "sofascore_appearances": 7.0,
            "fifa_rank": 1480.0,
            "fifa_overall": 77.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 1,
            "squad_role": "substitute",
            "projected_match_rating": 7.1644,
            "source_file": "data/player_rankings.csv",
            "player_name": "Christoph Baumgartner",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Tokhirbek Tukhtasinov",
                  "ranking": 15825
                },
                {
                  "player_name": "Ramón Martínez",
                  "ranking": 15826
                },
                {
                  "player_name": "Kevin Schade",
                  "ranking": 15827
                },
                {
                  "player_name": "Andreas Malin",
                  "ranking": 15828
                },
                {
                  "player_name": "Nicholas Pozo",
                  "ranking": 15829
                }
              ],
              "lower": [
                {
                  "player_name": "Lucas Beraldo",
                  "ranking": 15831
                },
                {
                  "player_name": "Jean Butez",
                  "ranking": 15832
                },
                {
                  "player_name": "Simon Lüchinger",
                  "ranking": 15833
                },
                {
                  "player_name": "Jan-Niklas Beste",
                  "ranking": 15834
                },
                {
                  "player_name": "Marco Friedl",
                  "ranking": 15835
                }
              ]
            }
          }
        },
        "Paul Wanner": {
          "player_id": 1146018,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 10,
          "height": 186,
          "market_value": 18800000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0133,
            "assists": 0,
            "expected_goals": 0.1911,
            "rating": 80.0422,
            "minutes": 23,
            "total_pass": 11,
            "accurate_pass": 10,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_own_half_passes": 4,
            "accurate_own_half_passes": 4,
            "total_opp_half_passes": 7,
            "accurate_opp_half_passes": 5,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 14,
            "possession_lost": 1.5668,
            "dispossessed": 0.0,
            "duels_lost": 0,
            "aerial_won": 0,
            "aerial_lost": 1,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 1,
            "total_contest": 1,
            "won_contest": 1,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "goal_rate": 0.2611,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.1724,
            "ball_carries": 5,
            "total_progression": 13,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.531,
            "bench_expected_minutes": 22.69,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 72.0
          },
          "latest_10_games": [
            {
              "match_id": 14028530,
              "match_date": "2026-05-17",
              "home_team": "PSV Eindhoven",
              "away_team": "FC Twente",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "PSV Eindhoven",
              "opponent": "FC Twente",
              "stats": {
                "minutes": 90,
                "rating": 7.9,
                "assists": 0,
                "expected_goals": 0.6743,
                "expected_assists": 0.0359,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 39,
                "accurate_pass": 32,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 3,
                "aerial_won": 1,
                "duels_won": 7,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "VriendenLoterij Eredivisie",
              "league_id": "37",
              "league_slug": "eredivisie",
              "league_country": "Netherlands",
              "season_id": "77012",
              "season_name": "VriendenLoterij Eredivisie 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14028548,
              "match_date": "2026-05-10",
              "home_team": "Go Ahead Eagles",
              "away_team": "PSV Eindhoven",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "PSV Eindhoven",
              "opponent": "Go Ahead Eagles",
              "stats": {
                "minutes": 90,
                "rating": 8.3,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 1,
                "expected_goals": 0.3662,
                "expected_assists": 0.0915,
                "total_shots": 3,
                "shots_on_target": 1,
                "total_pass": 44,
                "accurate_pass": 41,
                "key_pass": 3,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "VriendenLoterij Eredivisie",
              "league_id": "37",
              "league_slug": "eredivisie",
              "league_country": "Netherlands",
              "season_id": "77012",
              "season_name": "VriendenLoterij Eredivisie 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 17603,
            "combined_rank_score": 2129.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 4164.0,
            "fifa_overall": 72.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 5,
            "squad_role": "substitute",
            "projected_match_rating": 8.0422,
            "source_file": "data/player_rankings.csv",
            "player_name": "Paul Wanner",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Gonzalo Villar",
                  "ranking": 17598
                },
                {
                  "player_name": "Pedro Gallese",
                  "ranking": 17599
                },
                {
                  "player_name": "Karl Darlow",
                  "ranking": 17600
                },
                {
                  "player_name": "Thibault De Smet",
                  "ranking": 17601
                },
                {
                  "player_name": "Steven Moreira",
                  "ranking": 17602
                }
              ],
              "lower": [
                {
                  "player_name": "Bruno Nazario",
                  "ranking": 17604
                },
                {
                  "player_name": "Aarón",
                  "ranking": 17605
                },
                {
                  "player_name": "Jordy Makengo",
                  "ranking": 17606
                },
                {
                  "player_name": "Bobby De Cordova-Reid",
                  "ranking": 17607
                },
                {
                  "player_name": "Junior Mwanga",
                  "ranking": 17608
                }
              ]
            }
          }
        },
        "Nikolaus Wurmbrand": {
          "player_id": 1897251,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 22,
          "height": 173,
          "market_value": 5300000,
          "stats": {
            "expected_goals": 0.0006,
            "goal_rate": 0.0001,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0064,
            "key_pass": 0,
            "rating": 70.4643,
            "minutes": 25,
            "total_shots": 0,
            "duels_won": 1,
            "aerial_won": 0,
            "total_pass": 3,
            "accurate_pass": 2,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 2,
            "accurate_opp_half_passes": 1,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 7,
            "possession_lost": 3.4923,
            "dispossessed": 1.9795,
            "duels_lost": 1,
            "aerial_lost": 1,
            "total_contest": 1,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 2,
            "fouls": 1,
            "fouls_drawn": 1,
            "assists": 0,
            "shots_off_target": 0,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0084,
            "offsides": 0,
            "ball_carries": 4,
            "total_progression": 20,
            "progressive_carries": 1,
            "bench_appearance_probability": 0.564,
            "bench_expected_minutes": 25.4,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 64.0
          },
          "latest_10_games": [
            {
              "match_id": 16206946,
              "match_date": "2026-05-25",
              "home_team": "SK Rapid Wien",
              "away_team": "SV Ried",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "SK Rapid Wien",
              "opponent": "SV Ried",
              "stats": {
                "minutes": 90,
                "rating": 7.7,
                "assists": 0,
                "expected_goals": 0.175,
                "expected_assists": 0.4094,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 2,
                "total_pass": 22,
                "accurate_pass": 17,
                "key_pass": 2,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 16206918,
              "match_date": "2026-05-22",
              "home_team": "SV Ried",
              "away_team": "SK Rapid Wien",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "SK Rapid Wien",
              "opponent": "SV Ried",
              "stats": {
                "minutes": 71,
                "rating": 6.5,
                "assists": 0,
                "expected_goals": 0.044,
                "expected_assists": 0.0514,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 17,
                "accurate_pass": 8,
                "key_pass": 1,
                "tackles": 1,
                "interceptions": 1,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690642,
              "match_date": "2026-05-17",
              "home_team": "SK Sturm Graz",
              "away_team": "SK Rapid Wien",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "SK Rapid Wien",
              "opponent": "SK Sturm Graz",
              "stats": {
                "minutes": 60,
                "rating": 6.8,
                "assists": 0,
                "expected_goals": 0.0972,
                "expected_assists": 0.0353,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 8,
                "accurate_pass": 4,
                "interceptions": 1,
                "clearances": 2,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690638,
              "match_date": "2026-05-10",
              "home_team": "SK Rapid Wien",
              "away_team": "FK Austria Wien",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "SK Rapid Wien",
              "opponent": "FK Austria Wien",
              "stats": {
                "minutes": 65,
                "rating": 7.1,
                "assists": 0,
                "expected_goals": 0.079,
                "expected_assists": 0.0182,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 18,
                "accurate_pass": 9,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 2,
                "aerial_won": 2,
                "duels_won": 6,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690643,
              "match_date": "2026-05-04",
              "home_team": "LASK",
              "away_team": "SK Rapid Wien",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "SK Rapid Wien",
              "opponent": "LASK",
              "stats": {
                "minutes": 19,
                "rating": 6.4,
                "assists": 0,
                "expected_assists": 0.0028,
                "total_shots": 0,
                "total_pass": 4,
                "accurate_pass": 4
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690645,
              "match_date": "2026-04-26",
              "home_team": "SK Rapid Wien",
              "away_team": "Red Bull Salzburg",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "SK Rapid Wien",
              "opponent": "Red Bull Salzburg",
              "stats": {
                "minutes": 39,
                "rating": 6.8,
                "assists": 0,
                "expected_assists": 0.0013,
                "total_shots": 0,
                "total_pass": 8,
                "accurate_pass": 7,
                "interceptions": 2,
                "clearances": 1,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690633,
              "match_date": "2026-04-22",
              "home_team": "SK Rapid Wien",
              "away_team": "TSV Hartberg",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "SK Rapid Wien",
              "opponent": "TSV Hartberg",
              "stats": {
                "minutes": 70,
                "rating": 7.0,
                "assists": 0,
                "expected_goals": 0.1524,
                "expected_assists": 0.1971,
                "total_shots": 3,
                "shots_off_target": 1,
                "total_pass": 15,
                "accurate_pass": 9,
                "key_pass": 1,
                "interceptions": 1,
                "aerial_won": 1,
                "duels_won": 6,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 21971,
            "combined_rank_score": 5844.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 8.0,
            "sofascore_rating": 8.4,
            "sofascore_appearances": 2.0,
            "fifa_rank": 11681.0,
            "fifa_overall": 64.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 12,
            "squad_role": "substitute",
            "projected_match_rating": 6.4643,
            "source_file": "data/player_rankings.csv",
            "player_name": "Nikolaus Wurmbrand",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Martin Kreuzriegler",
                  "ranking": 21966
                },
                {
                  "player_name": "Richard Torales",
                  "ranking": 21967
                },
                {
                  "player_name": "Mohammed Al Fatil",
                  "ranking": 21968
                },
                {
                  "player_name": "Jair",
                  "ranking": 21969
                },
                {
                  "player_name": "Alkain",
                  "ranking": 21970
                }
              ],
              "lower": [
                {
                  "player_name": "Loïc Williams",
                  "ranking": 21972
                },
                {
                  "player_name": "Péter Baráth",
                  "ranking": 21973
                },
                {
                  "player_name": "Michał Helik",
                  "ranking": 21974
                },
                {
                  "player_name": "Lim Jong Eun",
                  "ranking": 21975
                },
                {
                  "player_name": "Zak Vyner",
                  "ranking": 21976
                }
              ]
            }
          }
        },
        "Marco Grüll": {
          "player_id": 815612,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 17,
          "height": 182,
          "market_value": 4300000,
          "stats": {
            "expected_goals": 0.0344,
            "goal_rate": 0.0002,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0154,
            "key_pass": 0,
            "rating": 81.4838,
            "minutes": 25,
            "total_shots": 0,
            "duels_won": 1,
            "aerial_won": 0,
            "total_pass": 3,
            "accurate_pass": 3,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_opp_half_passes": 2,
            "accurate_opp_half_passes": 3,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 7,
            "possession_lost": 1.7585,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_lost": 1,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 2,
            "fouls": 0,
            "fouls_drawn": 0,
            "assists": 0,
            "shots_off_target": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0139,
            "offsides": 1,
            "ball_carries": 2,
            "total_progression": 18,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.562,
            "bench_expected_minutes": 25.36,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 14065561,
              "match_date": "2026-05-16",
              "home_team": "SV Werder Bremen",
              "away_team": "Borussia Dortmund",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "SV Werder Bremen",
              "opponent": "Borussia Dortmund",
              "stats": {
                "minutes": 37,
                "rating": 7.1,
                "assists": 0,
                "expected_goals": 0.0208,
                "expected_assists": 0.1231,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 25,
                "accurate_pass": 22,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065252,
              "match_date": "2026-05-09",
              "home_team": "TSG Hoffenheim",
              "away_team": "SV Werder Bremen",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "SV Werder Bremen",
              "opponent": "TSG Hoffenheim",
              "stats": {
                "minutes": 19,
                "rating": 6.7,
                "assists": 0,
                "expected_goals": 0.1906,
                "expected_assists": 0.0,
                "total_shots": 1,
                "total_pass": 4,
                "accurate_pass": 1,
                "tackles": 1,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065241,
              "match_date": "2026-05-02",
              "home_team": "SV Werder Bremen",
              "away_team": "FC Augsburg",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "SV Werder Bremen",
              "opponent": "FC Augsburg",
              "stats": {
                "minutes": 11,
                "rating": 6.5,
                "assists": 0,
                "expected_goals": 0.0292,
                "expected_assists": 0.04,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 7,
                "accurate_pass": 7
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 16628,
            "combined_rank_score": 1357.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 532.0,
            "sofascore_rating": 6.8,
            "sofascore_appearances": 2.0,
            "fifa_rank": 2182.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 13,
            "squad_role": "substitute",
            "projected_match_rating": 6.4838,
            "source_file": "data/player_rankings.csv",
            "player_name": "Marco Grüll",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Hugo Bueno",
                  "ranking": 16623
                },
                {
                  "player_name": "Santi Cazorla",
                  "ranking": 16624
                },
                {
                  "player_name": "Leandro Lozano",
                  "ranking": 16625
                },
                {
                  "player_name": "Christopher Operi",
                  "ranking": 16626
                },
                {
                  "player_name": "Glen Kamara",
                  "ranking": 16627
                }
              ],
              "lower": [
                {
                  "player_name": "Vítor Carvalho",
                  "ranking": 16629
                },
                {
                  "player_name": "James Justin",
                  "ranking": 16630
                },
                {
                  "player_name": "Allahyar Sayyadmanesh",
                  "ranking": 16631
                },
                {
                  "player_name": "Ricardo Pepi",
                  "ranking": 16632
                },
                {
                  "player_name": "Qazim Laci",
                  "ranking": 16633
                }
              ]
            }
          }
        }
      },
      "substitutes": {
        "Florian Wiegele": {
          "player_id": 869476,
          "position": "G",
          "position_depth": "G_BENCH",
          "is_starter": false,
          "shirt_number": 44,
          "height": 204,
          "market_value": 2100000,
          "stats": {
            "saves": 0,
            "goals_prevented": 0.0055,
            "rating": 73.8142,
            "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.0,
            "aerial_won": 0,
            "sweeper_actions": 0,
            "sweeper_accurate": 0,
            "saves_inside_box": 0,
            "possession_lost": 0.3194,
            "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,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 67.0
          },
          "latest_10_games": [
            {
              "match_id": 16073311,
              "match_date": "2026-05-17",
              "home_team": "FC Viktoria Plzeň",
              "away_team": "FK Jablonec",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Viktoria Plzeň",
              "opponent": "FK Jablonec",
              "stats": {
                "minutes": 90,
                "rating": 7.4,
                "expected_assists": 0.0001,
                "total_shots": 0,
                "total_pass": 23,
                "accurate_pass": 21,
                "aerial_won": 1,
                "duels_won": 1,
                "ball_recovery": 7,
                "saves": 2,
                "goals_prevented": 0.0603
              },
              "has_player_stats": true,
              "league_name": "Czech First League",
              "league_id": "172",
              "league_slug": "1-liga",
              "league_country": "Czech Republic",
              "season_id": "77019",
              "season_name": "Chance Liga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 16073302,
              "match_date": "2026-05-12",
              "home_team": "AC Sparta Praha",
              "away_team": "FC Viktoria Plzeň",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "FC Viktoria Plzeň",
              "opponent": "AC Sparta Praha",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "expected_assists": 0.0004,
                "total_shots": 0,
                "total_pass": 34,
                "accurate_pass": 24,
                "ball_recovery": 10,
                "saves": 2,
                "goals_prevented": 0.114
              },
              "has_player_stats": true,
              "league_name": "Czech First League",
              "league_id": "172",
              "league_slug": "1-liga",
              "league_country": "Czech Republic",
              "season_id": "77019",
              "season_name": "Chance Liga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 16073306,
              "match_date": "2026-05-09",
              "home_team": "FC Viktoria Plzeň",
              "away_team": "FC Slovan Liberec",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Viktoria Plzeň",
              "opponent": "FC Slovan Liberec",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "expected_assists": 0.001,
                "total_shots": 0,
                "total_pass": 34,
                "accurate_pass": 26,
                "duels_won": 1,
                "ball_recovery": 10,
                "saves": 2,
                "goals_prevented": 0.0825
              },
              "has_player_stats": true,
              "league_name": "Czech First League",
              "league_id": "172",
              "league_slug": "1-liga",
              "league_country": "Czech Republic",
              "season_id": "77019",
              "season_name": "Chance Liga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 20617,
            "combined_rank_score": 4603.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 8957.0,
            "fifa_overall": 67.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 15,
            "squad_role": "substitute",
            "projected_match_rating": 6.8142,
            "source_file": "data/player_rankings.csv",
            "player_name": "Florian Wiegele",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "César Falletti",
                  "ranking": 20612
                },
                {
                  "player_name": "Felipe Augusto",
                  "ranking": 20613
                },
                {
                  "player_name": "Martín Luciano",
                  "ranking": 20614
                },
                {
                  "player_name": "Renzo Giampaoli",
                  "ranking": 20615
                },
                {
                  "player_name": "Ignacio Rodríguez",
                  "ranking": 20616
                }
              ],
              "lower": [
                {
                  "player_name": "Mattes Hansen",
                  "ranking": 20618
                },
                {
                  "player_name": "Adrian Grbić",
                  "ranking": 20619
                },
                {
                  "player_name": "Ruben Kluivert",
                  "ranking": 20620
                },
                {
                  "player_name": "Héctor Villalba",
                  "ranking": 20621
                },
                {
                  "player_name": "Alfred Canales",
                  "ranking": 20622
                }
              ]
            }
          }
        },
        "Kevin Danso": {
          "player_id": 794953,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 4,
          "height": 190,
          "market_value": 19400000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 1,
            "aerial_won": 1,
            "rating": 86.0919,
            "minutes": 14,
            "total_pass": 10,
            "accurate_pass": 9,
            "duels_won": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_own_half_passes": 6,
            "accurate_own_half_passes": 6,
            "total_opp_half_passes": 4,
            "accurate_opp_half_passes": 3,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 12,
            "possession_lost": 1.4308,
            "dispossessed": 1.0375,
            "duels_lost": 1,
            "aerial_lost": 3,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 2,
            "fouls": 0,
            "fouls_drawn": 0,
            "blocks": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.0296,
            "expected_assists": 0.0033,
            "total_shots": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 2,
            "total_progression": 7,
            "progressive_carries": 0,
            "key_pass": 0,
            "bench_appearance_probability": 0.333,
            "bench_expected_minutes": 14.32,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 79.0
          },
          "latest_10_games": [
            {
              "match_id": 14023967,
              "match_date": "2026-05-24",
              "home_team": "Tottenham Hotspur",
              "away_team": "Everton",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Tottenham Hotspur",
              "opponent": "Everton",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "assists": 0,
                "expected_goals": 0.1966,
                "expected_assists": 0.0059,
                "total_shots": 4,
                "shots_off_target": 2,
                "total_pass": 47,
                "accurate_pass": 43,
                "interceptions": 1,
                "clearances": 10,
                "aerial_won": 5,
                "duels_won": 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"
            },
            {
              "match_id": 16087727,
              "match_date": "2026-05-19",
              "home_team": "Chelsea",
              "away_team": "Tottenham Hotspur",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Tottenham Hotspur",
              "opponent": "Chelsea",
              "stats": {
                "minutes": 90,
                "rating": 6.4,
                "assists": 0,
                "expected_assists": 0.0068,
                "total_shots": 0,
                "total_pass": 73,
                "accurate_pass": 67,
                "tackles": 1,
                "interceptions": 6,
                "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": 14023944,
              "match_date": "2026-05-11",
              "home_team": "Tottenham Hotspur",
              "away_team": "Leeds United",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Tottenham Hotspur",
              "opponent": "Leeds United",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assists": 0,
                "expected_goals": 0.0399,
                "expected_assists": 0.0228,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 62,
                "accurate_pass": 52,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 8,
                "aerial_won": 8,
                "duels_won": 9,
                "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": 15631370,
              "match_date": "2026-03-18",
              "home_team": "Tottenham Hotspur",
              "away_team": "Atlético Madrid",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Tottenham Hotspur",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 9,
                "rating": 6.8,
                "assists": 0,
                "expected_assists": 0.0002,
                "total_shots": 0,
                "total_pass": 14,
                "accurate_pass": 11,
                "clearances": 1,
                "aerial_won": 3,
                "duels_won": 4
              },
              "has_player_stats": true,
              "league_name": "UEFA Champions League",
              "league_id": "7",
              "league_slug": "uefa-champions-league",
              "league_country": "Europe",
              "season_id": "76953",
              "season_name": "UEFA Champions League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15631356,
              "match_date": "2026-03-10",
              "home_team": "Atlético Madrid",
              "away_team": "Tottenham Hotspur",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Tottenham Hotspur",
              "opponent": "Atlético Madrid",
              "stats": {
                "minutes": 90,
                "rating": 5.5,
                "assists": 0,
                "expected_assists": 0.0524,
                "total_shots": 0,
                "total_pass": 42,
                "accurate_pass": 33,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "UEFA Champions League",
              "league_id": "7",
              "league_slug": "uefa-champions-league",
              "league_country": "Europe",
              "season_id": "76953",
              "season_name": "UEFA Champions League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 90,
                "rating": 7.5,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 115,
                "accurate_pass": 110,
                "tackles": 1,
                "clearances": 9,
                "aerial_won": 3,
                "duels_won": 4,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 14203,
            "combined_rank_score": 562.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 164.0,
            "sofascore_rating": 7.2333,
            "sofascore_appearances": 6.0,
            "fifa_rank": 960.0,
            "fifa_overall": 79.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 4,
            "squad_role": "substitute",
            "projected_match_rating": 7.0919,
            "source_file": "data/player_rankings.csv",
            "player_name": "Kevin Danso",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Sebastián Cabrera",
                  "ranking": 14198
                },
                {
                  "player_name": "Kim Min-jae",
                  "ranking": 14199
                },
                {
                  "player_name": "Nuno Tavares",
                  "ranking": 14200
                },
                {
                  "player_name": "Ben White",
                  "ranking": 14201
                },
                {
                  "player_name": "Lucas Zelarayán",
                  "ranking": 14202
                }
              ],
              "lower": [
                {
                  "player_name": "Dodô",
                  "ranking": 14204
                },
                {
                  "player_name": "Juan Foyth",
                  "ranking": 14205
                },
                {
                  "player_name": "Matty Cash",
                  "ranking": 14206
                },
                {
                  "player_name": "Nicolás Palma",
                  "ranking": 14207
                },
                {
                  "player_name": "Bekhruz Shaydulov",
                  "ranking": 14208
                }
              ]
            }
          }
        },
        "Leopold Querfeld": {
          "player_id": 1086547,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 14,
          "height": 190,
          "market_value": 17000000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 1,
            "aerial_won": 0,
            "rating": 75.7412,
            "minutes": 14,
            "total_pass": 0,
            "accurate_pass": 0,
            "duels_won": 0,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_own_half_passes": 0,
            "accurate_own_half_passes": 0,
            "total_opp_half_passes": 0,
            "accurate_opp_half_passes": 0,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 1,
            "possession_lost": 0.0,
            "dispossessed": 0.0,
            "duels_lost": 0,
            "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,
            "assists": 0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "total_shots": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 0,
            "total_progression": 0,
            "progressive_carries": 0,
            "key_pass": 0,
            "bench_appearance_probability": 0.328,
            "bench_expected_minutes": 14.22,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 14065558,
              "match_date": "2026-05-16",
              "home_team": "1. FC Union Berlin",
              "away_team": "FC Augsburg",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "1. FC Union Berlin",
              "opponent": "FC Augsburg",
              "stats": {
                "minutes": 4,
                "assists": 0,
                "expected_assists": 0.0,
                "total_shots": 0,
                "total_pass": 1,
                "accurate_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 5,
                "aerial_won": 1,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 16753,
            "combined_rank_score": 1451.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 532.0,
            "sofascore_rating": 6.8,
            "sofascore_appearances": 1.0,
            "fifa_rank": 2370.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 6,
            "squad_role": "substitute",
            "projected_match_rating": 0.7412,
            "source_file": "data/player_rankings.csv",
            "player_name": "Leopold Querfeld",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Adam Gnezda Čerin",
                  "ranking": 16748
                },
                {
                  "player_name": "Arnau Tenas",
                  "ranking": 16749
                },
                {
                  "player_name": "Mailson",
                  "ranking": 16750
                },
                {
                  "player_name": "Stefano Turati",
                  "ranking": 16751
                },
                {
                  "player_name": "Eren Elmalı",
                  "ranking": 16752
                }
              ],
              "lower": [
                {
                  "player_name": "Franco Vázquez",
                  "ranking": 16754
                },
                {
                  "player_name": "Neal Maupay",
                  "ranking": 16755
                },
                {
                  "player_name": "Sammie Szmodics",
                  "ranking": 16756
                },
                {
                  "player_name": "Kevin Kampl",
                  "ranking": 16757
                },
                {
                  "player_name": "Giorgi Chakvetadze",
                  "ranking": 16758
                }
              ]
            }
          }
        },
        "Christoph Baumgartner": {
          "player_id": 825956,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 14,
          "height": 180,
          "market_value": 42000000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0221,
            "assists": 0,
            "expected_goals": 0.1003,
            "rating": 84.1644,
            "minutes": 23,
            "total_pass": 12,
            "accurate_pass": 10,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 1,
            "total_own_half_passes": 4,
            "accurate_own_half_passes": 4,
            "total_opp_half_passes": 8,
            "accurate_opp_half_passes": 6,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 17,
            "possession_lost": 4.3765,
            "dispossessed": 1.6309,
            "duels_lost": 2,
            "aerial_won": 1,
            "aerial_lost": 2,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "total_contest": 1,
            "won_contest": 0,
            "challenges_lost": 3,
            "fouls": 1,
            "fouls_drawn": 0,
            "goal_rate": 0.2824,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.1412,
            "ball_carries": 4,
            "total_progression": 12,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.562,
            "bench_expected_minutes": 23.37,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 77.0
          },
          "latest_10_games": [
            {
              "match_id": 14065555,
              "match_date": "2026-05-16",
              "home_team": "SC Freiburg",
              "away_team": "RB Leipzig",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "RB Leipzig",
              "opponent": "SC Freiburg",
              "stats": {
                "minutes": 90,
                "rating": 6.1,
                "assists": 0,
                "expected_goals": 0.0784,
                "expected_assists": 0.1291,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 43,
                "accurate_pass": 33,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065250,
              "match_date": "2026-05-09",
              "home_team": "RB Leipzig",
              "away_team": "FC St. Pauli",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "RB Leipzig",
              "opponent": "FC St. Pauli",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assists": 1,
                "expected_goals": 0.4819,
                "expected_assists": 0.0873,
                "total_shots": 4,
                "shots_on_target": 1,
                "shots_off_target": 2,
                "total_pass": 62,
                "accurate_pass": 49,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 2,
                "aerial_won": 2,
                "duels_won": 4,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065236,
              "match_date": "2026-05-02",
              "home_team": "Bayer 04 Leverkusen",
              "away_team": "RB Leipzig",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "RB Leipzig",
              "opponent": "Bayer 04 Leverkusen",
              "stats": {
                "minutes": 90,
                "rating": 7.3,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 0,
                "expected_goals": 0.4138,
                "expected_assists": 0.0493,
                "total_shots": 2,
                "shots_on_target": 1,
                "total_pass": 34,
                "accurate_pass": 28,
                "key_pass": 1,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 1,
                "aerial_won": 3,
                "duels_won": 4,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 13233693,
              "match_date": "2025-11-18",
              "home_team": "Austria",
              "away_team": "Bosnia & Herzegovina",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Austria",
              "opponent": "Bosnia & Herzegovina",
              "stats": {
                "minutes": 90,
                "rating": 6.2,
                "assists": 0,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 38,
                "accurate_pass": 28,
                "key_pass": 1,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "World Cup Qual. UEFA",
              "league_id": "11",
              "league_slug": "world-championship-qual-uefa",
              "league_country": "Europe",
              "season_id": "69427",
              "season_name": "World Cup Qualification, UEFA 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 15830,
            "combined_rank_score": 914.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 349.0,
            "sofascore_rating": 6.9714,
            "sofascore_appearances": 7.0,
            "fifa_rank": 1480.0,
            "fifa_overall": 77.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 1,
            "squad_role": "substitute",
            "projected_match_rating": 7.1644,
            "source_file": "data/player_rankings.csv",
            "player_name": "Christoph Baumgartner",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Tokhirbek Tukhtasinov",
                  "ranking": 15825
                },
                {
                  "player_name": "Ramón Martínez",
                  "ranking": 15826
                },
                {
                  "player_name": "Kevin Schade",
                  "ranking": 15827
                },
                {
                  "player_name": "Andreas Malin",
                  "ranking": 15828
                },
                {
                  "player_name": "Nicholas Pozo",
                  "ranking": 15829
                }
              ],
              "lower": [
                {
                  "player_name": "Lucas Beraldo",
                  "ranking": 15831
                },
                {
                  "player_name": "Jean Butez",
                  "ranking": 15832
                },
                {
                  "player_name": "Simon Lüchinger",
                  "ranking": 15833
                },
                {
                  "player_name": "Jan-Niklas Beste",
                  "ranking": 15834
                },
                {
                  "player_name": "Marco Friedl",
                  "ranking": 15835
                }
              ]
            }
          }
        },
        "Paul Wanner": {
          "player_id": 1146018,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 10,
          "height": 186,
          "market_value": 18800000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0133,
            "assists": 0,
            "expected_goals": 0.1911,
            "rating": 80.0422,
            "minutes": 23,
            "total_pass": 11,
            "accurate_pass": 10,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_own_half_passes": 4,
            "accurate_own_half_passes": 4,
            "total_opp_half_passes": 7,
            "accurate_opp_half_passes": 5,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 14,
            "possession_lost": 1.5668,
            "dispossessed": 0.0,
            "duels_lost": 0,
            "aerial_won": 0,
            "aerial_lost": 1,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 1,
            "total_contest": 1,
            "won_contest": 1,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "goal_rate": 0.2611,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.1724,
            "ball_carries": 5,
            "total_progression": 13,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.531,
            "bench_expected_minutes": 22.69,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 72.0
          },
          "latest_10_games": [
            {
              "match_id": 14028530,
              "match_date": "2026-05-17",
              "home_team": "PSV Eindhoven",
              "away_team": "FC Twente",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "PSV Eindhoven",
              "opponent": "FC Twente",
              "stats": {
                "minutes": 90,
                "rating": 7.9,
                "assists": 0,
                "expected_goals": 0.6743,
                "expected_assists": 0.0359,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 39,
                "accurate_pass": 32,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 3,
                "aerial_won": 1,
                "duels_won": 7,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "VriendenLoterij Eredivisie",
              "league_id": "37",
              "league_slug": "eredivisie",
              "league_country": "Netherlands",
              "season_id": "77012",
              "season_name": "VriendenLoterij Eredivisie 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14028548,
              "match_date": "2026-05-10",
              "home_team": "Go Ahead Eagles",
              "away_team": "PSV Eindhoven",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "PSV Eindhoven",
              "opponent": "Go Ahead Eagles",
              "stats": {
                "minutes": 90,
                "rating": 8.3,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 1,
                "expected_goals": 0.3662,
                "expected_assists": 0.0915,
                "total_shots": 3,
                "shots_on_target": 1,
                "total_pass": 44,
                "accurate_pass": 41,
                "key_pass": 3,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "VriendenLoterij Eredivisie",
              "league_id": "37",
              "league_slug": "eredivisie",
              "league_country": "Netherlands",
              "season_id": "77012",
              "season_name": "VriendenLoterij Eredivisie 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 17603,
            "combined_rank_score": 2129.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 4164.0,
            "fifa_overall": 72.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 5,
            "squad_role": "substitute",
            "projected_match_rating": 8.0422,
            "source_file": "data/player_rankings.csv",
            "player_name": "Paul Wanner",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Gonzalo Villar",
                  "ranking": 17598
                },
                {
                  "player_name": "Pedro Gallese",
                  "ranking": 17599
                },
                {
                  "player_name": "Karl Darlow",
                  "ranking": 17600
                },
                {
                  "player_name": "Thibault De Smet",
                  "ranking": 17601
                },
                {
                  "player_name": "Steven Moreira",
                  "ranking": 17602
                }
              ],
              "lower": [
                {
                  "player_name": "Bruno Nazario",
                  "ranking": 17604
                },
                {
                  "player_name": "Aarón",
                  "ranking": 17605
                },
                {
                  "player_name": "Jordy Makengo",
                  "ranking": 17606
                },
                {
                  "player_name": "Bobby De Cordova-Reid",
                  "ranking": 17607
                },
                {
                  "player_name": "Junior Mwanga",
                  "ranking": 17608
                }
              ]
            }
          }
        },
        "Nikolaus Wurmbrand": {
          "player_id": 1897251,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 22,
          "height": 173,
          "market_value": 5300000,
          "stats": {
            "expected_goals": 0.0006,
            "goal_rate": 0.0001,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0064,
            "key_pass": 0,
            "rating": 70.4643,
            "minutes": 25,
            "total_shots": 0,
            "duels_won": 1,
            "aerial_won": 0,
            "total_pass": 3,
            "accurate_pass": 2,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 2,
            "accurate_opp_half_passes": 1,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 7,
            "possession_lost": 3.4923,
            "dispossessed": 1.9795,
            "duels_lost": 1,
            "aerial_lost": 1,
            "total_contest": 1,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 2,
            "fouls": 1,
            "fouls_drawn": 1,
            "assists": 0,
            "shots_off_target": 0,
            "interceptions": 0,
            "tackles_won": 1,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0084,
            "offsides": 0,
            "ball_carries": 4,
            "total_progression": 20,
            "progressive_carries": 1,
            "bench_appearance_probability": 0.564,
            "bench_expected_minutes": 25.4,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 64.0
          },
          "latest_10_games": [
            {
              "match_id": 16206946,
              "match_date": "2026-05-25",
              "home_team": "SK Rapid Wien",
              "away_team": "SV Ried",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "SK Rapid Wien",
              "opponent": "SV Ried",
              "stats": {
                "minutes": 90,
                "rating": 7.7,
                "assists": 0,
                "expected_goals": 0.175,
                "expected_assists": 0.4094,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 2,
                "total_pass": 22,
                "accurate_pass": 17,
                "key_pass": 2,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 16206918,
              "match_date": "2026-05-22",
              "home_team": "SV Ried",
              "away_team": "SK Rapid Wien",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "SK Rapid Wien",
              "opponent": "SV Ried",
              "stats": {
                "minutes": 71,
                "rating": 6.5,
                "assists": 0,
                "expected_goals": 0.044,
                "expected_assists": 0.0514,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 17,
                "accurate_pass": 8,
                "key_pass": 1,
                "tackles": 1,
                "interceptions": 1,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690642,
              "match_date": "2026-05-17",
              "home_team": "SK Sturm Graz",
              "away_team": "SK Rapid Wien",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "SK Rapid Wien",
              "opponent": "SK Sturm Graz",
              "stats": {
                "minutes": 60,
                "rating": 6.8,
                "assists": 0,
                "expected_goals": 0.0972,
                "expected_assists": 0.0353,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 8,
                "accurate_pass": 4,
                "interceptions": 1,
                "clearances": 2,
                "duels_won": 2,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690638,
              "match_date": "2026-05-10",
              "home_team": "SK Rapid Wien",
              "away_team": "FK Austria Wien",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "SK Rapid Wien",
              "opponent": "FK Austria Wien",
              "stats": {
                "minutes": 65,
                "rating": 7.1,
                "assists": 0,
                "expected_goals": 0.079,
                "expected_assists": 0.0182,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 18,
                "accurate_pass": 9,
                "tackles": 2,
                "tackles_won": 2,
                "clearances": 2,
                "aerial_won": 2,
                "duels_won": 6,
                "ball_recovery": 5
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690643,
              "match_date": "2026-05-04",
              "home_team": "LASK",
              "away_team": "SK Rapid Wien",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "SK Rapid Wien",
              "opponent": "LASK",
              "stats": {
                "minutes": 19,
                "rating": 6.4,
                "assists": 0,
                "expected_assists": 0.0028,
                "total_shots": 0,
                "total_pass": 4,
                "accurate_pass": 4
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690645,
              "match_date": "2026-04-26",
              "home_team": "SK Rapid Wien",
              "away_team": "Red Bull Salzburg",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "SK Rapid Wien",
              "opponent": "Red Bull Salzburg",
              "stats": {
                "minutes": 39,
                "rating": 6.8,
                "assists": 0,
                "expected_assists": 0.0013,
                "total_shots": 0,
                "total_pass": 8,
                "accurate_pass": 7,
                "interceptions": 2,
                "clearances": 1,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15690633,
              "match_date": "2026-04-22",
              "home_team": "SK Rapid Wien",
              "away_team": "TSV Hartberg",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "SK Rapid Wien",
              "opponent": "TSV Hartberg",
              "stats": {
                "minutes": 70,
                "rating": 7.0,
                "assists": 0,
                "expected_goals": 0.1524,
                "expected_assists": 0.1971,
                "total_shots": 3,
                "shots_off_target": 1,
                "total_pass": 15,
                "accurate_pass": 9,
                "key_pass": 1,
                "interceptions": 1,
                "aerial_won": 1,
                "duels_won": 6,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "Austrian Bundesliga",
              "league_id": "45",
              "league_slug": "bundesliga",
              "league_country": "Austria",
              "season_id": "77382",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 21971,
            "combined_rank_score": 5844.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 8.0,
            "sofascore_rating": 8.4,
            "sofascore_appearances": 2.0,
            "fifa_rank": 11681.0,
            "fifa_overall": 64.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 12,
            "squad_role": "substitute",
            "projected_match_rating": 6.4643,
            "source_file": "data/player_rankings.csv",
            "player_name": "Nikolaus Wurmbrand",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Martin Kreuzriegler",
                  "ranking": 21966
                },
                {
                  "player_name": "Richard Torales",
                  "ranking": 21967
                },
                {
                  "player_name": "Mohammed Al Fatil",
                  "ranking": 21968
                },
                {
                  "player_name": "Jair",
                  "ranking": 21969
                },
                {
                  "player_name": "Alkain",
                  "ranking": 21970
                }
              ],
              "lower": [
                {
                  "player_name": "Loïc Williams",
                  "ranking": 21972
                },
                {
                  "player_name": "Péter Baráth",
                  "ranking": 21973
                },
                {
                  "player_name": "Michał Helik",
                  "ranking": 21974
                },
                {
                  "player_name": "Lim Jong Eun",
                  "ranking": 21975
                },
                {
                  "player_name": "Zak Vyner",
                  "ranking": 21976
                }
              ]
            }
          }
        },
        "Marco Grüll": {
          "player_id": 815612,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 17,
          "height": 182,
          "market_value": 4300000,
          "stats": {
            "expected_goals": 0.0344,
            "goal_rate": 0.0002,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0154,
            "key_pass": 0,
            "rating": 81.4838,
            "minutes": 25,
            "total_shots": 0,
            "duels_won": 1,
            "aerial_won": 0,
            "total_pass": 3,
            "accurate_pass": 3,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_opp_half_passes": 2,
            "accurate_opp_half_passes": 3,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 7,
            "possession_lost": 1.7585,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_lost": 1,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 2,
            "fouls": 0,
            "fouls_drawn": 0,
            "assists": 0,
            "shots_off_target": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0139,
            "offsides": 1,
            "ball_carries": 2,
            "total_progression": 18,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.562,
            "bench_expected_minutes": 25.36,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 14065561,
              "match_date": "2026-05-16",
              "home_team": "SV Werder Bremen",
              "away_team": "Borussia Dortmund",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "SV Werder Bremen",
              "opponent": "Borussia Dortmund",
              "stats": {
                "minutes": 37,
                "rating": 7.1,
                "assists": 0,
                "expected_goals": 0.0208,
                "expected_assists": 0.1231,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 25,
                "accurate_pass": 22,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 1,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065252,
              "match_date": "2026-05-09",
              "home_team": "TSG Hoffenheim",
              "away_team": "SV Werder Bremen",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "SV Werder Bremen",
              "opponent": "TSG Hoffenheim",
              "stats": {
                "minutes": 19,
                "rating": 6.7,
                "assists": 0,
                "expected_goals": 0.1906,
                "expected_assists": 0.0,
                "total_shots": 1,
                "total_pass": 4,
                "accurate_pass": 1,
                "tackles": 1,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14065241,
              "match_date": "2026-05-02",
              "home_team": "SV Werder Bremen",
              "away_team": "FC Augsburg",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "SV Werder Bremen",
              "opponent": "FC Augsburg",
              "stats": {
                "minutes": 11,
                "rating": 6.5,
                "assists": 0,
                "expected_goals": 0.0292,
                "expected_assists": 0.04,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 7,
                "accurate_pass": 7
              },
              "has_player_stats": true,
              "league_name": "Bundesliga",
              "league_id": "35",
              "league_slug": "bundesliga",
              "league_country": "Germany",
              "season_id": "77333",
              "season_name": "Bundesliga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 16628,
            "combined_rank_score": 1357.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 532.0,
            "sofascore_rating": 6.8,
            "sofascore_appearances": 2.0,
            "fifa_rank": 2182.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 13,
            "squad_role": "substitute",
            "projected_match_rating": 6.4838,
            "source_file": "data/player_rankings.csv",
            "player_name": "Marco Grüll",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Hugo Bueno",
                  "ranking": 16623
                },
                {
                  "player_name": "Santi Cazorla",
                  "ranking": 16624
                },
                {
                  "player_name": "Leandro Lozano",
                  "ranking": 16625
                },
                {
                  "player_name": "Christopher Operi",
                  "ranking": 16626
                },
                {
                  "player_name": "Glen Kamara",
                  "ranking": 16627
                }
              ],
              "lower": [
                {
                  "player_name": "Vítor Carvalho",
                  "ranking": 16629
                },
                {
                  "player_name": "James Justin",
                  "ranking": 16630
                },
                {
                  "player_name": "Allahyar Sayyadmanesh",
                  "ranking": 16631
                },
                {
                  "player_name": "Ricardo Pepi",
                  "ranking": 16632
                },
                {
                  "player_name": "Qazim Laci",
                  "ranking": 16633
                }
              ]
            }
          }
        }
      },
      "team_totals": {
        "projected_goals": 1,
        "expected_goals": 1.84,
        "expected_assists": 0.74,
        "total_shots": 13,
        "shots_on_target": 5,
        "total_passes": 457,
        "interceptions": 5,
        "tackles": 16,
        "avg_rating": 86.13,
        "possession_estimated_pct": 52.8,
        "pressing_actions_per_90": 7.4
      }
    },
    "Jordan": {
      "formation": "3-4-3",
      "players": {
        "Odeh Fakhoury": {
          "player_id": 1937497,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 11,
          "height": 180,
          "market_value": 225000,
          "stats": {
            "expected_goals": 0.2825,
            "goal_rate": 0.0003,
            "goals": 1,
            "shots_on_target": 0,
            "expected_assists": 0.0023,
            "key_pass": 0,
            "rating": 86.4489,
            "minutes": 17,
            "total_shots": 2,
            "duels_won": 1,
            "aerial_won": 1,
            "total_pass": 4,
            "accurate_pass": 4,
            "total_long_balls": 1,
            "accurate_long_balls": 1,
            "total_opp_half_passes": 2,
            "accurate_opp_half_passes": 2,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 8,
            "possession_lost": 1.9625,
            "dispossessed": 0.9812,
            "duels_lost": 1,
            "aerial_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 0,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 1,
            "assists": 0,
            "shots_off_target": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "offsides": 0,
            "ball_carries": 1,
            "total_progression": 7,
            "progressive_carries": 0,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.6,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.362,
            "pressing_faced": "LOW",
            "matchup_zone": "Shadow Striker vs Centre Back — Half-Space Threat",
            "numerical_situation": "1v1",
            "opponent_defenders": "Philipp Lienhart",
            "opponent_faced": "Philipp Lienhart",
            "antagonist_source": "attacking_duel",
            "projected_goals": 1,
            "goal_probability": 0.2067,
            "projected_assists": 0,
            "assist_probability": 0.012,
            "fifa_overall": 80.0
          },
          "latest_10_games": [
            {
              "match_id": 16150283,
              "match_date": "2026-05-20",
              "home_team": "Pyramids FC",
              "away_team": "Smouha",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "Pyramids FC",
              "opponent": "Smouha",
              "stats": {
                "minutes": 17,
                "rating": 6.6,
                "assists": 0,
                "expected_assists": 0.002,
                "total_shots": 0,
                "total_pass": 4,
                "accurate_pass": 4,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "Egyptian Premier League",
              "league_id": "808",
              "league_slug": "premier-league",
              "league_country": "Egypt",
              "season_id": "79317",
              "season_name": "Premier League 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 6210,
            "combined_rank_score": 540.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 671.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 17,
            "squad_role": "starter",
            "projected_match_rating": 6.4489,
            "source_file": "data/player_rankings.csv",
            "player_name": "Odeh Fakhoury",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Mohamed El Sayed",
                  "ranking": 6205
                },
                {
                  "player_name": "Sergio Mosquera",
                  "ranking": 6206
                },
                {
                  "player_name": "Kendall Porras",
                  "ranking": 6207
                },
                {
                  "player_name": "Mauro Martín",
                  "ranking": 6208
                },
                {
                  "player_name": "Steven Bergwijn",
                  "ranking": 6209
                }
              ],
              "lower": [
                {
                  "player_name": "Wisdom Aondowase Sule",
                  "ranking": 6211
                },
                {
                  "player_name": "Dániel Gyollai",
                  "ranking": 6212
                },
                {
                  "player_name": "Ovidio Lopez",
                  "ranking": 6213
                },
                {
                  "player_name": "Harrison Paton",
                  "ranking": 6214
                },
                {
                  "player_name": "Bilal Soufi",
                  "ranking": 6215
                }
              ]
            }
          }
        },
        "Ali Olwan": {
          "player_id": 980728,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 9,
          "height": 180,
          "market_value": 825000,
          "stats": {
            "expected_goals": 0.1493,
            "goal_rate": 0.0,
            "goals": 0,
            "shots_on_target": 1,
            "total_shots": 2,
            "rating": 89.6724,
            "minutes": 90,
            "expected_assists": 0.0491,
            "duels_won": 3,
            "aerial_won": 2,
            "key_pass": 0,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.3,
            "fouls_drawn": 1,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.18,
            "pressing_faced": "MEDIUM",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "numerical_situation": "1v2",
            "opponent_defenders": "Philipp Lienhart, Konrad Laimer",
            "opponent_faced": "Philipp Lienhart, Konrad Laimer",
            "antagonist_source": "attacking_duel",
            "projected_goals": 0,
            "goal_probability": 0.172,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0348,
            "fifa_overall": 83.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 2124,
            "combined_rank_score": 290.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 290.0,
            "fifa_overall": 83.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 3,
            "squad_role": "starter",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Ali Olwan",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Mohamed Reda",
                  "ranking": 2119
                },
                {
                  "player_name": "Baptiste Roux",
                  "ranking": 2120
                },
                {
                  "player_name": "Diego Medina",
                  "ranking": 2121
                },
                {
                  "player_name": "Danylo Varakuta",
                  "ranking": 2122
                },
                {
                  "player_name": "Nick Shinton",
                  "ranking": 2123
                }
              ],
              "lower": [
                {
                  "player_name": "DeAndre Yedlin",
                  "ranking": 2125
                },
                {
                  "player_name": "Amjad Attwan",
                  "ranking": 2126
                },
                {
                  "player_name": "Artur Gajdoš",
                  "ranking": 2127
                },
                {
                  "player_name": "Stefan Ranđelović",
                  "ranking": 2128
                },
                {
                  "player_name": "Frane Maglica",
                  "ranking": 2129
                }
              ]
            }
          }
        },
        "Mousa Tamari": {
          "player_id": 876600,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 10,
          "height": 175,
          "market_value": 10800000,
          "stats": {
            "expected_goals": 0.2388,
            "goal_rate": 0.0003,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0957,
            "key_pass": 1,
            "rating": 90.6259,
            "minutes": 91,
            "total_shots": 2,
            "duels_won": 3,
            "aerial_won": 1,
            "total_pass": 26,
            "accurate_pass": 20,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 19,
            "accurate_opp_half_passes": 15,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 38,
            "possession_lost": 11.105,
            "dispossessed": 0.0,
            "duels_lost": 4,
            "aerial_lost": 0,
            "total_contest": 3,
            "won_contest": 0,
            "ball_recovery": 6,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 0,
            "assists": 0,
            "shots_off_target": 2,
            "interceptions": 1,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "offsides": 0,
            "ball_carries": 15,
            "total_progression": 57,
            "progressive_carries": 2,
            "dribbles_attempted": 3,
            "dribbles_successful": 1.1,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.4,
            "pressing_faced": "LOW",
            "matchup_zone": "Shadow Striker vs Centre Back — Half-Space Threat",
            "numerical_situation": "1v1",
            "opponent_defenders": "Philipp Lienhart",
            "opponent_faced": "Philipp Lienhart",
            "antagonist_source": "attacking_duel",
            "projected_goals": 0,
            "goal_probability": 0.1916,
            "projected_assists": 0,
            "assist_probability": 0.1286,
            "fifa_overall": 84.0
          },
          "latest_10_games": [
            {
              "match_id": 14061907,
              "match_date": "2026-05-17",
              "home_team": "Olympique de Marseille",
              "away_team": "Stade Rennais",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Stade Rennais",
              "opponent": "Olympique de Marseille",
              "stats": {
                "minutes": 67,
                "rating": 6.7,
                "assists": 0,
                "expected_goals": 0.2861,
                "expected_assists": 0.4219,
                "total_shots": 5,
                "shots_on_target": 1,
                "shots_off_target": 3,
                "total_pass": 20,
                "accurate_pass": 16,
                "key_pass": 1,
                "tackles": 2,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "Ligue 1",
              "league_id": "34",
              "league_slug": "ligue-1",
              "league_country": "France",
              "season_id": "77356",
              "season_name": "Ligue 1 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14064513,
              "match_date": "2026-05-10",
              "home_team": "Stade Rennais",
              "away_team": "Paris FC",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Stade Rennais",
              "opponent": "Paris FC",
              "stats": {
                "minutes": 90,
                "rating": 6.7,
                "assists": 0,
                "expected_goals": 0.1487,
                "expected_assists": 0.0989,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 26,
                "accurate_pass": 20,
                "key_pass": 1,
                "interceptions": 1,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "Ligue 1",
              "league_id": "34",
              "league_slug": "ligue-1",
              "league_country": "France",
              "season_id": "77356",
              "season_name": "Ligue 1 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14167989,
              "match_date": "2026-05-03",
              "home_team": "Olympique Lyonnais",
              "away_team": "Stade Rennais",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Stade Rennais",
              "opponent": "Olympique Lyonnais",
              "stats": {
                "minutes": 87,
                "rating": 7.5,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 1,
                "expected_goals": 0.0316,
                "expected_assists": 0.0814,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 9,
                "accurate_pass": 6,
                "key_pass": 2,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "Ligue 1",
              "league_id": "34",
              "league_slug": "ligue-1",
              "league_country": "France",
              "season_id": "77356",
              "season_name": "Ligue 1 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 280,
            "combined_rank_score": 184.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 201.0,
            "fifa_overall": 84.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 1,
            "squad_role": "starter",
            "projected_match_rating": 6.6259,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mousa Tamari",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Alan Medina",
                  "ranking": 275
                },
                {
                  "player_name": "Joaquín Moya",
                  "ranking": 276
                },
                {
                  "player_name": "Ayoube Amaimouni Echghouyab",
                  "ranking": 277
                },
                {
                  "player_name": "Sancet",
                  "ranking": 278
                },
                {
                  "player_name": "Xavi Simons",
                  "ranking": 279
                }
              ],
              "lower": [
                {
                  "player_name": "Eldor Adhamov",
                  "ranking": 281
                },
                {
                  "player_name": "Allan Saint-Maximin",
                  "ranking": 282
                },
                {
                  "player_name": "Luciano Juba",
                  "ranking": 283
                },
                {
                  "player_name": "Robert Renan",
                  "ranking": 284
                },
                {
                  "player_name": "Marcel Ruíz",
                  "ranking": 285
                }
              ]
            }
          }
        },
        "Mohannad Abu Taha": {
          "player_id": 1114775,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 20,
          "height": 176,
          "market_value": 535000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0981,
            "assists": 1,
            "expected_goals": 0.0772,
            "rating": 87.6724,
            "minutes": 90,
            "total_pass": 45,
            "accurate_pass": 36,
            "ball_recovery": 3,
            "duels_won": 4,
            "total_shots": 2,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.7,
            "aerial_won": 1,
            "fouls_drawn": 1,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.414,
            "pressing_faced": "LOW",
            "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
            "numerical_situation": "1v1",
            "opponent_defenders": "Marcel Sabitzer",
            "opponent_faced": "Marcel Sabitzer",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0511,
            "projected_assists": 1,
            "assist_probability": 0.2213,
            "fifa_overall": 81.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3698,
            "combined_rank_score": 465.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 563.0,
            "fifa_overall": 81.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 5,
            "squad_role": "starter",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mohannad Abu Taha",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Luciano Paredes",
                  "ranking": 3693
                },
                {
                  "player_name": "Julian Ceballos",
                  "ranking": 3694
                },
                {
                  "player_name": "Shuhei Tokumoto",
                  "ranking": 3695
                },
                {
                  "player_name": "Simon Banza",
                  "ranking": 3696
                },
                {
                  "player_name": "Ramazan Orazov",
                  "ranking": 3697
                }
              ],
              "lower": [
                {
                  "player_name": "Fahad Talib",
                  "ranking": 3699
                },
                {
                  "player_name": "Mohammad Ali Hasheesh",
                  "ranking": 3700
                },
                {
                  "player_name": "Ricardo Phillips",
                  "ranking": 3701
                },
                {
                  "player_name": "Aleks Bozhev",
                  "ranking": 3702
                },
                {
                  "player_name": "Lucas Taylor",
                  "ranking": 3703
                }
              ]
            }
          }
        },
        "Nizar Al-Rashdan": {
          "player_id": 1014324,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 21,
          "height": 185,
          "market_value": 620000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0,
            "assists": 0,
            "expected_goals": 0.0,
            "rating": 89.7638,
            "minutes": 86,
            "total_pass": 41,
            "accurate_pass": 34,
            "ball_recovery": 7,
            "duels_won": 5,
            "total_shots": 2,
            "total_long_balls": 6,
            "accurate_long_balls": 4,
            "total_own_half_passes": 13,
            "accurate_own_half_passes": 10,
            "total_opp_half_passes": 29,
            "accurate_opp_half_passes": 24,
            "crosses_total": 2,
            "crosses_accurate": 1,
            "touches": 55,
            "possession_lost": 11.7747,
            "dispossessed": 0.9812,
            "duels_lost": 5,
            "aerial_won": 1,
            "aerial_lost": 2,
            "interceptions": 2,
            "tackles_won": 2,
            "tackles": 3,
            "clearances": 1,
            "total_contest": 2,
            "won_contest": 1,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 1,
            "blocks": 0,
            "big_chances_created": 1,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 26,
            "total_progression": 85,
            "progressive_carries": 4,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.8,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.451,
            "pressing_faced": "LOW",
            "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
            "numerical_situation": "1v1",
            "opponent_defenders": "Marcel Sabitzer",
            "opponent_faced": "Marcel Sabitzer",
            "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing",
            "projected_goals": 0,
            "goal_probability": 0.0352,
            "projected_assists": 0,
            "assist_probability": 0.1373,
            "fifa_overall": 83.0
          },
          "latest_10_games": [
            {
              "match_id": 15603929,
              "match_date": "2026-04-27",
              "home_team": "Qatar SC",
              "away_team": "Al Duhail",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Qatar SC",
              "opponent": "Al Duhail",
              "stats": {
                "minutes": 82,
                "rating": 6.5,
                "assists": 0,
                "total_shots": 3,
                "shots_off_target": 1,
                "total_pass": 25,
                "accurate_pass": 19,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 3,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "Stars League",
              "league_id": "825",
              "league_slug": "stars-league",
              "league_country": "Qatar",
              "season_id": "77227",
              "season_name": "Stars League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15603916,
              "match_date": "2026-04-08",
              "home_team": "Al-Arabi SC",
              "away_team": "Qatar SC",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Qatar SC",
              "opponent": "Al-Arabi SC",
              "stats": {
                "minutes": 90,
                "rating": 7.6,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 38,
                "accurate_pass": 31,
                "key_pass": 3,
                "tackles": 4,
                "tackles_won": 3,
                "interceptions": 3,
                "clearances": 1,
                "aerial_won": 1,
                "duels_won": 6,
                "ball_recovery": 8
              },
              "has_player_stats": true,
              "league_name": "Stars League",
              "league_id": "825",
              "league_slug": "stars-league",
              "league_country": "Qatar",
              "season_id": "77227",
              "season_name": "Stars League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15896915,
              "match_date": "2026-04-03",
              "home_team": "Qatar SC",
              "away_team": "Al-Wakrah",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Qatar SC",
              "opponent": "Al-Wakrah",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "assists": 1,
                "total_shots": 0,
                "total_pass": 53,
                "accurate_pass": 47,
                "key_pass": 1,
                "tackles": 3,
                "tackles_won": 1,
                "interceptions": 2,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "Stars League",
              "league_id": "825",
              "league_slug": "stars-league",
              "league_country": "Qatar",
              "season_id": "77227",
              "season_name": "Stars League 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 15603908,
              "match_date": "2026-03-18",
              "home_team": "Umm-Salal SC",
              "away_team": "Qatar SC",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Qatar SC",
              "opponent": "Umm-Salal SC",
              "stats": {
                "minutes": 90,
                "rating": 7.2,
                "assists": 0,
                "total_shots": 1,
                "total_pass": 53,
                "accurate_pass": 41,
                "key_pass": 1,
                "tackles": 3,
                "tackles_won": 2,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 7,
                "ball_recovery": 9
              },
              "has_player_stats": true,
              "league_name": "Stars League",
              "league_id": "825",
              "league_slug": "stars-league",
              "league_country": "Qatar",
              "season_id": "77227",
              "season_name": "Stars League 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 2796,
            "combined_rank_score": 320.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 308.0,
            "fifa_overall": 83.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 4,
            "squad_role": "starter",
            "projected_match_rating": 6.7638,
            "source_file": "data/player_rankings.csv",
            "player_name": "Nizar Mahmoud Al-Rashdan",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Isaac Matondo",
                  "ranking": 2791
                },
                {
                  "player_name": "Bernard",
                  "ranking": 2792
                },
                {
                  "player_name": "Zinédine Machach",
                  "ranking": 2793
                },
                {
                  "player_name": "Matej Vuk",
                  "ranking": 2794
                },
                {
                  "player_name": "Gijs Besselink",
                  "ranking": 2795
                }
              ],
              "lower": [
                {
                  "player_name": "Vitaliy Boyko",
                  "ranking": 2797
                },
                {
                  "player_name": "Ali Hamdy",
                  "ranking": 2798
                },
                {
                  "player_name": "Uroš Ignjatović",
                  "ranking": 2799
                },
                {
                  "player_name": "Maicol Ferreira",
                  "ranking": 2800
                },
                {
                  "player_name": "Yago Pikachu",
                  "ranking": 2801
                }
              ]
            }
          }
        },
        "Noor Al-Deen Al Rawabdeh": {
          "player_id": 927845,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 8,
          "height": 179,
          "market_value": 455000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0981,
            "assists": 0,
            "expected_goals": 0.0772,
            "rating": 86.6724,
            "minutes": 90,
            "total_pass": 45,
            "accurate_pass": 36,
            "ball_recovery": 3,
            "duels_won": 4,
            "total_shots": 1,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.7,
            "aerial_won": 1,
            "fouls_drawn": 1,
            "crosses_attempted": 2.1,
            "duel_win_rate": 0.383,
            "pressing_faced": "LOW",
            "matchup_zone": "Left Wingback vs Right Back — Overlapping Run",
            "numerical_situation": "1v1",
            "opponent_defenders": "David Alaba",
            "opponent_faced": "David Alaba",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0429,
            "projected_assists": 0,
            "assist_probability": 0.2213,
            "fifa_overall": 80.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3991,
            "combined_rank_score": 476.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 580.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 6,
            "squad_role": "starter",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Noor Al-Deen Al Rawabdeh",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Deiber Vásquez",
                  "ranking": 3986
                },
                {
                  "player_name": "Mido Mostafa",
                  "ranking": 3987
                },
                {
                  "player_name": "Dani Meso",
                  "ranking": 3988
                },
                {
                  "player_name": "Dyogo Alves",
                  "ranking": 3989
                },
                {
                  "player_name": "Mateus Jose Iseppe",
                  "ranking": 3990
                }
              ],
              "lower": [
                {
                  "player_name": "Iyayi Believe Atiemwen",
                  "ranking": 3992
                },
                {
                  "player_name": "Seymour Garfield-Reid",
                  "ranking": 3993
                },
                {
                  "player_name": "Taieb Ben Zitoun",
                  "ranking": 3994
                },
                {
                  "player_name": "Jurien Gaari",
                  "ranking": 3995
                },
                {
                  "player_name": "Prins Menelik Tjiueza",
                  "ranking": 3996
                }
              ]
            }
          }
        },
        "Ehsan Haddad": {
          "player_id": 812997,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 23,
          "height": 180,
          "market_value": 290000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0981,
            "assists": 0,
            "expected_goals": 0.0772,
            "rating": 88.6724,
            "minutes": 90,
            "total_pass": 45,
            "accurate_pass": 36,
            "ball_recovery": 3,
            "duels_won": 4,
            "total_shots": 1,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.6,
            "aerial_won": 1,
            "fouls_drawn": 1,
            "crosses_attempted": 2.1,
            "duel_win_rate": 0.335,
            "pressing_faced": "LOW",
            "matchup_zone": "Right Wingback vs Left Back — Overlapping Run",
            "numerical_situation": "1v1",
            "opponent_defenders": "Stefan Posch",
            "opponent_faced": "Stefan Posch",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0429,
            "projected_assists": 0,
            "assist_probability": 0.2213,
            "fifa_overall": 82.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 4631,
            "combined_rank_score": 387.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 388.0,
            "fifa_overall": 82.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 14,
            "squad_role": "starter",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Ehsan Haddad",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Kyeong-min Kim",
                  "ranking": 4626
                },
                {
                  "player_name": "Cristhian Loor",
                  "ranking": 4627
                },
                {
                  "player_name": "Paul Reverson",
                  "ranking": 4628
                },
                {
                  "player_name": "Néstor Araujo",
                  "ranking": 4629
                },
                {
                  "player_name": "Harold Santiago Mosquera",
                  "ranking": 4630
                }
              ],
              "lower": [
                {
                  "player_name": "Joseth Peraza",
                  "ranking": 4632
                },
                {
                  "player_name": "Juan Ruiz Gómez",
                  "ranking": 4633
                },
                {
                  "player_name": "Jackson Travis",
                  "ranking": 4634
                },
                {
                  "player_name": "Nanasei Iino",
                  "ranking": 4635
                },
                {
                  "player_name": "Daiki Miya",
                  "ranking": 4636
                }
              ]
            }
          }
        },
        "Saleem Obaid": {
          "player_id": 980664,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 17,
          "height": 181,
          "market_value": 97000,
          "stats": {
            "interceptions": 1,
            "tackles": 2,
            "tackles_won": 1,
            "clearances": 3,
            "aerial_won": 2,
            "duels_won": 4,
            "rating": 86.5742,
            "minutes": 90,
            "total_pass": 40,
            "accurate_pass": 32,
            "tackles_in_zone": 1.9,
            "tackles_won_in_zone": 1.6,
            "interceptions_in_zone": 0.6,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.556,
            "opponent_faced": "Xaver Schlager",
            "pressing_zone": "LW vs CB",
            "matchup_zone": "LW vs CB",
            "antagonist_source": "defensive_duel",
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0284,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0077,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 8799,
            "combined_rank_score": 562.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 693.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 18,
            "squad_role": "starter",
            "projected_match_rating": 6.5742,
            "source_file": "data/player_rankings.csv",
            "player_name": "Saleem Obaid",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Matteo Pittarella",
                  "ranking": 8794
                },
                {
                  "player_name": "Jaime Ayoví",
                  "ranking": 8795
                },
                {
                  "player_name": "Erick Zambrano",
                  "ranking": 8796
                },
                {
                  "player_name": "Miguel Ramírez",
                  "ranking": 8797
                },
                {
                  "player_name": "Jin Hyeon Kim",
                  "ranking": 8798
                }
              ],
              "lower": [
                {
                  "player_name": "Jody Ah Shene",
                  "ranking": 8800
                },
                {
                  "player_name": "Martín Ballesteros",
                  "ranking": 8801
                },
                {
                  "player_name": "Burhan Ersoy",
                  "ranking": 8802
                },
                {
                  "player_name": "Sospeter Bajana",
                  "ranking": 8803
                },
                {
                  "player_name": "Denis Pintol",
                  "ranking": 8804
                }
              ]
            }
          }
        },
        "Abdallah Nasib": {
          "player_id": 1114497,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 3,
          "height": 185,
          "market_value": 360000,
          "stats": {
            "interceptions": 1,
            "tackles": 2,
            "tackles_won": 1,
            "clearances": 3,
            "aerial_won": 2,
            "duels_won": 4,
            "rating": 86.5742,
            "minutes": 90,
            "total_pass": 40,
            "accurate_pass": 32,
            "tackles_in_zone": 0.9,
            "tackles_won_in_zone": 1.0,
            "interceptions_in_zone": 0.6,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.5,
            "defensive_success_rate": 0.752,
            "opponent_faced": "Michael Gregoritsch",
            "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",
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0332,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0077,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3653,
            "combined_rank_score": 496.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 626.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 13,
            "squad_role": "starter",
            "projected_match_rating": 6.5742,
            "source_file": "data/player_rankings.csv",
            "player_name": "Abdallah Nasib",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Hammam Al-Hammami",
                  "ranking": 3648
                },
                {
                  "player_name": "Valery Dubko",
                  "ranking": 3649
                },
                {
                  "player_name": "Jeremy Mejia",
                  "ranking": 3650
                },
                {
                  "player_name": "Jeison Lucumí",
                  "ranking": 3651
                },
                {
                  "player_name": "Žiga Repas",
                  "ranking": 3652
                }
              ],
              "lower": [
                {
                  "player_name": "Chiqueti",
                  "ranking": 3654
                },
                {
                  "player_name": "Eduardo Anderson",
                  "ranking": 3655
                },
                {
                  "player_name": "Luis Castillo",
                  "ranking": 3656
                },
                {
                  "player_name": "Piotr Zieliński",
                  "ranking": 3657
                },
                {
                  "player_name": "Jamal Musiala",
                  "ranking": 3658
                }
              ]
            }
          }
        },
        "Yazan Al-Arab": {
          "player_id": 888906,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 5,
          "height": 186,
          "market_value": 1000000,
          "stats": {
            "interceptions": 2,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 4,
            "aerial_won": 4,
            "rating": 81.4788,
            "minutes": 69,
            "total_pass": 42,
            "accurate_pass": 37,
            "duels_won": 5,
            "total_long_balls": 7,
            "accurate_long_balls": 3,
            "total_own_half_passes": 29,
            "accurate_own_half_passes": 27,
            "total_opp_half_passes": 12,
            "accurate_opp_half_passes": 9,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 53,
            "possession_lost": 5.8874,
            "dispossessed": 0.9812,
            "duels_lost": 2,
            "aerial_lost": 1,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 3,
            "challenges_lost": 0,
            "fouls": 1,
            "fouls_drawn": 2,
            "blocks": 0,
            "goal_rate": 0.9812,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "total_shots": 2,
            "shots_on_target": 2,
            "shots_off_target": 2,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 18,
            "total_progression": 35,
            "progressive_carries": 0,
            "key_pass": 0,
            "opponent_faced": "Marko Arnautović",
            "matchup_zone": "Shape fallback",
            "antagonist_source": "formation_fallback",
            "projected_goals": 0,
            "goal_probability": 0.1959,
            "projected_assists": 0,
            "assist_probability": 0.008,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 15373010,
              "match_date": "2026-05-16",
              "home_team": "Daejeon Hana Citizen",
              "away_team": "FC Seoul",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "FC Seoul",
              "opponent": "Daejeon Hana Citizen",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assists": 0,
                "total_shots": 1,
                "shots_on_target": 1,
                "total_pass": 53,
                "accurate_pass": 46,
                "interceptions": 3,
                "clearances": 6,
                "aerial_won": 5,
                "duels_won": 5,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "K League 1",
              "league_id": "410",
              "league_slug": "k-league-1",
              "league_country": "South Korea",
              "season_id": "88606",
              "season_name": "K-League 1 2026",
              "season_year": "2026"
            },
            {
              "match_id": 15372993,
              "match_date": "2026-05-05",
              "home_team": "FC Seoul",
              "away_team": "FC Anyang",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Seoul",
              "opponent": "FC Anyang",
              "stats": {
                "minutes": 36,
                "rating": 5.6,
                "assists": 0,
                "total_shots": 0,
                "total_pass": 23,
                "accurate_pass": 22,
                "tackles": 1,
                "tackles_won": 1,
                "clearances": 3,
                "duels_won": 1
              },
              "has_player_stats": true,
              "league_name": "K League 1",
              "league_id": "410",
              "league_slug": "k-league-1",
              "league_country": "South Korea",
              "season_id": "88606",
              "season_name": "K-League 1 2026",
              "season_year": "2026"
            },
            {
              "match_id": 15372973,
              "match_date": "2026-05-02",
              "home_team": "FC Seoul",
              "away_team": "Gimcheon Sangmu FC",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "FC Seoul",
              "opponent": "Gimcheon Sangmu FC",
              "stats": {
                "minutes": 85,
                "rating": 7.1,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 0,
                "total_shots": 5,
                "shots_on_target": 3,
                "shots_off_target": 2,
                "total_pass": 51,
                "accurate_pass": 45,
                "interceptions": 3,
                "clearances": 4,
                "aerial_won": 8,
                "duels_won": 10,
                "ball_recovery": 4
              },
              "has_player_stats": true,
              "league_name": "K League 1",
              "league_id": "410",
              "league_slug": "k-league-1",
              "league_country": "South Korea",
              "season_id": "88606",
              "season_name": "K-League 1 2026",
              "season_year": "2026"
            }
          ],
          "ranking": {
            "global_player_rank": 16564,
            "combined_rank_score": 1310.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 2361.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 2,
            "squad_role": "starter",
            "projected_match_rating": 6.4788,
            "source_file": "data/player_rankings.csv",
            "player_name": "Yazan Al-Arab",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Raúl Moro",
                  "ranking": 16559
                },
                {
                  "player_name": "Abel Bretones",
                  "ranking": 16560
                },
                {
                  "player_name": "Giuliano Galoppo",
                  "ranking": 16561
                },
                {
                  "player_name": "Miro Muheim",
                  "ranking": 16562
                },
                {
                  "player_name": "Niclas Eliasson",
                  "ranking": 16563
                }
              ],
              "lower": [
                {
                  "player_name": "Fabio Miretti",
                  "ranking": 16565
                },
                {
                  "player_name": "Yeimar Gómez",
                  "ranking": 16566
                },
                {
                  "player_name": "Pep Chavarría",
                  "ranking": 16567
                },
                {
                  "player_name": "David Affengruber",
                  "ranking": 16568
                },
                {
                  "player_name": "Daniele Rugani",
                  "ranking": 16569
                }
              ]
            }
          }
        },
        "Yazeed Abu Laila": {
          "player_id": 828294,
          "position": "G",
          "position_depth": "G",
          "is_starter": true,
          "shirt_number": 1,
          "height": 189,
          "market_value": 290000,
          "stats": {
            "saves": 3,
            "goals_prevented": 0.2944,
            "rating": 87.6724,
            "minutes": 90,
            "expected_saves": 1.5,
            "high_pressure_saves": 0.57,
            "shots_faced": 3.2,
            "opponent_faced": "Marko Arnautović, Romano Schmid",
            "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,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 81.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 5260,
            "combined_rank_score": 481.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 566.0,
            "fifa_overall": 81.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 15,
            "squad_role": "starter",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Yazeed Abu Laila",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Giannis Theodosoulakis",
                  "ranking": 5255
                },
                {
                  "player_name": "David Riegler",
                  "ranking": 5256
                },
                {
                  "player_name": "Keno",
                  "ranking": 5257
                },
                {
                  "player_name": "Mohammed Al-Owais",
                  "ranking": 5258
                },
                {
                  "player_name": "Ehsan Hajsafi",
                  "ranking": 5259
                }
              ],
              "lower": [
                {
                  "player_name": "Kevin Chamorro",
                  "ranking": 5261
                },
                {
                  "player_name": "Stefan Petrović",
                  "ranking": 5262
                },
                {
                  "player_name": "Panagiotis Tachtsidis",
                  "ranking": 5263
                },
                {
                  "player_name": "Malik Jakupovic",
                  "ranking": 5264
                },
                {
                  "player_name": "Angelos Neophytou",
                  "ranking": 5265
                }
              ]
            }
          }
        }
      },
      "bench_players": {
        "Noureddin Bani Ateyah": {
          "player_id": 828259,
          "position": "G",
          "position_depth": "G_BENCH",
          "is_starter": false,
          "shirt_number": 1,
          "height": 179,
          "market_value": 260000,
          "stats": {
            "saves": 0,
            "goals_prevented": 0.0144,
            "rating": 86.6724,
            "minutes": 4,
            "bench_appearance_probability": 0.109,
            "bench_expected_minutes": 4.39,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 5796,
            "combined_rank_score": 506.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 609.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 16,
            "squad_role": "substitute",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Noureddin Bani Ateyah",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Pico",
                  "ranking": 5791
                },
                {
                  "player_name": "Raed Chikhaoui",
                  "ranking": 5792
                },
                {
                  "player_name": "Ingars Pulis",
                  "ranking": 5793
                },
                {
                  "player_name": "Filip Holender",
                  "ranking": 5794
                },
                {
                  "player_name": "Didier La Torre",
                  "ranking": 5795
                }
              ],
              "lower": [
                {
                  "player_name": "Yandri Vasquez",
                  "ranking": 5797
                },
                {
                  "player_name": "Luka Posinkovic",
                  "ranking": 5798
                },
                {
                  "player_name": "Snayder Porozo",
                  "ranking": 5799
                },
                {
                  "player_name": "Gadiel Michael Kamagi",
                  "ranking": 5800
                },
                {
                  "player_name": "Stas Kornzeniowski",
                  "ranking": 5801
                }
              ]
            }
          }
        },
        "Mohammad Ali Hasheesh": {
          "player_id": 1139989,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 27,
          "height": 183,
          "market_value": 440000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 0,
            "aerial_won": 0,
            "duels_won": 1,
            "rating": 87.5742,
            "minutes": 14,
            "total_pass": 6,
            "accurate_pass": 5,
            "bench_appearance_probability": 0.299,
            "bench_expected_minutes": 13.57,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 81.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3700,
            "combined_rank_score": 465.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 563.0,
            "fifa_overall": 81.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 7,
            "squad_role": "substitute",
            "projected_match_rating": 6.5742,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mohammad Ali Hasheesh",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Shuhei Tokumoto",
                  "ranking": 3695
                },
                {
                  "player_name": "Simon Banza",
                  "ranking": 3696
                },
                {
                  "player_name": "Ramazan Orazov",
                  "ranking": 3697
                },
                {
                  "player_name": "Mohannad Abu Taha",
                  "ranking": 3698
                },
                {
                  "player_name": "Fahad Talib",
                  "ranking": 3699
                }
              ],
              "lower": [
                {
                  "player_name": "Ricardo Phillips",
                  "ranking": 3701
                },
                {
                  "player_name": "Aleks Bozhev",
                  "ranking": 3702
                },
                {
                  "player_name": "Lucas Taylor",
                  "ranking": 3703
                },
                {
                  "player_name": "Luis Moreno",
                  "ranking": 3704
                },
                {
                  "player_name": "D.J. Taylor",
                  "ranking": 3705
                }
              ]
            }
          }
        },
        "Saad Al Rousan": {
          "player_id": 920476,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 15,
          "height": 188,
          "market_value": 390000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 0,
            "aerial_won": 0,
            "duels_won": 1,
            "rating": 87.5742,
            "minutes": 14,
            "total_pass": 6,
            "accurate_pass": 5,
            "bench_appearance_probability": 0.299,
            "bench_expected_minutes": 13.57,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 81.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 4112,
            "combined_rank_score": 469.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 562.0,
            "fifa_overall": 81.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 11,
            "squad_role": "substitute",
            "projected_match_rating": 6.5742,
            "source_file": "data/player_rankings.csv",
            "player_name": "Saad Al Rousan",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Mahmoud Al-Mardi",
                  "ranking": 4107
                },
                {
                  "player_name": "Issam Al-Subhi",
                  "ranking": 4108
                },
                {
                  "player_name": "Davi Gomes",
                  "ranking": 4109
                },
                {
                  "player_name": "Leonardo Zabala",
                  "ranking": 4110
                },
                {
                  "player_name": "Thalisson Gabriel",
                  "ranking": 4111
                }
              ],
              "lower": [
                {
                  "player_name": "Edinson Mero",
                  "ranking": 4113
                },
                {
                  "player_name": "Giorgi Moistsrapishvili",
                  "ranking": 4114
                },
                {
                  "player_name": "Dinmukhamed Karaman",
                  "ranking": 4115
                },
                {
                  "player_name": "Manuel Mónaco",
                  "ranking": 4116
                },
                {
                  "player_name": "Ibrahim Tanko",
                  "ranking": 4117
                }
              ]
            }
          }
        },
        "Amer Jamous": {
          "player_id": 1019495,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 71,
          "height": 174,
          "market_value": 435000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0239,
            "assists": 0,
            "expected_goals": 0.0189,
            "rating": 86.6724,
            "minutes": 22,
            "total_pass": 11,
            "accurate_pass": 9,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 0,
            "bench_appearance_probability": 0.499,
            "bench_expected_minutes": 21.97,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3743,
            "combined_rank_score": 515.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 663.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 8,
            "squad_role": "substitute",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Amer Jamous",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Oskar Buur",
                  "ranking": 3738
                },
                {
                  "player_name": "Lucky Ezeh",
                  "ranking": 3739
                },
                {
                  "player_name": "Stanley Kanu",
                  "ranking": 3740
                },
                {
                  "player_name": "Lucas Suárez",
                  "ranking": 3741
                },
                {
                  "player_name": "Gubari Sherko",
                  "ranking": 3742
                }
              ],
              "lower": [
                {
                  "player_name": "Ed Carlos",
                  "ranking": 3744
                },
                {
                  "player_name": "Giorgio Puzzoli",
                  "ranking": 3745
                },
                {
                  "player_name": "Miloš Pantović",
                  "ranking": 3746
                },
                {
                  "player_name": "Đorđe Petrović",
                  "ranking": 3747
                },
                {
                  "player_name": "Antonio Sivera",
                  "ranking": 3748
                }
              ]
            }
          }
        },
        "Ibrahim Sadeh": {
          "player_id": 997817,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 0,
          "height": 174,
          "market_value": 415000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0239,
            "assists": 0,
            "expected_goals": 0.0189,
            "rating": 86.6724,
            "minutes": 22,
            "total_pass": 11,
            "accurate_pass": 9,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 0,
            "bench_appearance_probability": 0.499,
            "bench_expected_minutes": 21.97,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3906,
            "combined_rank_score": 531.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 691.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 9,
            "squad_role": "substitute",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Ibrahim Sadeh",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Carbone",
                  "ranking": 3901
                },
                {
                  "player_name": "Alessandro Burlamaqui",
                  "ranking": 3902
                },
                {
                  "player_name": "Amin Gröller",
                  "ranking": 3903
                },
                {
                  "player_name": "Ahmed Hasan Maknazi",
                  "ranking": 3904
                },
                {
                  "player_name": "Caio Roque",
                  "ranking": 3905
                }
              ],
              "lower": [
                {
                  "player_name": "Paul Charpentier",
                  "ranking": 3907
                },
                {
                  "player_name": "Julien Ngoy",
                  "ranking": 3908
                },
                {
                  "player_name": "Elkhan Astanov",
                  "ranking": 3909
                },
                {
                  "player_name": "Kevin Felida",
                  "ranking": 3910
                },
                {
                  "player_name": "Iker Undabarrena",
                  "ranking": 3911
                }
              ]
            }
          }
        },
        "Ibrahim Sabra": {
          "player_id": 1522038,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 9,
          "height": 183,
          "market_value": 365000,
          "stats": {
            "expected_goals": 0.0326,
            "goal_rate": 0.0001,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0257,
            "key_pass": 0,
            "rating": 86.3201,
            "minutes": 25,
            "total_shots": 0,
            "duels_won": 1,
            "aerial_won": 1,
            "total_pass": 2,
            "accurate_pass": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 2,
            "accurate_opp_half_passes": 1,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 4,
            "possession_lost": 2.4818,
            "dispossessed": 1.4718,
            "duels_lost": 1,
            "aerial_lost": 2,
            "total_contest": 0,
            "won_contest": 1,
            "ball_recovery": 0,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 0,
            "assists": 0,
            "shots_off_target": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.08,
            "offsides": 1,
            "ball_carries": 1,
            "total_progression": 3,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.559,
            "bench_expected_minutes": 25.29,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [
            {
              "match_id": 14023429,
              "match_date": "2026-05-16",
              "home_team": "NK Lokomotiva Zagreb",
              "away_team": "HNK Hajduk Split",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "NK Lokomotiva Zagreb",
              "opponent": "HNK Hajduk Split",
              "stats": {
                "minutes": 87,
                "rating": 7.4,
                "assists": 1,
                "expected_goals": 0.4653,
                "expected_assists": 0.3701,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 2,
                "total_pass": 15,
                "accurate_pass": 7,
                "key_pass": 2,
                "aerial_won": 7,
                "duels_won": 10
              },
              "has_player_stats": true,
              "league_name": "HNL",
              "league_id": "170",
              "league_slug": "hnl",
              "league_country": "Croatia",
              "season_id": "76980",
              "season_name": "HNL 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14023435,
              "match_date": "2026-05-09",
              "home_team": "NK Varaždin",
              "away_team": "NK Lokomotiva Zagreb",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "NK Lokomotiva Zagreb",
              "opponent": "NK Varaždin",
              "stats": {
                "minutes": 65,
                "rating": 6.0,
                "assists": 0,
                "expected_assists": 0.002,
                "total_shots": 0,
                "total_pass": 12,
                "accurate_pass": 7,
                "aerial_won": 2,
                "duels_won": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "HNL",
              "league_id": "170",
              "league_slug": "hnl",
              "league_country": "Croatia",
              "season_id": "76980",
              "season_name": "HNL 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14023412,
              "match_date": "2026-05-03",
              "home_team": "NK Lokomotiva Zagreb",
              "away_team": "HNK Rijeka",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "NK Lokomotiva Zagreb",
              "opponent": "HNK Rijeka",
              "stats": {
                "minutes": 29,
                "rating": 6.4,
                "assists": 0,
                "expected_assists": 0.0028,
                "total_shots": 0,
                "total_pass": 4,
                "accurate_pass": 2
              },
              "has_player_stats": true,
              "league_name": "HNL",
              "league_id": "170",
              "league_slug": "hnl",
              "league_country": "Croatia",
              "season_id": "76980",
              "season_name": "HNL 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14023433,
              "match_date": "2026-04-25",
              "home_team": "NK Osijek",
              "away_team": "NK Lokomotiva Zagreb",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "NK Lokomotiva Zagreb",
              "opponent": "NK Osijek",
              "stats": {
                "minutes": 14,
                "rating": 6.3,
                "assists": 0,
                "expected_goals": 0.0945,
                "expected_assists": 0.0062,
                "total_shots": 1,
                "total_pass": 1,
                "accurate_pass": 1,
                "aerial_won": 2,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "HNL",
              "league_id": "170",
              "league_slug": "hnl",
              "league_country": "Croatia",
              "season_id": "76980",
              "season_name": "HNL 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14023439,
              "match_date": "2026-04-21",
              "home_team": "NK Lokomotiva Zagreb",
              "away_team": "NK Slaven Belupo",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "NK Lokomotiva Zagreb",
              "opponent": "NK Slaven Belupo",
              "stats": {
                "minutes": 57,
                "rating": 6.1,
                "assists": 0,
                "expected_goals": 0.1379,
                "expected_assists": 0.0016,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 7,
                "accurate_pass": 6,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "HNL",
              "league_id": "170",
              "league_slug": "hnl",
              "league_country": "Croatia",
              "season_id": "76980",
              "season_name": "HNL 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 3628,
            "combined_rank_score": 495.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 626.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 12,
            "squad_role": "substitute",
            "projected_match_rating": 6.3201,
            "source_file": "data/player_rankings.csv",
            "player_name": "Ibrahim Sabra",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Islomzhon Kobilov",
                  "ranking": 3623
                },
                {
                  "player_name": "Athanasios Androutsos",
                  "ranking": 3624
                },
                {
                  "player_name": "Antonio Mance",
                  "ranking": 3625
                },
                {
                  "player_name": "Bruno Larregui",
                  "ranking": 3626
                },
                {
                  "player_name": "Youness Akharraz",
                  "ranking": 3627
                }
              ],
              "lower": [
                {
                  "player_name": "Luka Lijeskić",
                  "ranking": 3629
                },
                {
                  "player_name": "Patricio Tanda",
                  "ranking": 3630
                },
                {
                  "player_name": "Franko Kolić",
                  "ranking": 3631
                },
                {
                  "player_name": "Soulaimane El Bouchqali",
                  "ranking": 3632
                },
                {
                  "player_name": "Semen Vovchenko",
                  "ranking": 3633
                }
              ]
            }
          }
        },
        "Mohammad Abu Zrayq": {
          "player_id": 986341,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 27,
          "height": 168,
          "market_value": 400000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0,
            "assists": 0,
            "expected_goals": 0.0775,
            "rating": 86.7777,
            "minutes": 22,
            "total_pass": 7,
            "accurate_pass": 6,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 0,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_own_half_passes": 1,
            "accurate_own_half_passes": 1,
            "total_opp_half_passes": 6,
            "accurate_opp_half_passes": 5,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 11,
            "possession_lost": 1.6769,
            "dispossessed": 0.0,
            "duels_lost": 2,
            "aerial_won": 0,
            "aerial_lost": 1,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "total_contest": 1,
            "won_contest": 1,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "goal_rate": 0.1198,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 0,
            "total_progression": 0,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.499,
            "bench_expected_minutes": 21.97,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [
            {
              "match_id": 16201517,
              "match_date": "2026-05-24",
              "home_team": "Olympique Dcheira",
              "away_team": "Raja Club Athletic",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Raja Club Athletic",
              "opponent": "Olympique Dcheira",
              "stats": {
                "minutes": 70,
                "rating": 7.1,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 0,
                "expected_goals": 1.06,
                "expected_assists": 0.0,
                "total_shots": 2,
                "shots_on_target": 2,
                "total_pass": 29,
                "accurate_pass": 24,
                "tackles": 0,
                "tackles_won": 0,
                "clearances": 0,
                "aerial_won": 0,
                "duels_won": 6,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Botola Pro",
              "league_id": "937",
              "league_slug": "botola-pro",
              "league_country": "Morocco",
              "season_id": "78750",
              "season_name": "Botola Pro D1 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 16086283,
              "match_date": "2026-05-09",
              "home_team": "Raja Club Athletic",
              "away_team": "Wydad Casablanca",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Raja Club Athletic",
              "opponent": "Wydad Casablanca",
              "stats": {
                "minutes": 65,
                "rating": 7.1,
                "goal_rate": 0.0,
                "goals": 0,
                "assists": 0,
                "expected_goals": 0.02,
                "expected_assists": 0.0,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 31,
                "accurate_pass": 25,
                "tackles": 0,
                "tackles_won": 0,
                "interceptions": 1,
                "clearances": 0,
                "aerial_won": 0,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "Botola Pro",
              "league_id": "937",
              "league_slug": "botola-pro",
              "league_country": "Morocco",
              "season_id": "78750",
              "season_name": "Botola Pro D1 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 4026,
            "combined_rank_score": 526.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 678.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 10,
            "squad_role": "substitute",
            "projected_match_rating": 6.7777,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mohammad Abu Zrayq",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Khozhimat Erkinov",
                  "ranking": 4021
                },
                {
                  "player_name": "Rafael Sabino",
                  "ranking": 4022
                },
                {
                  "player_name": "Salah Moussadak",
                  "ranking": 4023
                },
                {
                  "player_name": "Galego",
                  "ranking": 4024
                },
                {
                  "player_name": "Alexander Selecký",
                  "ranking": 4025
                }
              ],
              "lower": [
                {
                  "player_name": "Pierre Kalulu",
                  "ranking": 4027
                },
                {
                  "player_name": "Delvin Alfonzo",
                  "ranking": 4028
                },
                {
                  "player_name": "Tsuyoshi Ogashiwa",
                  "ranking": 4029
                },
                {
                  "player_name": "Romelu Lukaku",
                  "ranking": 4030
                },
                {
                  "player_name": "Raúl Asencio",
                  "ranking": 4031
                }
              ]
            }
          }
        }
      },
      "substitutes": {
        "Noureddin Bani Ateyah": {
          "player_id": 828259,
          "position": "G",
          "position_depth": "G_BENCH",
          "is_starter": false,
          "shirt_number": 1,
          "height": 179,
          "market_value": 260000,
          "stats": {
            "saves": 0,
            "goals_prevented": 0.0144,
            "rating": 86.6724,
            "minutes": 4,
            "bench_appearance_probability": 0.109,
            "bench_expected_minutes": 4.39,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 5796,
            "combined_rank_score": 506.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 609.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 16,
            "squad_role": "substitute",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Noureddin Bani Ateyah",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Pico",
                  "ranking": 5791
                },
                {
                  "player_name": "Raed Chikhaoui",
                  "ranking": 5792
                },
                {
                  "player_name": "Ingars Pulis",
                  "ranking": 5793
                },
                {
                  "player_name": "Filip Holender",
                  "ranking": 5794
                },
                {
                  "player_name": "Didier La Torre",
                  "ranking": 5795
                }
              ],
              "lower": [
                {
                  "player_name": "Yandri Vasquez",
                  "ranking": 5797
                },
                {
                  "player_name": "Luka Posinkovic",
                  "ranking": 5798
                },
                {
                  "player_name": "Snayder Porozo",
                  "ranking": 5799
                },
                {
                  "player_name": "Gadiel Michael Kamagi",
                  "ranking": 5800
                },
                {
                  "player_name": "Stas Kornzeniowski",
                  "ranking": 5801
                }
              ]
            }
          }
        },
        "Mohammad Ali Hasheesh": {
          "player_id": 1139989,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 27,
          "height": 183,
          "market_value": 440000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 0,
            "aerial_won": 0,
            "duels_won": 1,
            "rating": 87.5742,
            "minutes": 14,
            "total_pass": 6,
            "accurate_pass": 5,
            "bench_appearance_probability": 0.299,
            "bench_expected_minutes": 13.57,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 81.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3700,
            "combined_rank_score": 465.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 563.0,
            "fifa_overall": 81.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 7,
            "squad_role": "substitute",
            "projected_match_rating": 6.5742,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mohammad Ali Hasheesh",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Shuhei Tokumoto",
                  "ranking": 3695
                },
                {
                  "player_name": "Simon Banza",
                  "ranking": 3696
                },
                {
                  "player_name": "Ramazan Orazov",
                  "ranking": 3697
                },
                {
                  "player_name": "Mohannad Abu Taha",
                  "ranking": 3698
                },
                {
                  "player_name": "Fahad Talib",
                  "ranking": 3699
                }
              ],
              "lower": [
                {
                  "player_name": "Ricardo Phillips",
                  "ranking": 3701
                },
                {
                  "player_name": "Aleks Bozhev",
                  "ranking": 3702
                },
                {
                  "player_name": "Lucas Taylor",
                  "ranking": 3703
                },
                {
                  "player_name": "Luis Moreno",
                  "ranking": 3704
                },
                {
                  "player_name": "D.J. Taylor",
                  "ranking": 3705
                }
              ]
            }
          }
        },
        "Saad Al Rousan": {
          "player_id": 920476,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 15,
          "height": 188,
          "market_value": 390000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 0,
            "aerial_won": 0,
            "duels_won": 1,
            "rating": 87.5742,
            "minutes": 14,
            "total_pass": 6,
            "accurate_pass": 5,
            "bench_appearance_probability": 0.299,
            "bench_expected_minutes": 13.57,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "assists": 0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "expected_goals": 0.0,
            "expected_assists": 0.0,
            "fifa_overall": 81.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 4112,
            "combined_rank_score": 469.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 562.0,
            "fifa_overall": 81.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 11,
            "squad_role": "substitute",
            "projected_match_rating": 6.5742,
            "source_file": "data/player_rankings.csv",
            "player_name": "Saad Al Rousan",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Mahmoud Al-Mardi",
                  "ranking": 4107
                },
                {
                  "player_name": "Issam Al-Subhi",
                  "ranking": 4108
                },
                {
                  "player_name": "Davi Gomes",
                  "ranking": 4109
                },
                {
                  "player_name": "Leonardo Zabala",
                  "ranking": 4110
                },
                {
                  "player_name": "Thalisson Gabriel",
                  "ranking": 4111
                }
              ],
              "lower": [
                {
                  "player_name": "Edinson Mero",
                  "ranking": 4113
                },
                {
                  "player_name": "Giorgi Moistsrapishvili",
                  "ranking": 4114
                },
                {
                  "player_name": "Dinmukhamed Karaman",
                  "ranking": 4115
                },
                {
                  "player_name": "Manuel Mónaco",
                  "ranking": 4116
                },
                {
                  "player_name": "Ibrahim Tanko",
                  "ranking": 4117
                }
              ]
            }
          }
        },
        "Amer Jamous": {
          "player_id": 1019495,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 71,
          "height": 174,
          "market_value": 435000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0239,
            "assists": 0,
            "expected_goals": 0.0189,
            "rating": 86.6724,
            "minutes": 22,
            "total_pass": 11,
            "accurate_pass": 9,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 0,
            "bench_appearance_probability": 0.499,
            "bench_expected_minutes": 21.97,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3743,
            "combined_rank_score": 515.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 663.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 8,
            "squad_role": "substitute",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Amer Jamous",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Oskar Buur",
                  "ranking": 3738
                },
                {
                  "player_name": "Lucky Ezeh",
                  "ranking": 3739
                },
                {
                  "player_name": "Stanley Kanu",
                  "ranking": 3740
                },
                {
                  "player_name": "Lucas Suárez",
                  "ranking": 3741
                },
                {
                  "player_name": "Gubari Sherko",
                  "ranking": 3742
                }
              ],
              "lower": [
                {
                  "player_name": "Ed Carlos",
                  "ranking": 3744
                },
                {
                  "player_name": "Giorgio Puzzoli",
                  "ranking": 3745
                },
                {
                  "player_name": "Miloš Pantović",
                  "ranking": 3746
                },
                {
                  "player_name": "Đorđe Petrović",
                  "ranking": 3747
                },
                {
                  "player_name": "Antonio Sivera",
                  "ranking": 3748
                }
              ]
            }
          }
        },
        "Ibrahim Sadeh": {
          "player_id": 997817,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 0,
          "height": 174,
          "market_value": 415000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0239,
            "assists": 0,
            "expected_goals": 0.0189,
            "rating": 86.6724,
            "minutes": 22,
            "total_pass": 11,
            "accurate_pass": 9,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 0,
            "bench_appearance_probability": 0.499,
            "bench_expected_minutes": 21.97,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3906,
            "combined_rank_score": 531.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 691.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 9,
            "squad_role": "substitute",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Ibrahim Sadeh",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Carbone",
                  "ranking": 3901
                },
                {
                  "player_name": "Alessandro Burlamaqui",
                  "ranking": 3902
                },
                {
                  "player_name": "Amin Gröller",
                  "ranking": 3903
                },
                {
                  "player_name": "Ahmed Hasan Maknazi",
                  "ranking": 3904
                },
                {
                  "player_name": "Caio Roque",
                  "ranking": 3905
                }
              ],
              "lower": [
                {
                  "player_name": "Paul Charpentier",
                  "ranking": 3907
                },
                {
                  "player_name": "Julien Ngoy",
                  "ranking": 3908
                },
                {
                  "player_name": "Elkhan Astanov",
                  "ranking": 3909
                },
                {
                  "player_name": "Kevin Felida",
                  "ranking": 3910
                },
                {
                  "player_name": "Iker Undabarrena",
                  "ranking": 3911
                }
              ]
            }
          }
        },
        "Ibrahim Sabra": {
          "player_id": 1522038,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 9,
          "height": 183,
          "market_value": 365000,
          "stats": {
            "expected_goals": 0.0326,
            "goal_rate": 0.0001,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0257,
            "key_pass": 0,
            "rating": 86.3201,
            "minutes": 25,
            "total_shots": 0,
            "duels_won": 1,
            "aerial_won": 1,
            "total_pass": 2,
            "accurate_pass": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 2,
            "accurate_opp_half_passes": 1,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 4,
            "possession_lost": 2.4818,
            "dispossessed": 1.4718,
            "duels_lost": 1,
            "aerial_lost": 2,
            "total_contest": 0,
            "won_contest": 1,
            "ball_recovery": 0,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 0,
            "assists": 0,
            "shots_off_target": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.08,
            "offsides": 1,
            "ball_carries": 1,
            "total_progression": 3,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.559,
            "bench_expected_minutes": 25.29,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [
            {
              "match_id": 14023429,
              "match_date": "2026-05-16",
              "home_team": "NK Lokomotiva Zagreb",
              "away_team": "HNK Hajduk Split",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "NK Lokomotiva Zagreb",
              "opponent": "HNK Hajduk Split",
              "stats": {
                "minutes": 87,
                "rating": 7.4,
                "assists": 1,
                "expected_goals": 0.4653,
                "expected_assists": 0.3701,
                "total_shots": 3,
                "shots_on_target": 1,
                "shots_off_target": 2,
                "total_pass": 15,
                "accurate_pass": 7,
                "key_pass": 2,
                "aerial_won": 7,
                "duels_won": 10
              },
              "has_player_stats": true,
              "league_name": "HNL",
              "league_id": "170",
              "league_slug": "hnl",
              "league_country": "Croatia",
              "season_id": "76980",
              "season_name": "HNL 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14023435,
              "match_date": "2026-05-09",
              "home_team": "NK Varaždin",
              "away_team": "NK Lokomotiva Zagreb",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "NK Lokomotiva Zagreb",
              "opponent": "NK Varaždin",
              "stats": {
                "minutes": 65,
                "rating": 6.0,
                "assists": 0,
                "expected_assists": 0.002,
                "total_shots": 0,
                "total_pass": 12,
                "accurate_pass": 7,
                "aerial_won": 2,
                "duels_won": 2,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "HNL",
              "league_id": "170",
              "league_slug": "hnl",
              "league_country": "Croatia",
              "season_id": "76980",
              "season_name": "HNL 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14023412,
              "match_date": "2026-05-03",
              "home_team": "NK Lokomotiva Zagreb",
              "away_team": "HNK Rijeka",
              "team_side": "home",
              "is_starting_11": 0,
              "team": "NK Lokomotiva Zagreb",
              "opponent": "HNK Rijeka",
              "stats": {
                "minutes": 29,
                "rating": 6.4,
                "assists": 0,
                "expected_assists": 0.0028,
                "total_shots": 0,
                "total_pass": 4,
                "accurate_pass": 2
              },
              "has_player_stats": true,
              "league_name": "HNL",
              "league_id": "170",
              "league_slug": "hnl",
              "league_country": "Croatia",
              "season_id": "76980",
              "season_name": "HNL 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14023433,
              "match_date": "2026-04-25",
              "home_team": "NK Osijek",
              "away_team": "NK Lokomotiva Zagreb",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "NK Lokomotiva Zagreb",
              "opponent": "NK Osijek",
              "stats": {
                "minutes": 14,
                "rating": 6.3,
                "assists": 0,
                "expected_goals": 0.0945,
                "expected_assists": 0.0062,
                "total_shots": 1,
                "total_pass": 1,
                "accurate_pass": 1,
                "aerial_won": 2,
                "duels_won": 2
              },
              "has_player_stats": true,
              "league_name": "HNL",
              "league_id": "170",
              "league_slug": "hnl",
              "league_country": "Croatia",
              "season_id": "76980",
              "season_name": "HNL 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14023439,
              "match_date": "2026-04-21",
              "home_team": "NK Lokomotiva Zagreb",
              "away_team": "NK Slaven Belupo",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "NK Lokomotiva Zagreb",
              "opponent": "NK Slaven Belupo",
              "stats": {
                "minutes": 57,
                "rating": 6.1,
                "assists": 0,
                "expected_goals": 0.1379,
                "expected_assists": 0.0016,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 7,
                "accurate_pass": 6,
                "duels_won": 1,
                "ball_recovery": 1
              },
              "has_player_stats": true,
              "league_name": "HNL",
              "league_id": "170",
              "league_slug": "hnl",
              "league_country": "Croatia",
              "season_id": "76980",
              "season_name": "HNL 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 3628,
            "combined_rank_score": 495.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 626.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 12,
            "squad_role": "substitute",
            "projected_match_rating": 6.3201,
            "source_file": "data/player_rankings.csv",
            "player_name": "Ibrahim Sabra",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Islomzhon Kobilov",
                  "ranking": 3623
                },
                {
                  "player_name": "Athanasios Androutsos",
                  "ranking": 3624
                },
                {
                  "player_name": "Antonio Mance",
                  "ranking": 3625
                },
                {
                  "player_name": "Bruno Larregui",
                  "ranking": 3626
                },
                {
                  "player_name": "Youness Akharraz",
                  "ranking": 3627
                }
              ],
              "lower": [
                {
                  "player_name": "Luka Lijeskić",
                  "ranking": 3629
                },
                {
                  "player_name": "Patricio Tanda",
                  "ranking": 3630
                },
                {
                  "player_name": "Franko Kolić",
                  "ranking": 3631
                },
                {
                  "player_name": "Soulaimane El Bouchqali",
                  "ranking": 3632
                },
                {
                  "player_name": "Semen Vovchenko",
                  "ranking": 3633
                }
              ]
            }
          }
        },
        "Mohammad Abu Zrayq": {
          "player_id": 986341,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 27,
          "height": 168,
          "market_value": 400000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0,
            "assists": 0,
            "expected_goals": 0.0775,
            "rating": 86.7777,
            "minutes": 22,
            "total_pass": 7,
            "accurate_pass": 6,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 0,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_own_half_passes": 1,
            "accurate_own_half_passes": 1,
            "total_opp_half_passes": 6,
            "accurate_opp_half_passes": 5,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 11,
            "possession_lost": 1.6769,
            "dispossessed": 0.0,
            "duels_lost": 2,
            "aerial_won": 0,
            "aerial_lost": 1,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "total_contest": 1,
            "won_contest": 1,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 0,
            "goal_rate": 0.1198,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 0,
            "total_progression": 0,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.499,
            "bench_expected_minutes": 21.97,
            "projected_goals": 0,
            "goal_probability": 0.0,
            "projected_assists": 0,
            "assist_probability": 0.0,
            "fifa_overall": 80.0
          },
          "latest_10_games": [
            {
              "match_id": 16201517,
              "match_date": "2026-05-24",
              "home_team": "Olympique Dcheira",
              "away_team": "Raja Club Athletic",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Raja Club Athletic",
              "opponent": "Olympique Dcheira",
              "stats": {
                "minutes": 70,
                "rating": 7.1,
                "goal_rate": 1.0,
                "goals": 1,
                "assists": 0,
                "expected_goals": 1.06,
                "expected_assists": 0.0,
                "total_shots": 2,
                "shots_on_target": 2,
                "total_pass": 29,
                "accurate_pass": 24,
                "tackles": 0,
                "tackles_won": 0,
                "clearances": 0,
                "aerial_won": 0,
                "duels_won": 6,
                "ball_recovery": 2
              },
              "has_player_stats": true,
              "league_name": "Botola Pro",
              "league_id": "937",
              "league_slug": "botola-pro",
              "league_country": "Morocco",
              "season_id": "78750",
              "season_name": "Botola Pro D1 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 16086283,
              "match_date": "2026-05-09",
              "home_team": "Raja Club Athletic",
              "away_team": "Wydad Casablanca",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Raja Club Athletic",
              "opponent": "Wydad Casablanca",
              "stats": {
                "minutes": 65,
                "rating": 7.1,
                "goal_rate": 0.0,
                "goals": 0,
                "assists": 0,
                "expected_goals": 0.02,
                "expected_assists": 0.0,
                "total_shots": 2,
                "shots_on_target": 1,
                "shots_off_target": 1,
                "total_pass": 31,
                "accurate_pass": 25,
                "tackles": 0,
                "tackles_won": 0,
                "interceptions": 1,
                "clearances": 0,
                "aerial_won": 0,
                "duels_won": 5,
                "ball_recovery": 3
              },
              "has_player_stats": true,
              "league_name": "Botola Pro",
              "league_id": "937",
              "league_slug": "botola-pro",
              "league_country": "Morocco",
              "season_id": "78750",
              "season_name": "Botola Pro D1 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 4026,
            "combined_rank_score": 526.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 678.0,
            "fifa_overall": 80.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 10,
            "squad_role": "substitute",
            "projected_match_rating": 6.7777,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mohammad Abu Zrayq",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Khozhimat Erkinov",
                  "ranking": 4021
                },
                {
                  "player_name": "Rafael Sabino",
                  "ranking": 4022
                },
                {
                  "player_name": "Salah Moussadak",
                  "ranking": 4023
                },
                {
                  "player_name": "Galego",
                  "ranking": 4024
                },
                {
                  "player_name": "Alexander Selecký",
                  "ranking": 4025
                }
              ],
              "lower": [
                {
                  "player_name": "Pierre Kalulu",
                  "ranking": 4027
                },
                {
                  "player_name": "Delvin Alfonzo",
                  "ranking": 4028
                },
                {
                  "player_name": "Tsuyoshi Ogashiwa",
                  "ranking": 4029
                },
                {
                  "player_name": "Romelu Lukaku",
                  "ranking": 4030
                },
                {
                  "player_name": "Raúl Asencio",
                  "ranking": 4031
                }
              ]
            }
          }
        }
      },
      "team_totals": {
        "projected_goals": 1,
        "expected_goals": 1.05,
        "expected_assists": 0.51,
        "total_shots": 14,
        "shots_on_target": 3,
        "total_passes": 371,
        "interceptions": 7,
        "tackles": 7,
        "avg_rating": 87.44,
        "possession_estimated_pct": 47.2,
        "pressing_actions_per_90": 6.0
      }
    }
  },
  "antagonist_report": {
    "home_attacking_duels": [
      {
        "attacker": "Xaver Schlager",
        "attacker_role": "LW",
        "attacker_market_value": 9500000,
        "attacker_height": 174,
        "attacker_skill_quality": 0.517,
        "defenders": [
          "Saleem Obaid"
        ],
        "defender_roles": [
          "CB"
        ],
        "def_skill_quality_avg": 0.401,
        "duel_zone": "LW vs CB",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.444,
        "xg_contribution": 0.1068,
        "shots_in_zone": 1.8,
        "dribbles_attempted": 3,
        "dribbles_successful": 1.2,
        "aerial_duels": 2,
        "aerial_won": 0.9,
        "crosses_in_zone": 2.0,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Saleem Obaid",
            "role": "CB",
            "market_value": 97000,
            "tackles_attempted": 1.9,
            "tackles_won": 1.6,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.6,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.556
          }
        ],
        "duel_analysis": "Xaver Schlager (LW) is evenly matched against Saleem Obaid in a direct 1v1 contest. Duel win probability: 44%.  Projected xG contribution: 0.107 — with neither side clearly dominant."
      },
      {
        "attacker": "Romano Schmid",
        "attacker_role": "CAM",
        "attacker_market_value": 16500000,
        "attacker_height": 168,
        "attacker_skill_quality": 0.595,
        "defenders": [
          "Nizar Al-Rashdan"
        ],
        "defender_roles": [
          "CM"
        ],
        "def_skill_quality_avg": 0.408,
        "duel_zone": "CAM vs CM",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.444,
        "xg_contribution": 0.2035,
        "shots_in_zone": 2.3,
        "dribbles_attempted": 3,
        "dribbles_successful": 1.2,
        "aerial_duels": 2,
        "aerial_won": 0.8,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Nizar Al-Rashdan",
            "role": "CM",
            "market_value": 620000,
            "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.2,
            "defensive_success_rate": 0.556
          }
        ],
        "duel_analysis": "Romano Schmid (CAM) is evenly matched against Nizar Al-Rashdan in a direct 1v1 contest. Duel win probability: 44%. The quality gap is significant (€16M vs €1M avg). Projected xG contribution: 0.204 — with neither side clearly dominant."
      },
      {
        "attacker": "Michael Gregoritsch",
        "attacker_role": "ST",
        "attacker_market_value": 1600000,
        "attacker_height": 193,
        "attacker_skill_quality": 0.42,
        "defenders": [
          "Saleem Obaid",
          "Abdallah Nasib"
        ],
        "defender_roles": [
          "CB",
          "CB"
        ],
        "def_skill_quality_avg": 0.403,
        "duel_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "numerical_situation": "1v2",
        "duel_win_rate": 0.248,
        "xg_contribution": 0.2014,
        "shots_in_zone": 2.3,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.4,
        "aerial_duels": 3,
        "aerial_won": 2.1,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.3,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Saleem Obaid",
            "role": "CB",
            "market_value": 97000,
            "tackles_attempted": 0.9,
            "tackles_won": 1.0,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.6,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.5,
            "defensive_success_rate": 0.752
          },
          {
            "player": "Abdallah Nasib",
            "role": "CB",
            "market_value": 360000,
            "tackles_attempted": 0.9,
            "tackles_won": 1.0,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.6,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.5,
            "defensive_success_rate": 0.752
          }
        ],
        "duel_analysis": "Michael Gregoritsch (ST) is heavily outmatched defensively against Saleem Obaid and Abdallah Nasib in a 2-defender block. Duel win probability: 25%.  Projected xG contribution: 0.201 — with very limited chance creation expected."
      },
      {
        "attacker": "Marko Arnautović",
        "attacker_role": "RW",
        "attacker_market_value": 2100000,
        "attacker_height": 192,
        "attacker_skill_quality": 0.426,
        "defenders": [
          "Saleem Obaid"
        ],
        "defender_roles": [
          "CB"
        ],
        "def_skill_quality_avg": 0.401,
        "duel_zone": "RW vs CB",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.475,
        "xg_contribution": 0.2037,
        "shots_in_zone": 1.9,
        "dribbles_attempted": 3,
        "dribbles_successful": 1.3,
        "aerial_duels": 2,
        "aerial_won": 1.4,
        "crosses_in_zone": 1.8,
        "fouls_drawn": 1.1,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Saleem Obaid",
            "role": "CB",
            "market_value": 97000,
            "tackles_attempted": 1.9,
            "tackles_won": 1.6,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.6,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.6,
            "defensive_success_rate": 0.525
          }
        ],
        "duel_analysis": "Marko Arnautović (RW) is evenly matched against Saleem Obaid in a direct 1v1 contest. Duel win probability: 48%.  Projected xG contribution: 0.204 — with neither side clearly dominant."
      }
    ],
    "away_attacking_duels": [
      {
        "attacker": "Noor Al-Deen Al Rawabdeh",
        "attacker_role": "LWB",
        "attacker_market_value": 455000,
        "attacker_height": 179,
        "attacker_skill_quality": 0.406,
        "defenders": [
          "David Alaba"
        ],
        "defender_roles": [
          "RB"
        ],
        "def_skill_quality_avg": 0.434,
        "duel_zone": "Left Wingback vs Right Back — Overlapping Run",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.383,
        "xg_contribution": 0.0463,
        "shots_in_zone": 0.9,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.7,
        "aerial_duels": 2,
        "aerial_won": 1.0,
        "crosses_in_zone": 2.1,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "David Alaba",
            "role": "RB",
            "market_value": 2700000,
            "tackles_attempted": 1.9,
            "tackles_won": 1.8,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.0,
            "defensive_success_rate": 0.617
          }
        ],
        "duel_analysis": "Noor Al-Deen Al Rawabdeh (LWB) faces tough defensive resistance against David Alaba in a direct 1v1 contest. Duel win probability: 38%.  Projected xG contribution: 0.046 — and is restricted in space and time on the ball."
      },
      {
        "attacker": "Nizar Al-Rashdan",
        "attacker_role": "CM",
        "attacker_market_value": 620000,
        "attacker_height": 185,
        "attacker_skill_quality": 0.408,
        "defenders": [
          "Marcel Sabitzer"
        ],
        "defender_roles": [
          "CDM"
        ],
        "def_skill_quality_avg": 0.477,
        "duel_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.451,
        "xg_contribution": 0.1033,
        "shots_in_zone": 1.7,
        "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": "Marcel Sabitzer",
            "role": "CDM",
            "market_value": 6200000,
            "tackles_attempted": 2.0,
            "tackles_won": 1.7,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.8,
            "defensive_success_rate": 0.549
          }
        ],
        "duel_analysis": "Nizar Al-Rashdan (CM) is evenly matched against Marcel Sabitzer in a direct 1v1 contest. Duel win probability: 45%.  Projected xG contribution: 0.103 — with neither side clearly dominant."
      },
      {
        "attacker": "Mohannad Abu Taha",
        "attacker_role": "CM",
        "attacker_market_value": 535000,
        "attacker_height": 176,
        "attacker_skill_quality": 0.407,
        "defenders": [
          "Marcel Sabitzer"
        ],
        "defender_roles": [
          "CDM"
        ],
        "def_skill_quality_avg": 0.477,
        "duel_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.414,
        "xg_contribution": 0.0486,
        "shots_in_zone": 1.6,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.7,
        "aerial_duels": 2,
        "aerial_won": 0.9,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.1,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Marcel Sabitzer",
            "role": "CDM",
            "market_value": 6200000,
            "tackles_attempted": 2.0,
            "tackles_won": 1.7,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.586
          }
        ],
        "duel_analysis": "Mohannad Abu Taha (CM) faces tough defensive resistance against Marcel Sabitzer in a direct 1v1 contest. Duel win probability: 41%.  Projected xG contribution: 0.049 — and is restricted in space and time on the ball."
      },
      {
        "attacker": "Ehsan Haddad",
        "attacker_role": "RWB",
        "attacker_market_value": 290000,
        "attacker_height": 180,
        "attacker_skill_quality": 0.404,
        "defenders": [
          "Stefan Posch"
        ],
        "defender_roles": [
          "LB"
        ],
        "def_skill_quality_avg": 0.477,
        "duel_zone": "Right Wingback vs Left Back — Overlapping Run",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.335,
        "xg_contribution": 0.0428,
        "shots_in_zone": 0.9,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.6,
        "aerial_duels": 2,
        "aerial_won": 1.1,
        "crosses_in_zone": 2.1,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Stefan Posch",
            "role": "LB",
            "market_value": 6200000,
            "tackles_attempted": 2.0,
            "tackles_won": 1.9,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.9,
            "defensive_success_rate": 0.665
          }
        ],
        "duel_analysis": "Ehsan Haddad (RWB) faces tough defensive resistance against Stefan Posch in a direct 1v1 contest. Duel win probability: 34%.  Projected xG contribution: 0.043 — and is restricted in space and time on the ball."
      },
      {
        "attacker": "Odeh Fakhoury",
        "attacker_role": "SS",
        "attacker_market_value": 225000,
        "attacker_height": 180,
        "attacker_skill_quality": 0.403,
        "defenders": [
          "Philipp Lienhart"
        ],
        "defender_roles": [
          "CB"
        ],
        "def_skill_quality_avg": 0.518,
        "duel_zone": "Shadow Striker vs Centre Back — Half-Space Threat",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.362,
        "xg_contribution": 0.1796,
        "shots_in_zone": 2.2,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.6,
        "aerial_duels": 2,
        "aerial_won": 1.1,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Philipp Lienhart",
            "role": "CB",
            "market_value": 9600000,
            "tackles_attempted": 2.0,
            "tackles_won": 1.9,
            "fouls_committed": 0.5,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.9,
            "defensive_success_rate": 0.638
          }
        ],
        "duel_analysis": "Odeh Fakhoury (SS) faces tough defensive resistance against Philipp Lienhart in a direct 1v1 contest. Duel win probability: 36%.  Projected xG contribution: 0.180 — and is restricted in space and time on the ball."
      },
      {
        "attacker": "Mousa Tamari",
        "attacker_role": "SS",
        "attacker_market_value": 10800000,
        "attacker_height": 175,
        "attacker_skill_quality": 0.532,
        "defenders": [
          "Philipp Lienhart"
        ],
        "defender_roles": [
          "CB"
        ],
        "def_skill_quality_avg": 0.518,
        "duel_zone": "Shadow Striker vs Centre Back — Half-Space Threat",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.4,
        "xg_contribution": 0.1518,
        "shots_in_zone": 2.3,
        "dribbles_attempted": 3,
        "dribbles_successful": 1.1,
        "aerial_duels": 2,
        "aerial_won": 0.9,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Philipp Lienhart",
            "role": "CB",
            "market_value": 9600000,
            "tackles_attempted": 2.0,
            "tackles_won": 1.8,
            "fouls_committed": 0.5,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.6
          }
        ],
        "duel_analysis": "Mousa Tamari (SS) faces tough defensive resistance against Philipp Lienhart in a direct 1v1 contest. Duel win probability: 40%.  Projected xG contribution: 0.152 — and is restricted in space and time on the ball."
      },
      {
        "attacker": "Ali Olwan",
        "attacker_role": "ST",
        "attacker_market_value": 825000,
        "attacker_height": 180,
        "attacker_skill_quality": 0.41,
        "defenders": [
          "Philipp Lienhart",
          "Konrad Laimer"
        ],
        "defender_roles": [
          "CB",
          "CB"
        ],
        "def_skill_quality_avg": 0.621,
        "duel_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "numerical_situation": "1v2",
        "duel_win_rate": 0.18,
        "xg_contribution": 0.0949,
        "shots_in_zone": 2.0,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.3,
        "aerial_duels": 3,
        "aerial_won": 1.6,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.4,
        "pressing_intensity_on_attacker": "MEDIUM",
        "defender_stats": [
          {
            "player": "Philipp Lienhart",
            "role": "CB",
            "market_value": 9600000,
            "tackles_attempted": 1.0,
            "tackles_won": 1.1,
            "fouls_committed": 0.5,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.7,
            "aerial_duels_won": 0.7,
            "defensive_success_rate": 0.82
          },
          {
            "player": "Konrad Laimer",
            "role": "CB",
            "market_value": 31000000,
            "tackles_attempted": 1.1,
            "tackles_won": 1.2,
            "fouls_committed": 0.4,
            "interceptions_in_zone": 1.2,
            "clearances_in_zone": 1.0,
            "aerial_duels_won": 0.7,
            "defensive_success_rate": 0.82
          }
        ],
        "duel_analysis": "Ali Olwan (ST) is heavily outmatched defensively against Philipp Lienhart and Konrad Laimer in a 2-defender block. Duel win probability: 18%. The quality gap is significant (€1M vs €20M avg). Projected xG contribution: 0.095 — with very limited chance creation expected."
      }
    ],
    "midfield_battle": {
      "home_midfield_power": 0.589,
      "away_midfield_power": 0.431,
      "home_creative_power": 0.557,
      "away_creative_power": 0.345,
      "home_defensive_power": 0.604,
      "away_defensive_power": 0.376,
      "home_dominance_ratio": 0.578,
      "home_midfield_count": 4,
      "away_midfield_count": 4,
      "home_midfield_players": [
        "Marcel Sabitzer",
        "Romano Schmid",
        "Nicolas Seiwald",
        "Xaver Schlager"
      ],
      "away_midfield_players": [
        "Mohannad Abu Taha",
        "Nizar Al-Rashdan",
        "Noor Al-Deen Al Rawabdeh",
        "Ehsan Haddad"
      ],
      "possession_advantage": "home",
      "estimated_possession_home_pct": 52.8,
      "estimated_possession_away_pct": 47.2,
      "home_pressing_actions_per_90": 7.4,
      "away_pressing_actions_per_90": 6.0,
      "home_key_passes_projected": 4.8,
      "away_key_passes_projected": 3.6,
      "home_throughball_threat": 2.3,
      "away_throughball_threat": 1.6,
      "key_personal_duel": "Nicolas Seiwald vs Nizar Al-Rashdan",
      "midfield_lambda_factor_home": 1.031,
      "midfield_lambda_factor_away": 0.964
    },
    "formation_analysis": {
      "home_formation": "4-2-3-1",
      "away_formation": "3-4-3",
      "home_tactical_bonus": 0.0,
      "away_tactical_bonus": 0.0,
      "formation_verdict": "Tactical parity between 4-2-3-1 and 3-4-3. Match outcome driven primarily by individual player quality."
    },
    "home_lambda": 1.843,
    "away_lambda": 1.05,
    "home_top_threat_zones": [
      "RW vs CB",
      "CAM vs CM"
    ],
    "away_top_threat_zones": [
      "Shadow Striker vs Centre Back — Half-Space Threat",
      "Shadow Striker vs Centre Back — Half-Space Threat"
    ],
    "home_player_antagonists": {
      "Xaver Schlager": {
        "opponents": [
          "Saleem Obaid",
          "Ehsan Haddad"
        ],
        "primary_zone": "LW vs CB",
        "source": "attacking_duel, midfield_pairing"
      },
      "Romano Schmid": {
        "opponents": [
          "Nizar Al-Rashdan"
        ],
        "primary_zone": "CAM vs CM",
        "source": "attacking_duel, midfield_pairing"
      },
      "Michael Gregoritsch": {
        "opponents": [
          "Saleem Obaid",
          "Abdallah Nasib"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "attacking_duel"
      },
      "Marko Arnautović": {
        "opponents": [
          "Saleem Obaid"
        ],
        "primary_zone": "RW vs CB",
        "source": "attacking_duel"
      },
      "David Alaba": {
        "opponents": [
          "Noor Al-Deen Al Rawabdeh"
        ],
        "primary_zone": "Left Wingback vs Right Back — Overlapping Run",
        "source": "defensive_duel"
      },
      "Marcel Sabitzer": {
        "opponents": [
          "Nizar Al-Rashdan",
          "Mohannad Abu Taha"
        ],
        "primary_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "source": "defensive_duel, midfield_pairing"
      },
      "Stefan Posch": {
        "opponents": [
          "Ehsan Haddad"
        ],
        "primary_zone": "Right Wingback vs Left Back — Overlapping Run",
        "source": "defensive_duel"
      },
      "Philipp Lienhart": {
        "opponents": [
          "Odeh Fakhoury",
          "Mousa Tamari",
          "Ali Olwan"
        ],
        "primary_zone": "Shadow Striker vs Centre Back — Half-Space Threat",
        "source": "defensive_duel"
      },
      "Konrad Laimer": {
        "opponents": [
          "Ali Olwan"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "defensive_duel"
      },
      "Nicolas Seiwald": {
        "opponents": [
          "Noor Al-Deen Al Rawabdeh"
        ],
        "primary_zone": "Midfield lane",
        "source": "midfield_pairing"
      },
      "Alexander Schlager": {
        "opponents": [
          "Mousa Tamari",
          "Odeh Fakhoury"
        ],
        "primary_zone": "Shape fallback",
        "source": "formation_fallback"
      }
    },
    "away_player_antagonists": {
      "Saleem Obaid": {
        "opponents": [
          "Xaver Schlager",
          "Michael Gregoritsch",
          "Marko Arnautović"
        ],
        "primary_zone": "LW vs CB",
        "source": "defensive_duel"
      },
      "Nizar Al-Rashdan": {
        "opponents": [
          "Romano Schmid",
          "Marcel Sabitzer"
        ],
        "primary_zone": "CAM vs CM",
        "source": "defensive_duel, attacking_duel, midfield_pairing"
      },
      "Abdallah Nasib": {
        "opponents": [
          "Michael Gregoritsch"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "defensive_duel"
      },
      "Noor Al-Deen Al Rawabdeh": {
        "opponents": [
          "David Alaba",
          "Nicolas Seiwald"
        ],
        "primary_zone": "Left Wingback vs Right Back — Overlapping Run",
        "source": "attacking_duel, midfield_pairing"
      },
      "Mohannad Abu Taha": {
        "opponents": [
          "Marcel Sabitzer"
        ],
        "primary_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "source": "attacking_duel, midfield_pairing"
      },
      "Ehsan Haddad": {
        "opponents": [
          "Stefan Posch",
          "Xaver Schlager"
        ],
        "primary_zone": "Right Wingback vs Left Back — Overlapping Run",
        "source": "attacking_duel, midfield_pairing"
      },
      "Odeh Fakhoury": {
        "opponents": [
          "Philipp Lienhart"
        ],
        "primary_zone": "Shadow Striker vs Centre Back — Half-Space Threat",
        "source": "attacking_duel"
      },
      "Mousa Tamari": {
        "opponents": [
          "Philipp Lienhart"
        ],
        "primary_zone": "Shadow Striker vs Centre Back — Half-Space Threat",
        "source": "attacking_duel"
      },
      "Ali Olwan": {
        "opponents": [
          "Philipp Lienhart",
          "Konrad Laimer"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "attacking_duel"
      },
      "Yazeed Abu Laila": {
        "opponents": [
          "Marko Arnautović",
          "Michael Gregoritsch"
        ],
        "primary_zone": "Shape fallback",
        "source": "formation_fallback"
      },
      "Yazan Al-Arab": {
        "opponents": [
          "Marko Arnautović"
        ],
        "primary_zone": "Shape fallback",
        "source": "formation_fallback"
      }
    },
    "key_tactical_insight": "Home midfield dominates with ~53% possession expected (Nicolas Seiwald vs Nizar Al-Rashdan). Total antagonist xG — Home: 0.72, Away: 0.67. Home danger zone: RW vs CB. Away danger zone: Shadow Striker vs Centre Back — Half-Space Threat.",
    "lambda_factors": {
      "home_gk_opposition_factor": 1.0245,
      "away_gk_opposition_factor": 1.0163,
      "home_set_piece_bonus": 0.179,
      "away_set_piece_bonus": 0.026,
      "home_defensive_solidity_vs": 1.0269,
      "away_defensive_solidity_vs": 0.977,
      "home_midfield_factor": 1.031,
      "away_midfield_factor": 0.964,
      "stage_discount": 1.0,
      "quality_gap_applied": true,
      "home_avg_quality": 0.5257,
      "away_avg_quality": 0.4187,
      "avg_quality_gap": 0.107,
      "squad_value_gap_log": 1.5554,
      "top5_value_gap_log": 1.4423,
      "attack_value_gap_log": 1.0795,
      "elite_count_gap": 0,
      "combined_quality_gap": 0.1966,
      "stronger_lambda_boost": 0.4324,
      "weaker_lambda_suppression": 0.2752,
      "home_bench_lambda_bonus": 0.1335,
      "away_bench_lambda_bonus": 0.0577,
      "home_bench_players_modelled": 7,
      "away_bench_players_modelled": 7,
      "mismatch_score_pressure_applied": false,
      "competitive_underdog_floor_applied": true,
      "competitive_underdog_floor": 1.05,
      "pre_competitive_floor_home_lambda": 1.843,
      "pre_competitive_floor_away_lambda": 0.708,
      "pre_calibration_home_lambda": 1.8425,
      "pre_calibration_away_lambda": 0.7077,
      "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": true,
      "final_home_lambda": 1.843,
      "final_away_lambda": 1.05
    }
  },
  "home_standing": {
    "available": false,
    "team_position": null,
    "opponent_position": null,
    "standing_lambda_multiplier": 1.0,
    "attack_index": null,
    "defense_concede_index": null,
    "form_multiplier": null,
    "team_attack_rate_contextual": null,
    "opp_defense_rate_contextual": null,
    "team_ppg": null,
    "opponent_ppg": null
  },
  "away_standing": {
    "available": false,
    "team_position": null,
    "opponent_position": null,
    "standing_lambda_multiplier": 1.0,
    "attack_index": null,
    "defense_concede_index": null,
    "form_multiplier": null,
    "team_attack_rate_contextual": null,
    "opp_defense_rate_contextual": null,
    "team_ppg": null,
    "opponent_ppg": null
  },
  "timestamp": "2026-06-16T13:39:36Z"
}