← Back to Research
Research · 2025

Household-Level Fuel Poverty Risk Scoring from Aggregate Statistics

R brms Stan Bayesian MCMC Random Forest XGBoost Python Parquet
Work in Progress
View research page →

Official fuel poverty statistics in the UK are published only at local authority level — aggregates covering populations of tens of thousands of households. That resolution is too coarse to enable targeted interventions: a local authority can be flagged as high-risk while the actual vulnerable households are concentrated in specific streets, tenures, or property types that the aggregate masks entirely.

This project asks whether household-level fuel poverty risk can be reliably estimated using only publicly available data — without access to any household survey, administrative record, or linked dataset that would require data access agreements. The answer, within tested bounds, is yes.

Data assembly

The project integrates six government data sources at property level:

After cross-source linkage, deduplication, and quality filtering, the working dataset comprises 2.6 million property records. All location joins were performed at LSOA or postcode level depending on the source's finest available geography.

Target generation: the core methodological challenge

The project's central technical problem is that household-level fuel poverty labels do not exist in any public dataset. The LILEE (Low Income Low Energy Efficiency) indicator, published by DESNZ, provides count-level fuel poverty estimates at local authority level only. These aggregate statistics contain genuine signal about the distribution of fuel poverty risk but cannot be applied directly to individual properties.

The solution is MCMC Bayesian inference. Using the LILEE supplementary tables as informative priors — encoding what is known about the aggregate distribution of fuel poverty risk within each local authority — a Stan/brms model generates posterior predictive distributions of fuel poverty probability for each property in the dataset. These synthetic household-level probabilities are not ground truth; they are principled probabilistic estimates with full uncertainty quantification. Credible intervals are retained throughout rather than collapsed to point estimates.

Feature engineering

Fifty-plus features were engineered from the raw variables, including:

Energy consumption, fuel costs, and income variables are heavily right-skewed with lognormal distributions. Mean-based outlier removal and parametric thresholds were avoided throughout; quantile-based capping and nonparametric treatment were applied consistently.

Validation design

Two parallel validation pipelines were run to bound model reliability:

SMOTE oversampling was applied before model training to address class imbalance across the five ordinal risk tiers. All evaluation was performed on a held-out test set. Sensitivity analysis across multiple random subsamples of the 2.6M record dataset confirmed output stability.

Results

ModelPipelineAccuracyROC AUC
Random ForestA — full features71.8%0.91
Random ForestB — clean result68.5%0.88
XGBoostB — clean result65.5%0.87
Deep Neural NetB — clean result55.3%0.79

Pipeline B Random Forest is the headline result: 68.5% accuracy across five ordinal risk classes, 0.88 ROC AUC, with no definitional signal leakage from the target construction process. Pipeline A provides an interpretable performance ceiling.

Technical notes

The full pipeline runs in R. MCMC inference used brms with the Stan backend (4 chains, 2,000 iterations each, convergence confirmed by R-hat diagnostics). Data wrangling used dplyr and arrow with Parquet-format intermediate files for performance across 2.6M records. Machine learning validation used caret with ranger (Random Forest) and the xgboost package. Visualisation used ggplot2. A parallel Python pipeline (scikit-learn, pandas) was used for cross-validation of the Random Forest results.