← TAIMOOR ALI Case study
GROWTH & MARKETING ANALYTICS · ECONOMETRICS

Where should the next growth pound go? An econometric answer from 800 apps

Acquisition, engagement, rankings, update cadence, ads — every growth lever has a champion in the room. This project prices them against each other: an OLS analysis of 800 apps across Germany, the UK, China and Japan, with the diagnostics that make the coefficients trustworthy. Built in Stata, independently reproduced in Python.

800apps · 4 markets
0.649model R²
0.32 vs 0.26engagement vs acquisition
same lever, by market

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

Country profiles
Mean of logged revenue, downloads and active users · n = 200 per country
The UK leads on everything; Germany trails on revenue despite engagement comparable to China — an early hint that markets convert attention to money at different rates. ANOVA confirms the differences: downloads F = 41.03, active users F = 17.21, both p < 0.001.
Distribution of logged monthly revenue
26 bins across 800 apps
Near-normal after the log transform, with a thin tail of under-performers below 10 log points — the shape that earns the parametric toolkit.

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.

Correlation matrix
Pearson pairwise correlations of model variables
ln revenueln downloadsln active usersupdatesrankshows ads
ln revenue1.000.540.630.16-0.400.27
ln downloads0.541.000.710.25-0.290.37
ln active users0.630.711.000.45-0.260.49
updates0.160.250.451.000.040.06
rank-0.40-0.29-0.260.041.00-0.11
shows ads0.270.370.490.06-0.111.00
Blue = positive, red = negative, intensity = strength. The 0.71 cell is the one to investigate, not panic about.

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.

What each lever is worth
Robust coefficient estimates with 95% confidence intervals · grey = not significant at 5%
A 1% rise in active users buys +0.32% revenue vs +0.26% for downloads; one rank place costs ≈0.7%. Ads read negative (−0.115) but the interval crosses zero — not significant (p = 0.27). Country premiums vs Germany are large: Japan +1.18 log points (≈225% in levels), UK +1.03, China +0.80.
The call

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.

Category effects relative to games
Coefficients vs the All-games reference · grey = not significant · n per category in tooltip
Most categories under-earn games conditionally; Finance and Sports read worst — but several cells are tiny (Finance n = 5), so these are controls deserving humility, not strategy findings.

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.

Revenue vs active users, by country
75 sampled apps per country with per-country OLS fits · slopes in the legend
Germany's line is steepest; China's is flattest. Same x-axis, same lever, very different payoff.
The engagement elasticity, market by market
Implied ln(active users) elasticity from the interaction model
Germany 0.54, Japan 0.32, UK 0.20, China 0.18 — a 3× spread on the identical lever.
The call

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.

Residuals vs fitted values
320-observation sample from the baseline model
Variance grows with fitted values — the funnel that mandates robust standard errors. Found, named, fixed.

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.

Updates and revenue: an inverted U
300 sampled apps with the fitted quadratic partial effect · turning point ≈ 3.2
Maintenance and improvement add value; high-frequency churn disrupts users. Cadence beats volume.
The call

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)