## Evaluating Rocket League Gameplay From First Principles

In this series of articles trying to evaluate player gameplay, we’ve introduced Situational Player Value (SPV) and found that it’s great at pointing out players that keep themselves in relevant positions where they can have a positive impact on the play. While doing so, SPV can punish players seemingly unfairly in some situations. To fix that, we can introduce a separate measure addressing the weaknesses of SPV.

## SPV doesn’t account for on-ball plays

There are valid reasons as to why you would end up in irrelevant positions, with negative SPV:

- Clearing the ball in defence up to teammates in the attacking half. You’d still be in the defending half while the play develops quickly in the attacking half.
- Challenging the opponents in the air in the attacking half. You’d be spending a second falling in the attacking half while your teammates go for the loose ball (and possibly taking possession).

These types of situations usually arise from the fact that you’d just made a play on the ball. The ball’s moved away and you have to recover. To account for this, let’s consider a pure on-ball measure.

## Building a measure of on-ball contribution

One common characteristic for on-ball plays is that you have to be close to the ball. To measure your on-ball contribution, I’ll take your team’s predicted goal chance when you get close to the ball, and subtract that from your team’s predicted goal chance when you leave the vicinity of the ball. (Recall that in my SPV article, I’ve trained a model to predict the chance each team has of scoring the next goal.)

Actually implementing this, I’ve gone with a 350uu to start a “possession”, and 500uu to end a possession. (For reference, the length of a car and the radius of the ball are both ~100uu.) The different thresholds act as a debouncing measure. A single fixed threshold may result in quick possessions where the car-ball distance repeatedly goes above and under the threshold in quick succession.

## A gameplay example

Let’s consider the same gameplay period as in the SPV discussion. For the bottom two panels in the figure, I’ve plotted the on-ball plays and their corresponding contribution values (instead of the individual SPV values of the previous article).

In the prior discussion, we pointed out how Atomic got no credit for the outcome of his pass to Chicago, and that Chicago was not rewarded for his goal-bound hit. With the on-ball scoring, we instead see that Atomic and Chicago’s touches at frame 8250 and 8300 are given significant credit (of +0.12 and +0.16 respectively).

Brilliant. **On-ball performance accounts for outcomes of gameplay**.

If you look at the Next Goal Prediction around Chicago’s final touch, it looks like his play was worth +0.25 while he only got a +0.16 reward. It’s fair to argue that the attributed score does not fully account for his contribution. This discrepancy comes from the 350-500uu thresholds which are somewhat arbitrarily set. However, while this can potentially be further investigated, I think the current behaviour is satisfactory. The thresholds I’ve gone with are somewhat based on the distance where a car has direct influence on the play. When considering larger thresholds, it gets harder to argue that any changes in goal chances are a result of the car; any further increase could be due to misplay by opponents. Furthermore, I don’t think there are any obvious significant biases introduced; all players will be equally affected.

## What’s next

I’ll be applying these stats to the 3 RLCS 2021-22 majors this season, and looking at the results. If my stats are correct, they would appear to indeed confirm that yanxnz, mist and Seikoo are very good Rocket League players. Who knew?

To be honest, I’ve also been playing around with more stats. It’s been pointed out to me that another way to tackle SPV’s “ignores gameplay outcome” problem may lie in treating actions as “cashing in” your SPV for your team’s goal chance. I’ve been attempting to come up with ways to measure this conversion rate, but the results are somewhat unintuitive. So I’m still toying around with additional stats beyond these two.