How Exponentially Weighted Moving Averages Work

Posted by Baron Schwartz on Nov 25, 2014 6:07:00 AM

We use exponentially weighted moving averages (EWMAs) quite a bit in a few algorithms at VividCortex. They’re one of the tricks everyone should have in their toolbox for cheaply approximating recent history of a time-series variable. We even wrote an opensource implementation in Go.

How do they work? That can be a little confusing, but I’ve found that pictures are a good way to explain it. Here’s the pictures I use. First, draw your time-series as a bar chart.

Exponentially_Weighted_Moving

Now initialize your EWMA. There are several ways to do this, but one way is to just set it to the value of the first bar. We’ll color-code this one dark red.

Exponentially_Weighted_Moving_2

Now each further point in the time-series gets a combination of the current value of the EWMA, plus the new value, which we’ll color-code with a unique color each time. For simplicity, we’ll set the decay factor to 50%. This means each time we add a point, we’ll decay the existing EWMA by 50%, and add 50% of the new one to it. You can see that the new EWMA consists of half the first red EWMA, and half the second black value from the time-series. That means it’s closer to the second black value than it was previously, but it’s not all the way there:

Exponentially_Weighted_Moving_3

Now just rinse and repeat. Notice the way that the EWMA tracks the general trend of the time-series value, but smooths out its extremes. Notice also that each value’s influence diminishes exponentially over time.

Exponentially_Weighted_Moving_4

Are EWMAs the best thing since sliced bread? Well, they certainly have their uses, but obviously they don’t fit all possible cases. I discussed this and other topics in my webinar talk on statistical anomaly detection. Download the recording if you are interested!

 

Subscribe to Email Updates

Posts by Topic

see all