Working toward implementing the Swedish S Tank in Seven Days to the River Rhine in a functional way, we will eventually need to cost them out in terms of points. Which puts our first task in front of us – to figure if there’s a systematic logic to how tanks are pointed out in the game. This may exist even if the author didn’t intend for it to exist, just because they’re working off of a mental model for how much things should cost. If we’re lucky, a statistical model can extract the patterns formed by that.
And more importantly, if it can’t, we’re sort of dead in the water.
So can we?
Do Points Have Formulas?
A formula for how many points something should cost is a perennial desire for many wargamers, and there’s frequently speculation that such a formula is out there for whatever their favorite game is. Needless to say, actually getting access to those systems, if they exist, is fairly rare. I toyed with this a bit when Shadow War: Armageddon was released because that game was fairly compact and came with a bunch of unit stats, and because there was a hunger for other units in SW:A that made more sense than what was being produced.
That worked pretty well for unit costs, but weapons proved to be pretty dodgy to model in a straightforward fashion. And for 40K, I’ve suggested that this approach is a bit of a fool’s errand, thanks to the complexity of the system, the number of units, and how hard it is to group unit special rules into meaningful categories.
So how about 7DRR? Well, there’s some hope here – we have all the units in one place with all their stats, all the variables are either numeric (i.e. the Leopard 2 has a Front Armor of 18) or binary (The Leopard 2 is a “Fast” vehicle” and the T55A is not). Which means they’re very easy to describe to a model.
What Are We Even Looking At?
7DRR has a number of stats to describe a tank. They are, as follows:
- Front Armor: The front armor of a tank.
- Side Armor: The side armor of a tank.
- To Hit: A base score to hit, before modifiers are applies. Lower scores are better.
- Weapon: A unit’s weapon value. This + a d10 roll needs to exceed the armor value of the target to penetrate.
- Morale: A value for morale that is tested against a number of “morale markers” that units accumulate from bad things happening to them. For main battle tanks, NATO tanks are always a 6 and Warsaw Pact tanks are always a 5, so I converted this to a binary variable for whether or not a tank is NATO.
- Fast: Whether or not a tank is fast, getting to move a bit faster than its sluggish comrades.
- Thermal: Whether or not the tank is carrying thermal imagers, which foil some benefits of cover.
- Special: Whether the tank has special armor, such as reactive, composite, or Chobham armor that reduces the effectiveness of HEAT rounds
- Points: The points for a unit. This one is important.
- BP: A “Break Point” value, used to a number of victory conditions.
There’s a total of ten variables here, and there’s only 30 tanks total in the game. That’s very much pushing it on sample size, so the first thing we’re going to do is some variable reduction. And the way to do that is to look at the correlation between each part of variables. Which we’re going to visualize here:
Basically, for each pair of variables, a blue circle indicated they are positively correlated, and a red circle indicates they’re negatively correlated. Narrower circles indicate that that relationship is tighter. So, for example, the “NATO” variable, with a white, nearly perfect circle when compared to “Front” indicates that having strong front armor and being a NATO tank aren’t correlated almost at all – everyone has strong tanks. On the other hand, the sort of teal oval between “Special” and “Thermal” suggests a decently strong correlation between the variables. Which again makes sense – modern tanks with fancy thermal imagers are also likely to be modern tanks with fancy reactive armor.
What we’re looking for is ones we can throw out. And there are two: Side and BP.
BP is the easy one. Given it’s a representation of the value of a given model to the overall unit, it makes perfect sense that it’s nearly synonymous with Points. And we can see that visually:
There’s a little bit of what’s called “jittering” here, where noise is added along the X-axis to let you see points that would otherwise be overlapping. But you can see from this that almost straight line – if you know the points a unit costs, you have a good shot at knowing the BP. And because it’s highly correlated with our outcome (points) and a construct of the game, rather than something we could look up historically, it’s not something we can really use, and it would be far too influential in any model we made, while being practically useless.
But the other one is Side Armor. Which is a real value we can look up, but it’s also very, very correlated with front armor. Which makes sense – well armored tanks are by and large well armored everywhere. Again, looking at this visually:
Again, while there’s some jittering so you can see things (there are a lot of tanks with 14 and 15 front armor), if you know the Front Armor of a tank, you know it’s Side Armor (almost every time Front Armor – 2). So adding this variable in won’t really give us any new information.
That’s not really as many variables as I’d prefer to throw out, but 8 is better than 10, so let’s see how we do.
Building the Model
While some stats experts are probably going to be annoyed with me for not using a Poisson or negative binomial model here, as technically that’s what we should be using for integer-valued data like points, most of the big concerns that those models solve, like that count data (or points for that matter) can’t really be zero don’t come up in this context. So we’re just going to use plain old linear regression, at least until we run into problems.
(Spoiler: We do not run into problems).
What we’re mostly going to be using here is something called Akaike Information Criterion (or AIC), which is a model selection tool that helps us know if including more variables (which improves prediction) was “worth” the attendant increase in variance because we have more variables in our model. Basically, if we’re spending our modeling budget wisely. I have four models I want to try:
- Base: What if the points value is just armor. Wouldn’t that be easy?
- Core: What if points are based on the core values of a tank – it’s ability to shoot and take hits. That is, what if we just use Armor, Weapon and To Hit, and assume all the other stuff the tanks get are just flare
- Tech: What if we include everything in the “Core” model, plus all the fun tech – fast tanks with thermal imaging, reactive armor, etc.
- Full: What if we throw in that last, lingering variable we’re not including in “Tech”, the morale effect of having a NATO crew?
Essentially, what we’re looking for is the model with the lowest AIC.
Base Model
The “Base” model gets us off to an illustrious start. Armor is important for a tank, and beyond that, strong front armor is correlated with a lot of other things, so we’re getting a lot of bang for our buck prediction-wise, as a heavily armored tank is likely to be modern, have a good main gun, reactive armor, etc. And indeed we get an R^2 value of 0.71, which is really rather good, suggesting that 71% of the variability in points cost can be explained by this one variable.
We could quit now, and we’d be Okay. Indeed, there are projects I’ve done where I would be thrilled with this.
But it’s not good enough. Not yet. We can do better – I want more points closer to that red line.
Core Model
The “Core” model, which adds information about how good the tank is at shooting (and those shots penetrating), is a vast improvement. The AIC drops from 143 to 97, indicating that these variables were well worth including, and the R^2 for the model jumps up to 0.94, suggesting 94% of the variability in the model is now explained. That’s really rather good, and is reflected in the plot of predicted versus actual points values.
That’s a much better fit – we’re starting to spread units out along the red line, and really get them nicely dialed in. Again, we can quit here and likely be quite alright. But this is not the way of our people.
Tech Model
Now lets add all the tank “flair” – special reactive armor, fast, turbine-driven engines, and thermal sites. This isn’t as quite a leap as the last step up in modeling, but it is getting the job done. We’ve got an R^2 of 0.96, so we’re now explaining nearly all of the variability in the model, and our AIC drops to 86.9, suggesting that these added variables are still spending our data well. And look at this graph – just look at.
The secrets of the universe are being revealed to us, and quantified. At least the secrets of tiny little plastic tanks from the 1980’s.
And here’s where things stop. There’s one last variable to add, “NATO”, and the AIC for the full model pops up to 87.6, indicating that we’re not well served by adding that to our prediction model. Indeed, we actually make it slightly worse, with R^2 dropping from 0.9604 to 0.9603. So basically, we’re getting nothing from that, and spending our precious data to do it.
We modeled too greedily, and too deep.
Where We End Up
With all that behind us, we’re at the “Tech” model, which is everything but are you a NATO crew. Which is nice, since that’s also ambiguous for the Swedes. This is a good model, and really rather nicely fit – the poorest performers are at the very lower range and the very upper range – neither of which our target S Tank is in.
And the final formula:
Points = 0.6026 + Front(2.2095) + Weapon(6.1978) + ToHit(-9.8076) + Fast(5.2551) + Thermal(6.0816) + Special(5.0728)
Now this is very much not likely to be the actual formula, as the creators of the game produced it. If such a formula even exists. And it’s not actually fully functional, because it will give us decimal points, and we don’t want that. But it is the best fit (of what we tried) for what the patterns in the points costs of the tanks in the game show.
So let’s point out a tank. Say…the M1 Abrams.
Blessed with a Front Armor of 18 with reactive armor, a Weapon value of 10, a To Hit of 5+, and a Fast tank, the original M1 enters our formula as:
0.6026 + 18(2.2095) + 10(6.1978) + 5(-9.8076) + 1(5.2551) + 0(6.0816) + 1(5.0728) = 63.6415.
Let’s round that to 64.
The actual point cost of an M1? 65 points.
Enjoy what you read? Enjoyed that it was ad free? Both of those things are courtesy of our generous Patreon supporters. If you’d like more quantitatively driven thoughts on 40K and miniatures wargaming, and a hand in deciding what we cover, please consider joining them.