Jump to content

Goalkeeper performance stats


Recommended Posts

I have been asked an interesting question about how to judge the keepers and I happened to have a terrible defending performance this season, so I decided to give it a go. I divided the scope of play into three areas: shot-stopping, box threat prevention, and build-up play.

1. Shot stopping

1.1 Expected Save Percentage Overperformance

Expected Save % is about the percentage of shots we would expect a goalkeeper to save based on post-shot xG of shots faced, and we have it available as "xSv %". The simple formula is save_ovp = save_pct / xsave_pct, where results > 1 should indicate that the goalkeeper is performing better than average. To my surprise, no keeper in the league I play achieved that, but I try to explain that there is much disparity between the offensive and defensive players in the Turkish league. I wouldn't be too shocked if the model hasn't been calibrated well enough, too.

1.2 xG Prevented Per Save

xGP is only useful if we know how busy the goalkeeper was. Usually, goalies from the underdog teams have more opportunities to drive this number up, as they are defending much more often. Calculating this is quite tricky because we don't have the number of shots faced, so we have to derive this number from other stats. The solution is to get this number from goals conceded and save pct, like this: shots_faced = goals_conceded / (1 - save_pct). Then, we can use: xGPrev/Shot = xGP / shots_faced. The two above methods are highly correlated with each other, as they are probably based on the same model, which is good as it confirms the validity of this one.

1.3 Save distribution

There are a few save types (handled, tipped, parried) that have been available on FM for some time, but I never thought about them much, until now. If we sum them up together with goals conceded, we end up almost exactly at the shots faced (unplayable leagues have a little more, playable a little less, but who cares why). What we definitely can do, is to have some kind of league average, and then compare the keepers to that average. Someone who can handle balls more often than others is more skillful. I'd say a tipped save is better than parried, as parried may go straight into the opponent's foot. Conceding more is worse. Alternatively, I created a scoring model when handled_pts = 3, tipped_pts = 2, parried_pts = 1, and conceded_pts = -3. After that, calculate a weighted average of percentages: save_dist_score = handled_per_shot * handled_pts + ...

You can see all three dimensions in the chart, the bigger the dot, the better the save distribution is (this is the 2026/27 season, so some names here might be unusual).

image.png.a510d26ce32a5ded223d67f3db305fae.png

2. Box threat prevention

This section covers: interceptions/shot, tackles/shot, mistakes/shot. The bigger the dot, the more mistakes per shot faced (no dot - no mistakes). As you can see, there isn't much difference for a sweeper play, at least when it comes to box prevention, and the data distribution seems random. Also, the goal mistakes are too sparse to be meaningful, even on the full-season data.

image.png.0aa6fed90c57272057e503f32f4af0da.png

3. Build-up play

This is the least useful for scouting, as it is affected by the team tactics a lot. There are two types of teams, those who focus on retention and play from the back, and those who just hoof the ball forward from goal. Unfortunately, the effectiveness of the latter is just terrible, and I wonder why most of the teams play this way. There is the top of the league with a high Pas %, all the rest just waste possession, while they should protect it even more when defending. Again, I compared 3 areas: pass_pct, passes_attempted_to_progressive_ratio, and passes_wasted_to_progressive_ratio for goalkeepers. The higher the dot, the less progressive passes are made compared to attempted.

image.png.c9d2f3017545f3cb35e7058bbdc68141.png

I made this analysis in Python, let me know if anything is incorrect, missing, or not clear enough. The next step should be taking whatever is useful for scouting, reduce to one simple value with some kind of scoring model, and figuring out if there are any missing gems to buy to prove this idea makes sense. I could potentially add this functionality to the app if it works. 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...