How is user similarity score calculated?

That comes down to the same thing: The angle between the vectors depends on their relative directions. For example: if the angle between two vectors is zero, you know they are both pointing in the same direction.

Alas, I haven´t. It is quite hard to present the correlation coefficient in an intuitive fashion. The new similarity score you implemented is already a nice improvement, I feel. You may want to try some alternative similarity measures, like the Jaccard index. That measure is easy to calculate, but it is supposed to work with binary data, so doesn’t accommodate multiple listens of the same track :frowning_face:.