In this post we will see how time series decomposition work. This is not the original breakdown of the statsmodels seasonal decomposition instead this post will help to understand each and every component of the decomposition process.

Code Link :: GitHub Repository


Here we will use the below simple equation to break down the time series.

\[TS = trend + seasonality + residual\]

We are assuming that the time sereis is built using only 3 components and i.e. trend, seasonality, residual.

In the following steps we will try to find each of the component of the time series.


Below is the plot for the original time series data.

Original Time Series data

Step 1 :: Detrending Time series

Step 1.1 :: Find Approximate Trend

In the time series data fit a \(n\) degree polynomial. I went with \(n=2\) as most of the trend lines are less degree polynomial.

This will give us a trend line which is not the final one.


Step 1.2 :: Remove the approx. trend from the data

Here we will simple substact the data with the approx trend.

\[detrended = TS - approxTrend\]

Now we are left with a detrended data.

Approximate De-Trended Time Series

Step 2 :: Find Seasonality

Step 2.1 :: Group data

Here we need to group the data as per required periods. I am going with 12 months seasonal period with this data. We will find average for all the months over all the years.

Step 2.2 :: Fill the monthly values

As we selected monthly periods we will have 12 records and 1 for each month. Now from the above step we fill the same monthly average value for all the years.


Step 3 :: Find Trend

Step 3.1 :: De-seasonalise data

Now to find deseasonal data we can simply subtract the seasonality from the original data

\[deseasoned = TS - seasonality\]

De-Seasoned Time Series

Step 3.2 :: Calculate Trend

In the ablove deseasoned data fit a \(n\) degree polynomial. I went with \(n=2\) as most of the trend lines are less degree polynomial.

This will give us the final trend line.


Step 4 :: Calculate Residual

We have all the components to calculate the residual now.

\[residual = TS - seasonality - trend\]



We have successfully broken down a time series into three components namely trend, seasonality and residual.




The results may not exactly match with the current way of decomposing a time series using statsmodels.