I have weekly average values aka time series. They are the same units (e.g. revenue in £s). I want to use self-organizing maps in its standard setting (using euclidean distances) to order/cluster these times series according to their shapes and amplitudes. How should I normalizes these time series, to get the best performance out of the SOM using euclidean distances?

One option would be to normalize each week's column:

x_norm = (x - min)/(max-min)

Here min and max are the minimum and maximum of each column. I am doing all this in R btw. What do you think?


In general, you should scale if the shape is more important to you than the size (or as you say, amplitude), i.e. if the way in which your data vary over time is more important to you than how much it varies. I am assuming here that your data are non-negative, which revenue data should always be.

There are many ways you could scale your data, including:

  • The method you have given in your question, which scales so that each time series lies between zero and one. This is not a method to use if you are concerned about whether or not each time series falls to zero or not, as the scaled time series will now fall to zero.
  • Divide the data in each time series by the maximum value in that time series. This will ensure that the maximum value always scales to one, but will mean that non-zero values always remain non-zero.
  • Divide each value by the standard deviation or variance of its time series. This will ensure that non-zero values always remain non-zero, and will reflect the spread of the values within the time series.

You may also want to consider a more complex Variance-stabilising transform depending on what you are trying to achieve.


This site is temporarily in read only mode and not accepting new answers.

Not the answer you're looking for? Browse other questions tagged .