Twice a year the program forecasts container sales and redemption weights across 56 series, covering every material type from aluminium and PET to the glass streams that grew when SB 1013 brought wine and spirits containers into the program. Those forecasts feed payment planning and the fund condition reporting that CalRecycle publishes in its semi-annual reports on the Beverage Container Recycling Fund.
The pipeline runs in five phases: extraction from the program's source systems, preparation into tidy series, model fitting, assembly into a fifteen-sheet forecasting workbook, and a written analysis memo. I ported the production pipeline from Python to R so analysts can run either language from a single cycle configuration, and wrote the validation harness that checks the two agree before a cycle ships. The port matches the Python pipeline to within 0.1% across all series.
The old process picked ARIMA models by hand, on a rationale dating back to 2017. I replaced that with systematic testing: every candidate model is scored on twelve months of data it has never seen, and the winner has to earn its place. When SB 1013 added wine and spirits bottles to the program, glass returns stopped following their own history, and models that only looked at past returns kept missing. Bottles come back roughly a year after they are sold, so I built a model that forecasts returns from the prior year's sales instead. It cut the forecast miss on glass by 83% against the best standard model, and the selection rule improved the whole suite's average miss by a quarter. Which model each series gets, and why, is written down in a model registry rather than kept in anyone's head.