{
  "match_info": {
    "home_team": "Austria",
    "away_team": "Jordan",
    "tournament": "FIFA World Cup",
    "date": "20260616",
    "timezone": "America/New_York",
    "home_formation": "4-2-3-1",
    "away_formation": "3-5-2"
  },
  "prediction": {
    "most_likely_score": "2-0",
    "home_goals": 2,
    "away_goals": 0,
    "most_likely_score_probability": 0.1354,
    "top_5_scorelines": [
      {
        "score": "2-0",
        "probability": 0.1354
      },
      {
        "score": "1-0",
        "probability": 0.1187
      },
      {
        "score": "3-0",
        "probability": 0.1028
      },
      {
        "score": "2-1",
        "probability": 0.0914
      },
      {
        "score": "1-1",
        "probability": 0.0806
      }
    ],
    "scoreline_probabilities": {
      "0-0": 0.0525,
      "0-1": 0.035,
      "0-2": 0.0119,
      "0-3": 0.0027,
      "1-0": 0.1187,
      "1-1": 0.0806,
      "1-2": 0.0271,
      "1-3": 0.0061,
      "1-4": 0.001,
      "2-0": 0.1354,
      "2-1": 0.0914,
      "2-2": 0.0309,
      "2-3": 0.0069,
      "2-4": 0.0012,
      "3-0": 0.1028,
      "3-1": 0.0694,
      "3-2": 0.0234,
      "3-3": 0.0053,
      "3-4": 0.0009,
      "4-0": 0.0585,
      "4-1": 0.0395,
      "4-2": 0.0133,
      "4-3": 0.003,
      "4-4": 0.0005,
      "5-0": 0.0266,
      "5-1": 0.018,
      "5-2": 0.0061,
      "5-3": 0.0014,
      "6-0": 0.0101,
      "6-1": 0.0068,
      "6-2": 0.0023,
      "6-3": 0.0005,
      "7-0": 0.0033,
      "7-1": 0.0022,
      "7-2": 0.0007,
      "8-0": 0.0009,
      "8-1": 0.0006
    },
    "outcome": {
      "home_win": 0.7364,
      "draw": 0.1698,
      "away_win": 0.0938
    },
    "markets": {
      "over_2_5_goals": 0.5659,
      "under_2_5_goals": 0.4341,
      "btts_yes": 0.4408,
      "btts_no": 0.5592,
      "home_clean_sheet": 0.5092,
      "away_clean_sheet": 0.1026
    },
    "home_ratings": {
      "DR": 86.0,
      "MCR": 83.13,
      "ATR": 80.68,
      "GK": 73.81
    },
    "away_ratings": {
      "DR": 85.21,
      "MCR": 87.29,
      "ATR": 90.15,
      "GK": 87.67
    },
    "insights": {
      "summary": "Antagonist matchup analysis for Austria vs Jordan. Most likely scoreline: 2-0. Lambdas derived from 5 home and 5 away individual player duels.",
      "key_player": "Projected scorer(s): Christoph Baumgartner, Paul Wanner",
      "tactical_analysis": "Tactical parity between 4-2-3-1 and 3-5-2. Match outcome driven primarily by individual player quality. Home midfield dominates with ~53% possession expected (Christoph Baumgartner vs Nizar Mahmoud Al-Rashdan). Total antagonist xG — Home: 1.18, Away: 0.26. Home danger zone: Right Wing vs Left Wingback — Compact Flank. Away danger zone: Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle."
    },
    "confidence": 0.83,
    "home_lambda": 2.277,
    "away_lambda": 0.675
  },
  "teams": {
    "Austria": {
      "formation": "4-2-3-1",
      "players": {
        "Florian Wiegele": {
          "player_id": 869476,
          "position": "G",
          "position_depth": "G",
          "is_starter": true,
          "shirt_number": 44,
          "height": 204,
          "market_value": 2100000,
          "stats": {
            "saves": 2,
            "goals_prevented": 0.113,
            "rating": 73.8142,
            "minutes": 88,
            "total_pass": 30,
            "accurate_pass": 23,
            "total_long_balls": 10,
            "accurate_long_balls": 4,
            "touches": 37,
            "clearances": 0,
            "ball_recovery": 9,
            "high_claims": 1,
            "punches": 0.0,
            "aerial_won": 1,
            "sweeper_actions": 0,
            "sweeper_accurate": 0,
            "saves_inside_box": 1,
            "possession_lost": 6.5448,
            "duels_won": 1,
            "duels_lost": 0,
            "total_contest": 1,
            "won_contest": 1,
            "fouls": 0,
            "fouls_drawn": 0,
            "total_own_half_passes": 24,
            "accurate_own_half_passes": 22,
            "expected_saves": 0.54,
            "high_pressure_saves": 0.21,
            "shots_faced": 1.2,
            "opponent_faced": "Mousa Tamari, Ibrahim Sadeh",
            "matchup_zone": "Goalkeeper shot-stopping context",
            "antagonist_source": "formation_fallback",
            "fifa_overall": 67.0,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.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": 19070,
            "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": 17,
            "squad_role": "starter",
            "projected_match_rating": 6.8142,
            "source_file": "data/player_rankings.csv",
            "player_name": "Florian Wiegele",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "César Falletti",
                  "ranking": 19065
                },
                {
                  "player_name": "Felipe Augusto",
                  "ranking": 19066
                },
                {
                  "player_name": "Martín Luciano",
                  "ranking": 19067
                },
                {
                  "player_name": "Renzo Giampaoli",
                  "ranking": 19068
                },
                {
                  "player_name": "Ignacio Rodríguez",
                  "ranking": 19069
                }
              ],
              "lower": [
                {
                  "player_name": "Mattes Hansen",
                  "ranking": 19071
                },
                {
                  "player_name": "Adrian Grbić",
                  "ranking": 19072
                },
                {
                  "player_name": "Ruben Kluivert",
                  "ranking": 19073
                },
                {
                  "player_name": "Héctor Villalba",
                  "ranking": 19074
                },
                {
                  "player_name": "Syb Van Ottele",
                  "ranking": 19075
                }
              ]
            }
          }
        },
        "Konrad Laimer": {
          "player_id": 355492,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 27,
          "height": 180,
          "market_value": 31000000,
          "stats": {
            "interceptions": 0,
            "tackles": 2,
            "tackles_won": 1,
            "clearances": 0,
            "aerial_won": 0,
            "rating": 88.9512,
            "minutes": 82,
            "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.0253,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.0754,
            "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": 2.2,
            "tackles_won_in_zone": 2.3,
            "interceptions_in_zone": 1.2,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.0,
            "defensive_success_rate": 0.748,
            "opponent_faced": "Noor Al-Deen Al Rawabdeh",
            "pressing_zone": "Right Wingback vs Left Back — Overlapping Run",
            "matchup_zone": "Right Wingback vs Left Back — Overlapping Run",
            "antagonist_source": "defensive_duel",
            "fifa_overall": 82.0,
            "projected_goals": 0,
            "goal_probability": 0.0225
          },
          "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": 932,
            "combined_rank_score": 251.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 162.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": "Mahmudu Bajo",
                  "ranking": 927
                },
                {
                  "player_name": "Alexis Steimbach",
                  "ranking": 928
                },
                {
                  "player_name": "Marley Aké",
                  "ranking": 929
                },
                {
                  "player_name": "Cristian Romero",
                  "ranking": 930
                },
                {
                  "player_name": "Antonio Rüdiger",
                  "ranking": 931
                }
              ],
              "lower": [
                {
                  "player_name": "Charles Lokolingoy",
                  "ranking": 933
                },
                {
                  "player_name": "Christian Kouamé",
                  "ranking": 934
                },
                {
                  "player_name": "Tino Kadewere",
                  "ranking": 935
                },
                {
                  "player_name": "Amine Zouhzouh",
                  "ranking": 936
                },
                {
                  "player_name": "Baghdad Bounedjah",
                  "ranking": 937
                }
              ]
            }
          }
        },
        "Kevin Danso": {
          "player_id": 794953,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 4,
          "height": 190,
          "market_value": 19400000,
          "stats": {
            "interceptions": 1,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 6,
            "aerial_won": 3,
            "rating": 86.0919,
            "minutes": 79,
            "total_pass": 61,
            "accurate_pass": 55,
            "duels_won": 5,
            "total_long_balls": 5,
            "accurate_long_balls": 2,
            "total_own_half_passes": 38,
            "accurate_own_half_passes": 35,
            "total_opp_half_passes": 24,
            "accurate_opp_half_passes": 20,
            "crosses_total": 1,
            "crosses_accurate": 1,
            "touches": 79,
            "possession_lost": 8.9954,
            "dispossessed": 1.0375,
            "duels_lost": 4,
            "aerial_lost": 3,
            "total_contest": 1,
            "won_contest": 1,
            "ball_recovery": 3,
            "challenges_lost": 2,
            "fouls": 2,
            "fouls_drawn": 1,
            "blocks": 2,
            "goal_rate": 0.0,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.1245,
            "expected_assists": 0.0208,
            "total_shots": 1,
            "shots_on_target": 0,
            "shots_off_target": 2,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 13,
            "total_progression": 44,
            "progressive_carries": 1,
            "key_pass": 1,
            "tackles_in_zone": 1.0,
            "tackles_won_in_zone": 1.2,
            "interceptions_in_zone": 1.0,
            "clearances_in_zone": 0.9,
            "aerial_duels_won": 0.8,
            "defensive_success_rate": 0.82,
            "opponent_faced": "Mousa Tamari",
            "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",
            "fifa_overall": 79.0,
            "projected_goals": 0,
            "goal_probability": 0.1094
          },
          "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": 12706,
            "combined_rank_score": 562.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 165.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": "starter",
            "projected_match_rating": 7.0919,
            "source_file": "data/player_rankings.csv",
            "player_name": "Kevin Danso",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Nuno Tavares",
                  "ranking": 12701
                },
                {
                  "player_name": "Ben White",
                  "ranking": 12702
                },
                {
                  "player_name": "Kim Min-jae",
                  "ranking": 12703
                },
                {
                  "player_name": "Lucas Zelarayán",
                  "ranking": 12704
                },
                {
                  "player_name": "Dodô",
                  "ranking": 12705
                }
              ],
              "lower": [
                {
                  "player_name": "Juan Foyth",
                  "ranking": 12707
                },
                {
                  "player_name": "Nicolás Palma",
                  "ranking": 12708
                },
                {
                  "player_name": "Bekhruz Shaydulov",
                  "ranking": 12709
                },
                {
                  "player_name": "Cristhian Mosquera",
                  "ranking": 12710
                },
                {
                  "player_name": "Juan David Ríos",
                  "ranking": 12711
                }
              ]
            }
          }
        },
        "Marco Friedl": {
          "player_id": 825771,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 32,
          "height": 187,
          "market_value": 10600000,
          "stats": {
            "interceptions": 1,
            "tackles": 1,
            "tackles_won": 0,
            "clearances": 3,
            "aerial_won": 1,
            "rating": 83.3857,
            "minutes": 76,
            "total_pass": 44,
            "accurate_pass": 39,
            "duels_won": 3,
            "total_long_balls": 5,
            "accurate_long_balls": 4,
            "total_own_half_passes": 27,
            "accurate_own_half_passes": 25,
            "total_opp_half_passes": 17,
            "accurate_opp_half_passes": 14,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 54,
            "possession_lost": 5.7202,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 3,
            "challenges_lost": 1,
            "fouls": 1,
            "fouls_drawn": 0,
            "blocks": 2,
            "goal_rate": 0.0,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.0,
            "expected_assists": 0.0101,
            "total_shots": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 13,
            "total_progression": 62,
            "progressive_carries": 1,
            "key_pass": 0,
            "tackles_in_zone": 1.0,
            "tackles_won_in_zone": 1.1,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.7,
            "aerial_duels_won": 0.8,
            "defensive_success_rate": 0.82,
            "opponent_faced": "Mousa Tamari",
            "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",
            "fifa_overall": 77.0,
            "projected_goals": 0,
            "goal_probability": 0.0358
          },
          "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": 45,
                "rating": 6.2,
                "assists": 0,
                "expected_assists": 0.0018,
                "total_shots": 0,
                "total_pass": 31,
                "accurate_pass": 28,
                "tackles": 1,
                "interceptions": 1,
                "clearances": 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": 1,
              "team": "SV Werder Bremen",
              "opponent": "TSG Hoffenheim",
              "stats": {
                "minutes": 90,
                "rating": 6.5,
                "assists": 0,
                "expected_assists": 0.0004,
                "total_shots": 0,
                "total_pass": 12,
                "accurate_pass": 9,
                "tackles": 1,
                "interceptions": 1,
                "clearances": 5,
                "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": 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": 7.0,
                "assists": 0,
                "expected_assists": 0.0218,
                "total_shots": 0,
                "total_pass": 88,
                "accurate_pass": 79,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 4,
                "aerial_won": 6,
                "duels_won": 7,
                "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"
            }
          ],
          "ranking": {
            "global_player_rank": 14341,
            "combined_rank_score": 917.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 358.0,
            "sofascore_rating": 6.9667,
            "sofascore_appearances": 3.0,
            "fifa_rank": 1476.0,
            "fifa_overall": 77.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 10,
            "squad_role": "starter",
            "projected_match_rating": 6.3857,
            "source_file": "data/player_rankings.csv",
            "player_name": "Marco Friedl",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Marcos Acuña",
                  "ranking": 14336
                },
                {
                  "player_name": "Simon Lüchinger",
                  "ranking": 14337
                },
                {
                  "player_name": "Fabricio Bustos",
                  "ranking": 14338
                },
                {
                  "player_name": "Jordan Teze",
                  "ranking": 14339
                },
                {
                  "player_name": "Alex Moreno",
                  "ranking": 14340
                }
              ],
              "lower": [
                {
                  "player_name": "Asadbek Joraboyev",
                  "ranking": 14342
                },
                {
                  "player_name": "Modestas Vorobjovas",
                  "ranking": 14343
                },
                {
                  "player_name": "Sergiu Plătică",
                  "ranking": 14344
                },
                {
                  "player_name": "Joan Orellana",
                  "ranking": 14345
                },
                {
                  "player_name": "Jefferson Wila",
                  "ranking": 14346
                }
              ]
            }
          }
        },
        "Philipp Lienhart": {
          "player_id": 576266,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 3,
          "height": 189,
          "market_value": 9600000,
          "stats": {
            "interceptions": 0,
            "tackles": 2,
            "tackles_won": 0,
            "clearances": 4,
            "aerial_won": 0,
            "rating": 85.5815,
            "minutes": 77,
            "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": 0.5681,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.1573,
            "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": 2.0,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.711,
            "opponent_faced": "Ibrahim Sadeh",
            "pressing_zone": "Left Wingback vs Right Back — Overlapping Run",
            "matchup_zone": "Left Wingback vs Right Back — Overlapping Run",
            "antagonist_source": "defensive_duel",
            "fifa_overall": 79.0,
            "projected_goals": 0,
            "goal_probability": 0.1788
          },
          "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": 12672,
            "combined_rank_score": 549.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 135.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": 11,
            "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": 12667
                },
                {
                  "player_name": "Oleg Zoteev",
                  "ranking": 12668
                },
                {
                  "player_name": "Morata",
                  "ranking": 12669
                },
                {
                  "player_name": "Riccardo Calafiori",
                  "ranking": 12670
                },
                {
                  "player_name": "Ridle Baku",
                  "ranking": 12671
                }
              ],
              "lower": [
                {
                  "player_name": "Sebastian Szymański",
                  "ranking": 12673
                },
                {
                  "player_name": "Marko Livaja",
                  "ranking": 12674
                },
                {
                  "player_name": "Raoul Bellanova",
                  "ranking": 12675
                },
                {
                  "player_name": "Seong-uh Park",
                  "ranking": 12676
                },
                {
                  "player_name": "Álex Berenguer",
                  "ranking": 12677
                }
              ]
            }
          }
        },
        "Christoph Baumgartner": {
          "player_id": 825956,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 14,
          "height": 180,
          "market_value": 42000000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.085,
            "assists": 0,
            "expected_goals": 0.2378,
            "rating": 84.1644,
            "minutes": 93,
            "total_pass": 48,
            "accurate_pass": 38,
            "ball_recovery": 5,
            "duels_won": 4,
            "total_shots": 1,
            "total_long_balls": 2,
            "accurate_long_balls": 2,
            "total_own_half_passes": 16,
            "accurate_own_half_passes": 14,
            "total_opp_half_passes": 32,
            "accurate_opp_half_passes": 23,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 64,
            "possession_lost": 16.8527,
            "dispossessed": 1.6309,
            "duels_lost": 8,
            "aerial_won": 1,
            "aerial_lost": 2,
            "interceptions": 1,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 1,
            "total_contest": 4,
            "won_contest": 1,
            "challenges_lost": 3,
            "fouls": 3,
            "fouls_drawn": 2,
            "goal_rate": 0.7086,
            "goals": 1,
            "shots_on_target": 1,
            "shots_off_target": 1,
            "blocks": 0,
            "big_chances_created": 1,
            "big_chances_missed": 1,
            "xgot": 0.5436,
            "ball_carries": 16,
            "total_progression": 45,
            "progressive_carries": 1,
            "dribbles_attempted": 2,
            "dribbles_successful": 1.0,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.589,
            "pressing_faced": "LOW",
            "matchup_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
            "numerical_situation": "1v1",
            "opponent_defenders": "Mohannad Abu Taha",
            "opponent_faced": "Mohannad Abu Taha",
            "antagonist_source": "attacking_duel, defensive_duel, midfield_pairing",
            "fifa_overall": 77.0,
            "projected_goals": 1,
            "goal_probability": 0.3652
          },
          "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": 14334,
            "combined_rank_score": 915.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 351.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": "starter",
            "projected_match_rating": 7.1644,
            "source_file": "data/player_rankings.csv",
            "player_name": "Christoph Baumgartner",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Lucas Beraldo",
                  "ranking": 14329
                },
                {
                  "player_name": "Kevin Schade",
                  "ranking": 14330
                },
                {
                  "player_name": "Jean Butez",
                  "ranking": 14331
                },
                {
                  "player_name": "Andreas Malin",
                  "ranking": 14332
                },
                {
                  "player_name": "Nicholas Pozo",
                  "ranking": 14333
                }
              ],
              "lower": [
                {
                  "player_name": "Jan-Niklas Beste",
                  "ranking": 14335
                },
                {
                  "player_name": "Marcos Acuña",
                  "ranking": 14336
                },
                {
                  "player_name": "Simon Lüchinger",
                  "ranking": 14337
                },
                {
                  "player_name": "Fabricio Bustos",
                  "ranking": 14338
                },
                {
                  "player_name": "Jordan Teze",
                  "ranking": 14339
                }
              ]
            }
          }
        },
        "Nicolas Seiwald": {
          "player_id": 976575,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 13,
          "height": 179,
          "market_value": 21000000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0707,
            "assists": 0,
            "expected_goals": 0.0064,
            "rating": 83.9981,
            "minutes": 76,
            "total_pass": 45,
            "accurate_pass": 41,
            "ball_recovery": 2,
            "duels_won": 3,
            "total_shots": 1,
            "total_long_balls": 3,
            "accurate_long_balls": 3,
            "total_own_half_passes": 18,
            "accurate_own_half_passes": 17,
            "total_opp_half_passes": 26,
            "accurate_opp_half_passes": 24,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 52,
            "possession_lost": 4.9506,
            "dispossessed": 1.0422,
            "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.0073,
            "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": 45,
            "progressive_carries": 1,
            "opponent_faced": "Amer Jamous",
            "matchup_zone": "Midfield lane",
            "antagonist_source": "midfield_pairing",
            "fifa_overall": 77.0,
            "projected_goals": 0,
            "goal_probability": 0.0605
          },
          "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": 13818,
            "combined_rank_score": 828.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 331.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": 6.9981,
            "source_file": "data/player_rankings.csv",
            "player_name": "Nicolas Seiwald",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Philipp Köhn",
                  "ranking": 13813
                },
                {
                  "player_name": "Pepelu",
                  "ranking": 13814
                },
                {
                  "player_name": "Abdessamad Ezzalzouli",
                  "ranking": 13815
                },
                {
                  "player_name": "Javier Rojas",
                  "ranking": 13816
                },
                {
                  "player_name": "Nico Elvedi",
                  "ranking": 13817
                }
              ],
              "lower": [
                {
                  "player_name": "Davy Klaassen",
                  "ranking": 13819
                },
                {
                  "player_name": "Wilfried Zaha",
                  "ranking": 13820
                },
                {
                  "player_name": "Emiliano Ramos",
                  "ranking": 13821
                },
                {
                  "player_name": "Ross Barkley",
                  "ranking": 13822
                },
                {
                  "player_name": "Jeong-hwan Kim",
                  "ranking": 13823
                }
              ]
            }
          }
        },
        "Paul Wanner": {
          "player_id": 1146018,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 10,
          "height": 186,
          "market_value": 18800000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0528,
            "assists": 0,
            "expected_goals": 0.5068,
            "rating": 80.0422,
            "minutes": 93,
            "total_pass": 43,
            "accurate_pass": 38,
            "ball_recovery": 6,
            "duels_won": 5,
            "total_shots": 2,
            "total_long_balls": 3,
            "accurate_long_balls": 3,
            "total_own_half_passes": 17,
            "accurate_own_half_passes": 16,
            "total_opp_half_passes": 26,
            "accurate_opp_half_passes": 22,
            "crosses_total": 1,
            "crosses_accurate": 1,
            "touches": 55,
            "possession_lost": 6.2144,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_won": 1,
            "aerial_lost": 1,
            "interceptions": 0,
            "tackles_won": 2,
            "tackles": 2,
            "clearances": 2,
            "total_contest": 3,
            "won_contest": 3,
            "challenges_lost": 0,
            "fouls": 0,
            "fouls_drawn": 1,
            "goal_rate": 1.0357,
            "goals": 1,
            "shots_on_target": 1,
            "shots_off_target": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 1,
            "xgot": 0.6836,
            "ball_carries": 19,
            "total_progression": 51,
            "progressive_carries": 2,
            "dribbles_attempted": 4,
            "dribbles_successful": 2.1,
            "crosses_attempted": 2.2,
            "duel_win_rate": 0.584,
            "pressing_faced": "LOW",
            "matchup_zone": "Right Wing vs Left Wingback — Compact Flank",
            "numerical_situation": "1v1",
            "opponent_defenders": "Ibrahim Sadeh",
            "opponent_faced": "Ibrahim Sadeh",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "fifa_overall": 72.0,
            "projected_goals": 1,
            "goal_probability": 0.5109
          },
          "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": 16089,
            "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": "starter",
            "projected_match_rating": 8.0422,
            "source_file": "data/player_rankings.csv",
            "player_name": "Paul Wanner",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Karl Darlow",
                  "ranking": 16084
                },
                {
                  "player_name": "Thibault De Smet",
                  "ranking": 16085
                },
                {
                  "player_name": "Steven Moreira",
                  "ranking": 16086
                },
                {
                  "player_name": "Gonzalo Villar",
                  "ranking": 16087
                },
                {
                  "player_name": "Pedro Gallese",
                  "ranking": 16088
                }
              ],
              "lower": [
                {
                  "player_name": "Bruno Nazario",
                  "ranking": 16090
                },
                {
                  "player_name": "Aarón",
                  "ranking": 16091
                },
                {
                  "player_name": "Jordy Makengo",
                  "ranking": 16092
                },
                {
                  "player_name": "Bobby De Cordova-Reid",
                  "ranking": 16093
                },
                {
                  "player_name": "Junior Mwanga",
                  "ranking": 16094
                }
              ]
            }
          }
        },
        "Carney Chukwuemeka": {
          "player_id": 994556,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 17,
          "height": 185,
          "market_value": 18100000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.006,
            "assists": 0,
            "expected_goals": 0.1463,
            "rating": 82.774,
            "minutes": 49,
            "total_pass": 5,
            "accurate_pass": 4,
            "ball_recovery": 1,
            "duels_won": 1,
            "total_shots": 2,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_own_half_passes": 2,
            "accurate_own_half_passes": 2,
            "total_opp_half_passes": 4,
            "accurate_opp_half_passes": 3,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 6,
            "possession_lost": 1.0336,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_won": 1,
            "aerial_lost": 0,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 0,
            "clearances": 0,
            "total_contest": 0,
            "won_contest": 0,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 1,
            "goal_rate": 0.1575,
            "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": 4,
            "total_progression": 6,
            "progressive_carries": 0,
            "dribbles_attempted": 3,
            "dribbles_successful": 1.1,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.41,
            "pressing_faced": "LOW",
            "matchup_zone": "CAM vs CM + CDM",
            "numerical_situation": "1v2",
            "opponent_defenders": "Mohannad Abu Taha, Nizar Mahmoud Al-Rashdan",
            "opponent_faced": "Mohannad Abu Taha, Nizar Mahmoud Al-Rashdan",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "fifa_overall": 76.0,
            "projected_goals": 0,
            "goal_probability": 0.119
          },
          "latest_10_games": [
            {
              "match_id": 14065561,
              "match_date": "2026-05-16",
              "home_team": "SV Werder Bremen",
              "away_team": "Borussia Dortmund",
              "team_side": "away",
              "is_starting_11": 0,
              "team": "Borussia Dortmund",
              "opponent": "SV Werder Bremen",
              "stats": {
                "minutes": 21,
                "rating": 6.6,
                "assists": 0,
                "expected_assists": 0.0042,
                "total_shots": 0,
                "total_pass": 6,
                "accurate_pass": 6
              },
              "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": 0,
              "team": "Borussia Dortmund",
              "opponent": "Borussia M'gladbach",
              "stats": {
                "minutes": 12,
                "rating": 6.5,
                "assists": 0,
                "expected_assists": 0.0011,
                "total_shots": 0,
                "total_pass": 4,
                "accurate_pass": 4,
                "duels_won": 1,
                "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": 0,
              "team": "Borussia Dortmund",
              "opponent": "SC Freiburg",
              "stats": {
                "minutes": 11,
                "rating": 6.6,
                "assists": 0,
                "expected_goals": 0.0275,
                "expected_assists": 0.0151,
                "total_shots": 1,
                "total_pass": 4,
                "accurate_pass": 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"
            }
          ],
          "ranking": {
            "global_player_rank": 14319,
            "combined_rank_score": 912.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 1724.0,
            "fifa_overall": 76.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 6,
            "squad_role": "starter",
            "projected_match_rating": 6.774,
            "source_file": "data/player_rankings.csv",
            "player_name": "Carney Chukwuemeka",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Mariano Díaz",
                  "ranking": 14314
                },
                {
                  "player_name": "Lucas Monzón",
                  "ranking": 14315
                },
                {
                  "player_name": "Jorge Cabello",
                  "ranking": 14316
                },
                {
                  "player_name": "Lass Kourouma",
                  "ranking": 14317
                },
                {
                  "player_name": "Victor Gómez",
                  "ranking": 14318
                }
              ],
              "lower": [
                {
                  "player_name": "Matías Campos López",
                  "ranking": 14320
                },
                {
                  "player_name": "Jose Salinas",
                  "ranking": 14321
                },
                {
                  "player_name": "Pablo Agudín",
                  "ranking": 14322
                },
                {
                  "player_name": "Ryan Camenzuli",
                  "ranking": 14323
                },
                {
                  "player_name": "Juan Pablo Nieto",
                  "ranking": 14324
                }
              ]
            }
          }
        },
        "Romano Schmid": {
          "player_id": 830127,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 20,
          "height": 168,
          "market_value": 16500000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.1273,
            "assists": 0,
            "expected_goals": 0.0266,
            "rating": 84.665,
            "minutes": 75,
            "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.0307,
            "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": 4,
            "dribbles_successful": 1.7,
            "crosses_attempted": 2.2,
            "duel_win_rate": 0.482,
            "pressing_faced": "LOW",
            "matchup_zone": "Left Wing vs Right Wingback — Compact Flank",
            "numerical_situation": "1v1",
            "opponent_defenders": "Noor Al-Deen Al Rawabdeh",
            "opponent_faced": "Noor Al-Deen Al Rawabdeh",
            "antagonist_source": "attacking_duel, midfield_pairing",
            "fifa_overall": 78.0,
            "projected_goals": 0,
            "goal_probability": 0.0511
          },
          "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": 13206,
            "combined_rank_score": 688.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 241.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": 8,
            "squad_role": "starter",
            "projected_match_rating": 6.665,
            "source_file": "data/player_rankings.csv",
            "player_name": "Romano Schmid",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Helibelton Palacios",
                  "ranking": 13201
                },
                {
                  "player_name": "Lee Jae-wook",
                  "ranking": 13202
                },
                {
                  "player_name": "Javier Saldías",
                  "ranking": 13203
                },
                {
                  "player_name": "Je-wook Woo",
                  "ranking": 13204
                },
                {
                  "player_name": "Matteo Gabbia",
                  "ranking": 13205
                }
              ],
              "lower": [
                {
                  "player_name": "Arnau Martínez",
                  "ranking": 13207
                },
                {
                  "player_name": "Dominik Greif",
                  "ranking": 13208
                },
                {
                  "player_name": "João Pedro",
                  "ranking": 13209
                },
                {
                  "player_name": "João Pedro",
                  "ranking": 13210
                },
                {
                  "player_name": "Soufiane Rahimi",
                  "ranking": 13211
                }
              ]
            }
          }
        },
        "Saša Kalajdžić": {
          "player_id": 870038,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 10,
          "height": 200,
          "market_value": 3700000,
          "stats": {
            "expected_goals": 0.083,
            "goal_rate": 0.0859,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.2277,
            "key_pass": 1,
            "rating": 80.6775,
            "minutes": 79,
            "total_shots": 2,
            "duels_won": 6,
            "aerial_won": 2,
            "total_pass": 18,
            "accurate_pass": 11,
            "total_long_balls": 2,
            "accurate_long_balls": 1,
            "total_opp_half_passes": 16,
            "accurate_opp_half_passes": 9,
            "crosses_total": 2,
            "crosses_accurate": 1,
            "touches": 34,
            "possession_lost": 13.3802,
            "dispossessed": 1.7709,
            "duels_lost": 6,
            "aerial_lost": 3,
            "total_contest": 2,
            "won_contest": 3,
            "ball_recovery": 2,
            "challenges_lost": 1,
            "fouls": 2,
            "fouls_drawn": 2,
            "assists": 1,
            "shots_off_target": 2,
            "interceptions": 1,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 2,
            "blocks": 0,
            "big_chances_created": 1,
            "big_chances_missed": 1,
            "xgot": 0.8559,
            "offsides": 0,
            "ball_carries": 12,
            "total_progression": 11,
            "progressive_carries": 0,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.5,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.278,
            "pressing_faced": "LOW",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "numerical_situation": "1v2",
            "opponent_defenders": "Abdallah Nasib, Mohammad Ali Hasheesh",
            "opponent_faced": "Abdallah Nasib, Mohammad Ali Hasheesh",
            "antagonist_source": "attacking_duel",
            "fifa_overall": 74.0,
            "projected_goals": 0,
            "goal_probability": 0.3579
          },
          "latest_10_games": [
            {
              "match_id": 15690640,
              "match_date": "2026-05-17",
              "home_team": "FK Austria Wien",
              "away_team": "LASK",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "LASK",
              "opponent": "FK Austria Wien",
              "stats": {
                "minutes": 77,
                "rating": 8.0,
                "assists": 2,
                "expected_goals": 0.1325,
                "expected_assists": 0.7703,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 18,
                "accurate_pass": 12,
                "key_pass": 3,
                "tackles": 1,
                "tackles_won": 1,
                "interceptions": 1,
                "clearances": 1,
                "aerial_won": 2,
                "duels_won": 8,
                "ball_recovery": 1
              },
              "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": "home",
              "is_starting_11": 1,
              "team": "LASK",
              "opponent": "Red Bull Salzburg",
              "stats": {
                "minutes": 61,
                "rating": 6.3,
                "assists": 0,
                "expected_assists": 0.0127,
                "total_shots": 0,
                "total_pass": 24,
                "accurate_pass": 15,
                "tackles": 1,
                "tackles_won": 1,
                "duels_won": 1,
                "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": 15690643,
              "match_date": "2026-05-04",
              "home_team": "LASK",
              "away_team": "SK Rapid Wien",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "LASK",
              "opponent": "SK Rapid Wien",
              "stats": {
                "minutes": 82,
                "rating": 6.8,
                "assists": 1,
                "expected_goals": 0.1616,
                "expected_assists": 0.0412,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 15,
                "accurate_pass": 9,
                "key_pass": 1,
                "clearances": 1,
                "aerial_won": 3,
                "duels_won": 5,
                "ball_recovery": 1
              },
              "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": 15690628,
              "match_date": "2026-04-26",
              "home_team": "TSV Hartberg",
              "away_team": "LASK",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "LASK",
              "opponent": "TSV Hartberg",
              "stats": {
                "minutes": 90,
                "rating": 9.2,
                "goal_rate": 2.0,
                "goals": 2,
                "assists": 1,
                "expected_goals": 0.5703,
                "expected_assists": 0.1498,
                "total_shots": 5,
                "shots_on_target": 3,
                "shots_off_target": 2,
                "total_pass": 25,
                "accurate_pass": 16,
                "key_pass": 3,
                "tackles": 2,
                "tackles_won": 1,
                "clearances": 3,
                "aerial_won": 2,
                "duels_won": 8,
                "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"
            },
            {
              "match_id": 15690630,
              "match_date": "2026-04-22",
              "home_team": "SK Sturm Graz",
              "away_team": "LASK",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "LASK",
              "opponent": "SK Sturm Graz",
              "stats": {
                "minutes": 45,
                "rating": 6.8,
                "assists": 0,
                "expected_assists": 0.1154,
                "total_shots": 0,
                "total_pass": 12,
                "accurate_pass": 4,
                "key_pass": 1,
                "tackles": 2,
                "tackles_won": 1,
                "aerial_won": 3,
                "duels_won": 8,
                "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"
            }
          ],
          "ranking": {
            "global_player_rank": 15395,
            "combined_rank_score": 1568.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 2904.0,
            "fifa_overall": 74.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 16,
            "squad_role": "starter",
            "projected_match_rating": 6.6775,
            "source_file": "data/player_rankings.csv",
            "player_name": "Saša Kalajdžić",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "David Zima",
                  "ranking": 15390
                },
                {
                  "player_name": "Arthur Chaves",
                  "ranking": 15391
                },
                {
                  "player_name": "Asger Sørensen",
                  "ranking": 15392
                },
                {
                  "player_name": "David Jurásek",
                  "ranking": 15393
                },
                {
                  "player_name": "Samuel Essende",
                  "ranking": 15394
                }
              ],
              "lower": [
                {
                  "player_name": "Marin Pongračić",
                  "ranking": 15396
                },
                {
                  "player_name": "Barnabás Varga",
                  "ranking": 15397
                },
                {
                  "player_name": "Rick Van Drongelen",
                  "ranking": 15398
                },
                {
                  "player_name": "Marco Di Cesare",
                  "ranking": 15399
                },
                {
                  "player_name": "Williot Swedberg",
                  "ranking": 15400
                }
              ]
            }
          }
        }
      },
      "bench_players": {
        "Nikolas Polster": {
          "player_id": 962268,
          "position": "G",
          "position_depth": "G_BENCH",
          "is_starter": false,
          "shirt_number": 12,
          "height": 188,
          "market_value": 2100000,
          "stats": {
            "saves": 0,
            "goals_prevented": 0.0035,
            "rating": 74.5341,
            "minutes": 4,
            "total_pass": 2,
            "accurate_pass": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "touches": 2,
            "clearances": 0,
            "ball_recovery": 1,
            "high_claims": 0,
            "punches": 0.0718,
            "aerial_won": 0,
            "sweeper_actions": 0,
            "sweeper_accurate": 0,
            "saves_inside_box": 0,
            "possession_lost": 0.7662,
            "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,
            "fifa_overall": 68.0
          },
          "latest_10_games": [
            {
              "match_id": 16194352,
              "match_date": "2026-05-19",
              "home_team": "SV Ried",
              "away_team": "Wolfsberger AC",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Wolfsberger AC",
              "opponent": "SV Ried",
              "stats": {
                "minutes": 90,
                "rating": 6.1,
                "assists": 0,
                "expected_assists": 0.0026,
                "total_shots": 0,
                "total_pass": 35,
                "accurate_pass": 24,
                "clearances": 2,
                "ball_recovery": 8,
                "saves": 3,
                "goals_prevented": -0.2859
              },
              "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": 15690665,
              "match_date": "2026-05-09",
              "home_team": "SV Ried",
              "away_team": "Wolfsberger AC",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Wolfsberger AC",
              "opponent": "SV Ried",
              "stats": {
                "minutes": 90,
                "rating": 7.6,
                "assists": 0,
                "expected_assists": 0.0053,
                "total_shots": 0,
                "total_pass": 33,
                "accurate_pass": 14,
                "clearances": 3,
                "aerial_won": 2,
                "duels_won": 3,
                "ball_recovery": 8,
                "saves": 2,
                "goals_prevented": 0.3107
              },
              "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": 15690662,
              "match_date": "2026-05-04",
              "home_team": "SCR Altach",
              "away_team": "Wolfsberger AC",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Wolfsberger AC",
              "opponent": "SCR Altach",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assists": 0,
                "expected_assists": 0.0288,
                "total_shots": 0,
                "total_pass": 40,
                "accurate_pass": 21,
                "clearances": 2,
                "ball_recovery": 13,
                "goals_prevented": -0.2325
              },
              "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": 15690661,
              "match_date": "2026-04-25",
              "home_team": "Wolfsberger AC",
              "away_team": "Grazer AK 1902",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Wolfsberger AC",
              "opponent": "Grazer AK 1902",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assists": 0,
                "expected_assists": 0.0023,
                "total_shots": 0,
                "total_pass": 33,
                "accurate_pass": 20,
                "clearances": 1,
                "ball_recovery": 13,
                "saves": 2,
                "goals_prevented": 0.1937
              },
              "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": 18482,
            "combined_rank_score": 4082.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 7916.0,
            "fifa_overall": 68.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 18,
            "squad_role": "substitute",
            "projected_match_rating": 6.5341,
            "source_file": "data/player_rankings.csv",
            "player_name": "Nikolas Polster",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Dawid Kownacki",
                  "ranking": 18477
                },
                {
                  "player_name": "Nelson Hernández",
                  "ranking": 18478
                },
                {
                  "player_name": "Mads Frøkjær",
                  "ranking": 18479
                },
                {
                  "player_name": "Kevin Kelsy",
                  "ranking": 18480
                },
                {
                  "player_name": "Juan Daniel Pérez",
                  "ranking": 18481
                }
              ],
              "lower": [
                {
                  "player_name": "Pablo Pagis",
                  "ranking": 18483
                },
                {
                  "player_name": "Gabriel Vidović",
                  "ranking": 18484
                },
                {
                  "player_name": "Xeka",
                  "ranking": 18485
                },
                {
                  "player_name": "Koen Van Langendonck",
                  "ranking": 18486
                },
                {
                  "player_name": "Arnau Puigmal",
                  "ranking": 18487
                }
              ]
            }
          }
        },
        "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,
            "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": 15253,
            "combined_rank_score": 1451.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 533.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": 7,
            "squad_role": "substitute",
            "projected_match_rating": 0.7412,
            "source_file": "data/player_rankings.csv",
            "player_name": "Leopold Querfeld",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Mailson",
                  "ranking": 15248
                },
                {
                  "player_name": "Adam Gnezda Čerin",
                  "ranking": 15249
                },
                {
                  "player_name": "Arnau Tenas",
                  "ranking": 15250
                },
                {
                  "player_name": "Stefano Turati",
                  "ranking": 15251
                },
                {
                  "player_name": "Eren Elmalı",
                  "ranking": 15252
                }
              ],
              "lower": [
                {
                  "player_name": "Franco Vázquez",
                  "ranking": 15254
                },
                {
                  "player_name": "Neal Maupay",
                  "ranking": 15255
                },
                {
                  "player_name": "Sammie Szmodics",
                  "ranking": 15256
                },
                {
                  "player_name": "Kevin Kampl",
                  "ranking": 15257
                },
                {
                  "player_name": "Giorgi Chakvetadze",
                  "ranking": 15258
                }
              ]
            }
          }
        },
        "David Affengruber": {
          "player_id": 988672,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 22,
          "height": 185,
          "market_value": 8100000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 1,
            "aerial_won": 0,
            "rating": 82.0938,
            "minutes": 14,
            "total_pass": 9,
            "accurate_pass": 8,
            "duels_won": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_own_half_passes": 6,
            "accurate_own_half_passes": 5,
            "total_opp_half_passes": 3,
            "accurate_opp_half_passes": 2,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 11,
            "possession_lost": 1.5355,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_lost": 3,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 0,
            "blocks": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.0031,
            "expected_assists": 0.0015,
            "total_shots": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 3,
            "total_progression": 14,
            "progressive_carries": 0,
            "key_pass": 0,
            "bench_appearance_probability": 0.31,
            "bench_expected_minutes": 13.82,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 14083743,
              "match_date": "2026-05-23",
              "home_team": "Girona FC",
              "away_team": "Elche",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Elche",
              "opponent": "Girona FC",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assists": 0,
                "expected_assists": 0.0128,
                "total_shots": 0,
                "total_pass": 33,
                "accurate_pass": 21,
                "tackles": 2,
                "tackles_won": 2,
                "interceptions": 1,
                "clearances": 8,
                "aerial_won": 2,
                "duels_won": 7,
                "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": 14083671,
              "match_date": "2026-05-17",
              "home_team": "Elche",
              "away_team": "Getafe",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Elche",
              "opponent": "Getafe",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assists": 0,
                "expected_assists": 0.005,
                "total_shots": 0,
                "total_pass": 63,
                "accurate_pass": 53,
                "tackles": 2,
                "tackles_won": 2,
                "interceptions": 2,
                "clearances": 6,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083608,
              "match_date": "2026-05-12",
              "home_team": "Real Betis",
              "away_team": "Elche",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Elche",
              "opponent": "Real Betis",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assists": 0,
                "expected_goals": 0.0167,
                "expected_assists": 0.0104,
                "total_shots": 1,
                "total_pass": 77,
                "accurate_pass": 73,
                "tackles": 4,
                "tackles_won": 4,
                "interceptions": 1,
                "clearances": 5,
                "aerial_won": 2,
                "duels_won": 7,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 15072,
            "combined_rank_score": 1314.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 398.0,
            "sofascore_rating": 6.9222,
            "sofascore_appearances": 36.0,
            "fifa_rank": 2230.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 13,
            "squad_role": "substitute",
            "projected_match_rating": 7.0938,
            "source_file": "data/player_rankings.csv",
            "player_name": "David Affengruber",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Yeimar Gómez",
                  "ranking": 15067
                },
                {
                  "player_name": "Pep Chavarría",
                  "ranking": 15068
                },
                {
                  "player_name": "Daniele Rugani",
                  "ranking": 15069
                },
                {
                  "player_name": "Marcão",
                  "ranking": 15070
                },
                {
                  "player_name": "Nadir Zortea",
                  "ranking": 15071
                }
              ],
              "lower": [
                {
                  "player_name": "Kristian Thorstvedt",
                  "ranking": 15073
                },
                {
                  "player_name": "Eduard Löwen",
                  "ranking": 15074
                },
                {
                  "player_name": "Robert Skov",
                  "ranking": 15075
                },
                {
                  "player_name": "Joan Jordán",
                  "ranking": 15076
                },
                {
                  "player_name": "Lucien Agoumé",
                  "ranking": 15077
                }
              ]
            }
          }
        },
        "Patrick Wimmer": {
          "player_id": 987504,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 39,
          "height": 182,
          "market_value": 13900000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0688,
            "assists": 0,
            "expected_goals": 0.0169,
            "rating": 83.9573,
            "minutes": 22,
            "total_pass": 6,
            "accurate_pass": 4,
            "ball_recovery": 1,
            "duels_won": 2,
            "total_shots": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_own_half_passes": 2,
            "accurate_own_half_passes": 1,
            "total_opp_half_passes": 4,
            "accurate_opp_half_passes": 3,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 12,
            "possession_lost": 3.7389,
            "dispossessed": 2.0402,
            "duels_lost": 2,
            "aerial_won": 0,
            "aerial_lost": 1,
            "interceptions": 1,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 0,
            "total_contest": 1,
            "won_contest": 1,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 3,
            "total_progression": 16,
            "progressive_carries": 1,
            "bench_appearance_probability": 0.522,
            "bench_expected_minutes": 22.49,
            "fifa_overall": 77.0
          },
          "latest_10_games": [
            {
              "match_id": 14065251,
              "match_date": "2026-05-09",
              "home_team": "VfL Wolfsburg",
              "away_team": "FC Bayern München",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "VfL Wolfsburg",
              "opponent": "FC Bayern München",
              "stats": {
                "minutes": 67,
                "rating": 6.9,
                "assists": 0,
                "expected_goals": 0.4687,
                "expected_assists": 0.6729,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 17,
                "accurate_pass": 15,
                "key_pass": 2,
                "tackles": 2,
                "interceptions": 3,
                "clearances": 1,
                "duels_won": 4,
                "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": 14065240,
              "match_date": "2026-05-03",
              "home_team": "SC Freiburg",
              "away_team": "VfL Wolfsburg",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "VfL Wolfsburg",
              "opponent": "SC Freiburg",
              "stats": {
                "minutes": 72,
                "rating": 7.0,
                "assists": 0,
                "expected_goals": 0.0542,
                "expected_assists": 0.1447,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 16,
                "accurate_pass": 9,
                "key_pass": 2,
                "tackles": 6,
                "tackles_won": 5,
                "aerial_won": 1,
                "duels_won": 9,
                "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": 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": 59,
                "rating": 7.0,
                "assists": 0,
                "total_shots": 3,
                "shots_off_target": 3,
                "total_pass": 33,
                "accurate_pass": 23,
                "tackles": 1,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 2,
                "duels_won": 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": 14653,
            "combined_rank_score": 1008.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 659.0,
            "sofascore_rating": 6.7,
            "sofascore_appearances": 5.0,
            "fifa_rank": 1358.0,
            "fifa_overall": 77.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 9,
            "squad_role": "substitute",
            "projected_match_rating": 6.9573,
            "source_file": "data/player_rankings.csv",
            "player_name": "Patrick Wimmer",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Rob Schoofs",
                  "ranking": 14648
                },
                {
                  "player_name": "Santiago Sosa",
                  "ranking": 14649
                },
                {
                  "player_name": "Osame Sahraoui",
                  "ranking": 14650
                },
                {
                  "player_name": "El Hadji Malick Diouf",
                  "ranking": 14651
                },
                {
                  "player_name": "Mika Biereth",
                  "ranking": 14652
                }
              ],
              "lower": [
                {
                  "player_name": "Andy Diouf",
                  "ranking": 14654
                },
                {
                  "player_name": "Calvin Stengs",
                  "ranking": 14655
                },
                {
                  "player_name": "Arne Engels",
                  "ranking": 14656
                },
                {
                  "player_name": "Bryan Zaragoza",
                  "ranking": 14657
                },
                {
                  "player_name": "Matte Smets",
                  "ranking": 14658
                }
              ]
            }
          }
        },
        "Xaver Schlager": {
          "player_id": 791079,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 24,
          "height": 174,
          "market_value": 9500000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0119,
            "assists": 0,
            "expected_goals": 0.0256,
            "rating": 87.2207,
            "minutes": 22,
            "total_pass": 13,
            "accurate_pass": 12,
            "ball_recovery": 2,
            "duels_won": 1,
            "total_shots": 0,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_own_half_passes": 5,
            "accurate_own_half_passes": 5,
            "total_opp_half_passes": 8,
            "accurate_opp_half_passes": 7,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 17,
            "possession_lost": 2.5706,
            "dispossessed": 2.0099,
            "duels_lost": 1,
            "aerial_won": 0,
            "aerial_lost": 5,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 1,
            "clearances": 0,
            "total_contest": 0,
            "won_contest": 0,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 1,
            "goal_rate": 0.2489,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.1817,
            "ball_carries": 6,
            "total_progression": 43,
            "progressive_carries": 1,
            "bench_appearance_probability": 0.513,
            "bench_expected_minutes": 22.29,
            "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": 12448,
            "combined_rank_score": 482.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 342.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": 12,
            "squad_role": "substitute",
            "projected_match_rating": 7.2207,
            "source_file": "data/player_rankings.csv",
            "player_name": "Xaver Schlager",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Gabriel Santos",
                  "ranking": 12443
                },
                {
                  "player_name": "Đorđe Petrović",
                  "ranking": 12444
                },
                {
                  "player_name": "Lucas Chevalier",
                  "ranking": 12445
                },
                {
                  "player_name": "Éderson",
                  "ranking": 12446
                },
                {
                  "player_name": "Jon Moncayola",
                  "ranking": 12447
                }
              ],
              "lower": [
                {
                  "player_name": "César Munder",
                  "ranking": 12449
                },
                {
                  "player_name": "Sebastián Díaz",
                  "ranking": 12450
                },
                {
                  "player_name": "Bilol Tupliyev",
                  "ranking": 12451
                },
                {
                  "player_name": "Iván Colman",
                  "ranking": 12452
                },
                {
                  "player_name": "Pijus Širvys",
                  "ranking": 12453
                }
              ]
            }
          }
        },
        "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.0004,
            "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,
            "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": 20410,
            "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": 14,
            "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": 20405
                },
                {
                  "player_name": "Richard Torales",
                  "ranking": 20406
                },
                {
                  "player_name": "Mohammed Al Fatil",
                  "ranking": 20407
                },
                {
                  "player_name": "Jair",
                  "ranking": 20408
                },
                {
                  "player_name": "Alkain",
                  "ranking": 20409
                }
              ],
              "lower": [
                {
                  "player_name": "Loïc Williams",
                  "ranking": 20411
                },
                {
                  "player_name": "Péter Baráth",
                  "ranking": 20412
                },
                {
                  "player_name": "Michał Helik",
                  "ranking": 20413
                },
                {
                  "player_name": "Lim Jong Eun",
                  "ranking": 20414
                },
                {
                  "player_name": "Zak Vyner",
                  "ranking": 20415
                }
              ]
            }
          }
        },
        "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.023,
            "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,
            "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": 15128,
            "combined_rank_score": 1357.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 533.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": 15,
            "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": 15123
                },
                {
                  "player_name": "Santi Cazorla",
                  "ranking": 15124
                },
                {
                  "player_name": "Leandro Lozano",
                  "ranking": 15125
                },
                {
                  "player_name": "Christopher Operi",
                  "ranking": 15126
                },
                {
                  "player_name": "Glen Kamara",
                  "ranking": 15127
                }
              ],
              "lower": [
                {
                  "player_name": "Vítor Carvalho",
                  "ranking": 15129
                },
                {
                  "player_name": "James Justin",
                  "ranking": 15130
                },
                {
                  "player_name": "Allahyar Sayyadmanesh",
                  "ranking": 15131
                },
                {
                  "player_name": "Ricardo Pepi",
                  "ranking": 15132
                },
                {
                  "player_name": "Qazim Laci",
                  "ranking": 15133
                }
              ]
            }
          }
        }
      },
      "substitutes": {
        "Nikolas Polster": {
          "player_id": 962268,
          "position": "G",
          "position_depth": "G_BENCH",
          "is_starter": false,
          "shirt_number": 12,
          "height": 188,
          "market_value": 2100000,
          "stats": {
            "saves": 0,
            "goals_prevented": 0.0035,
            "rating": 74.5341,
            "minutes": 4,
            "total_pass": 2,
            "accurate_pass": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "touches": 2,
            "clearances": 0,
            "ball_recovery": 1,
            "high_claims": 0,
            "punches": 0.0718,
            "aerial_won": 0,
            "sweeper_actions": 0,
            "sweeper_accurate": 0,
            "saves_inside_box": 0,
            "possession_lost": 0.7662,
            "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,
            "fifa_overall": 68.0
          },
          "latest_10_games": [
            {
              "match_id": 16194352,
              "match_date": "2026-05-19",
              "home_team": "SV Ried",
              "away_team": "Wolfsberger AC",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Wolfsberger AC",
              "opponent": "SV Ried",
              "stats": {
                "minutes": 90,
                "rating": 6.1,
                "assists": 0,
                "expected_assists": 0.0026,
                "total_shots": 0,
                "total_pass": 35,
                "accurate_pass": 24,
                "clearances": 2,
                "ball_recovery": 8,
                "saves": 3,
                "goals_prevented": -0.2859
              },
              "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": 15690665,
              "match_date": "2026-05-09",
              "home_team": "SV Ried",
              "away_team": "Wolfsberger AC",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Wolfsberger AC",
              "opponent": "SV Ried",
              "stats": {
                "minutes": 90,
                "rating": 7.6,
                "assists": 0,
                "expected_assists": 0.0053,
                "total_shots": 0,
                "total_pass": 33,
                "accurate_pass": 14,
                "clearances": 3,
                "aerial_won": 2,
                "duels_won": 3,
                "ball_recovery": 8,
                "saves": 2,
                "goals_prevented": 0.3107
              },
              "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": 15690662,
              "match_date": "2026-05-04",
              "home_team": "SCR Altach",
              "away_team": "Wolfsberger AC",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Wolfsberger AC",
              "opponent": "SCR Altach",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assists": 0,
                "expected_assists": 0.0288,
                "total_shots": 0,
                "total_pass": 40,
                "accurate_pass": 21,
                "clearances": 2,
                "ball_recovery": 13,
                "goals_prevented": -0.2325
              },
              "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": 15690661,
              "match_date": "2026-04-25",
              "home_team": "Wolfsberger AC",
              "away_team": "Grazer AK 1902",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Wolfsberger AC",
              "opponent": "Grazer AK 1902",
              "stats": {
                "minutes": 90,
                "rating": 6.8,
                "assists": 0,
                "expected_assists": 0.0023,
                "total_shots": 0,
                "total_pass": 33,
                "accurate_pass": 20,
                "clearances": 1,
                "ball_recovery": 13,
                "saves": 2,
                "goals_prevented": 0.1937
              },
              "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": 18482,
            "combined_rank_score": 4082.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 7916.0,
            "fifa_overall": 68.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 18,
            "squad_role": "substitute",
            "projected_match_rating": 6.5341,
            "source_file": "data/player_rankings.csv",
            "player_name": "Nikolas Polster",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Dawid Kownacki",
                  "ranking": 18477
                },
                {
                  "player_name": "Nelson Hernández",
                  "ranking": 18478
                },
                {
                  "player_name": "Mads Frøkjær",
                  "ranking": 18479
                },
                {
                  "player_name": "Kevin Kelsy",
                  "ranking": 18480
                },
                {
                  "player_name": "Juan Daniel Pérez",
                  "ranking": 18481
                }
              ],
              "lower": [
                {
                  "player_name": "Pablo Pagis",
                  "ranking": 18483
                },
                {
                  "player_name": "Gabriel Vidović",
                  "ranking": 18484
                },
                {
                  "player_name": "Xeka",
                  "ranking": 18485
                },
                {
                  "player_name": "Koen Van Langendonck",
                  "ranking": 18486
                },
                {
                  "player_name": "Arnau Puigmal",
                  "ranking": 18487
                }
              ]
            }
          }
        },
        "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,
            "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": 15253,
            "combined_rank_score": 1451.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 533.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": 7,
            "squad_role": "substitute",
            "projected_match_rating": 0.7412,
            "source_file": "data/player_rankings.csv",
            "player_name": "Leopold Querfeld",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Mailson",
                  "ranking": 15248
                },
                {
                  "player_name": "Adam Gnezda Čerin",
                  "ranking": 15249
                },
                {
                  "player_name": "Arnau Tenas",
                  "ranking": 15250
                },
                {
                  "player_name": "Stefano Turati",
                  "ranking": 15251
                },
                {
                  "player_name": "Eren Elmalı",
                  "ranking": 15252
                }
              ],
              "lower": [
                {
                  "player_name": "Franco Vázquez",
                  "ranking": 15254
                },
                {
                  "player_name": "Neal Maupay",
                  "ranking": 15255
                },
                {
                  "player_name": "Sammie Szmodics",
                  "ranking": 15256
                },
                {
                  "player_name": "Kevin Kampl",
                  "ranking": 15257
                },
                {
                  "player_name": "Giorgi Chakvetadze",
                  "ranking": 15258
                }
              ]
            }
          }
        },
        "David Affengruber": {
          "player_id": 988672,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 22,
          "height": 185,
          "market_value": 8100000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 1,
            "aerial_won": 0,
            "rating": 82.0938,
            "minutes": 14,
            "total_pass": 9,
            "accurate_pass": 8,
            "duels_won": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_own_half_passes": 6,
            "accurate_own_half_passes": 5,
            "total_opp_half_passes": 3,
            "accurate_opp_half_passes": 2,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 11,
            "possession_lost": 1.5355,
            "dispossessed": 0.0,
            "duels_lost": 1,
            "aerial_lost": 3,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 1,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 0,
            "blocks": 0,
            "goal_rate": 0.0,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.0031,
            "expected_assists": 0.0015,
            "total_shots": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "big_chances_created": 0,
            "xgot": 0.0,
            "ball_carries": 3,
            "total_progression": 14,
            "progressive_carries": 0,
            "key_pass": 0,
            "bench_appearance_probability": 0.31,
            "bench_expected_minutes": 13.82,
            "fifa_overall": 75.0
          },
          "latest_10_games": [
            {
              "match_id": 14083743,
              "match_date": "2026-05-23",
              "home_team": "Girona FC",
              "away_team": "Elche",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Elche",
              "opponent": "Girona FC",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assists": 0,
                "expected_assists": 0.0128,
                "total_shots": 0,
                "total_pass": 33,
                "accurate_pass": 21,
                "tackles": 2,
                "tackles_won": 2,
                "interceptions": 1,
                "clearances": 8,
                "aerial_won": 2,
                "duels_won": 7,
                "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": 14083671,
              "match_date": "2026-05-17",
              "home_team": "Elche",
              "away_team": "Getafe",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "Elche",
              "opponent": "Getafe",
              "stats": {
                "minutes": 90,
                "rating": 6.9,
                "assists": 0,
                "expected_assists": 0.005,
                "total_shots": 0,
                "total_pass": 63,
                "accurate_pass": 53,
                "tackles": 2,
                "tackles_won": 2,
                "interceptions": 2,
                "clearances": 6,
                "aerial_won": 2,
                "duels_won": 5,
                "ball_recovery": 7
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            },
            {
              "match_id": 14083608,
              "match_date": "2026-05-12",
              "home_team": "Real Betis",
              "away_team": "Elche",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "Elche",
              "opponent": "Real Betis",
              "stats": {
                "minutes": 90,
                "rating": 7.0,
                "assists": 0,
                "expected_goals": 0.0167,
                "expected_assists": 0.0104,
                "total_shots": 1,
                "total_pass": 77,
                "accurate_pass": 73,
                "tackles": 4,
                "tackles_won": 4,
                "interceptions": 1,
                "clearances": 5,
                "aerial_won": 2,
                "duels_won": 7,
                "ball_recovery": 6
              },
              "has_player_stats": true,
              "league_name": "LaLiga",
              "league_id": "8",
              "league_slug": "laliga",
              "league_country": "Spain",
              "season_id": "77559",
              "season_name": "LaLiga 25/26",
              "season_year": "25/26"
            }
          ],
          "ranking": {
            "global_player_rank": 15072,
            "combined_rank_score": 1314.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 398.0,
            "sofascore_rating": 6.9222,
            "sofascore_appearances": 36.0,
            "fifa_rank": 2230.0,
            "fifa_overall": 75.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 13,
            "squad_role": "substitute",
            "projected_match_rating": 7.0938,
            "source_file": "data/player_rankings.csv",
            "player_name": "David Affengruber",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Yeimar Gómez",
                  "ranking": 15067
                },
                {
                  "player_name": "Pep Chavarría",
                  "ranking": 15068
                },
                {
                  "player_name": "Daniele Rugani",
                  "ranking": 15069
                },
                {
                  "player_name": "Marcão",
                  "ranking": 15070
                },
                {
                  "player_name": "Nadir Zortea",
                  "ranking": 15071
                }
              ],
              "lower": [
                {
                  "player_name": "Kristian Thorstvedt",
                  "ranking": 15073
                },
                {
                  "player_name": "Eduard Löwen",
                  "ranking": 15074
                },
                {
                  "player_name": "Robert Skov",
                  "ranking": 15075
                },
                {
                  "player_name": "Joan Jordán",
                  "ranking": 15076
                },
                {
                  "player_name": "Lucien Agoumé",
                  "ranking": 15077
                }
              ]
            }
          }
        },
        "Patrick Wimmer": {
          "player_id": 987504,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 39,
          "height": 182,
          "market_value": 13900000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0688,
            "assists": 0,
            "expected_goals": 0.0169,
            "rating": 83.9573,
            "minutes": 22,
            "total_pass": 6,
            "accurate_pass": 4,
            "ball_recovery": 1,
            "duels_won": 2,
            "total_shots": 1,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_own_half_passes": 2,
            "accurate_own_half_passes": 1,
            "total_opp_half_passes": 4,
            "accurate_opp_half_passes": 3,
            "crosses_total": 1,
            "crosses_accurate": 0,
            "touches": 12,
            "possession_lost": 3.7389,
            "dispossessed": 2.0402,
            "duels_lost": 2,
            "aerial_won": 0,
            "aerial_lost": 1,
            "interceptions": 1,
            "tackles_won": 1,
            "tackles": 1,
            "clearances": 0,
            "total_contest": 1,
            "won_contest": 1,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 1,
            "goal_rate": 0.0,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 1,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.0,
            "ball_carries": 3,
            "total_progression": 16,
            "progressive_carries": 1,
            "bench_appearance_probability": 0.522,
            "bench_expected_minutes": 22.49,
            "fifa_overall": 77.0
          },
          "latest_10_games": [
            {
              "match_id": 14065251,
              "match_date": "2026-05-09",
              "home_team": "VfL Wolfsburg",
              "away_team": "FC Bayern München",
              "team_side": "home",
              "is_starting_11": 1,
              "team": "VfL Wolfsburg",
              "opponent": "FC Bayern München",
              "stats": {
                "minutes": 67,
                "rating": 6.9,
                "assists": 0,
                "expected_goals": 0.4687,
                "expected_assists": 0.6729,
                "total_shots": 2,
                "shots_off_target": 2,
                "total_pass": 17,
                "accurate_pass": 15,
                "key_pass": 2,
                "tackles": 2,
                "interceptions": 3,
                "clearances": 1,
                "duels_won": 4,
                "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": 14065240,
              "match_date": "2026-05-03",
              "home_team": "SC Freiburg",
              "away_team": "VfL Wolfsburg",
              "team_side": "away",
              "is_starting_11": 1,
              "team": "VfL Wolfsburg",
              "opponent": "SC Freiburg",
              "stats": {
                "minutes": 72,
                "rating": 7.0,
                "assists": 0,
                "expected_goals": 0.0542,
                "expected_assists": 0.1447,
                "total_shots": 1,
                "shots_off_target": 1,
                "total_pass": 16,
                "accurate_pass": 9,
                "key_pass": 2,
                "tackles": 6,
                "tackles_won": 5,
                "aerial_won": 1,
                "duels_won": 9,
                "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": 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": 59,
                "rating": 7.0,
                "assists": 0,
                "total_shots": 3,
                "shots_off_target": 3,
                "total_pass": 33,
                "accurate_pass": 23,
                "tackles": 1,
                "interceptions": 1,
                "clearances": 2,
                "aerial_won": 2,
                "duels_won": 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": 14653,
            "combined_rank_score": 1008.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 659.0,
            "sofascore_rating": 6.7,
            "sofascore_appearances": 5.0,
            "fifa_rank": 1358.0,
            "fifa_overall": 77.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 9,
            "squad_role": "substitute",
            "projected_match_rating": 6.9573,
            "source_file": "data/player_rankings.csv",
            "player_name": "Patrick Wimmer",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Rob Schoofs",
                  "ranking": 14648
                },
                {
                  "player_name": "Santiago Sosa",
                  "ranking": 14649
                },
                {
                  "player_name": "Osame Sahraoui",
                  "ranking": 14650
                },
                {
                  "player_name": "El Hadji Malick Diouf",
                  "ranking": 14651
                },
                {
                  "player_name": "Mika Biereth",
                  "ranking": 14652
                }
              ],
              "lower": [
                {
                  "player_name": "Andy Diouf",
                  "ranking": 14654
                },
                {
                  "player_name": "Calvin Stengs",
                  "ranking": 14655
                },
                {
                  "player_name": "Arne Engels",
                  "ranking": 14656
                },
                {
                  "player_name": "Bryan Zaragoza",
                  "ranking": 14657
                },
                {
                  "player_name": "Matte Smets",
                  "ranking": 14658
                }
              ]
            }
          }
        },
        "Xaver Schlager": {
          "player_id": 791079,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 24,
          "height": 174,
          "market_value": 9500000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0119,
            "assists": 0,
            "expected_goals": 0.0256,
            "rating": 87.2207,
            "minutes": 22,
            "total_pass": 13,
            "accurate_pass": 12,
            "ball_recovery": 2,
            "duels_won": 1,
            "total_shots": 0,
            "total_long_balls": 1,
            "accurate_long_balls": 0,
            "total_own_half_passes": 5,
            "accurate_own_half_passes": 5,
            "total_opp_half_passes": 8,
            "accurate_opp_half_passes": 7,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 17,
            "possession_lost": 2.5706,
            "dispossessed": 2.0099,
            "duels_lost": 1,
            "aerial_won": 0,
            "aerial_lost": 5,
            "interceptions": 0,
            "tackles_won": 0,
            "tackles": 1,
            "clearances": 0,
            "total_contest": 0,
            "won_contest": 0,
            "challenges_lost": 1,
            "fouls": 0,
            "fouls_drawn": 1,
            "goal_rate": 0.2489,
            "goals": 0,
            "shots_on_target": 0,
            "shots_off_target": 0,
            "blocks": 0,
            "big_chances_created": 0,
            "big_chances_missed": 0,
            "xgot": 0.1817,
            "ball_carries": 6,
            "total_progression": 43,
            "progressive_carries": 1,
            "bench_appearance_probability": 0.513,
            "bench_expected_minutes": 22.29,
            "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": 12448,
            "combined_rank_score": 482.0,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 342.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": 12,
            "squad_role": "substitute",
            "projected_match_rating": 7.2207,
            "source_file": "data/player_rankings.csv",
            "player_name": "Xaver Schlager",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Gabriel Santos",
                  "ranking": 12443
                },
                {
                  "player_name": "Đorđe Petrović",
                  "ranking": 12444
                },
                {
                  "player_name": "Lucas Chevalier",
                  "ranking": 12445
                },
                {
                  "player_name": "Éderson",
                  "ranking": 12446
                },
                {
                  "player_name": "Jon Moncayola",
                  "ranking": 12447
                }
              ],
              "lower": [
                {
                  "player_name": "César Munder",
                  "ranking": 12449
                },
                {
                  "player_name": "Sebastián Díaz",
                  "ranking": 12450
                },
                {
                  "player_name": "Bilol Tupliyev",
                  "ranking": 12451
                },
                {
                  "player_name": "Iván Colman",
                  "ranking": 12452
                },
                {
                  "player_name": "Pijus Širvys",
                  "ranking": 12453
                }
              ]
            }
          }
        },
        "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.0004,
            "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,
            "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": 20410,
            "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": 14,
            "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": 20405
                },
                {
                  "player_name": "Richard Torales",
                  "ranking": 20406
                },
                {
                  "player_name": "Mohammed Al Fatil",
                  "ranking": 20407
                },
                {
                  "player_name": "Jair",
                  "ranking": 20408
                },
                {
                  "player_name": "Alkain",
                  "ranking": 20409
                }
              ],
              "lower": [
                {
                  "player_name": "Loïc Williams",
                  "ranking": 20411
                },
                {
                  "player_name": "Péter Baráth",
                  "ranking": 20412
                },
                {
                  "player_name": "Michał Helik",
                  "ranking": 20413
                },
                {
                  "player_name": "Lim Jong Eun",
                  "ranking": 20414
                },
                {
                  "player_name": "Zak Vyner",
                  "ranking": 20415
                }
              ]
            }
          }
        },
        "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.023,
            "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,
            "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": 15128,
            "combined_rank_score": 1357.5,
            "ranking_source": "sofascore_plus_fifa_csv",
            "ranking_status": "combined",
            "sofascore_rank": 533.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": 15,
            "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": 15123
                },
                {
                  "player_name": "Santi Cazorla",
                  "ranking": 15124
                },
                {
                  "player_name": "Leandro Lozano",
                  "ranking": 15125
                },
                {
                  "player_name": "Christopher Operi",
                  "ranking": 15126
                },
                {
                  "player_name": "Glen Kamara",
                  "ranking": 15127
                }
              ],
              "lower": [
                {
                  "player_name": "Vítor Carvalho",
                  "ranking": 15129
                },
                {
                  "player_name": "James Justin",
                  "ranking": 15130
                },
                {
                  "player_name": "Allahyar Sayyadmanesh",
                  "ranking": 15131
                },
                {
                  "player_name": "Ricardo Pepi",
                  "ranking": 15132
                },
                {
                  "player_name": "Qazim Laci",
                  "ranking": 15133
                }
              ]
            }
          }
        }
      },
      "team_totals": {
        "projected_goals": 2,
        "expected_goals": 2.28,
        "expected_assists": 0.77,
        "total_shots": 13,
        "shots_on_target": 4,
        "total_passes": 449,
        "interceptions": 7,
        "tackles": 15,
        "avg_rating": 83.1,
        "possession_estimated_pct": 53.4,
        "pressing_actions_per_90": 7.6
      }
    },
    "Jordan": {
      "formation": "3-5-2",
      "players": {
        "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": 2.48,
            "high_pressure_saves": 0.94,
            "shots_faced": 5.3,
            "opponent_faced": "Paul Wanner, Christoph Baumgartner",
            "matchup_zone": "Goalkeeper shot-stopping context",
            "antagonist_source": "formation_fallback",
            "fifa_overall": 81.0,
            "goals": 0,
            "projected_goals": 0,
            "goal_probability": 0.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 4631,
            "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": "David Riegler",
                  "ranking": 4626
                },
                {
                  "player_name": "Themba Zwane",
                  "ranking": 4627
                },
                {
                  "player_name": "Keno",
                  "ranking": 4628
                },
                {
                  "player_name": "Mohammed Al-Owais",
                  "ranking": 4629
                },
                {
                  "player_name": "Ehsan Hajsafi",
                  "ranking": 4630
                }
              ],
              "lower": [
                {
                  "player_name": "Kevin Chamorro",
                  "ranking": 4632
                },
                {
                  "player_name": "Stefan Petrović",
                  "ranking": 4633
                },
                {
                  "player_name": "Panagiotis Tachtsidis",
                  "ranking": 4634
                },
                {
                  "player_name": "Malik Jakupovic",
                  "ranking": 4635
                },
                {
                  "player_name": "Angelos Neophytou",
                  "ranking": 4636
                }
              ]
            }
          }
        },
        "Yazan Al-Arab": {
          "player_id": 888906,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 5,
          "height": 186,
          "market_value": 930000,
          "stats": {
            "interceptions": 2,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 4,
            "aerial_won": 4,
            "rating": 81.4788,
            "minutes": 78,
            "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.5487,
            "goals": 0,
            "assists": 0,
            "expected_goals": 0.0081,
            "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": "Saša Kalajdžić",
            "matchup_zone": "Shape fallback",
            "antagonist_source": "formation_fallback",
            "fifa_overall": 75.0,
            "projected_goals": 0,
            "goal_probability": 0.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": 15064,
            "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": "Léo Duarte",
                  "ranking": 15059
                },
                {
                  "player_name": "Raúl Moro",
                  "ranking": 15060
                },
                {
                  "player_name": "Abel Bretones",
                  "ranking": 15061
                },
                {
                  "player_name": "Giuliano Galoppo",
                  "ranking": 15062
                },
                {
                  "player_name": "Niclas Eliasson",
                  "ranking": 15063
                }
              ],
              "lower": [
                {
                  "player_name": "Miro Muheim",
                  "ranking": 15065
                },
                {
                  "player_name": "Fabio Miretti",
                  "ranking": 15066
                },
                {
                  "player_name": "Yeimar Gómez",
                  "ranking": 15067
                },
                {
                  "player_name": "Pep Chavarría",
                  "ranking": 15068
                },
                {
                  "player_name": "Daniele Rugani",
                  "ranking": 15069
                }
              ]
            }
          }
        },
        "Abdallah Nasib": {
          "player_id": 1114497,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 3,
          "height": 185,
          "market_value": 450000,
          "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,
            "goal_rate": 0.0167,
            "goals": 0,
            "expected_goals": 0.0148,
            "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.4,
            "defensive_success_rate": 0.722,
            "opponent_faced": "Saša Kalajdžić",
            "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",
            "fifa_overall": 80.0,
            "projected_goals": 0,
            "goal_probability": 0.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3189,
            "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": 5,
            "squad_role": "starter",
            "projected_match_rating": 6.5742,
            "source_file": "data/player_rankings.csv",
            "player_name": "Abdallah Nasib",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Patrik Myslovič",
                  "ranking": 3184
                },
                {
                  "player_name": "Mohamed Makhlouf",
                  "ranking": 3185
                },
                {
                  "player_name": "Hammam Al-Hammami",
                  "ranking": 3186
                },
                {
                  "player_name": "Jeison Lucumí",
                  "ranking": 3187
                },
                {
                  "player_name": "Žiga Repas",
                  "ranking": 3188
                }
              ],
              "lower": [
                {
                  "player_name": "Chiqueti",
                  "ranking": 3190
                },
                {
                  "player_name": "Eduardo Anderson",
                  "ranking": 3191
                },
                {
                  "player_name": "Luis Castillo",
                  "ranking": 3192
                },
                {
                  "player_name": "Jeremy Mejia",
                  "ranking": 3193
                },
                {
                  "player_name": "Piotr Zieliński",
                  "ranking": 3194
                }
              ]
            }
          }
        },
        "Mohammad Ali Hasheesh": {
          "player_id": 1139989,
          "position": "D",
          "position_depth": "D",
          "is_starter": true,
          "shirt_number": 27,
          "height": 183,
          "market_value": 440000,
          "stats": {
            "interceptions": 1,
            "tackles": 2,
            "tackles_won": 1,
            "clearances": 3,
            "aerial_won": 2,
            "duels_won": 4,
            "rating": 87.5742,
            "minutes": 90,
            "total_pass": 40,
            "accurate_pass": 32,
            "goal_rate": 0.01,
            "goals": 0,
            "expected_goals": 0.0089,
            "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.4,
            "defensive_success_rate": 0.722,
            "opponent_faced": "Saša Kalajdžić",
            "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",
            "fifa_overall": 81.0,
            "projected_goals": 0,
            "goal_probability": 0.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3234,
            "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": "starter",
            "projected_match_rating": 6.5742,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mohammad Ali Hasheesh",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Simon Banza",
                  "ranking": 3229
                },
                {
                  "player_name": "Ramazan Orazov",
                  "ranking": 3230
                },
                {
                  "player_name": "Mohannad Abu Taha",
                  "ranking": 3231
                },
                {
                  "player_name": "Abdelali Mhamdi",
                  "ranking": 3232
                },
                {
                  "player_name": "Fahad Talib",
                  "ranking": 3233
                }
              ],
              "lower": [
                {
                  "player_name": "Ricardo Phillips",
                  "ranking": 3235
                },
                {
                  "player_name": "Aleks Bozhev",
                  "ranking": 3236
                },
                {
                  "player_name": "Luis Moreno",
                  "ranking": 3237
                },
                {
                  "player_name": "D.J. Taylor",
                  "ranking": 3238
                },
                {
                  "player_name": "Nicolás Orellana",
                  "ranking": 3239
                }
              ]
            }
          }
        },
        "Nizar Mahmoud 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.0308,
            "rating": 86.7638,
            "minutes": 88,
            "total_pass": 41,
            "accurate_pass": 34,
            "ball_recovery": 7,
            "duels_won": 5,
            "total_shots": 1,
            "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.0355,
            "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": 1,
            "dribbles_successful": 0.2,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.268,
            "pressing_faced": "HIGH",
            "matchup_zone": "CDM vs CDM",
            "numerical_situation": "1v1",
            "opponent_defenders": "Christoph Baumgartner",
            "opponent_faced": "Christoph Baumgartner",
            "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing",
            "fifa_overall": 80.0,
            "projected_goals": 0,
            "goal_probability": 0.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": 2421,
            "combined_rank_score": 468.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 604.0,
            "fifa_overall": 80.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": "Amer Gojak",
                  "ranking": 2416
                },
                {
                  "player_name": "Isaac Matondo",
                  "ranking": 2417
                },
                {
                  "player_name": "Zinédine Machach",
                  "ranking": 2418
                },
                {
                  "player_name": "Matej Vuk",
                  "ranking": 2419
                },
                {
                  "player_name": "Gijs Besselink",
                  "ranking": 2420
                }
              ],
              "lower": [
                {
                  "player_name": "Bernard",
                  "ranking": 2422
                },
                {
                  "player_name": "Ali Hamdy",
                  "ranking": 2423
                },
                {
                  "player_name": "Uroš Ignjatović",
                  "ranking": 2424
                },
                {
                  "player_name": "Maicol Ferreira",
                  "ranking": 2425
                },
                {
                  "player_name": "Yago Pikachu",
                  "ranking": 2426
                }
              ]
            }
          }
        },
        "Mohannad Abu Taha": {
          "player_id": 1114775,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 14,
          "height": 176,
          "market_value": 440000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0981,
            "assists": 0,
            "expected_goals": 0.0397,
            "rating": 87.6724,
            "minutes": 90,
            "total_pass": 45,
            "accurate_pass": 36,
            "ball_recovery": 3,
            "duels_won": 4,
            "total_shots": 1,
            "goal_rate": 0.0326,
            "goals": 0,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.5,
            "aerial_won": 1,
            "fouls_drawn": 1,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.261,
            "pressing_faced": "HIGH",
            "matchup_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
            "numerical_situation": "1v1",
            "opponent_defenders": "Christoph Baumgartner",
            "opponent_faced": "Christoph Baumgartner",
            "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing",
            "fifa_overall": 81.0,
            "projected_goals": 0,
            "goal_probability": 0.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3231,
            "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": 6,
            "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": 3226
                },
                {
                  "player_name": "Julian Ceballos",
                  "ranking": 3227
                },
                {
                  "player_name": "Shuhei Tokumoto",
                  "ranking": 3228
                },
                {
                  "player_name": "Simon Banza",
                  "ranking": 3229
                },
                {
                  "player_name": "Ramazan Orazov",
                  "ranking": 3230
                }
              ],
              "lower": [
                {
                  "player_name": "Abdelali Mhamdi",
                  "ranking": 3232
                },
                {
                  "player_name": "Fahad Talib",
                  "ranking": 3233
                },
                {
                  "player_name": "Mohammad Ali Hasheesh",
                  "ranking": 3234
                },
                {
                  "player_name": "Ricardo Phillips",
                  "ranking": 3235
                },
                {
                  "player_name": "Aleks Bozhev",
                  "ranking": 3236
                }
              ]
            }
          }
        },
        "Amer Jamous": {
          "player_id": 1019495,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 71,
          "height": 174,
          "market_value": 435000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0981,
            "assists": 0,
            "expected_goals": 0.0479,
            "rating": 87.6724,
            "minutes": 90,
            "total_pass": 45,
            "accurate_pass": 36,
            "ball_recovery": 3,
            "duels_won": 4,
            "total_shots": 1,
            "goal_rate": 0.0536,
            "goals": 0,
            "opponent_faced": "Nicolas Seiwald",
            "matchup_zone": "Midfield lane",
            "antagonist_source": "midfield_pairing",
            "fifa_overall": 81.0,
            "projected_goals": 0,
            "goal_probability": 0.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3269,
            "combined_rank_score": 431.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 494.0,
            "fifa_overall": 81.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 8,
            "squad_role": "starter",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Amer Jamous",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Oskar Buur",
                  "ranking": 3264
                },
                {
                  "player_name": "Lucky Ezeh",
                  "ranking": 3265
                },
                {
                  "player_name": "Stanley Kanu",
                  "ranking": 3266
                },
                {
                  "player_name": "Lucas Suárez",
                  "ranking": 3267
                },
                {
                  "player_name": "Gubari Sherko",
                  "ranking": 3268
                }
              ],
              "lower": [
                {
                  "player_name": "Ed Carlos",
                  "ranking": 3270
                },
                {
                  "player_name": "Giorgio Puzzoli",
                  "ranking": 3271
                },
                {
                  "player_name": "Miloš Pantović",
                  "ranking": 3272
                },
                {
                  "player_name": "Koke",
                  "ranking": 3273
                },
                {
                  "player_name": "Isco",
                  "ranking": 3274
                }
              ]
            }
          }
        },
        "Ibrahim Sadeh": {
          "player_id": 997817,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 0,
          "height": 174,
          "market_value": 415000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0981,
            "assists": 0,
            "expected_goals": 0.0474,
            "rating": 87.6724,
            "minutes": 90,
            "total_pass": 45,
            "accurate_pass": 36,
            "ball_recovery": 3,
            "duels_won": 4,
            "total_shots": 1,
            "goal_rate": 0.0523,
            "goals": 0,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.5,
            "aerial_won": 1,
            "fouls_drawn": 1,
            "crosses_attempted": 2.1,
            "duel_win_rate": 0.289,
            "pressing_faced": "LOW",
            "matchup_zone": "Left Wingback vs Right Back — Overlapping Run",
            "numerical_situation": "1v1",
            "opponent_defenders": "Philipp Lienhart",
            "opponent_faced": "Philipp Lienhart",
            "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing",
            "fifa_overall": 81.0,
            "projected_goals": 0,
            "goal_probability": 0.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3426,
            "combined_rank_score": 437.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 502.0,
            "fifa_overall": 81.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 9,
            "squad_role": "starter",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Ibrahim Sadeh",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Alessandro Burlamaqui",
                  "ranking": 3421
                },
                {
                  "player_name": "Amin Gröller",
                  "ranking": 3422
                },
                {
                  "player_name": "Ahmed Hasan Maknazi",
                  "ranking": 3423
                },
                {
                  "player_name": "Caio Roque",
                  "ranking": 3424
                },
                {
                  "player_name": "Paul Charpentier",
                  "ranking": 3425
                }
              ],
              "lower": [
                {
                  "player_name": "Julien Ngoy",
                  "ranking": 3427
                },
                {
                  "player_name": "Elkhan Astanov",
                  "ranking": 3428
                },
                {
                  "player_name": "Kevin Felida",
                  "ranking": 3429
                },
                {
                  "player_name": "Iker Undabarrena",
                  "ranking": 3430
                },
                {
                  "player_name": "Bryce Jamison",
                  "ranking": 3431
                }
              ]
            }
          }
        },
        "Noor Al-Deen Al Rawabdeh": {
          "player_id": 927845,
          "position": "M",
          "position_depth": "M",
          "is_starter": true,
          "shirt_number": 8,
          "height": 179,
          "market_value": 410000,
          "stats": {
            "key_pass": 1,
            "expected_assists": 0.0981,
            "assists": 0,
            "expected_goals": 0.0427,
            "rating": 86.6724,
            "minutes": 90,
            "total_pass": 45,
            "accurate_pass": 36,
            "ball_recovery": 3,
            "duels_won": 4,
            "total_shots": 1,
            "goal_rate": 0.0402,
            "goals": 0,
            "dribbles_attempted": 2,
            "dribbles_successful": 0.4,
            "aerial_won": 1,
            "fouls_drawn": 1,
            "crosses_attempted": 2.1,
            "duel_win_rate": 0.252,
            "pressing_faced": "HIGH",
            "matchup_zone": "Right Wingback vs Left Back — Overlapping Run",
            "numerical_situation": "1v1",
            "opponent_defenders": "Konrad Laimer",
            "opponent_faced": "Konrad Laimer",
            "antagonist_source": "defensive_duel, attacking_duel, midfield_pairing",
            "fifa_overall": 80.0,
            "projected_goals": 0,
            "goal_probability": 0.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3497,
            "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": 10,
            "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": "Armin Culum",
                  "ranking": 3492
                },
                {
                  "player_name": "Mido Mostafa",
                  "ranking": 3493
                },
                {
                  "player_name": "Dani Meso",
                  "ranking": 3494
                },
                {
                  "player_name": "Dyogo Alves",
                  "ranking": 3495
                },
                {
                  "player_name": "Mateus Jose Iseppe",
                  "ranking": 3496
                }
              ],
              "lower": [
                {
                  "player_name": "Iyayi Believe Atiemwen",
                  "ranking": 3498
                },
                {
                  "player_name": "Seymour Garfield-Reid",
                  "ranking": 3499
                },
                {
                  "player_name": "Taieb Ben Zitoun",
                  "ranking": 3500
                },
                {
                  "player_name": "Prins Menelik Tjiueza",
                  "ranking": 3501
                },
                {
                  "player_name": "Jurien Gaari",
                  "ranking": 3502
                }
              ]
            }
          }
        },
        "Mousa Tamari": {
          "player_id": 876600,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 11,
          "height": 175,
          "market_value": 10800000,
          "stats": {
            "expected_goals": 0.1346,
            "goal_rate": 0.1363,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0957,
            "key_pass": 1,
            "rating": 90.6259,
            "minutes": 90,
            "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": 2,
            "dribbles_successful": 0.3,
            "crosses_attempted": 0.0,
            "duel_win_rate": 0.18,
            "pressing_faced": "LOW",
            "matchup_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
            "numerical_situation": "1v2",
            "opponent_defenders": "Kevin Danso, Marco Friedl",
            "opponent_faced": "Kevin Danso, Marco Friedl",
            "antagonist_source": "attacking_duel",
            "fifa_overall": 84.0,
            "projected_goals": 0,
            "goal_probability": 0.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": "Sancet",
                  "ranking": 275
                },
                {
                  "player_name": "Xavi Simons",
                  "ranking": 276
                },
                {
                  "player_name": "Leonard Pllana",
                  "ranking": 277
                },
                {
                  "player_name": "Alan Medina",
                  "ranking": 278
                },
                {
                  "player_name": "Joaquín Moya",
                  "ranking": 279
                }
              ],
              "lower": [
                {
                  "player_name": "Allan Saint-Maximin",
                  "ranking": 281
                },
                {
                  "player_name": "Luciano Juba",
                  "ranking": 282
                },
                {
                  "player_name": "Eldor Adhamov",
                  "ranking": 283
                },
                {
                  "player_name": "Robert Renan",
                  "ranking": 284
                },
                {
                  "player_name": "Adrien Rabiot",
                  "ranking": 285
                }
              ]
            }
          }
        },
        "Ali Olwan": {
          "player_id": 980728,
          "position": "F",
          "position_depth": "F",
          "is_starter": true,
          "shirt_number": 18,
          "height": 180,
          "market_value": 825000,
          "stats": {
            "expected_goals": 0.2728,
            "goal_rate": 0.2132,
            "goals": 0,
            "shots_on_target": 1,
            "total_shots": 2,
            "rating": 89.6724,
            "minutes": 90,
            "expected_assists": 0.0491,
            "duels_won": 3,
            "aerial_won": 1,
            "key_pass": 0,
            "opponent_faced": "Konrad Laimer, Kevin Danso",
            "matchup_zone": "Shape fallback",
            "antagonist_source": "formation_fallback",
            "fifa_overall": 83.0,
            "projected_goals": 0,
            "goal_probability": 0.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 1840,
            "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": "Ante Matej Jurić",
                  "ranking": 1835
                },
                {
                  "player_name": "Mohamed Reda",
                  "ranking": 1836
                },
                {
                  "player_name": "Baptiste Roux",
                  "ranking": 1837
                },
                {
                  "player_name": "Gonzalo Escobar",
                  "ranking": 1838
                },
                {
                  "player_name": "Nick Shinton",
                  "ranking": 1839
                }
              ],
              "lower": [
                {
                  "player_name": "Hamza El Moussaoui",
                  "ranking": 1841
                },
                {
                  "player_name": "DeAndre Yedlin",
                  "ranking": 1842
                },
                {
                  "player_name": "Amjad Attwan",
                  "ranking": 1843
                },
                {
                  "player_name": "Agustín Arce",
                  "ranking": 1844
                },
                {
                  "player_name": "Artur Gajdoš",
                  "ranking": 1845
                }
              ]
            }
          }
        }
      },
      "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": 88.6724,
            "minutes": 4,
            "bench_appearance_probability": 0.109,
            "bench_expected_minutes": 4.39,
            "fifa_overall": 82.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 5115,
            "combined_rank_score": 419.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 436.0,
            "fifa_overall": 82.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": "Raed Chikhaoui",
                  "ranking": 5110
                },
                {
                  "player_name": "Pico",
                  "ranking": 5111
                },
                {
                  "player_name": "Ingars Pulis",
                  "ranking": 5112
                },
                {
                  "player_name": "Filip Holender",
                  "ranking": 5113
                },
                {
                  "player_name": "Didier La Torre",
                  "ranking": 5114
                }
              ],
              "lower": [
                {
                  "player_name": "Yandri Vasquez",
                  "ranking": 5116
                },
                {
                  "player_name": "Luka Posinkovic",
                  "ranking": 5117
                },
                {
                  "player_name": "Snayder Porozo",
                  "ranking": 5118
                },
                {
                  "player_name": "Gadiel Michael Kamagi",
                  "ranking": 5119
                },
                {
                  "player_name": "Stas Kornzeniowski",
                  "ranking": 5120
                }
              ]
            }
          }
        },
        "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,
            "fifa_overall": 81.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3603,
            "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": 13,
            "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": 3598
                },
                {
                  "player_name": "Issam Al-Subhi",
                  "ranking": 3599
                },
                {
                  "player_name": "Davi Gomes",
                  "ranking": 3600
                },
                {
                  "player_name": "Leonardo Zabala",
                  "ranking": 3601
                },
                {
                  "player_name": "Thalisson Gabriel",
                  "ranking": 3602
                }
              ],
              "lower": [
                {
                  "player_name": "Edinson Mero",
                  "ranking": 3604
                },
                {
                  "player_name": "Giorgi Moistsrapishvili",
                  "ranking": 3605
                },
                {
                  "player_name": "Dinmukhamed Karaman",
                  "ranking": 3606
                },
                {
                  "player_name": "Manuel Mónaco",
                  "ranking": 3607
                },
                {
                  "player_name": "Marian Faryna",
                  "ranking": 3608
                }
              ]
            }
          }
        },
        "Mohammad Taha": {
          "player_id": 2048339,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 3,
          "height": 182,
          "market_value": 260000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 0,
            "aerial_won": 0,
            "duels_won": 1,
            "rating": 88.5742,
            "minutes": 14,
            "total_pass": 6,
            "accurate_pass": 5,
            "bench_appearance_probability": 0.299,
            "bench_expected_minutes": 13.57,
            "fifa_overall": 82.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 5122,
            "combined_rank_score": 419.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 436.0,
            "fifa_overall": 82.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 17,
            "squad_role": "substitute",
            "projected_match_rating": 6.5742,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mohammad Taha",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Luka Posinkovic",
                  "ranking": 5117
                },
                {
                  "player_name": "Snayder Porozo",
                  "ranking": 5118
                },
                {
                  "player_name": "Gadiel Michael Kamagi",
                  "ranking": 5119
                },
                {
                  "player_name": "Stas Kornzeniowski",
                  "ranking": 5120
                },
                {
                  "player_name": "Awn Al-Saluli",
                  "ranking": 5121
                }
              ],
              "lower": [
                {
                  "player_name": "Mateo Maccari",
                  "ranking": 5123
                },
                {
                  "player_name": "Abdallah Gamal",
                  "ranking": 5124
                },
                {
                  "player_name": "Christian García",
                  "ranking": 5125
                },
                {
                  "player_name": "Deniss Melniks",
                  "ranking": 5126
                },
                {
                  "player_name": "Andreas Søndergaard",
                  "ranking": 5127
                }
              ]
            }
          }
        },
        "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.0493,
            "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,
            "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": 3529,
            "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": 11,
            "squad_role": "substitute",
            "projected_match_rating": 6.7777,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mohammad Abu Zrayq",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Gerard Moreno",
                  "ranking": 3524
                },
                {
                  "player_name": "Antonio Raíllo",
                  "ranking": 3525
                },
                {
                  "player_name": "Salah Moussadak",
                  "ranking": 3526
                },
                {
                  "player_name": "Galego",
                  "ranking": 3527
                },
                {
                  "player_name": "Alexander Selecký",
                  "ranking": 3528
                }
              ],
              "lower": [
                {
                  "player_name": "Pierre Kalulu",
                  "ranking": 3530
                },
                {
                  "player_name": "Tsuyoshi Ogashiwa",
                  "ranking": 3531
                },
                {
                  "player_name": "Delvin Alfonzo",
                  "ranking": 3532
                },
                {
                  "player_name": "Botirali Ergashev",
                  "ranking": 3533
                },
                {
                  "player_name": "Dilshod Akhmadaliev",
                  "ranking": 3534
                }
              ]
            }
          }
        },
        "Mahmoud Al-Mardi": {
          "player_id": 812557,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 13,
          "height": 179,
          "market_value": 390000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0239,
            "assists": 0,
            "expected_goals": 0.012,
            "rating": 90.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,
            "fifa_overall": 84.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3598,
            "combined_rank_score": 299.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 221.0,
            "fifa_overall": 84.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 12,
            "squad_role": "substitute",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mahmoud Al-Mardi",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Nikola Vasiljević",
                  "ranking": 3593
                },
                {
                  "player_name": "Mohamed Shokry",
                  "ranking": 3594
                },
                {
                  "player_name": "Pedro Soma",
                  "ranking": 3595
                },
                {
                  "player_name": "Alex Matthias Tamm",
                  "ranking": 3596
                },
                {
                  "player_name": "Jorge Hurtado",
                  "ranking": 3597
                }
              ],
              "lower": [
                {
                  "player_name": "Issam Al-Subhi",
                  "ranking": 3599
                },
                {
                  "player_name": "Davi Gomes",
                  "ranking": 3600
                },
                {
                  "player_name": "Leonardo Zabala",
                  "ranking": 3601
                },
                {
                  "player_name": "Thalisson Gabriel",
                  "ranking": 3602
                },
                {
                  "player_name": "Saad Al Rousan",
                  "ranking": 3603
                }
              ]
            }
          }
        },
        "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.0207,
            "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,
            "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": 3166,
            "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": 14,
            "squad_role": "substitute",
            "projected_match_rating": 6.3201,
            "source_file": "data/player_rankings.csv",
            "player_name": "Ibrahim Sabra",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Giancarlo Schiavone",
                  "ranking": 3161
                },
                {
                  "player_name": "Athanasios Androutsos",
                  "ranking": 3162
                },
                {
                  "player_name": "Antonio Mance",
                  "ranking": 3163
                },
                {
                  "player_name": "Bruno Larregui",
                  "ranking": 3164
                },
                {
                  "player_name": "Youness Akharraz",
                  "ranking": 3165
                }
              ],
              "lower": [
                {
                  "player_name": "Luka Lijeskić",
                  "ranking": 3167
                },
                {
                  "player_name": "Patricio Tanda",
                  "ranking": 3168
                },
                {
                  "player_name": "Franko Kolić",
                  "ranking": 3169
                },
                {
                  "player_name": "Soulaimane El Bouchqali",
                  "ranking": 3170
                },
                {
                  "player_name": "Luciano Squadrone",
                  "ranking": 3171
                }
              ]
            }
          }
        },
        "Odeh Fakhoury": {
          "player_id": 1937497,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 25,
          "height": 180,
          "market_value": 225000,
          "stats": {
            "expected_goals": 0.0,
            "goal_rate": 0.0001,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0006,
            "key_pass": 0,
            "rating": 86.4489,
            "minutes": 25,
            "total_shots": 0,
            "duels_won": 0,
            "aerial_won": 0,
            "total_pass": 1,
            "accurate_pass": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 1,
            "accurate_opp_half_passes": 1,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 2,
            "possession_lost": 0.5515,
            "dispossessed": 0.9812,
            "duels_lost": 0,
            "aerial_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 0,
            "challenges_lost": 0,
            "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.0,
            "offsides": 0,
            "ball_carries": 0,
            "total_progression": 2,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.559,
            "bench_expected_minutes": 25.29,
            "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": 5499,
            "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": 18,
            "squad_role": "substitute",
            "projected_match_rating": 6.4489,
            "source_file": "data/player_rankings.csv",
            "player_name": "Odeh Fakhoury",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Nikola Srećković",
                  "ranking": 5494
                },
                {
                  "player_name": "Mohamed El Sayed",
                  "ranking": 5495
                },
                {
                  "player_name": "Kendall Porras",
                  "ranking": 5496
                },
                {
                  "player_name": "Mauro Martín",
                  "ranking": 5497
                },
                {
                  "player_name": "Steven Bergwijn",
                  "ranking": 5498
                }
              ],
              "lower": [
                {
                  "player_name": "Wisdom Aondowase Sule",
                  "ranking": 5500
                },
                {
                  "player_name": "Dániel Gyollai",
                  "ranking": 5501
                },
                {
                  "player_name": "Ovidio Lopez",
                  "ranking": 5502
                },
                {
                  "player_name": "Jasurbek Jaloliddinov",
                  "ranking": 5503
                },
                {
                  "player_name": "Jaloliddin Jumaboyev",
                  "ranking": 5504
                }
              ]
            }
          }
        }
      },
      "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": 88.6724,
            "minutes": 4,
            "bench_appearance_probability": 0.109,
            "bench_expected_minutes": 4.39,
            "fifa_overall": 82.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 5115,
            "combined_rank_score": 419.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 436.0,
            "fifa_overall": 82.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": "Raed Chikhaoui",
                  "ranking": 5110
                },
                {
                  "player_name": "Pico",
                  "ranking": 5111
                },
                {
                  "player_name": "Ingars Pulis",
                  "ranking": 5112
                },
                {
                  "player_name": "Filip Holender",
                  "ranking": 5113
                },
                {
                  "player_name": "Didier La Torre",
                  "ranking": 5114
                }
              ],
              "lower": [
                {
                  "player_name": "Yandri Vasquez",
                  "ranking": 5116
                },
                {
                  "player_name": "Luka Posinkovic",
                  "ranking": 5117
                },
                {
                  "player_name": "Snayder Porozo",
                  "ranking": 5118
                },
                {
                  "player_name": "Gadiel Michael Kamagi",
                  "ranking": 5119
                },
                {
                  "player_name": "Stas Kornzeniowski",
                  "ranking": 5120
                }
              ]
            }
          }
        },
        "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,
            "fifa_overall": 81.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3603,
            "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": 13,
            "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": 3598
                },
                {
                  "player_name": "Issam Al-Subhi",
                  "ranking": 3599
                },
                {
                  "player_name": "Davi Gomes",
                  "ranking": 3600
                },
                {
                  "player_name": "Leonardo Zabala",
                  "ranking": 3601
                },
                {
                  "player_name": "Thalisson Gabriel",
                  "ranking": 3602
                }
              ],
              "lower": [
                {
                  "player_name": "Edinson Mero",
                  "ranking": 3604
                },
                {
                  "player_name": "Giorgi Moistsrapishvili",
                  "ranking": 3605
                },
                {
                  "player_name": "Dinmukhamed Karaman",
                  "ranking": 3606
                },
                {
                  "player_name": "Manuel Mónaco",
                  "ranking": 3607
                },
                {
                  "player_name": "Marian Faryna",
                  "ranking": 3608
                }
              ]
            }
          }
        },
        "Mohammad Taha": {
          "player_id": 2048339,
          "position": "D",
          "position_depth": "D_BENCH",
          "is_starter": false,
          "shirt_number": 3,
          "height": 182,
          "market_value": 260000,
          "stats": {
            "interceptions": 0,
            "tackles": 0,
            "tackles_won": 0,
            "clearances": 0,
            "aerial_won": 0,
            "duels_won": 1,
            "rating": 88.5742,
            "minutes": 14,
            "total_pass": 6,
            "accurate_pass": 5,
            "bench_appearance_probability": 0.299,
            "bench_expected_minutes": 13.57,
            "fifa_overall": 82.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 5122,
            "combined_rank_score": 419.5,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 436.0,
            "fifa_overall": 82.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 17,
            "squad_role": "substitute",
            "projected_match_rating": 6.5742,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mohammad Taha",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Luka Posinkovic",
                  "ranking": 5117
                },
                {
                  "player_name": "Snayder Porozo",
                  "ranking": 5118
                },
                {
                  "player_name": "Gadiel Michael Kamagi",
                  "ranking": 5119
                },
                {
                  "player_name": "Stas Kornzeniowski",
                  "ranking": 5120
                },
                {
                  "player_name": "Awn Al-Saluli",
                  "ranking": 5121
                }
              ],
              "lower": [
                {
                  "player_name": "Mateo Maccari",
                  "ranking": 5123
                },
                {
                  "player_name": "Abdallah Gamal",
                  "ranking": 5124
                },
                {
                  "player_name": "Christian García",
                  "ranking": 5125
                },
                {
                  "player_name": "Deniss Melniks",
                  "ranking": 5126
                },
                {
                  "player_name": "Andreas Søndergaard",
                  "ranking": 5127
                }
              ]
            }
          }
        },
        "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.0493,
            "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,
            "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": 3529,
            "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": 11,
            "squad_role": "substitute",
            "projected_match_rating": 6.7777,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mohammad Abu Zrayq",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Gerard Moreno",
                  "ranking": 3524
                },
                {
                  "player_name": "Antonio Raíllo",
                  "ranking": 3525
                },
                {
                  "player_name": "Salah Moussadak",
                  "ranking": 3526
                },
                {
                  "player_name": "Galego",
                  "ranking": 3527
                },
                {
                  "player_name": "Alexander Selecký",
                  "ranking": 3528
                }
              ],
              "lower": [
                {
                  "player_name": "Pierre Kalulu",
                  "ranking": 3530
                },
                {
                  "player_name": "Tsuyoshi Ogashiwa",
                  "ranking": 3531
                },
                {
                  "player_name": "Delvin Alfonzo",
                  "ranking": 3532
                },
                {
                  "player_name": "Botirali Ergashev",
                  "ranking": 3533
                },
                {
                  "player_name": "Dilshod Akhmadaliev",
                  "ranking": 3534
                }
              ]
            }
          }
        },
        "Mahmoud Al-Mardi": {
          "player_id": 812557,
          "position": "M",
          "position_depth": "M_BENCH",
          "is_starter": false,
          "shirt_number": 13,
          "height": 179,
          "market_value": 390000,
          "stats": {
            "key_pass": 0,
            "expected_assists": 0.0239,
            "assists": 0,
            "expected_goals": 0.012,
            "rating": 90.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,
            "fifa_overall": 84.0
          },
          "latest_10_games": [],
          "ranking": {
            "global_player_rank": 3598,
            "combined_rank_score": 299.0,
            "ranking_source": "sofascore_plus_fifa_csv_filled",
            "ranking_status": "combined",
            "sofascore_rank": null,
            "sofascore_rating": null,
            "sofascore_appearances": 0.0,
            "fifa_rank": 221.0,
            "fifa_overall": 84.0,
            "fifa_source": "EA SPORTS FC official ratings",
            "match_squad_rank": 12,
            "squad_role": "substitute",
            "projected_match_rating": 6.6724,
            "source_file": "data/player_rankings.csv",
            "player_name": "Mahmoud Al-Mardi",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Nikola Vasiljević",
                  "ranking": 3593
                },
                {
                  "player_name": "Mohamed Shokry",
                  "ranking": 3594
                },
                {
                  "player_name": "Pedro Soma",
                  "ranking": 3595
                },
                {
                  "player_name": "Alex Matthias Tamm",
                  "ranking": 3596
                },
                {
                  "player_name": "Jorge Hurtado",
                  "ranking": 3597
                }
              ],
              "lower": [
                {
                  "player_name": "Issam Al-Subhi",
                  "ranking": 3599
                },
                {
                  "player_name": "Davi Gomes",
                  "ranking": 3600
                },
                {
                  "player_name": "Leonardo Zabala",
                  "ranking": 3601
                },
                {
                  "player_name": "Thalisson Gabriel",
                  "ranking": 3602
                },
                {
                  "player_name": "Saad Al Rousan",
                  "ranking": 3603
                }
              ]
            }
          }
        },
        "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.0207,
            "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,
            "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": 3166,
            "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": 14,
            "squad_role": "substitute",
            "projected_match_rating": 6.3201,
            "source_file": "data/player_rankings.csv",
            "player_name": "Ibrahim Sabra",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Giancarlo Schiavone",
                  "ranking": 3161
                },
                {
                  "player_name": "Athanasios Androutsos",
                  "ranking": 3162
                },
                {
                  "player_name": "Antonio Mance",
                  "ranking": 3163
                },
                {
                  "player_name": "Bruno Larregui",
                  "ranking": 3164
                },
                {
                  "player_name": "Youness Akharraz",
                  "ranking": 3165
                }
              ],
              "lower": [
                {
                  "player_name": "Luka Lijeskić",
                  "ranking": 3167
                },
                {
                  "player_name": "Patricio Tanda",
                  "ranking": 3168
                },
                {
                  "player_name": "Franko Kolić",
                  "ranking": 3169
                },
                {
                  "player_name": "Soulaimane El Bouchqali",
                  "ranking": 3170
                },
                {
                  "player_name": "Luciano Squadrone",
                  "ranking": 3171
                }
              ]
            }
          }
        },
        "Odeh Fakhoury": {
          "player_id": 1937497,
          "position": "F",
          "position_depth": "F_BENCH",
          "is_starter": false,
          "shirt_number": 25,
          "height": 180,
          "market_value": 225000,
          "stats": {
            "expected_goals": 0.0,
            "goal_rate": 0.0001,
            "goals": 0,
            "shots_on_target": 0,
            "expected_assists": 0.0006,
            "key_pass": 0,
            "rating": 86.4489,
            "minutes": 25,
            "total_shots": 0,
            "duels_won": 0,
            "aerial_won": 0,
            "total_pass": 1,
            "accurate_pass": 1,
            "total_long_balls": 0,
            "accurate_long_balls": 0,
            "total_opp_half_passes": 1,
            "accurate_opp_half_passes": 1,
            "crosses_total": 0,
            "crosses_accurate": 0,
            "touches": 2,
            "possession_lost": 0.5515,
            "dispossessed": 0.9812,
            "duels_lost": 0,
            "aerial_lost": 0,
            "total_contest": 0,
            "won_contest": 0,
            "ball_recovery": 0,
            "challenges_lost": 0,
            "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.0,
            "offsides": 0,
            "ball_carries": 0,
            "total_progression": 2,
            "progressive_carries": 0,
            "bench_appearance_probability": 0.559,
            "bench_expected_minutes": 25.29,
            "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": 5499,
            "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": 18,
            "squad_role": "substitute",
            "projected_match_rating": 6.4489,
            "source_file": "data/player_rankings.csv",
            "player_name": "Odeh Fakhoury",
            "ranking_neighbors": {
              "upper": [
                {
                  "player_name": "Nikola Srećković",
                  "ranking": 5494
                },
                {
                  "player_name": "Mohamed El Sayed",
                  "ranking": 5495
                },
                {
                  "player_name": "Kendall Porras",
                  "ranking": 5496
                },
                {
                  "player_name": "Mauro Martín",
                  "ranking": 5497
                },
                {
                  "player_name": "Steven Bergwijn",
                  "ranking": 5498
                }
              ],
              "lower": [
                {
                  "player_name": "Wisdom Aondowase Sule",
                  "ranking": 5500
                },
                {
                  "player_name": "Dániel Gyollai",
                  "ranking": 5501
                },
                {
                  "player_name": "Ovidio Lopez",
                  "ranking": 5502
                },
                {
                  "player_name": "Jasurbek Jaloliddinov",
                  "ranking": 5503
                },
                {
                  "player_name": "Jaloliddin Jumaboyev",
                  "ranking": 5504
                }
              ]
            }
          }
        }
      },
      "team_totals": {
        "projected_goals": 0,
        "expected_goals": 0.68,
        "expected_assists": 0.59,
        "total_shots": 11,
        "shots_on_target": 3,
        "total_passes": 402,
        "interceptions": 7,
        "tackles": 7,
        "avg_rating": 87.28,
        "possession_estimated_pct": 46.6,
        "pressing_actions_per_90": 6.0
      }
    }
  },
  "antagonist_report": {
    "home_attacking_duels": [
      {
        "attacker": "Romano Schmid",
        "attacker_role": "LW",
        "attacker_market_value": 16500000,
        "attacker_height": 168,
        "attacker_skill_quality": 0.595,
        "defenders": [
          "Noor Al-Deen Al Rawabdeh"
        ],
        "defender_roles": [
          "RWB"
        ],
        "def_skill_quality_avg": 0.405,
        "duel_zone": "Left Wing vs Right Wingback — Compact Flank",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.482,
        "xg_contribution": 0.0289,
        "shots_in_zone": 1.9,
        "dribbles_attempted": 4,
        "dribbles_successful": 1.7,
        "aerial_duels": 2,
        "aerial_won": 0.8,
        "crosses_in_zone": 2.2,
        "fouls_drawn": 1.2,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Noor Al-Deen Al Rawabdeh",
            "role": "RWB",
            "market_value": 410000,
            "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.2,
            "defensive_success_rate": 0.518
          }
        ],
        "duel_analysis": "Romano Schmid (LW) is evenly matched against Noor Al-Deen Al Rawabdeh in a direct 1v1 contest. Duel win probability: 48%. The quality gap is significant (€16M vs €0M avg). Projected xG contribution: 0.029 — with neither side clearly dominant."
      },
      {
        "attacker": "Paul Wanner",
        "attacker_role": "RW",
        "attacker_market_value": 18800000,
        "attacker_height": 186,
        "attacker_skill_quality": 0.619,
        "defenders": [
          "Ibrahim Sadeh"
        ],
        "defender_roles": [
          "LWB"
        ],
        "def_skill_quality_avg": 0.405,
        "duel_zone": "Right Wing vs Left Wingback — Compact Flank",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.584,
        "xg_contribution": 0.6279,
        "shots_in_zone": 2.2,
        "dribbles_attempted": 4,
        "dribbles_successful": 2.1,
        "aerial_duels": 2,
        "aerial_won": 1.2,
        "crosses_in_zone": 2.2,
        "fouls_drawn": 1.0,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Ibrahim Sadeh",
            "role": "LWB",
            "market_value": 415000,
            "tackles_attempted": 1.9,
            "tackles_won": 1.4,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.6,
            "clearances_in_zone": 0.6,
            "aerial_duels_won": 0.8,
            "defensive_success_rate": 0.416
          }
        ],
        "duel_analysis": "Paul Wanner (RW) is slightly favored against Ibrahim Sadeh in a direct 1v1 contest. Duel win probability: 58%. The quality gap is significant (€19M vs €0M avg). Projected xG contribution: 0.628 — creating consistent moderate threat."
      },
      {
        "attacker": "Carney Chukwuemeka",
        "attacker_role": "CAM",
        "attacker_market_value": 18100000,
        "attacker_height": 185,
        "attacker_skill_quality": 0.612,
        "defenders": [
          "Mohannad Abu Taha",
          "Nizar Mahmoud Al-Rashdan"
        ],
        "defender_roles": [
          "CM",
          "CDM"
        ],
        "def_skill_quality_avg": 0.407,
        "duel_zone": "CAM vs CM + CDM",
        "numerical_situation": "1v2",
        "duel_win_rate": 0.41,
        "xg_contribution": 0.1439,
        "shots_in_zone": 2.2,
        "dribbles_attempted": 3,
        "dribbles_successful": 1.1,
        "aerial_duels": 2,
        "aerial_won": 1.2,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.3,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Mohannad Abu Taha",
            "role": "CM",
            "market_value": 440000,
            "tackles_attempted": 0.9,
            "tackles_won": 0.8,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.6,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.4,
            "defensive_success_rate": 0.59
          },
          {
            "player": "Nizar Mahmoud Al-Rashdan",
            "role": "CDM",
            "market_value": 620000,
            "tackles_attempted": 0.9,
            "tackles_won": 0.8,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.7,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.4,
            "defensive_success_rate": 0.59
          }
        ],
        "duel_analysis": "Carney Chukwuemeka (CAM) faces tough defensive resistance against Mohannad Abu Taha and Nizar Mahmoud Al-Rashdan in a 2-defender block. Duel win probability: 41%. The quality gap is significant (€18M vs €1M avg). Projected xG contribution: 0.144 — and is restricted in space and time on the ball."
      },
      {
        "attacker": "Saša Kalajdžić",
        "attacker_role": "ST",
        "attacker_market_value": 3700000,
        "attacker_height": 200,
        "attacker_skill_quality": 0.446,
        "defenders": [
          "Abdallah Nasib",
          "Mohammad Ali Hasheesh"
        ],
        "defender_roles": [
          "CB",
          "CB"
        ],
        "def_skill_quality_avg": 0.406,
        "duel_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "numerical_situation": "1v2",
        "duel_win_rate": 0.278,
        "xg_contribution": 0.083,
        "shots_in_zone": 2.4,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.5,
        "aerial_duels": 3,
        "aerial_won": 2.2,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.3,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Abdallah Nasib",
            "role": "CB",
            "market_value": 450000,
            "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.4,
            "defensive_success_rate": 0.722
          },
          {
            "player": "Mohammad Ali Hasheesh",
            "role": "CB",
            "market_value": 440000,
            "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.4,
            "defensive_success_rate": 0.722
          }
        ],
        "duel_analysis": "Saša Kalajdžić (ST) is heavily outmatched defensively against Abdallah Nasib and Mohammad Ali Hasheesh in a 2-defender block. Duel win probability: 28%.  Projected xG contribution: 0.083 — with very limited chance creation expected."
      },
      {
        "attacker": "Christoph Baumgartner",
        "attacker_role": "CDM",
        "attacker_market_value": 42000000,
        "attacker_height": 180,
        "attacker_skill_quality": 0.791,
        "defenders": [
          "Mohannad Abu Taha"
        ],
        "defender_roles": [
          "CM"
        ],
        "def_skill_quality_avg": 0.405,
        "duel_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.589,
        "xg_contribution": 0.2964,
        "shots_in_zone": 1.2,
        "dribbles_attempted": 2,
        "dribbles_successful": 1.0,
        "aerial_duels": 2,
        "aerial_won": 1.1,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.1,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Mohannad Abu Taha",
            "role": "CM",
            "market_value": 440000,
            "tackles_attempted": 1.9,
            "tackles_won": 1.3,
            "fouls_committed": 0.6,
            "interceptions_in_zone": 0.6,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.9,
            "defensive_success_rate": 0.411
          }
        ],
        "duel_analysis": "Christoph Baumgartner (CDM) is slightly favored against Mohannad Abu Taha in a direct 1v1 contest. Duel win probability: 59%. The quality gap is significant (€42M vs €0M avg). Projected xG contribution: 0.296 — creating consistent moderate threat."
      }
    ],
    "away_attacking_duels": [
      {
        "attacker": "Mousa Tamari",
        "attacker_role": "ST",
        "attacker_market_value": 10800000,
        "attacker_height": 175,
        "attacker_skill_quality": 0.532,
        "defenders": [
          "Kevin Danso",
          "Marco Friedl"
        ],
        "defender_roles": [
          "CB",
          "CB"
        ],
        "def_skill_quality_avg": 0.577,
        "duel_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "numerical_situation": "1v2",
        "duel_win_rate": 0.18,
        "xg_contribution": 0.1346,
        "shots_in_zone": 2.0,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.3,
        "aerial_duels": 3,
        "aerial_won": 1.4,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.5,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Kevin Danso",
            "role": "CB",
            "market_value": 19400000,
            "tackles_attempted": 1.0,
            "tackles_won": 1.2,
            "fouls_committed": 0.5,
            "interceptions_in_zone": 1.0,
            "clearances_in_zone": 0.9,
            "aerial_duels_won": 0.8,
            "defensive_success_rate": 0.82
          },
          {
            "player": "Marco Friedl",
            "role": "CB",
            "market_value": 10600000,
            "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.8,
            "defensive_success_rate": 0.82
          }
        ],
        "duel_analysis": "Mousa Tamari (ST) is heavily outmatched defensively against Kevin Danso and Marco Friedl in a 2-defender block. Duel win probability: 18%.  Projected xG contribution: 0.135 — with very limited chance creation expected."
      },
      {
        "attacker": "Ibrahim Sadeh",
        "attacker_role": "LWB",
        "attacker_market_value": 415000,
        "attacker_height": 174,
        "attacker_skill_quality": 0.405,
        "defenders": [
          "Philipp Lienhart"
        ],
        "defender_roles": [
          "RB"
        ],
        "def_skill_quality_avg": 0.518,
        "duel_zone": "Left Wingback vs Right Back — Overlapping Run",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.289,
        "xg_contribution": 0.0382,
        "shots_in_zone": 0.8,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.5,
        "aerial_duels": 2,
        "aerial_won": 0.9,
        "crosses_in_zone": 2.1,
        "fouls_drawn": 1.3,
        "pressing_intensity_on_attacker": "LOW",
        "defender_stats": [
          {
            "player": "Philipp Lienhart",
            "role": "RB",
            "market_value": 9600000,
            "tackles_attempted": 2.0,
            "tackles_won": 2.0,
            "fouls_committed": 0.5,
            "interceptions_in_zone": 0.8,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.711
          }
        ],
        "duel_analysis": "Ibrahim Sadeh (LWB) is heavily outmatched defensively against Philipp Lienhart in a direct 1v1 contest. Duel win probability: 29%.  Projected xG contribution: 0.038 — with very limited chance creation expected."
      },
      {
        "attacker": "Noor Al-Deen Al Rawabdeh",
        "attacker_role": "RWB",
        "attacker_market_value": 410000,
        "attacker_height": 179,
        "attacker_skill_quality": 0.405,
        "defenders": [
          "Konrad Laimer"
        ],
        "defender_roles": [
          "LB"
        ],
        "def_skill_quality_avg": 0.725,
        "duel_zone": "Right Wingback vs Left Back — Overlapping Run",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.252,
        "xg_contribution": 0.032,
        "shots_in_zone": 0.8,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.4,
        "aerial_duels": 2,
        "aerial_won": 1.0,
        "crosses_in_zone": 2.1,
        "fouls_drawn": 1.3,
        "pressing_intensity_on_attacker": "HIGH",
        "defender_stats": [
          {
            "player": "Konrad Laimer",
            "role": "LB",
            "market_value": 31000000,
            "tackles_attempted": 2.2,
            "tackles_won": 2.3,
            "fouls_committed": 0.4,
            "interceptions_in_zone": 1.2,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.0,
            "defensive_success_rate": 0.748
          }
        ],
        "duel_analysis": "Noor Al-Deen Al Rawabdeh (RWB) is heavily outmatched defensively against Konrad Laimer in a direct 1v1 contest. Duel win probability: 25%. The quality gap is significant (€0M vs €31M avg). Projected xG contribution: 0.032 — with very limited chance creation expected."
      },
      {
        "attacker": "Mohannad Abu Taha",
        "attacker_role": "CM",
        "attacker_market_value": 440000,
        "attacker_height": 176,
        "attacker_skill_quality": 0.405,
        "defenders": [
          "Christoph Baumgartner"
        ],
        "defender_roles": [
          "CDM"
        ],
        "def_skill_quality_avg": 0.791,
        "duel_zone": "Central Mid vs Defensive Mid — Pressing/Creation Duel",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.261,
        "xg_contribution": 0.0303,
        "shots_in_zone": 1.3,
        "dribbles_attempted": 2,
        "dribbles_successful": 0.5,
        "aerial_duels": 2,
        "aerial_won": 0.9,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.3,
        "pressing_intensity_on_attacker": "HIGH",
        "defender_stats": [
          {
            "player": "Christoph Baumgartner",
            "role": "CDM",
            "market_value": 42000000,
            "tackles_attempted": 2.2,
            "tackles_won": 2.3,
            "fouls_committed": 0.4,
            "interceptions_in_zone": 1.3,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 1.1,
            "defensive_success_rate": 0.739
          }
        ],
        "duel_analysis": "Mohannad Abu Taha (CM) is heavily outmatched defensively against Christoph Baumgartner in a direct 1v1 contest. Duel win probability: 26%. The quality gap is significant (€0M vs €42M avg). Projected xG contribution: 0.030 — with very limited chance creation expected."
      },
      {
        "attacker": "Nizar Mahmoud Al-Rashdan",
        "attacker_role": "CDM",
        "attacker_market_value": 620000,
        "attacker_height": 185,
        "attacker_skill_quality": 0.408,
        "defenders": [
          "Christoph Baumgartner"
        ],
        "defender_roles": [
          "CDM"
        ],
        "def_skill_quality_avg": 0.791,
        "duel_zone": "CDM vs CDM",
        "numerical_situation": "1v1",
        "duel_win_rate": 0.268,
        "xg_contribution": 0.0238,
        "shots_in_zone": 0.8,
        "dribbles_attempted": 1,
        "dribbles_successful": 0.2,
        "aerial_duels": 2,
        "aerial_won": 1.2,
        "crosses_in_zone": 0.0,
        "fouls_drawn": 1.3,
        "pressing_intensity_on_attacker": "HIGH",
        "defender_stats": [
          {
            "player": "Christoph Baumgartner",
            "role": "CDM",
            "market_value": 42000000,
            "tackles_attempted": 2.2,
            "tackles_won": 2.3,
            "fouls_committed": 0.4,
            "interceptions_in_zone": 1.3,
            "clearances_in_zone": 0.5,
            "aerial_duels_won": 0.8,
            "defensive_success_rate": 0.732
          }
        ],
        "duel_analysis": "Nizar Mahmoud Al-Rashdan (CDM) is heavily outmatched defensively against Christoph Baumgartner in a direct 1v1 contest. Duel win probability: 27%. The quality gap is significant (€1M vs €42M avg). Projected xG contribution: 0.024 — with very limited chance creation expected."
      }
    ],
    "midfield_battle": {
      "home_midfield_power": 0.702,
      "away_midfield_power": 0.456,
      "home_creative_power": 0.601,
      "away_creative_power": 0.345,
      "home_defensive_power": 0.614,
      "away_defensive_power": 0.369,
      "home_dominance_ratio": 0.606,
      "home_midfield_count": 5,
      "away_midfield_count": 5,
      "home_midfield_players": [
        "Christoph Baumgartner",
        "Nicolas Seiwald",
        "Paul Wanner",
        "Carney Chukwuemeka",
        "Romano Schmid"
      ],
      "away_midfield_players": [
        "Nizar Mahmoud Al-Rashdan",
        "Mohannad Abu Taha",
        "Amer Jamous",
        "Ibrahim Sadeh",
        "Noor Al-Deen Al Rawabdeh"
      ],
      "possession_advantage": "home",
      "estimated_possession_home_pct": 53.4,
      "estimated_possession_away_pct": 46.6,
      "home_pressing_actions_per_90": 7.6,
      "away_pressing_actions_per_90": 6.0,
      "home_key_passes_projected": 5.1,
      "away_key_passes_projected": 3.6,
      "home_throughball_threat": 2.4,
      "away_throughball_threat": 1.6,
      "key_personal_duel": "Christoph Baumgartner vs Nizar Mahmoud Al-Rashdan",
      "midfield_lambda_factor_home": 1.04,
      "midfield_lambda_factor_away": 0.957
    },
    "formation_analysis": {
      "home_formation": "4-2-3-1",
      "away_formation": "3-5-2",
      "home_tactical_bonus": 0.06,
      "away_tactical_bonus": -0.06,
      "formation_verdict": "Tactical parity between 4-2-3-1 and 3-5-2. Match outcome driven primarily by individual player quality."
    },
    "home_lambda": 2.277,
    "away_lambda": 0.675,
    "home_top_threat_zones": [
      "Right Wing vs Left Wingback — Compact Flank",
      "Holding Mid vs Central Mid — Midfield Anchor Duel"
    ],
    "away_top_threat_zones": [
      "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
      "Left Wingback vs Right Back — Overlapping Run"
    ],
    "home_player_antagonists": {
      "Romano Schmid": {
        "opponents": [
          "Noor Al-Deen Al Rawabdeh",
          "Ibrahim Sadeh"
        ],
        "primary_zone": "Left Wing vs Right Wingback — Compact Flank",
        "source": "attacking_duel, midfield_pairing"
      },
      "Paul Wanner": {
        "opponents": [
          "Ibrahim Sadeh",
          "Noor Al-Deen Al Rawabdeh"
        ],
        "primary_zone": "Right Wing vs Left Wingback — Compact Flank",
        "source": "attacking_duel, midfield_pairing"
      },
      "Carney Chukwuemeka": {
        "opponents": [
          "Mohannad Abu Taha",
          "Nizar Mahmoud Al-Rashdan"
        ],
        "primary_zone": "CAM vs CM + CDM",
        "source": "attacking_duel, midfield_pairing"
      },
      "Saša Kalajdžić": {
        "opponents": [
          "Abdallah Nasib",
          "Mohammad Ali Hasheesh"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "attacking_duel"
      },
      "Christoph Baumgartner": {
        "opponents": [
          "Mohannad Abu Taha",
          "Nizar Mahmoud Al-Rashdan"
        ],
        "primary_zone": "Holding Mid vs Central Mid — Midfield Anchor Duel",
        "source": "attacking_duel, defensive_duel, midfield_pairing"
      },
      "Kevin Danso": {
        "opponents": [
          "Mousa Tamari"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "defensive_duel"
      },
      "Marco Friedl": {
        "opponents": [
          "Mousa Tamari"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "defensive_duel"
      },
      "Philipp Lienhart": {
        "opponents": [
          "Ibrahim Sadeh"
        ],
        "primary_zone": "Left Wingback vs Right Back — Overlapping Run",
        "source": "defensive_duel"
      },
      "Konrad Laimer": {
        "opponents": [
          "Noor Al-Deen Al Rawabdeh"
        ],
        "primary_zone": "Right Wingback vs Left Back — Overlapping Run",
        "source": "defensive_duel"
      },
      "Nicolas Seiwald": {
        "opponents": [
          "Amer Jamous"
        ],
        "primary_zone": "Midfield lane",
        "source": "midfield_pairing"
      },
      "Florian Wiegele": {
        "opponents": [
          "Ali Olwan",
          "Mousa Tamari"
        ],
        "primary_zone": "Shape fallback",
        "source": "formation_fallback"
      }
    },
    "away_player_antagonists": {
      "Noor Al-Deen Al Rawabdeh": {
        "opponents": [
          "Romano Schmid",
          "Konrad Laimer",
          "Paul Wanner"
        ],
        "primary_zone": "Left Wing vs Right Wingback — Compact Flank",
        "source": "defensive_duel, attacking_duel, midfield_pairing"
      },
      "Ibrahim Sadeh": {
        "opponents": [
          "Paul Wanner",
          "Philipp Lienhart",
          "Romano Schmid"
        ],
        "primary_zone": "Right Wing vs Left Wingback — Compact Flank",
        "source": "defensive_duel, attacking_duel, midfield_pairing"
      },
      "Mohannad Abu Taha": {
        "opponents": [
          "Carney Chukwuemeka",
          "Christoph Baumgartner"
        ],
        "primary_zone": "CAM vs CM + CDM",
        "source": "defensive_duel, attacking_duel, midfield_pairing"
      },
      "Nizar Mahmoud Al-Rashdan": {
        "opponents": [
          "Carney Chukwuemeka",
          "Christoph Baumgartner"
        ],
        "primary_zone": "CAM vs CM + CDM",
        "source": "defensive_duel, attacking_duel, midfield_pairing"
      },
      "Abdallah Nasib": {
        "opponents": [
          "Saša Kalajdžić"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "defensive_duel"
      },
      "Mohammad Ali Hasheesh": {
        "opponents": [
          "Saša Kalajdžić"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "defensive_duel"
      },
      "Mousa Tamari": {
        "opponents": [
          "Kevin Danso",
          "Marco Friedl"
        ],
        "primary_zone": "Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle",
        "source": "attacking_duel"
      },
      "Amer Jamous": {
        "opponents": [
          "Nicolas Seiwald"
        ],
        "primary_zone": "Midfield lane",
        "source": "midfield_pairing"
      },
      "Yazeed Abu Laila": {
        "opponents": [
          "Saša Kalajdžić",
          "Nicolas Seiwald"
        ],
        "primary_zone": "Shape fallback",
        "source": "formation_fallback"
      },
      "Yazan Al-Arab": {
        "opponents": [
          "Saša Kalajdžić"
        ],
        "primary_zone": "Shape fallback",
        "source": "formation_fallback"
      },
      "Ali Olwan": {
        "opponents": [
          "Konrad Laimer",
          "Kevin Danso"
        ],
        "primary_zone": "Shape fallback",
        "source": "formation_fallback"
      }
    },
    "key_tactical_insight": "Home midfield dominates with ~53% possession expected (Christoph Baumgartner vs Nizar Mahmoud Al-Rashdan). Total antagonist xG — Home: 1.18, Away: 0.26. Home danger zone: Right Wing vs Left Wingback — Compact Flank. Away danger zone: Striker vs Two Centre Backs — 1v2 Aerial/Physical Battle.",
    "lambda_factors": {
      "home_gk_opposition_factor": 1.0245,
      "away_gk_opposition_factor": 1.0152,
      "home_set_piece_bonus": 0.18,
      "away_set_piece_bonus": 0.026,
      "home_defensive_solidity_vs": 1.0264,
      "away_defensive_solidity_vs": 0.9512,
      "home_midfield_factor": 1.04,
      "away_midfield_factor": 0.957,
      "stage_discount": 1.0,
      "quality_gap_applied": true,
      "home_avg_quality": 0.6101,
      "away_avg_quality": 0.4194,
      "avg_quality_gap": 0.1908,
      "squad_value_gap_log": 2.0528,
      "top5_value_gap_log": 1.7949,
      "attack_value_gap_log": 1.6925,
      "elite_count_gap": 1,
      "combined_quality_gap": 0.4377,
      "stronger_lambda_boost": 0.2407,
      "weaker_lambda_suppression": 0.1401,
      "home_bench_lambda_bonus": 0.0498,
      "away_bench_lambda_bonus": 0.0488,
      "home_bench_players_modelled": 7,
      "away_bench_players_modelled": 7,
      "mismatch_score_pressure_applied": true,
      "mismatch_score_pressure_gap": 0.4377,
      "mismatch_favorite_lambda_boost": 1.1144,
      "mismatch_underdog_lambda_factor": 0.9662,
      "pre_mismatch_home_lambda": 2.043,
      "pre_mismatch_away_lambda": 0.699,
      "competitive_underdog_floor_applied": false,
      "pre_calibration_home_lambda": 2.0428,
      "pre_calibration_away_lambda": 0.6988,
      "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": 2.277,
      "final_away_lambda": 0.675
    }
  },
  "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-13T13:34:54Z"
}