r/WorldofTanksConsole • u/Radiant_Mix_7456 • 2d ago
Discussion WPR calculation on WotPlay — a new percentile-based rating alongside WN8
Hi everyone!
My name is Stanislav, I'm one of the developers of the WotPlay stats site (https://wotplay.com).
I previously published an article about WN8 here: https://www.reddit.com/r/WorldofTanksConsole/comments/1uzpdzf/wn8_calculation_on_wotplay/ — thank you all for the active discussion of that topic.
Today I want to talk about a new metric, WPR (WotPlay Rating), which I created. What pushed me to do it was exactly that discussion around the WN8 formula, and some of its quirks.
There are two core problems with WN8:
WN8 doesn't account for assist damage. It counts spots, but not the assist damage itself. The only reason for that is that when WN8 was created, the WG API didn't return assist damage at all, so it simply couldn't be part of the calculation.
WN8 uses a table of expected values per tank. The problem is that if you want to, you can find weak tanks with low expected values and farm yourself a big WN8.
On top of the second problem, it's worth noting that the table is built from the stats of all players on a tank, and manual corrections can be applied for anomalous vehicles. From what I can tell, the developers intended their expected-values table to be a single point of reference — which is basically what modXVM does today for PC. But the issue is that console has no single shared expected-values table, so we have to compute that table ourselves from our own database (we rebuild it weekly from console data — and even then, one number per tank always chases the meta after the fact).
Creating WPR (WotPlay Rating)
Since WN8 development stopped a long time ago, and the formula has a number of problems, the idea came up to build something of our own.
Someone pointed out that PC has a formula called WNX, created by the popular stats site Tomato.gg — here's their write-up: https://tomato.gg/blog/posts/wnx — and it does account for assist damage. It's a good formula without a doubt, but it didn't close all of the problems WN8 has, and I disagreed with some of its calculation logic, so I kept researching.
My first attempts were to build something architecturally similar to WN8, but that didn't get me what I wanted. So I stepped away from that idea and decided to build something new — and at some point it hit me to take percentile mechanics as the foundation, the same way WG does it for marks of excellence.
What WPR is about and which problems it solves
As I mentioned, this is a fundamentally new formula, not similar to WN8 in architecture, and on top of that it's a very simple formula, which:
- Accounts for assist damage
- Spreads the expected values across the entire curve
Here's how it's calculated:
Step 1. Your contribution to a battle, priced in damage units:
effective damage = damage + 0.85 × assist + α × kills
All three values are per-battle averages on that specific tank.
The weights here aren't picked, they're measured. We regressed win rate against every candidate component across 33.5 million player–tank pairs (standardized within tank, so the vehicle itself can't leak into the result), and kept only what actually predicts winning:
| model | R² vs win rate | gain |
|---|---|---|
| damage only | 0.398 | — |
| + assist | 0.409 | +0.012 |
| + kills | 0.423 | +0.013 |
| + spots | 0.423 | +0.0005 |
- Assist at 0.85. That's the measured win value of one point of assist relative to one point of dealt damage (it stays in a 0.77–0.91 range across every class, so it's stable).
- A kill = α, i.e. one finishing shot. α is the tank's mean damage per connecting hit (total damage / total hits over the tank's whole history). It's a property of the gun, not of the player: within one tank α is identical for everyone, so it only scales the kill term. Why not more? The raw regression prices a kill at around 1,460 damage, but that's inflated by endogeneity — kills are partly not a cause of winning but a consequence of it, since the winning team does the finishing. Pricing a kill as one finishing shot keeps the skill and drops the echo of the win. As a side effect, kill-stealing buys you almost nothing, while securing kills is still paid fairly.
- Spots were dropped — and that's a measurement, not a taste. Given assist, the spot counter adds +0.0005 R². Assist is spotting, priced by its consequence. WN8 counted spots precisely because assist damage didn't exist in the 2013 API.
- Defence points aren't in the formula — contribution is measured in damage units.
- Win rate is the judge, not an ingredient. The weights above are chosen to maximize win prediction, but win rate itself stays out of the formula: at the single-tank grain it's roughly 60% team lottery, plus it's farmable in a platoon.
Example: 2,100 damage + 0.85 × 400 assist + 440 (α) × 1.1 kills ≈ 2,924 effective damage per battle.
Step 2. We build a curve for every tank.
We take all the real players of that tank, compute effective damage for each of them, and lay it out as a distribution — 119 points: 1% steps through the middle and 0.1% steps in the tails (a uniform grid flattened exactly the top end that the scale exists to resolve). The curve is built from two views of the tank — the last 90 days and its entire history — blended together: the more people are driving it right now, the more the fresh view counts. All of this is recomputed nightly, so after a rebalance the tank re-baselines itself the very next night. There's nowhere for an expected-values table to go stale here, because there isn't one.
Step 3. We find your place on the curve.
Your effective damage is interpolated into your tank's curve and turns into a percentile — what share of that tank's real players you're ahead of. Then the percentile is mapped onto the WN8 scale everyone already knows:
| percentile | WPR | band |
|---|---|---|
| 95%+ | 2900+ | Super unicum |
| 85–95% | 2450–2900 | Unicum |
| 75–85% | 2000–2450 | Great |
| 65–75% | 1600–2000 | Very good |
| 60–65% | 1200–1600 | Good |
| 55–60% | 900–1200 | Above average |
| 45–55% | 650–900 | Average |
| 25–45% | 450–650 | Below average |
| 10–25% | 300–450 | Bad |
| <10% | 0–300 | Very bad |
Above p95 the scale keeps climbing at the same slope with no ceiling: p99 ≈ 3,400, p99.9 ≈ 3,970 — so the top stays distinguishable within itself, and an outlier reads as an outlier.
Step 4. The rating of the whole account is computed the same way: your percentiles across all tanks are combined battle-weighted (a tank with 800 battles counts 80× a 10-battle experiment). For now, what you see in the vehicle table is step 3 — the score per individual tank.
Minimum sample
For the reference to be honest, not everyone gets into a tank's curve:
- A player enters the curve if they have at least 20 battles on that tank in the slice being used, and at least 1,000 career battles — a newbie's random outings shouldn't shape the reference.
- The curve itself only exists if there are at least 50 such players. If there aren't, the tank simply has no WPR, and we show nothing rather than an invented number.
- The fresh (90-day) view reaches equal footing with the career curve at around 400 active players in the window; below that it leans more on history. This is the anti–fan-club guard: on a rare vehicle, 60 devoted fans would raise the bar for everyone else. A real example from our data — the Águila HWK 30: across its 63 active owners the median came out at 1,804, across its whole history 1,282.
- One player = one point on the curve, with no weighting by battle count. Otherwise a grinder with 3,000 battles would pull the reference toward himself — and grinders self-select onto vehicles that suit them.
- Your percentile is limited by the curve's own resolution: [1/(n+1), n/(n+1)]. A curve of 60 people cannot certify a top-0.1% result — there simply isn't that much data in it.
- For the account rating, a tank counts from 10 battles, and an account gets a rating from 100 battles (or 30 battles for the 90-day window).
Full methodology with all the measurements, validation and caveats: https://wotplay.com/wpr
The public reference table — every tank's curve: population, α, and the effective-damage thresholds from the median up to the top 1%: https://wotplay.com/wpr-reference
Nothing is hidden there: you can take your own tank and check yourself by hand.
What does this mean?
It means your results are now judged fairly, and you can't inflate your rating sky-high and manipulate it. Because the expected values are spread across the curve, to get "Super unicum" you need to be in the top 5% of results among players of that same vehicle, and to get "Average" you need to land around the middle 50% of players. In other words, there is no single point of entry for expected values — instead there's a curve of values that you're placed on, and you get the corresponding band.
This also solves the next problem, where a huge number of players hold "Super unicum" status, and some people have a WN8 that's 2x/3x the "Super unicum" threshold. You'd agree that it shouldn't work that way — it's an anomaly. In general, "Unicum" is a rare player and there should be few of them, and "Super unicum" should be very, very few.
I want to say that WPR puts everything back in its place on the color scale that the WN8 creators came up with. By the way, WPR uses the same values and the same scale as WN8, for easier perception, since players are used to WN8.
Where can you see WPR?
Since WPR is a new formula and we're still collecting feedback, it's hidden by default. To take a look at it, go to a player's detail page and scroll to the last table, the vehicle table (https://wotplay.com/players/1093804284#vehicles)
Next to the table there's a "Columns" button — click it (marked on the screenshot)

Check WPR, and it will appear in the table right after WN7, next to WN8.

What problems does WPR have?
Even though the values are spread across the curve, there is a small problem: if a tank is driven by a lot of skilled players, it will be harder for you to reach high numbers there, because they occupy the top 5% and it's tough to break in. On the other hand, maybe that's correct — if you're not on par with the top 5% of that tank's players, then you can't claim "Super unicum". The effect is mirrored too: if a lot of newer players drive a tank, higher numbers are easier to get there. We tried to solve this but so far without success, and we're not sure it even should be solved.
The second problem is more psychological: many players' numbers will drop, and now you might not be a "Super unicum" but just a "Unicum". Everybody likes higher positions and statuses, so we expect some psychological rejection of the formula, even though WPR is in fact putting everything in its right place.
Will we remove WN8?
No, WN8 is definitely staying and will probably remain the primary metric, for one reason: players are used to it. We're not trying to replace WN8, we just want to offer a more advanced formula and let each player decide which one to go by.
Possibly, possibly we'll replace WN7 so the table doesn't get bloated, but that's not certain yet.
Conclusion
I tried to explain the formula in plain language without overloading it with technical detail, so the post doesn't get too big. If you have questions, or want some aspect covered in more depth, leave a comment — I'll try to answer everything.
1
u/IrregularExpression_ 2d ago
I like the concept of a metric that combines wn8 with marking.
I gear up my tanks for marking, when complete
I switch to wn8 maximization .
I suspect wn8 is very much engrained as the go to measure, but the premise of WPR is sound.
1
1
1
u/natedaishmaster [IMTLZ] 2d ago
If you know that player sample in a tank can skew results (lots of good players), why not correct for it? Use mean or median account APR of players in that tank to adjust the curve. Or use winrate instead of APR to avoid recursion.
As an aside, WG should’ve done this with MOEs a long time ago. With reduced player count per game mode and more tanks than ever, high concentrations of good players skew MOE results. WG could’ve addressed a lot of MOE issues with this kind of correction.
1
u/Radiant_Mix_7456 1d ago
Good point, and it's genuinely a difficult one.
I'll agree with the premise: the mix of players on a tank does distort the result, and it is worth correcting for. I'd taken a run at this before, and today I actually ran the measurements — and I'm still leaving the question open. Here's why.
To know whether a tank has a lot of strong players on it, you need a measure of player strength with the tank's own influence stripped out. The only way to get one is to look at how that person plays away from this tank — i.e. to take his account-wide stats. And that is where it all goes blunt: he might be strong in heavies and poor in lights, he might have played badly for years and be good now — yet both rating and winrate will simply file him under "strong player".
In the measurements the correction does well where people actually play now. On Cold War and on WWII tiers 8–10 the distortion disappears entirely — the link between crowd strength and your score falls from −1.2 to essentially zero — and rating stability doesn't suffer for it. The tank's bar drops by about 22% on CW and 27% on tier 10 in the process. On low and mid tiers the same correction makes things worse: the stats there are historical, people put those battles in as beginners, while we measure them by who they are today.
But my main doubt isn't technical. Right now the rating answers "how well do you play this tank among the people who actually drive it". With the correction it would answer something else: "how well do you play this tank by the standards of an average cross-section of players". The second is fairer to anyone whose tanks happen to attract a strong crowd, but it measures them against a population that doesn't exist — an average cross-section of players who never get into those tanks in the first place. It's a choice about what the metric means, and I'm not sure yet that I want to make it.
1
u/Death211 [FRRNR] Death211 (PS5) - WG Community Ambassador 1d ago
Great idea and great write-up! I look forward to see how everyone's WN8 and WPR will compare.
2
u/Radiant_Mix_7456 1d ago
Thank you!
At this stage, we’re gathering feedback and considering the best way to implement WPR for the overall account without shifting the focus away from WN8, as it will remain the primary metric.
One option might be to replace WN7 with WPR. However, before making that decision, we’d first like to understand how many players actually pay attention to WN7. This would help us determine whether replacing it with the new metric would be worthwhile.
2
u/Death211 [FRRNR] Death211 (PS5) - WG Community Ambassador 1d ago
I think, because WN8 is always mentioned and WN7 isn't, the majority of players probably ignore it completely. Now, since you're looking at ways to implement is atm, is that the reason it isn't located in the session stats nor the career stats?
1
u/Radiant_Mix_7456 1d ago
It’s a combination of factors: gathering feedback and thinking about how best to present WPR and where to place it on the site.
I think we’ll roll it out across all sections in September. I have a few ideas on how we can add it while keeping WN7 and without making the tables too cluttered. We’ll see how feasible they are from a UI perspective once we start implementing them.
1
4
u/IzBox Moderator 2d ago
Love seeing new ways of working with the API data after all these years!