Разницу между коэффициентом корреляции Пирсона и косинусным сходством можно увидеть по их формулам:
Причина, по которой коэффициент корреляции Пирсона инвариантен к добавлению любой константы, состоит в том, что средние значения вычитаются по построению. Также легко увидеть, что коэффициент корреляции Пирсона и косинусное сходство эквивалентны, когда X
и Y
имеют средние значения 0
, поэтому мы можем думать о коэффициенте корреляции Пирсона как обесцененной версии косинусного сходства.
Для практического использования давайте рассмотрим возврат двух активов x
и y
:
In [275]: pylab.show()
In [276]: x = np.array([0.1, 0.2, 0.1, -0.1, 0.5])
In [277]: y = x + 0.1
Доходность этих активов имеет точно такую же изменчивость, которая измеряется коэффициентом корреляции Пирсона (1), но они не совсем похожи, что измеряется по косинусному подобию (0,971).
In [281]: np.corrcoef([x, y])
Out[281]:
array([[ 1., 1.], # The off diagonal are correlations
[ 1., 1.]]) # between x and y
In [282]: from sklearn.metrics.pairwise import cosine_similarity
In [283]: cosine_similarity(x, z)
Out[283]: array([[ 0.97128586]])