01 · THE DECISIONEvery lever has a champion. None has a price.
Growth meetings run on competing convictions: the performance marketer wants install budget, the product lead wants retention work, someone insists rankings are everything, someone else wants to ship updates faster. All plausible. None priced. The point of this analysis is to put a number on each lever — holding the others constant — which is precisely what intuition can't do and a multivariate regression can.
The questions: which factors significantly determine monthly app revenue? Does engagement (active users) matter more than acquisition (downloads)? And do the answers change by market in ways that should change strategy?
02 · MEASUREThe data — and a degenerate variable caught early
The dataset covers 800 apps, 200 in each of Germany, the UK, China and Japan, with monthly revenue, downloads, active users, marketplace rank (1–200), update activity, monetisation flags and 21 app categories (games dominate at 54%). Revenue, downloads and active users are heavily right-skewed, so all three enter in natural logs — which also makes the coefficients read as clean elasticities.
One audit finding worth flagging before any model: every single app in the sample monetises through in-app purchases. The IAP flag has zero variance, identifies nothing, and was excluded — any claim about IAP from this data would be fiction. Checking your variables can ever vary is cheaper than retracting a finding.
03 · EXPLOREFour markets, visibly different before any model
04 · CORRELATEFirst relationships — and a collinearity flag
Revenue correlates with downloads at 0.54 and with active users at 0.63; rank correlates negatively (−0.40 — better-ranked apps earn more). The flag: downloads and active users correlate at 0.71 with each other, high enough to suspect multicollinearity. Suspicion isn't conviction — variance inflation factors settle it in section 07.
| ln revenue | ln downloads | ln active users | updates | rank | shows ads | |
|---|---|---|---|---|---|---|
| ln revenue | 1.00 | 0.54 | 0.63 | 0.16 | -0.40 | 0.27 |
| ln downloads | 0.54 | 1.00 | 0.71 | 0.25 | -0.29 | 0.37 |
| ln active users | 0.63 | 0.71 | 1.00 | 0.45 | -0.26 | 0.49 |
| updates | 0.16 | 0.25 | 0.45 | 1.00 | 0.04 | 0.06 |
| rank | -0.40 | -0.29 | -0.26 | 0.04 | 1.00 | -0.11 |
| shows ads | 0.27 | 0.37 | 0.49 | 0.06 | -0.11 | 1.00 |
05 · MODELThe baseline: pricing five levers at once
The central specification regresses logged revenue on downloads, active users and rank, with country dummies, category dummies, update activity and ad strategy as controls — OLS on 800 observations, R² = 0.649, all inference on heteroskedasticity-robust (HC1) standard errors.
Engagement beats acquisition — 0.32 vs 0.26 — and both are precisely estimated (the confidence intervals don't overlap zero or trivially overlap each other). For budget allocation that means retention and engagement work outranks raw install campaigns when they compete: installs only pay when they become active users, and the data says the conversion step is where the value sits.
06 · HETEROGENEITYThe same lever pays 3× more in one market
Country dummies say markets differ in level. The strategically interesting question is whether the slope differs: does an extra unit of engagement pay differently by market? Interacting ln(active users) with country answers it — all three interaction terms are highly significant.
Germany has the lowest revenue level but the steepest engagement slope — an under-monetised market where engagement growth pays best. China is the mirror image. A single global playbook misallocates in both directions: engagement-led growth belongs in Germany and Japan, while in the UK and China the marginal return on another active user is materially lower. Averages would have hidden all of this.
07 · DIAGNOSEMaking the numbers trustworthy
Three diagnostics separate a regression from a defensible one. Heteroskedasticity: the Breusch–Pagan test rejects constant variance emphatically (LM = 118.9, p < 0.001), and the residual plot shows the classic funnel — so all inference uses robust standard errors; coefficients are unchanged, every key predictor stays significant. Multicollinearity: despite the 0.71 correlation, VIFs top out at 2.86 — both user metrics are separately identified, so the engagement-vs-acquisition contrast is real. Specification: see the updates puzzle below.
08 · THE PUZZLEThe coefficient that looked wrong — and was
The baseline model says each unit of update activity cuts revenue by 0.47 log points. Taken literally: stop updating your app. That's implausible enough to investigate rather than report. Adding a quadratic term resolves it — the linear term flips to +2.50 and the squared term comes in at −0.39 (both p < 0.001): an inverted U with a turning point around 3.2 on the updates scale. Updates help, then hurt. The linear model was averaging over a curve and reporting the average as a slope.
When a coefficient contradicts common sense, the options are: report it anyway (wrong), delete it quietly (worse), or treat it as a specification question (right). The wrong-looking sign was the model telling me its functional form was too rigid — the most useful finding in the project came from refusing to accept a number that didn't make sense.
09 · HONESTYWhat these coefficients are not
They are conditional associations, not causal effects. Revenue funds acquisition and improves rank, so reverse causality runs through the model; app quality and marketing spend are unobserved and bias what they touch; the sample is 54% games with some tiny category cells; and rank is only observed to 200, so findings describe ranked apps, not the long tail. The credible upgrade path isn't a fancier estimator on this cross-section — it's panel data: app fixed effects to absorb time-invariant quality, lagged regressors against reverse causality, time effects for seasonality.
10 · TRANSFERThis is the day job
Strip the academic framing and this is marketing analytics as practised: estimate the return on each growth lever, conditional on the others; check whether the headline elasticity survives diagnostics; localise the playbook where heterogeneity is real; and refuse numbers that don't make sense until the specification explains them. It's the same discipline behind incentive-ROI analysis at a marketplace — only the dataset changes.
Stack: Stata MP (original analysis) · Python reproduction: pandas · statsmodels · SciPy · OLS + HC1 robust SEs · Breusch–Pagan · VIF · interaction & quadratic specifications · University of Surrey (MANM526)