Oil Price Forecast from History: Time Series | Vose Software

ModelRisk example · Oil and gas

Oil Price Forecast from History

Which price deck should the five-year plan use? Three time-series models fitted to ten years of prices, weighted by the evidence.

  • Complexity: ★★★★★
  • Free Excel workbook (OG-04)
  • Needs ModelRisk: free trial

From the model’s saved run

Price deck for the plan

Annual average price of the model-averaged forecast.

MeasureUnit10th pctMedian90th pctMean
2027 average priceUS$/bbl53.764.879.565.9
2028 average priceUS$/bbl45.663.693.567.4
2029 average priceUS$/bbl42.062.9105.369.7
2030 average priceUS$/bbl39.462.8116.072.5
2031 average priceUS$/bbl37.262.7128.776.4
Monthly price — 10th to 90th percentile band

The business question

The five-year plan needs a price deck: an expected oil price for each year and a sensible range around it. The company has ten years of monthly prices. A random walk (geometric Brownian motion) says that today's price is the best guide to the future and that the range keeps widening.

A mean-reverting model says that prices are pulled back towards a long-run level, so the range stops growing. Both are standard, they fit the history almost equally well, and they disagree sharply about 2031.

Rather than pick one and hide the choice, the model fits three candidates with ModelRisk's time-series fit functions, measures the evidence for each with the Schwarz information criterion (SIC), and averages their forecasts by that evidence. The uncertainty of the fitted parameters is included too, because ten years of data pin down the long-run level only loosely.

Who it is for
Planners, commercial and finance teams who set price decks, and analysts who forecast commodity prices or exchange rates.
Main outputs
Monthly price forecast with a 10th–90th percentile band · annual average prices for the plan · the chance that each year's average falls below the budget price · the evidence for each model and what each one implies for year 5.

How the model works

Five sheets after this one, read from left to right. Each one feeds the next.

  1. Inputs sheet

    The budget price to test and a prior weight for each model (equal by default). Two switches: include parameter uncertainty, and average the models or use only the best one. The first forecast year is the year after the history ends.

  2. History sheet

    Ten years of months and monthly average prices, with their log returns. Paste your own months and prices over the yellow cells, ending in a December; everything after it updates.

  3. Models sheet

    VoseTimeGBMFitObject, VoseTimeGBMVRFitObject and VoseTimeGBMAJVRFitObject fit a random walk, a mean-reverting model and a mean-reverting model with jumps to the prices. VoseSIC scores each fit, penalising extra parameters (lower is better). Each model's support is its prior weight × exp(−ΔSIC / 2). Its evidence weight is its share of the total support, the standard approximation to the probability that it is the right model.

  4. Forecast sheet

    In every iteration VoseTimeSimulate draws a 60-month path from each fitted model. The random walk and mean-reversion fits also sample their parameters from their uncertainty. VoseDiscrete picks one model with probability equal to its weight, and that model's path is the forecast. Annual averages turn the path into a price deck.

  5. Results sheet

    Percentiles of the monthly and annual prices, the chance that each year's average falls below the budget price, and the year-5 price under each model and under the average.

ModelRisk techniques

  • Time-series fits VoseTimeGBMFitObject
  • Model comparison VoseSIC
  • Bayesian model averaging
  • Forecasts VoseTimeSimulate

Find similar models

Product
Application

The results in detail

The budget price

Chance that a year's average price is below the budget price on the Inputs sheet.

MeasureUnitValue
Budget price (Inputs sheet)US$/bbl60.0
YearProbability
2027 average below the budget price30.3%
2028 average below the budget price41.3%
2029 average below the budget price43.8%
2030 average below the budget price44.7%
2031 average below the budget price44.8%

Which model? The evidence, and what each model says about year 5

SIC and weights from the Models sheet; year-5 average price under each model and under the average.

Year-5 average price under each model
ModelSICΔSICWeight used
Random walk (GBM)−264.90.051.1%
Mean reversion (GBMVR)−264.80.148.7%
Mean reversion with jumps (GBMAJVR)−253.811.10.2%
MeasureUnit10th pctMedian90th pctMean
Random walk (GBM)US$/bbl30.472.9167.890.3
Mean reversion (GBMVR)US$/bbl43.559.581.561.4
Mean reversion with jumps (GBMAJVR)US$/bbl45.458.475.259.6
Model average (the price deck)US$/bbl37.262.7128.776.4

How to read these results

  • The history cannot tell the random walk from mean reversion: their SIC values are almost equal, so each gets about half the weight. Yet they disagree sharply about year 5. The random walk's range keeps widening. Mean reversion's levels off around the long-run level.
  • Averaging the models carries that disagreement into the price deck instead of hiding it. Picking the best model alone (set 'Average the models' to 0) would rest the whole plan on an SIC difference of a fraction of a point.
  • Parameter uncertainty widens the random walk's range the most: ten years of data leave its drift uncertain by about ±0.7% a month, which compounds over five years. It changes the mean-reversion forecast much less. Set 'Include parameter uncertainty' to 0 to compare.
  • The chance of falling below the budget price is the planning risk of that budget: a budget price with a 40% chance of not being reached in a year is a stretch target, not a base case.
  • ModelRisk's VoseTimeBMA function performs Bayesian model averaging of fitted time series in one array formula. This model spells the steps out so that every weight can be seen and changed.

See it move. Open the workbook, change an input on the Inputs sheet and run the simulation: every table and chart on this page updates in Excel.

Inputs and assumptions

Every assumption in the model, with its uncertainty and where it comes from. The figures are illustrative.

Plan settings 3 inputs

The budget price is tested against the forecast, which starts in the January after the history ends.

AssumptionUnitValueUncertainty
Budget pricePrice assumed in the budget. The Results sheet gives the chance that each year's average falls below it.US$/bbl60.0Fixed
First forecast yearThe year after the last month of history (History sheet). The forecast runs five calendar years from January.year2027Calculated
Include parameter uncertainty1 samples the parameters of the random walk and mean-reversion fits in every iteration (the fit functions' Uncertainty argument); 0 uses their best fit.1 = yes, 0 = no1Fixed
Model averaging 4 inputs

How the three fitted models are combined into one forecast.

AssumptionUnitValue
Average the models1 averages the models by their evidence weights; 0 uses only the model with the lowest SIC.1 = yes, 0 = no1
Prior weight: random walk (GBM)Your weight for each model before looking at the data. Equal weights let the data decide.relative1.00
Prior weight: mean reversion (GBMVR)Economic argument (producers respond to prices) often favours mean reversion for commodities.relative1.00
Prior weight: mean reversion with jumps (GBMAJVR)Set a model's weight to 0 to leave it out.relative1.00

Units and conventions

Prices
US$/bbl, monthly averages of a crude-oil benchmark (synthetic data); nominal prices, no inflation adjustment.
Log return
ln(price this month ÷ price last month): close to the percentage change for small moves.
SIC
Schwarz information criterion = k·ln(n) − 2·ln(maximum likelihood); lower is better. A difference below 2 is weak evidence for the better model, above 6 strong evidence.
Percentiles
10th percentile: a 10% chance of a lower value. 90th percentile: a 10% chance of a higher value.

Key assumptions and limitations

Models
Three candidates. Others, such as GARCH models with changing volatility, can be added the same way: fit, score, include in the weights.
Parameter uncertainty
Included for the random walk and mean-reversion fits. The jump model, which carries almost no weight, is fitted at its best estimate to keep the simulation fast.
Weights
Evidence weights use the SIC approximation to Bayesian model averaging, with equal prior weights unless you change them.
History
The last ten years are taken as representative: structural change, producer policy and the energy transition are not modelled explicitly.
Data
The price series is synthetic, generated for this example. It resembles, but does not reproduce, real oil prices.

How to use it

  1. Paste your own months and monthly prices over the History sheet (120 months, oldest first, ending in a December) and set the budget price on the Inputs sheet.
  2. Read the Models sheet: the SIC and the evidence weights show how strongly the history favours each model.
  3. Press F9 on the Forecast sheet to see different paths, then run a simulation from the ModelRisk ribbon (10,000 samples, fixed seed).
  4. Set 'Average the models' to 0 to use only the best model, or change the prior weights, and simulate again.

Simulate this model with ModelRisk’s classic engine: it does not run in Turbo mode yet.

ModelRisk functions used

VoseTimeGBMFitObject, VoseTimeGBMVRFitObject, VoseTimeGBMAJVRFitObject
Fit the three time-series models to the prices. With Uncertainty = TRUE each recalculation samples the parameters.
VoseSIC, VoseTimeOptimalFitObject
The Schwarz information criterion of each fit, and the model with the lowest SIC.
VoseTimeGBMFitP, VoseTimeGBMVRFitP, VoseTimeGBMAJVRFitP
The best-fit parameters, shown on the Models sheet.
VoseTimeSimulate
Draws a forecast path from a fitted time-series object.
VoseDiscrete
Picks the model used in each iteration, with probability equal to its weight.
VoseInput, VoseOutput
Name the model drawn and the forecast outputs: every monthly price, the annual averages and year 5 by model.
VoseSimPercentile, VoseSimMean, VoseSimProbability
Statistics of the simulation for the tables and charts on the Results sheet.

Further reading

  • Monte Carlo simulation explained (Vose guide)
  • Hoeting, J. A., Madigan, D., Raftery, A. E. and Volinsky, C. T. (1999). Bayesian model averaging: a tutorial. Statistical Science 14(4), 382–417.
  • Vose, D. (2008). Risk Analysis: A Quantitative Guide, 3rd edition. Wiley — chapter on time series.
  • Pindyck, R. S. (1999). The long-run evolution of energy prices. The Energy Journal 20(2), 1–27.