a walk through descriptive stats, correlation, simple and multiple regression on 25,000 synthetic customers — and the confounders hiding in plain sight.
given eight variables about 25,000 customers, which ones actually explain customer value — and which just look like they do?
The Hypothesis
salary will look like a strong predictor on its own but will collapse once behavioural variables (tenure, product holdings, app usage, email engagement) enter the model. tenure and deposit balance will be too correlated to trust their individual coefficients.
The Data
25,000 synthetic customers with eight fields: age, salary, region, tenure, product count, mobile app logins, email engagement, and deposit balance. customer_value constructed as a weighted sum of behavioural and financial signals plus noise, so ground truth is known.
The Analysis
descriptive statistics, pairwise Pearson correlations, a simple OLS regression on salary alone (R2 = 0.137), a multiple OLS regression on all seven numeric predictors (R2 = 0.706), and variance inflation factors to test for multicollinearity.
The Decision
deploy a lean four-variable model: tenure + product_count + app_logins + email_engagement. drop deposit_balance (redundant with tenure, VIF 4.5) and salary (confounded proxy that loses 71 percent of its coefficient in the multi-fit).
The Outcome
four-variable model retains ~0.67 R2 — within four points of the full model — with coefficients that survive the explain-it-to-a-room-of-executives test. salary-only targeting would have missed 86 percent of the explanatory story.
Further reading
Twenty-five thousand customers. Eight columns. One deceptively simple question: which of these variables actually tells us what a customer is worth?
This is a walk through the boring, essential middle of any analytics project — the part where you fit a regression, then a bigger regression, then argue with yourself about what the coefficients mean.
the shape of the data
descriptive statistics — means and medians
salary and deposit balance are on a different scale — mean salary £55.9k, mean deposit £40.4k.
Age is broadly normal around 42. Tenure is heavily skewed — the median customer has been around four years, but a long tail stretches out to forty. Product holdings cluster at one to three. Email engagement is a beta distribution: most people ignore us, a few open everything.
Nothing surprising. That is the point. Descriptive stats exist so nothing later surprises you either.
the correlation matrix, in one glance
correlation with customer_value
pairwise Pearson correlations with the target.
Two things jump out. First, tenure and deposit balance correlate at 0.81 with each other — that is a red flag we will come back to. Second, age barely correlates with value at all (r = −0.04) despite being the most human-feeling variable in the set.
fit one: salary alone
value ≈ 8,932 + 0.0714 × salary
R² = 0.137
Salary alone explains 13.7% of the variance in customer value. Not nothing. Not enough.
If you stopped here you would tell the business "richer customers are worth more, roughly £71 of value per £1,000 of salary." True — and useless as a targeting rule, because 86% of what makes a customer valuable is happening somewhere else.
coefficients on original units — deposit and salary scaled by 1,000 for readability.
R² jumps from 0.137 to 0.706. Adding the behavioural variables recovers five times as much explanatory power as salary gave us on its own.
Salary's coefficient collapses from 0.0714 to 0.0205 — a 71% drop. Salary was never really doing the work; it was a proxy standing in for tenure, deposit balance, and product holdings, all of which correlate with income.
confounders and multicollinearity
This is where it gets interesting — and where a lot of dashboards quietly lie.
Tenure confounds almost everything. Long-tenured customers hold more products (r = 0.68), carry higher deposits (r = 0.81), and earn more (r = 0.38). Any model that includes tenure will steal credit from the others. Any model that excludes it will hand that credit to whatever proxy remains.
Age is a lurking variable in disguise. Age correlates weakly with value directly (−0.04) but strongly with salary (0.50) and inversely with app logins (−0.43). Older customers earn more and log in less. Those two effects nearly cancel. If you segmented purely by age you would conclude age doesn't matter — and you would miss two large opposing effects.
Variance Inflation Factors:
variance inflation factor per predictor
all VIFs are under 5 — no critical multicollinearity, but deposit and tenure are entangled.
Everything is technically below the standard "worry" threshold of 5. But deposit balance at 4.5 and tenure at 3.5 are entangled enough that their individual coefficients should be reported with a caveat: they are shared credit for a single underlying story about customer maturity.
the one-page recommendation
Most useful variables for understanding customer value, ranked:
Tenure. The strongest single correlate (r = 0.69) and the anchor of the maturity story.
Deposit balance. Almost as strong (r = 0.68), but partly redundant with tenure. Keep one, drop the other for a lean model.
Product count. Adds independent signal (r = 0.58) — cross-holding is not just a proxy for tenure.
App logins. The best pure-behavioural signal (r = 0.31). Cheap to measure, causally plausible.
Email engagement. Small correlation (r = 0.24) but the largest standardised coefficient in the multi-fit. Under-weighted in intuition.
Do not use salary alone. It looks like a driver and it isn't. It is a demographic proxy that vanishes once you condition on behaviour.
Do not segment by age. The near-zero raw correlation hides two large opposing effects that will bite you when you slice a campaign by generation.
, dropping deposit (redundant with tenure) and salary (a confounded proxy). It sacrifices about four points of R² for a model whose coefficients you can actually explain to a room of executives — which is the only kind of model that ever gets used.