Fuel Detective: UK Fuel Market Intelligence
Institutional briefing format for operational decision support, anomaly triage, and postcode-level market review.
Executive Summary
Interpretation: use high-probability rows with narrow intervals as primary action candidates, then route anomaly flags to validation controls. Output rows are constrained to one row per station ID. 64.8% positive over 7.0-day horizon.
Decision Queue
Standardized triage policy designed for repeatable operations.
| Lane | Rows | Rule | Operational Guidance |
|---|---|---|---|
| Action Now | 997 | Probability >= 0.70, interval width <= 0.20, no high anomaly. | Prioritize for immediate route or procurement decisions. |
| Validate First | 34 | High anomaly, diesel below petrol, or wide uncertainty interval. | Perform manual checks before any policy or financial action. |
| Monitor | 6,316 | No strong trigger condition. | Retain in routine monitoring and reassess at next refresh. |
- Apply decision lanes consistently to reduce discretionary drift across operators.
- Escalate all severe anomalies into documented verification steps.
- Use postcode-sector context to calibrate local competition assumptions.
Signal Guide
Colored labels use current model outputs and station metadata to speed up review.
Fill Recommendation
- Fill now: rise risk score >= 0.45, pence-to-alert <= 3.0, and no high anomaly flag.
- Fill soon: rise risk score >= 0.30, pence-to-alert <= 5.0, below fill-now conditions, and no high anomaly flag.
- Monitor: no immediate fill trigger; keep under routine review.
Risk Rating
- High: rise risk score at or above the fill-now threshold.
- Medium: rise risk score in the fill-soon range.
- Low: rise risk score below fill-soon range.
Station Type (Data Source)
- Supermarket: derived from station `is_supermarket` data in the analysis dataset.
- Non-supermarket: not marked as supermarket in the source data.
Visual Briefing Pack
Brand Positioning (Data-Derived)
Update rate is the station-weighted share of brand rows with staleness below 7 days.
| Brand | Stations | Avg vs Competitors (ppl) | Update Rate (%) | Price Position Score |
|---|---|---|---|---|
| COSTCO WHOLESALE | 20 | -10.70 | 0.0 | -41.41 |
| SAINSBURY'S | 316 | -9.00 | 0.0 | -40.16 |
| NICHOLL | 5 | -10.84 | 0.0 | -36.68 |
| HARVEST ENERGY | 15 | -5.33 | 0.0 | -18.98 |
| TESCO | 516 | -4.71 | 99.8 | -13.49 |
| ASDA | 320 | -4.88 | 0.0 | -13.20 |
| MORRISONS | 337 | -4.44 | 0.0 | -11.93 |
| CENTRAL CO-OP | 18 | -4.76 | 0.0 | -6.74 |
| GULF PETROL STATION | 5 | -3.60 | 0.0 | -2.20 |
| CIRCLE K | 31 | -1.70 | 0.0 | 0.63 |
| HIGHLAND FUELS | 11 | -0.55 | 0.0 | 5.73 |
| SOLO | 10 | 0.97 | 0.0 | 6.94 |
| MURCO | 92 | 0.59 | 0.0 | 12.59 |
| ESSAR | 32 | -0.45 | 3.1 | 13.17 |
| GULF | 207 | -0.31 | 0.0 | 13.27 |
| MAXOL | 48 | 1.28 | 0.0 | 16.10 |
| JET | 222 | 0.04 | 3.6 | 16.74 |
| PACE | 21 | 0.89 | 0.0 | 17.26 |
| VALERO | 62 | 0.43 | 6.5 | 17.79 |
| TEXACO | 415 | 0.49 | 8.0 | 18.14 |
Postcode Sector Market Structure
| Postcode Sector | Stations | Avg E10 (ppl) | Price Range (ppl) | Market Type | Price Leader |
|---|---|---|---|---|---|
| CR0 | 14 | 147.89 | 14.00 | Concentrated | SAINSBURY'S |
| BT71 | 14 | 147.90 | 40.00 | Competitive | ANNAGHER SERVICE STATION |
| BT23 | 13 | 148.73 | 7.20 | Competitive | ASDA |
| BT47 | 12 | 145.40 | 21.00 | Competitive | GO |
| LE3 | 12 | 157.22 | 33.00 | Competitive | TEXACO |
| GL2 | 11 | 146.21 | 16.00 | Competitive | SAINSBURY'S |
| LE4 | 11 | 149.88 | 17.00 | Competitive | COSTCO WHOLESALE |
| PR7 | 11 | 152.23 | 41.00 | Competitive | ECCLESTON GREEN FILLING STATION |
| TA6 | 11 | 154.05 | 41.00 | Competitive | SAINSBURY'S |
| ST5 | 11 | 155.15 | 44.00 | Competitive | SAINSBURY'S |
| LE10 | 10 | 148.38 | 5.00 | Competitive | TESCO |
| BT42 | 10 | 148.80 | 16.00 | Competitive | SAINSBURY'S |
| BT30 | 10 | 149.90 | 0.00 | Competitive | CIRCLE K |
| S60 | 10 | 151.40 | 36.00 | Competitive | MORRISONS |
| SN14 | 10 | 154.40 | 42.00 | Competitive | SAINSBURY'S |
| CH7 | 10 | 154.90 | 14.00 | Competitive | RHYDYMWYN SERVICE STATION |
| DE21 | 9 | 143.88 | 24.00 | Competitive | ESSO |
| BT34 | 9 | 143.90 | 29.00 | Competitive | SPAR |
| DL14 | 9 | 144.06 | 14.00 | Competitive | SAINSBURY'S |
| TQ12 | 9 | 146.23 | 13.00 | Competitive | SAINSBURY'S |
| DN4 | 9 | 146.43 | 7.20 | Competitive | ASDA |
| DL1 | 9 | 146.57 | 13.00 | Competitive | SAINSBURY'S |
| TA1 | 9 | 146.66 | 17.00 | Competitive | SAINSBURY'S |
| PR2 | 9 | 146.79 | 14.00 | Competitive | ASDA |
| BT32 | 9 | 148.12 | 5.00 | Competitive | TESCO |
Market Regime Breakdown
| Regime | Sectors | Share (%) |
|---|---|---|
| Mixed | 520 | 40.6 |
| Supermarket Dominated | 461 | 36.0 |
| Fragmented | 113 | 8.8 |
| Competitive | 99 | 7.7 |
| Local Monopoly | 89 | 6.9 |
Top Anomalies
| Station | Brand | Station Type | Postcode | E10 (ppl) | Diesel (ppl) | Change Probability | Anomaly Score | Anomaly Level | Reason |
|---|---|---|---|---|---|---|---|---|---|
| SAINSBURYS KELSO | SAINSBURY'S | Supermarket | TD5 8DW | 134.90 | 162.90 | 0.856 | 85.0 | High | stale update timestamp, large local competitor gap, extreme price quantile, brand diesel spread outlier |
| ASDA CHERWELL VALLEY EXPRESS PETROL | ESSO | Non-supermarket | OX27 7RD | 181.90 | 193.90 | 0.619 | 85.0 | High | stale update timestamp, large local competitor gap, extreme price quantile, brand diesel spread outlier |
| ASDA TAMWORTH EXPRESS PETROL | ESSO | Non-supermarket | B77 5PS | 181.90 | 193.90 | 0.605 | 85.0 | High | stale update timestamp, large local competitor gap, extreme price quantile, brand diesel spread outlier |
| R & T Maybury hill Ltd | TEXACO | Non-supermarket | GU22 8AA | 127.90 | 138.90 | 0.122 | 85.0 | High | stale update timestamp, large local competitor gap, extreme price quantile, brand diesel spread outlier |
| Barnhills of Broxton | GULF | Non-supermarket | CH3 9JR | 130.90 | 138.90 | 0.064 | 85.0 | High | stale update timestamp, large local competitor gap, extreme price quantile, brand diesel spread outlier |
| Robinhood Service Station | GULF | Non-supermarket | PE15 9PZ | 127.90 | 137.90 | 0.059 | 85.0 | High | stale update timestamp, large local competitor gap, extreme price quantile, brand diesel spread outlier |
| Sandybank Garage | TEXACO | Non-supermarket | BB4 7JE | 124.90 | 134.90 | 0.043 | 85.0 | High | stale update timestamp, large local competitor gap, extreme price quantile, brand diesel spread outlier |
| MARYVALE SERVICE STATION | GULF | Non-supermarket | B30 2HJ | 127.70 | 135.90 | 0.041 | 85.0 | High | stale update timestamp, large local competitor gap, extreme price quantile, brand diesel spread outlier |
| SHELL BEACONSFIELD | SHELL | Non-supermarket | HP9 2SE | 175.90 | 189.90 | 0.866 | 70.0 | Medium | stale update timestamp, large local competitor gap, brand diesel spread outlier |
| Cairn Lodge Services | SHELL | Non-supermarket | ML11 0RJ | 178.90 | 191.90 | 0.840 | 70.0 | Medium | stale update timestamp, large local competitor gap, brand diesel spread outlier |
Highest Predicted Price-Change Probability
| Station | Brand | Station Type | Postcode | E10 (ppl) | Change Probability | Upward Direction (p_up) | Probability Interval | Fill Recommendation | Risk Rating | Rise Risk Score | Pence to Fill Alert | Expected Days to Change | Staleness (days) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| SAINSBURYS HANKRIDGE FARM | SAINSBURY'S | Supermarket | TA1 2LR | 140.90 | 0.989 | 0.041 | 0.974 - 0.989 | Monitor | Low | 0.040 | 8.00 | 1.6 | 90.0 |
| SAINSBURYS MATLOCK | SAINSBURY'S | Supermarket | DE4 3SP | 138.90 | 0.984 | 0.044 | 0.958 - 0.981 | Monitor | Low | 0.043 | 8.00 | 1.7 | 90.0 |
| SAINSBURYS APSLEY MILL | SAINSBURY'S | Supermarket | HP3 9QZ | 138.90 | 0.983 | 0.044 | 0.958 - 0.985 | Monitor | Low | 0.043 | 8.00 | 1.7 | 90.0 |
| SAINSBURYS COLERAINE | SAINSBURY'S | Supermarket | BT51 3QQ | 137.90 | 0.980 | 0.045 | 0.960 - 0.987 | Monitor | Low | 0.044 | 8.00 | 1.8 | 90.0 |
| SAINSBURYS SUNDERLAND | SAINSBURY'S | Supermarket | SR3 1PD | 140.90 | 0.978 | 0.041 | 0.947 - 0.974 | Monitor | Low | 0.040 | 8.00 | 1.8 | 90.0 |
| SAINSBURYS EDINBURGH LONGSTONE | SAINSBURY'S | Supermarket | EH14 2ER | 137.90 | 0.977 | 0.045 | 0.966 - 0.981 | Monitor | Low | 0.044 | 7.20 | 1.8 | 90.0 |
| SAINSBURYS HELSTON | SAINSBURY'S | Supermarket | TR13 8BN | 139.90 | 0.977 | 0.042 | 0.955 - 0.980 | Monitor | Low | 0.041 | 7.25 | 1.8 | 90.0 |
| SAINSBURYS BRADFORD | SAINSBURY'S | Supermarket | BD10 0QF | 138.90 | 0.974 | 0.044 | 0.965 - 0.980 | Monitor | Low | 0.043 | 6.92 | 1.9 | 90.0 |
| SAINSBURYS LEEK | SAINSBURY'S | Supermarket | ST13 8YG | 139.90 | 0.974 | 0.042 | 0.952 - 0.976 | Monitor | Low | 0.041 | 7.75 | 1.9 | 90.0 |
| SAINSBURYS MURRAYFIELD | SAINSBURY'S | Supermarket | EH11 2QW | 137.90 | 0.972 | 0.045 | 0.961 - 0.978 | Monitor | Low | 0.044 | 8.00 | 2.0 | 90.0 |
| SAINSBURYS DUNGANNON | SAINSBURY'S | Supermarket | BT71 4NA | 137.90 | 0.972 | 0.045 | 0.957 - 0.976 | Monitor | Low | 0.044 | 8.00 | 2.0 | 90.0 |
| SAINSBURYS RAWDON | SAINSBURY'S | Supermarket | LS19 7BZ | 137.90 | 0.970 | 0.045 | 0.942 - 0.969 | Monitor | Low | 0.044 | 8.00 | 2.0 | 90.0 |
| SAINSBURYS ARNOLD | SAINSBURY'S | Supermarket | NG5 6BN | 138.90 | 0.970 | 0.044 | 0.957 - 0.979 | Monitor | Low | 0.043 | 8.00 | 2.0 | 90.0 |
| SAINSBURYS KETTERING | SAINSBURY'S | Supermarket | NN16 8JY | 137.90 | 0.968 | 0.045 | 0.943 - 0.977 | Monitor | Low | 0.044 | 6.72 | 2.0 | 90.0 |
| SAINSBURYS LEAMINGTON | SAINSBURY'S | Supermarket | CV34 6RH | 141.90 | 0.967 | 0.039 | 0.950 - 0.970 | Monitor | Low | 0.038 | 8.00 | 2.0 | 90.0 |
Preemptive Fill Opportunities
| Station | Brand | Station Type | Postcode | E10 (ppl) | Fill Alert Price (ppl) | Pence to Fill Alert | Risk Rating | Rise Risk Score | Upward Direction (p_up) | Expected Days to Change | Fill Recommendation |
|---|---|---|---|---|---|---|---|---|---|---|---|
| REDCAR SUPERSTORE - PETROL FILLING STATION | TESCO | Supermarket | TS10 2AA | 143.90 | 146.65 | 2.75 | High | 0.695 | 0.903 | 4.8 | Fill now |
| WINDLE ISLAND EXPRESS | TESCO | Supermarket | WA10 6QY | 142.90 | 143.90 | 1.00 | High | 0.641 | 0.931 | 6.0 | Fill now |
| HAYDOCK CHURCH RD SUPERSTORE - PETROL FILLING STATION | TESCO | Supermarket | WA11 0GT | 142.90 | 143.90 | 1.00 | High | 0.577 | 0.933 | 7.3 | Fill now |
| DUDLEY EXTRA - PETROL FILLING STATION | TESCO | Supermarket | DY1 4RP | 144.90 | 146.65 | 1.75 | High | 0.540 | 0.773 | 5.8 | Fill now |
| WHITSTABLE EXTRA - PETROL FILLING STATION | TESCO | Supermarket | CT5 3EE | 143.90 | 146.90 | 3.00 | High | 0.523 | 0.802 | 6.6 | Fill now |
| CONSETT GENESIS EXTRA - PETROL FILLING STATION | TESCO | Supermarket | DH8 5XP | 145.90 | 148.23 | 2.33 | High | 0.523 | 0.831 | 7.0 | Fill now |
| BASILDON PITSEA EXTRA - PETROL FILLING STATION | TESCO | Supermarket | SS13 3JU | 143.90 | 145.32 | 1.42 | High | 0.520 | 0.804 | 6.7 | Fill now |
| ABERDARE SUPERSTORE - PETROL FILLING STATION | TESCO | Supermarket | CF44 8DL | 145.90 | 147.40 | 1.50 | High | 0.493 | 0.824 | 7.7 | Fill now |
| Crowborough Service Station | CROWBOROUGH SERVICE STATION | Non-supermarket | TN6 2SP | 146.90 | 148.15 | 1.25 | High | 0.492 | 0.831 | 7.8 | Fill now |
| SILVERBURN EXTRA - PETROL FILLING STATION | TESCO | Supermarket | G53 6AG | 143.90 | 145.48 | 1.58 | High | 0.477 | 0.849 | 8.5 | Fill now |
| BELLSHILL EXTRA - PETROL FILLING STATION | TESCO | Supermarket | ML4 1EN | 145.90 | 148.75 | 2.85 | High | 0.469 | 0.831 | 8.4 | Fill now |
| YARDLEY EXTRA - PETROL FILLING STATION | TESCO | Supermarket | B26 1AD | 143.90 | 146.75 | 2.85 | High | 0.464 | 0.903 | 9.7 | Fill now |
| GREENOCK EXTRA - PETROL FILLING STATION | TESCO | Supermarket | PA15 1LE | 145.90 | 148.15 | 2.25 | High | 0.462 | 0.803 | 8.2 | Fill now |
| COMPTON ESSO EXPRESS | ESSO | Non-supermarket | PL3 5JU | 145.90 | 148.90 | 3.00 | High | 0.459 | 0.923 | 10.2 | Fill now |
| MELTON MOWBRAY SUPERSTORE - PETROL FILLING STATION | TESCO | Supermarket | LE13 1SQ | 145.90 | 148.40 | 2.50 | High | 0.454 | 0.830 | 8.8 | Fill now |
Model Drivers
| feature | importance | importance_std | importance_lower | importance_upper | stability |
|---|---|---|---|---|---|
| diesel | 0.128710 | 0.007123 | 0.114860 | 0.142929 | 18.068995 |
| e10 | 0.100503 | 0.005545 | 0.091216 | 0.111815 | 18.126009 |
| diesel_premium | 0.096218 | 0.006980 | 0.085129 | 0.109782 | 13.784943 |
| diesel_petrol_ratio | 0.096027 | 0.006286 | 0.084719 | 0.107337 | 15.276370 |
| premium_spread | 0.081717 | 0.003772 | 0.074499 | 0.089379 | 21.663456 |
| fuel_price_std | 0.080488 | 0.004242 | 0.074248 | 0.088612 | 18.972515 |
| e5 | 0.078227 | 0.003507 | 0.071345 | 0.085857 | 22.303100 |
| brand_encoded | 0.068623 | 0.002863 | 0.063810 | 0.074841 | 23.969779 |
| price_vs_competitor_avg | 0.054480 | 0.001792 | 0.051790 | 0.058394 | 30.401038 |
| nearest_competitor_distance_km | 0.045602 | 0.001553 | 0.043105 | 0.048842 | 29.368081 |
| price_vs_competitor_min | 0.043226 | 0.001745 | 0.039971 | 0.046175 | 24.770892 |
| regime_price_position | 0.027190 | 0.002466 | 0.022248 | 0.031837 | 11.027925 |
| competition_intensity | 0.025329 | 0.000962 | 0.023381 | 0.027252 | 26.326095 |
| is_supermarket | 0.020446 | 0.002143 | 0.016671 | 0.024916 | 9.541579 |
| is_premium | 0.013273 | 0.001091 | 0.011690 | 0.015119 | 12.161991 |
Downloads
Method and Assurance
Transparent uncertainty
Each probability includes lower, median, and upper bounds to support risk-aware decisions.
Deterministic execution
The pipeline uses fixed seeds and consistent transforms for repeatable outputs on the same data snapshot.
Operational safeguards
High-anomaly and diesel-below-petrol rows are separated for validation-first workflows.
Known limitation
The probability score is learned from observed forward price-change labels and should still be used with policy thresholds and human review.
Technical Appendix
Walk-Forward Fold Metrics
fold_1: train_rows=618 validation_rows=2907 roc_auc=0.7570 brier=0.1850 fold_2: train_rows=848 validation_rows=2907 roc_auc=0.6990 brier=0.2237 fold_3: train_rows=1145 validation_rows=2907 roc_auc=0.7218 brier=0.2224
Summary Snapshot
Fuel Detective Summary
================================================================================
Generated UTC: 2026-03-27T16:08:48.893257+00:00
Data source: UK fuel station full-history dataset
Stations analyzed: 7,347
Unique station IDs: 7,347
Duplicate station rows in output: 0
Median E10 (ppl): 149.900
Median diesel (ppl): 179.900
Average staleness (days): 78.887
Median expected days to change: 14.95
High change probability rows (>0.70): 1,017
High anomaly rows: 8
Diesel cheaper than petrol rows: 7
Stale rows (>60 days): 6,399
Fill-now opportunities: 16
Fill-soon opportunities: 128
Market intelligence
--------------------------------------------------------------------------------
Brand stats rows: 37
Postcode sector stats rows: 1,282
Market regime rows: 1,282
Market regime breakdown:
Mixed: 520 (40.6%)
Supermarket Dominated: 461 (36.0%)
Fragmented: 113 (8.8%)
Competitive: 99 (7.7%)
Local Monopoly: 89 (6.9%)
Cheapest positioning brand: COSTCO WHOLESALE (score=-41.408)
Most expensive positioning brand: WELCOME BREAK (score=60.500)
Largest postcode sector sample: CR0 (stations=14)
Model diagnostics
--------------------------------------------------------------------------------
Target mode: price_change
Target horizon (days): 7.0
Target positive rate: 0.6482
Class balance: class_0=5113, class_1=9422
Training rows: 1,145
Validation rows: 2,907
Validation ROC-AUC (last fold): 0.7218
Walk-forward ROC-AUC mean: 0.7259
Walk-forward ROC-AUC std: 0.0239
Validation Brier score (last fold): 0.2224
Walk-forward Brier mean: 0.2103
Walk-forward Brier std: 0.0180
Walk-forward fold metrics
--------------------------------------------------------------------------------
fold_1: train_rows=618 validation_rows=2907 roc_auc=0.7570 brier=0.1850
fold_2: train_rows=848 validation_rows=2907 roc_auc=0.6990 brier=0.2237
fold_3: train_rows=1145 validation_rows=2907 roc_auc=0.7218 brier=0.2224
Classification report
--------------------------------------------------------------------------------
precision recall f1-score support
stable_state 0.770 0.505 0.610 1518
price_change_next_7d 0.607 0.835 0.703 1389
accuracy 0.663 2907
macro avg 0.688 0.670 0.656 2907
weighted avg 0.692 0.663 0.654 2907
Top feature importance
--------------------------------------------------------------------------------
diesel: 0.128710
e10: 0.100503
diesel_premium: 0.096218
diesel_petrol_ratio: 0.096027
premium_spread: 0.081717
fuel_price_std: 0.080488
e5: 0.078227
brand_encoded: 0.068623
price_vs_competitor_avg: 0.054480
nearest_competitor_distance_km: 0.045602