Up to this point, the methods we’ve looked at; decomposition, regression with Fourier terms, have all been about understanding the structure of a time series: pulling apart trend, seasonality, and remainder into interpretable pieces. Those methods are useful for analysis, and they can be extended to produce forecasts. But there’s a separate family of forecasting methods that takes a different approach entirely.
Rather than modeling structure explicitly, they work by computing a weighted average of past observations and extrapolating from there. These are called smoothing methods, and the simplest member of the family is Simple Exponential Smoothing (SES).
This post covers SES on its own. Two extensions, Double Exponential Smoothing (Holt’s method) (which adds trend) and Triple Exponential Smoothing (Holt-Winters) (which adds seasonality on top of that) will follow in later posts.
The dataset
The airline passengers dataset will be familiar from previous posts. It’s monthly, 1949–1960, and it has both a clear upward trend and a strong seasonal pattern.
That combination of trend and seasonality is actually going to be a problem for SES, which is part of what makes the series useful here. We’ll see exactly where SES works and where it doesn’t.
The idea: recent observations matter more
The intuition behind SES is simple. If you want to forecast tomorrow’s value, yesterday is more informative than last month, and last month is more informative than last year. So instead of treating all past observations equally (as a simple average would), you weight them, giving more weight to recent observations and letting that weight decay as you go further back.
The formula captures this directly:
where is the smoothing parameter, a number between 0 and 1.
The forecast for time t is a blend of two things; the most recent actual observation , and the previous forecast . The parameter α controls how much weight you give to each. If is close to 1, the new forecast leans heavily on the latest observation. If α is close to 0, it leans more on the accumulated history carried in the previous forecast.
The previous forecast has the same structure, it was itself a blend of and . So when you substitute it back, and keep substituting, the forecast for time t turns out to be a weighted sum of all past observations, with weights that decay exponentially:
That exponential decay is where the name comes from. The forecast also has a natural split worth keeping in mind: the term is learning, updating based on what just happened. The term is memory, carrying forward what the model already knew. A higher α means more learning, less memory. A lower α means more memory, less sensitivity to recent noise.
What actually does
The figure below shows the weight each past observation receives under three different values of . Each bar represents how much influence that lag has on the current forecast.
With = 0.2, the weights fall off slowly, observations from six or seven periods back still carry meaningful influence. The model has a long memory and responds sluggishly to new information. With = 0.8, almost all the weight sits at the most recent observation, and the model reacts quickly to every fluctuation. With = 0.5 you get something in between.
Neither extreme is automatically better. A high α tracks recent changes well but is sensitive to noise. A low is smoother but slow to adapt. The right value depends on the data, and in practice is chosen by minimizing forecast error on the training set, trying candidate values and picking the one that works best. This is the same idea as hyperparameter optimization in machine learning.
Fitting SES to the airline data
The figure below shows SES fitted to the first four years of the airline series, using three different values of α.
A few things to notice. Higher α tracks the actual series more closely but is jagged, it picks up every small bump. Lower is smoother but lags behind when the series moves. None of these fits is particularly impressive, because even in the first four years the series already has a rising trend and a seasonal pattern, and SES isn’t designed to capture either.
The figure below looks more carefully at the errors, the gap between what SES predicted and what actually happened:

The errors aren’t random. They’re systematically positive in summer (when the series spikes up and SES can’t follow fast enough) and negative in winter (when the series dips and SES overshoots). Structured errors like this are a signal that the model is missing something important, in this case, seasonality.
Where SES breaks down
When you run SES on the full twelve-year series, the limitation becomes impossible to ignore:

SES consistently underestimates the series as it trends upward. It can’t lead, it can only chase. Every forecast is a weighted average of the past, so when the series is rising, the forecast is always below the current level. The seasonal pattern doesn’t help either: SES produces a smooth curve that ignores the annual cycle entirely.
This isn’t a failure of SES specifically, it’s a statement about what the method is for. SES is the right tool for stationary series: series that fluctuate around a stable level without a consistent direction of travel and without repeating seasonal patterns. Think of a stable demand series, or background noise around a fixed mean. For those cases, SES works well and is hard to beat for its simplicity.
When there is a trend, you need Holt’s method. For series with trend and seasonality, you need Holt-Winters. Both build directly on the SES formula by adding extra components, one for the trend, one for the seasonal pattern. They’ll be covered in the next posts.
Modeling workflow
There’s one thing worth flagging about how smoothing methods are typically used, because it differs from the regression approach in the previous posts.
In machine learning, you’d normally split your data into a training set and a held-out test set, evaluate multiple models on the training set, and pick the best one based on test performance. You wouldn’t use the full dataset to both fit and evaluate the model.
In classical statistical forecasting, the convention is different. Models are fit on the full dataset, and the parameters like in SES are chosen to minimize error over that same data. The evaluation still happens: you check how well the fitted values track the actuals, and you can use a holdout set if you want. But the process is less strictly separated than in a typical ML workflow.
In this series, the approach will blend both: smoothing methods fit the classical way, but performance will be evaluated on a held-out portion of the data, so the comparison is honest.

Leave a Reply