# Revisiting our 2025 Southern California sales tax forecast

**Date:** 2026-07-15
**Topics:** california, forecasting
**URL:** https://zactax.com/blog/2026/07/revisiting-our-2025-southern-california-sales-tax-forecast

---

We revisit our 2025 Southern California sales tax forecast a year later and find that an honest range beat a confident guess (and that averaging our two models would have beaten either one alone).

---

Last August, just minutes from Lego Land, we gave a talk titled 'Call Me "Maybe"'. It was an updated version of a talk originally given in 2012 - when [Carly Rae Jepsen](https://open.spotify.com/track/20I6sIOMTCkB6w7ryavxtO) was topping the Billboard charts and the reference was a bit more timely. But the content was just as important as it was 13 years earlier: forecasting is more effective when you embrace uncertainty.

The "maybe" is the whole point. A real forecast doesn't hand a clean yes or no, it gives you both a range and an honest accounting of where that range might miss.

It's been a year, so in the interest of transparency we decided to see how we did.

```
**TL;DR for city managers:** We performed a forecast on Southern California sales tax using two different approaches. While reality landed within our ranges, one model ran a little low while the other ran a little high. Combining them would have beaten either one on its own. The lesson isn't "look how well we did" but that an honest range beats a confident point estimate, and there's real value in going back to check your work.
```

```
**TL;DR for forecasting nerds:** We ran a Bayesian Structured Time Series (BSTS) and a Multi-Layer Perceptron (MLP) forecast last year. Over 2025 Q2 through 2026 Q1, BSTS posted a 4.3% MAPE with a consistent low bias (-4.3%). MLP posted 4.1% MAPE, nearly unbiased (+1.7%). Both hit 4-for-4 on their 95% intervals. A naive equal-weight ensemble (mentioned on stage, never built) would have posted 1.4% MAPE. Small sample, but the direction is worth noting.
```

## What we were actually forecasting

"Sales tax" hides a lot of moving parts, so a quick refresher. We forecast quarterly Bradley-Burns local collections across the ten Southern California counties — Imperial and Kern up through LA, Orange, Riverside, San Bernardino, San Diego, and the coastal three. It's a big, noisy number, and it can be impacted by ports, gas prices, building permits, unemployment, the S&P, and roughly a thousand other things.

That's exactly why we forecast it the way we do. We can't know exactly what to expect, but we can be reasonably confident in the range of outcomes. Instead of predicting the exact value, we quantify your uncertainty instead. Every credible forecaster eventually arrives at some version of Churchill's line about democracy: probabilistic forecasting is the worst way to see the future, except for all the other ways that have been tried.

We built two models that work in very different ways:

- Bayesian Structural Time Series (BSTS) models break history into trend, seasonality, and noise. Then we can layer in what we already believe about how the economy behaves. Each quarter builds on the last, and its range fans out wider the further you look: an honest admission that next quarter is easier to call than eight quarters out.
- Multi-Layer Perceptron (MLP) is a small neural network. It doesn't bother with decomposing your historical data; instead, it learns patterns from the features by brute force. Its predictions are more or less to independent from quarter to quarter, so its uncertainty band stays roughly the same width the whole way out.

Two different models will often disagree in interesting ways, even when given the same problem. Ours did just that, providing us with valuable information moving forward.

## What actually happened

Reality told a fairly mundane story. Sales tax came in flat-to-modestly-up: roughly 2.0% growth year over year in 2025 Q2, a modest decline of 2.9% in Q3, up 0.7% in Q4, and up 2.8% into 2026 Q1. No boom, no cliff, just a reasonably stable - if slow - growth rate. 

Here's a comparison of both models along with the actual collections that occurred (in black):

![Our BSTS forecast tended to undershoot actual collections](fig1_bsts_fan.png)

![Our MLP model tended to overshoot actual collections](fig2_mlp_fan.png)

## The Box Score

Numbers rarely speak for themselves, so here they are with the interpretation attached:

![](fig3_head_to_head.png)

![](fig4_scorecard.png)

Both models kept reality in the ballpark: every one of the four quarters landed inside both 95% intervals. That's the goal for a probabilistic forecast. The promise is never "we'll hit this number," it's "reality will fall in this range, and here's how wide that range needs to be." 

**BSTS** was consistently too cautious, missing low every quarter by an average of 4.3%. Fortunately, this consistency shows us that we're dealing with a model bias rather than random error. 

**MLP** was the better single guess, but it was streakier. On average, it missed by about the same (4.1%) but it scattered on both sides of reality instead of leaning in one direction. As a result, the bias was much smaller.

The reason for this difference is clear when you look at the historical data. Post-COVID, sales tax trends in Southern California have seen a noticeable trend-shift. This is something we called out at the time, and that trend looks pretty consistent over the intervening time.

![Pre- and Post-COVID trends, from our 2025 talk](southern-california-sales-tax-trends-20260715.png)

The **BSTS** model placed more emphasis on the new trend, while the **MLP** model gave it less weight. 

If you had to pick one model's point forecast for your budget, **MLP** was the one to trust this round — with a catch worth naming: it landed on the high side, and trusting its median would have meant overshooting actual collections. Budgeting to revenue that never shows up gets you a mid-year shortfall. Erring low the way **BSTS** did just leaves you pleasantly surprised. **MLP** bought its accuracy with a much wider uncertainty band, and that's the trade-off in a sentence: there are no grand solutions here, only trade-offs.

## What we chose not to do, but should have

In the talk, we suggested that combining models like these into an ensemble would probably be a better approach. 

> We didn't do that for today's talk but you certainly could.
> — - actual line from the slide deck

We should have.

In simple terms, an ensemble model is just a combination of two or more models. You can average the values or give them each different weights. It works for the same reason a room full of independent, half-decent guesses tends to cancel out its own errors: the people who are wrong are usually wrong in different directions. BSTS leaned low, MLP leaned high. Split the difference and the two mistakes mostly disappear.

So here's the ensemble I described on stage but never actually drew:

![](fig5_ensemble_fan.png)

The easiest approach (just averaging the two point forecasts) would have posted a 1.4% mean absolute percentage error (MAPE), roughly a third of either model's error alone. In two of the four quarters it landed within a rounding error of the actual number.

## Takeaways

You don't need to build a neural network to take something home from this.

1. The range is the product. When we brief a council, the single number gets all the attention and carries almost none of the value. "Sales tax will be $1.2 billion" is a claim you will be wrong about. "Sales tax will very likely land between X and Y, and here's where the downside risk lives" is a claim you can actually manage against.
2. A forecast you never grade is a vibe, not a forecast. The only reason I can write any of this is that we wrote the numbers down, dated them, and came back a year later. Do that with your own revenue projections. Even a rough after-action review teaches you more about your assumptions than a fancier model ever will.
3. Two mediocre opinions can beat one good one. You almost certainly already have more than one revenue estimate floating around — the conservative one from finance, the optimistic one from economic development, the gut number from whoever's been there twenty years. Averaging honest, independent guesses isn't a cop-out. This year it would have cut our error by two-thirds.