Hey TL,
I’ve been working on a custom metric for StarCraft replays/match data called "Low Econ Epicness". The goal is to mathematically rate games where one or both players suffered heavy economic harassment, starvation, or extreme disruption, giving higher scores to games where players had to scrap by on minimal resources.
I tried to vibe-math through the formula but I don't know if theoretically it's sound or not. so I’d love to get input from real mathematicians, data analysts, and stats enthusiasts here to help refine and formalize this metric. Please help me build the perfect "LOW ECON EPICNESS" formula!!
---
1. Objective
- Goal: Create a normalized percentage score (0% to 100%) representing the level of economic harassment/starvation in a match (assuming players are serious and not goofing around).
- Interpretation:
- 100% = Extreme economic starvation / brutal harassment / heavy resource disruption (Most Epic).
- 0% = Unhindered, smooth, macro-heavy game.
- 100% = Extreme economic starvation / brutal harassment / heavy resource disruption (Most Epic).
- Key Requirement: The metric must work fairly across short games (e.g., 2–5 minutes) and long macro games (20+ minutes) without favoring short matches simply because they don't have much mining on average.
2. Assumptions
- Time Tracking: Game duration in Excel/Google Sheets is stored as a fractional day, where Minutes = Duration * 1440.
- Minerals Mined: This will be our proxy attribute for "economy", but we need to adjust it for duration.
**I don't have access to in-game live stats, only end-game stats (minerals mined, gas mined, for one player) - Early-Game Worker Ramp-Up: Early in a match, Minerals-per-Minute (MPM) is naturally low because players start with few workers and are building up their initial economy, not because they are getting harassed.
- Saturation Curve: As game time increases, worker production saturates the main base economy. In StarCraft, worker ramp-up flattens out around the 8-minute mark.
- Data Range (Observed):
- Raw MPM (Minerals / Minutes) in test matches ranges roughly between 400 and 1,500 MPM.
- After adjusting for early-game saturation, the effective rate scales roughly between 800 MPM (floor) and 1900 MPM (ceiling).
- Raw MPM (Minerals / Minutes) in test matches ranges roughly between 400 and 1,500 MPM.
3. Current Approach & Formula
To prevent short games from artificially scoring near 100% starvation just because of early worker ramp-up, we introduce an exponential saturation curve:
f(t) = 1 - e^(-t / 8)
Where t is duration in minutes, and 8 acts as the time-constant (in minutes) for economic saturation.
The Adjusted Rate Formula:
Adjusted MPM = Minerals / (t * (1 - e^(-t / 8)))
Normalization & Inversion:
We normalize this rate between an empirically derived floor of 800 and ceiling of 1900, clamping it between 0 and 1, and then invert it so that lower rates yield higher epicness:
Low Econ Epicness = 1 - MIN(1, MAX(0, (Adjusted MPM - 800) / (1900 - 800)))
Google Sheets Implementation:
=IF(OR(H2=0, F2="", ISBLANK(H2), ISBLANK(F2)), "",
IFERROR(
1 - MIN(1, MAX(0,
(((F2 / (H2 * 1440)) / (1 - EXP(-(H2 * 1440) / 8))) - 800) / (1900 - 800)
)),
"Error Triggered"
)
)
(Where H2 = Duration and F2 = Minerals).
4. The Request / Community Input
While the current formula gives a decent bell-curve distribution across sample matches, I'm looking for feedback from math & stats folks on a few specific points:
- Saturation Function: Is 1 - e^(-t/8) the optimal modeling curve for StarCraft worker ramp-up, or would a logistic function or piecewise curve fit game data more naturally?
- Multi-Variable Integration: Right now, I'm only using Minerals and Duration. However, the full dataset contains:
- Total Score, Units Score, Structures Score, Resources Score, Gas, Minerals, Resources Spent, Duration
How might we incorporate Gas or Resources Spent (or the ratio between Minerals/Gas/Spent) to better identify true economic starvation vs. simply unspent floating bank? - Total Score, Units Score, Structures Score, Resources Score, Gas, Minerals, Resources Spent, Duration
- Dynamic Threshold Scaling: Instead of hardcoded bounds (800 and 1900), is there a more robust statistical approach (e.g., Z-score, percentile ranking, dynamic min/max) to make the scale auto-adapt to different match datasets or updates?
Sample Dataset
I’ve put together a public Google Sheet with real game data and columns for testing:
Google Sheet Sample Data
Feel free to make a copy and test your own formulas and let me know! If you don't have time to build a formula, you can just tell me the mathematical assumptions that need to respected so I can refine my vibe-math efforts.
By the way I'm also working on other epic metrics like fights, structures, units etc. but for sake of simplicity in this thread let's discuss only ECON.
Thanks!