Estimating shot speed from a sensor worn on the leg means transforming a movement signal into a physical value: a speed expressed in meters per second.
To understand how this works, it helps to start with the basic principle of supervised artificial intelligence. The model is given many examples where both the input data and the expected answer are known. It then learns to recognize relationships between the two.
In our case, the input is a movement signal measured by the sensor, and the expected answer is a known shot speed. After training, the model can receive a new shot signal and produce a speed estimate.
How an AI learns to estimate a value
This type of AI does not contain a hand-written rule such as "if the movement is strong, then the speed is X". It learns from examples.
During training, the model compares its predictions with reference speeds. When it makes an error, its internal parameters are adjusted to progressively reduce that error. Repeated over many examples, this process allows the model to learn which signal patterns are usually associated with faster or slower shots.
The quality of the estimate therefore depends heavily on the quality of the examples used. The more reliable, varied and representative the annotations are, the more likely the model is to generalize well to new shots.
The signal remains the main input
The Footbar sensor measures leg movement during the session. When a shot is detected, the model extracts a signal window around the action.
This window contains the movement variations linked to the shot: acceleration, movement intensity, signal shape around impact, and overall kicking dynamics. This is the information the model uses to learn the relationship between leg movement and shot speed.
To do this, the model needs qualified annotations: examples where both the sensor signal and the reference speed are known. These annotations are used to train the model and evaluate its performance.
Why add estimated age?
Qualified data is more abundant for older players than for very young age groups. If this imbalance is ignored, the model may tend to project some young players onto a scale that is too close to older teenagers or adults.
We therefore use the estimated age of the session as a contextual variable.
In short: shot signal + estimated session age = estimated shot speed.
Age is not used as a fixed rule. Two players of the same age can obviously shoot at very different speeds. The signal remains central, while age helps calibrate the order of magnitude of the prediction.
Model choice
One option would have been to train a different model for each age category. In practice, this would have been fragile because we do not yet have enough qualified data for every age range, especially among the youngest players.
We therefore chose a more progressive approach:
- keep a robust speed model based on the signal;
- add a calibration layer using the estimated age;
- check that this calibration does not degrade performance on historical test data.
This architecture allows us to use age as context, without giving it the full weight of the prediction.
How the final speed is produced
In production, the model analyzes a main signal window. This window is split into several sub-windows, each producing a speed estimate. These estimates are then averaged.
This average makes the prediction more stable: it prevents the result from depending too heavily on the exact temporal crop around the shot.
The simplified pipeline is:
Simplified pipeline: signal window → shot sub-windows → intermediate predictions → average → calibration with estimated age → final speed.
Observed results
The chart below shows the observed trend in estimated shot speed by age. The main curve represents the median speed, giving a simple view of the typical order of magnitude for each age.
The shaded areas around the curve represent the spread of observed shots. The central range contains the most common speeds, while the extended range shows a broader set of situations. These bands are not normative thresholds: they are meant to visualize natural variability between players and between shots.
Overall, the trend increases with age and then gradually stabilizes for older players. This is the purpose of the calibration: keep the information carried by the shot signal, while avoiding young players being projected too high on the speed scale.

On our historical sample of annotations kept aside and not used to train the model, the model reaches a mean absolute error of 2.19 m/s, with an average bias of -0.18 m/s. This indicates that the calibration keeps a stable behavior on these reference data points.
Limitations
This approach depends on the quality of the estimated age. If the session age is estimated incorrectly, the calibration may be less relevant.
It also depends on the available data. Younger age groups are still less represented in qualified annotations, and new data will progressively improve the model.
In the long term, if we collect many more annotated shots across all ages, it will probably become possible to train a single model that directly learns these contextual differences. Age calibration is therefore a pragmatic solution with the data available today, not necessarily a permanent limitation of the approach.
In summary, Footbar shot speed is first estimated from the leg movement signal. Estimated age is added as context to better calibrate the prediction, without replacing the main input: the actual movement captured at the moment of the shot.







