Rescaling model predictions without retraining
165 million predictions were baked with fuel at $2.24 a gallon. Changing that does not require retraining, because the simulator's cost function separates cleanly into a rate and a price.

A surrogate model trained on simulator output inherits every assumption the simulator was configured with. For 165 million harvest cost predictions, that included diesel at $2.24 a gallon, labour at $22.07 an hour, and an equipment price index of 145.62. Fuel prices move. The usual answer is to regenerate the training labels and retrain, which takes days. There is a better answer if the underlying cost function has the right shape, and it is worth checking whether yours does before assuming it does not.
The problem
Every prediction in the deployed layer is conditional on economic assumptions frozen at training time. A planner asking what happens if diesel doubles is asking a question the model cannot answer, because the model has never seen any other diesel price.
Retraining is the obvious route and it is expensive in a way that compounds. Regenerate 40.9 million labels through the simulator, retrain both stages, re-run inference across 165 million combinations, rebuild the downstream layers that depend on the cost surface. Then do it again for the next scenario, because what-if analysis is not one alternative set of assumptions but an arbitrary number of them.
You could also learn the parameters. Add fuel price, wage rate and equipment index as input features, generate training data across a grid of economic scenarios, and let the model interpolate. That multiplies the training set by the size of the grid, and it produces approximate answers to a question that has an exact one.
What separability means here
Look at how the simulator computes cost. For each operation it calculates a production rate, then divides an hourly machine cost by that rate:
cost per unit = machine cost per hour / production rate per hourThe production rate is a function of terrain, tree size, equipment capability and operator behaviour. Slope, yarding distance, stem diameter. It answers the question how fast can this be done, and nothing in it depends on what anything costs.
The hourly machine cost is where all the economics live. It decomposes into fuel, lubricants, labour, and ownership plus repair.
That split is the whole trick. Economic parameters appear only in the numerator, and they appear linearly. So a predicted cost is a fixed physical quantity multiplied by a price vector, and changing the price vector is a multiplication rather than a re-derivation.
This is a property of the simulator, not of the surrogate. The surrogate learned the composed function, but because the composition is separable, its outputs inherit the separability. That is the part worth checking in any similar setup: not whether your model is linear in the parameters, but whether the thing it approximates is.
Decomposing the cost
Separability alone is not enough. You need the fractions, which means decomposing each machine's hourly cost by driver.
| Machine | $/PMH | Fuel | Lube | Labour | Own. + repair |
|---|---|---|---|---|---|
| Chainsaw | 121.51 | 0.0% | 0.0% | 96.1% | 3.9% |
| Feller-buncher | 172.44 | 6.8% | 2.5% | 29.5% | 61.2% |
| Skidder, 200 HP | 141.08 | 8.9% | 3.3% | 33.3% | 54.5% |
| Yarder, 200 HP | 284.40 | 6.3% | 0.6% | 71.6% | 21.5% |
| Chipper, 700 HP | 177.13 | 20.4% | 7.5% | 23.0% | 49.1% |
| Harvester, 200 HP | 252.10 | 5.2% | 1.9% | 18.6% | 74.3% |
A chainsaw is a person. A harvester is a capital asset with an operator attached. Those two rows respond to completely different economic shocks, and averaging them would destroy the thing that makes the rescaling useful.
Aggregating to the system level, where each system is a specific combination of machines:
| Harvest system | Diesel | Wages | Equipment index |
|---|---|---|---|
| Ground-based mechanised | 10.8% | 33.6% | 55.6% |
| Ground-based manual, log | 5.6% | 53.6% | 40.8% |
| Cable, manual, log | 4.9% | 60.0% | 35.1% |
| Cable, cut-to-length | 5.6% | 45.2% | 49.2% |
| Helicopter, manual, log | 4.2% | 56.2% | 39.7% |
| Helicopter, cut-to-length | 5.9% | 31.8% | 62.3% |

The pattern is clean. Systems built around manual felling are dominated by wages, because they need large crews. Mechanised systems are dominated by equipment ownership and repair, because feller-bunchers and harvesters are expensive machines. Fuel is a minor line item in all ten, between 4 and 11%.
The formula
With the fractions in hand, rescaling any prediction is one expression. Let the three fractions for a given harvest system be the diesel share, the wage share and the equipment share. Then:
cost_new = cost_predicted * (
f_diesel * (diesel_new / 2.24)
+ f_wage * (wage_new / 22.07)
+ f_ppi * (ppi_new / 145.62)
)The denominators are the training-time values. If nothing changes, the three ratios are all 1, the weighted sum is 1, and the prediction is unchanged, which is the sanity check.
Worked: a cluster predicted at $50 per green ton using a ground-based mechanised system, with diesel doubling to $4.48.
cost_new = 50 * (0.108 * 2.0 + 0.336 * 1.0 + 0.556 * 1.0)
= 50 * 1.108
= $55.40Doubling the fuel price raises cost by 10.8%, because fuel was 10.8% of it. A 50% diesel increase moves ground-based mechanical costs by 5.4%.
Two properties make this worth doing rather than approximating.
It is exact. Not a first-order approximation, not an interpolation between trained scenarios. The production rates contain no economic parameters, so the rescaling is algebraically identical to what the simulator would produce under the new assumptions.
It applies to everything at once. All 165 million predictions rescale in a single vectorised operation, because it is a multiply against a per-system constant. What-if analysis becomes a query parameter rather than a batch job.
That last point changes what the system can offer. Economic assumptions can be accepted as user input at query time. The cost and fire tradeoff frontier can be regenerated under alternative prices without re-running the optimisation. The statewide cost map can be recomputed for any combination of fuel, wages and equipment costs.
Where it breaks
Linearity in the parameters is required, and it will not always hold. This works because doubling a wage rate doubles the labour component and nothing else. A parameter that changed behaviour rather than just price would break it. If a fuel price high enough to change which equipment gets deployed, the physical quantity is no longer fixed and the multiplication is wrong. The rescaling assumes the operational plan is held constant, which is a real assumption about a world where fuel got twice as expensive.
The fractions are averages over a machine's duty cycle. They come from the simulator's cost structure, which assumes a fixed utilisation and a fixed split between productive and total machine hours. A shift in utilisation moves the ownership share relative to the fuel share, and the fractions would need recomputing.
Second-order effects are invisible. Higher diesel raises the cost of hauling equipment to the site, which is a move-in cost, which may be accounted for separately. Whether the decomposition captures every path a fuel price takes through the cost model is worth verifying rather than assuming.
It is only as good as the decomposition. The fractions were derived per machine and aggregated per system. If a system's actual machine mix differs from what the aggregation assumed, its three fractions are slightly wrong, and every rescaled prediction for that system inherits the error.
Method details at /docs/harvest-cost-method and /docs/understanding-cost.
References
Fight, R.D., Hartsough, B.R. and Noordijk, P. (2006). Users Guide for FRCS: Fuel Reduction Cost Simulator Software. USDA Forest Service, Pacific Northwest Research Station.
Miyata, E.S. (1980). Determining Fixed and Operating Costs of Logging Equipment. USDA Forest Service, North Central Forest Experiment Station.
Chen, T. and Guestrin, C. (2016). XGBoost: A Scalable Tree Boosting System. KDD '16, 785–794.