How the Top-Up Score Works
A complete breakdown of the mathematics behind our fuel fill-up recommendation. From raw price data to the final score on the gauge.
The Top-Up Score
The Top-Up Score is a single number from 0 to 100 that tells you how urgently you should fill up. It combines price momentum, supply risk, market signals, and cycle timing into one actionable metric.
5
Don't bother
25
No rush
50
Neutral
75
Fill up soon
95
Fill everything
The Master Formula
The Top-Up Score is a weighted sum of four independent sub-scores, each normalised to 0-100. A crisis override can push the score to maximum regardless of the formula.
Expanding with the component weights:
| Component | Weight | What it captures |
|---|---|---|
| Are prices going up or down? How fast? How confident? | ||
| Where are we in the weekly price cycle? | ||
| Oil markets, FX rates, and prediction market odds | ||
| Are stations running dry? Is it accelerating? |
1. Price Momentum Score
Weight: 40% of final score
The model predicts how much fuel prices will change over the next 3 and 7 days. We blend these into a single directional signal:
where and are the predicted price changes in c/L. This is then normalised to a 0-100 scale over a range of ±40c/L:
A confidence adjustment handles uncertainty. The model produces a confidence interval . When this interval is wide, the model is less sure. If it's uncertain and suggesting to wait, we nudge upward (safer to fill up):
How the model produces and
These predictions come from a LightGBM gradient-boosted tree model. Three separate models are trained (quantile regression at the 10th, 50th, and 90th percentiles) to produce the median forecast and the confidence interval.
For a given city and forecast horizon , the model minimises the quantile loss:
where gives the 10th, 50th (median), and 90th percentile models respectively. The final prediction and confidence interval are:
where is the feature vector at time , comprising 24 features across price momentum, volatility, cycle position, and calendar signals.
The 24 features that feed the model:
delta_1dprice change, last 24h
delta_3dprice change, last 3 days
delta_7dprice change, last 7 days
delta_14dprice change, last 14 days
price_vs_7d_meanz-score vs 7-day avg
price_vs_30d_meanz-score vs 30-day avg
price_vs_90d_meanz-score vs 90-day avg
volatility_7d7-day rolling std dev
volatility_14d14-day rolling std dev
volatility_30d30-day rolling std dev
price_acceleration2nd derivative of price
intraday_rangemax-min across stations
percentile_rankposition in 90-day range
dowday of week (0-6)
is_weekendSaturday/Sunday flag
monthmonth of year (1-12)
cycle_positiondeviation from 7d MA
momentum_3dnormalised 3d momentum
momentum_7dnormalised 7d momentum
roc_7d7-day rate of change %
roc_14d14-day rate of change %
price_mediancurrent daily median
ma_7d7-day moving average
ma_30d30-day moving average
The model is retrained manually on the full historical dataset. On held-out test data (last 90 days): 3-day MAE ~5.2c/L, directional accuracy ~74%. 7-day MAE ~10.1c/L, directional accuracy ~77%.
2. Cycle Timing Score
Weight: 10% of final score
Australian fuel prices follow weekly cycles (well-documented by the ACCC). Prices bottom out mid-week and peak on weekends. We track the cycle phase : 0 = just hit the trough, 1 = approaching next trough.
An additional bonus applies if the current cycle has stretched beyond the rolling average length :
3. Macro Signal Score
Weight: 25% of final score
Global oil prices, the AUD/USD exchange rate, and prediction markets signal where Australian fuel costs are heading. Each sub-signal is normalised to 0-100:
Brent crude oil price level. Maps the current Brent price to urgency: $60/bbl = 0 (no pressure), $90/bbl = 50 (moderate), $120/bbl = 100 (maximum pressure). Fetched live from Yahoo Finance.
AUD/USD exchange rate. Australia imports fuel priced in US dollars. A weaker AUD means more expensive fuel. At 0.78 = no pressure (score 0), at 0.62 = maximum pressure (score 100). Fetched live from the Frankfurter FX API.
Brent daily change. Captures short-term momentum in oil markets. A $5/day drop = 0 (easing), a $5/day rise = 100 (spiking). This reacts faster than the price level signal.
RBOB Gasoline futures(proxy for Singapore MOGAS 95). This is the refined product benchmark — more predictive than crude alone because it captures refining margin pressure. $1.50/gal = 0, $2.75 = 50, $4.00 = 100. Fetched live from Yahoo Finance (RB=F).
Polymarket prediction odds.Real-time odds from Polymarket's crude oil prediction markets via the Gamma API. P(crude ≥ $100) maps directly to 0–100. Thousands of traders betting real money make this a powerful crowdsourced leading indicator.
Wholesale-retail spread.Approximated as the gap between the 5th percentile of station prices (proxy for terminal gate) and the national median. A tight spread (~5c/L) means competitive pricing; a wide spread (~25c/L) means retailers are extracting premium — prices may be near a cycle peak. Computed live from CheckPetrol station data.
These six sub-signals are combined as:
Sources: Brent, WTI, gasoline via Yahoo Finance. AUD/USD via Frankfurter. Polymarket via Gamma API. Wholesale-retail spread computed from live station prices.
4. Supply Risk Score
Weight: 25% of final score
The crisis detector. During normal times it sits near zero. During supply disruptions, it dominates. Uses an exponential curve so low outage rates barely register but high rates ramp up fast.
where is the fraction of stations currently reporting as dry (detected from the has_outage flag in the CheckPetrol API).
How the curve behaves:
1% outage
~5
5% outage
~22
10% outage
~39
20% outage
~63
The exponential shape means 1-3% outages (normal churn) barely move the score, but once outages cross ~10% the score accelerates sharply — reflecting the non-linear nature of supply crises where shortages compound.
Worked Examples
Normal Tuesday in Melbourne (Score: 22)
Price cycle just hit its weekly trough. Crude oil flat. No outages.
(just hit trough)
Brent flat, AUD stable
0% outages
Thursday in Sydney, prices climbing (Score: 66)
Mid-cycle, prices rising. Brent crude jumped $5 this week. AUD weakened.
(mid-rise)
Brent +$5, AUD -1.5c
2% outages
March 2026 crisis (Score: 100, override)
Strait of Hormuz closed. 18% of Sydney stations dry. Outages accelerating.
→ CRISIS OVERRIDE
→ CRISIS OVERRIDE
Fill everything. Now.
(Formula alone would have produced 89)
Savings Calculation
Every recommendation includes a dollar-amount savings estimate, the number people screenshot and send to group chats.
Where (typical Australian passenger car). For example, a predicted rise of gives:
The Prediction Model
The heart of the system is a LightGBMgradient-boosted tree model trained on 7+ years of Queensland Government fuel price data (Dec 2018 – present, via data.qld.gov.au). The QLD model is applied as a directional proxy for all Australian cities.
Why LightGBM?
- GBMs match or beat deep learning on tabular/structured data
- Trains in seconds, not hours
- Native feature importance lets us explain why it predicts what it does
- Handles missing data gracefully
- Inference in <1ms, no GPU required
What it predicts
- price change, next 3 days
- price change, next 7 days
- 10th percentile (worst case)
- median forecast
- 90th percentile (best case)
- Single QLD aggregate model, applied as proxy for all cities
Feature Set (24 features per day)
Price Momentum (7)
delta 1d/3d/7d/14d, z-scores vs 7d/30d/90d MA
Volatility (6)
7d/14d/30d std dev, acceleration, intraday range, percentile rank
Cycle & Momentum (5)
cycle position, 3d/7d momentum, 7d/14d rate of change
Calendar & Level (6)
day of week, weekend flag, month, median price, 7d/30d MA
Data Sources
CheckPetrol API (aggregates all state feeds)
6,500+ stations across all states. Prices cached and refreshed every 15 min.
Brent Crude, WTI, AUD/USD, Gasoline Futures
Yahoo Finance (no API key), Frankfurter FX API. Cached hourly.
Polymarket Prediction Markets
Gamma API. Crude oil price prediction odds, real-time. No API key required.
Outage Detection
Inferred from has_outage flags in CheckPetrol API. Updated with each price refresh.
Accuracy & Retraining
5.2c/L
MAE, 3-day forecast
74%
Directional Accuracy, 3-day
77%
Directional Accuracy, 7-day