Skip to content
#30 in the leagueof the top 40

João Carvalho

Estoril·Forward

Scoring skill

0.12Goals per 90 minutes above replacement
00.03 – 0.22 · 90% credible interval0.60
others in the top 40

What the number means: if João Carvalho plays 90 minutes at a neutral venue against an average Liga defence, the model expects 0.12 more goals than if that place were taken by a replacement-level player — the kind of signing any club can make for free. Goals are capped (winsorized) before the estimate, so one four-goal afternoon is not read as permanent skill.

The model puts 90% probability on the true value lying between 0.03 and 0.22. Fewer minutes, wider interval.

Attacking contribution

+0.24goals and assists per 90 minutes above replacement

#15 of 40 published

0.000.12 – 0.37 · 90% credible interval0.72
other players on the same metric

The same structure as the finishing metric, but adding goals and assists together. It sees what the goals-only metric could not: who creates.

Few minutes pull the estimate toward replacement level and widen the interval.

Minutes
5,114
Matches
61
Goals
12
Actual goals/90
0.21
xG skill per 90
0.21
P(above replacement)
99%

Season by season

Goals go up and down; the skill estimate barely moves. That is by design: the model only admits a change in skill when the data demand one, and across three Liga Portugal seasons they never have.

SeasonMinutesGoalsSkill (with margin)
2024-252,3166
0.12
2025-262,7986
0.12

Did he improve? Can't say

Between 2024-25 and 2025-26 the estimate moved +0.004 — but the margin of error on that difference is ±0.080, many times larger. In other words: indistinguishable from zero. A big goal season is usually natural variation, not new skill.

Recent appearances

2026-05-16Benfica (home)90' · started—
2026-05-10Alverca (away)90' · started—
2026-05-03Sp. Braga (away)90' · started—
2026-04-26Famalicão (home)90' · started—
2026-04-20Moreirense (away)45' · sub—
2026-04-12Porto (home)90' · started—
2026-04-06Arouca (away)65' · started—
2026-03-22Rio Ave (home)90' · started—

Match-by-match data (SofaScore). The rating is the provider's, not the model's — the model only uses goals, minutes and opponent.

All player metricsPrevious: Deniz Gül (#29)Next: Gabriel Silva (#31)Club page: Estoril

Bayesian player model fitted on 28,735 individual appearances since 2023-24, with a 600-minute minimum to qualify. Club = the player's most recent club in the data (2023-24 to 2025-26); recent transfers may not be reflected.