Что такое корреляция последовательностей и как она измеряется
Что проверяют
Задача вычислительная, поэтому ценится не определение, а перевод формулы в устойчивый код и разбор граничных случаев. Проверяют, помните ли вы, что корреляция это нормированная ковариация, и что делать с последовательностями разной длины и с нулевой дисперсией.
Как отвечать
Корреляция показывает, насколько согласованно две последовательности отклоняются от своих средних. Коэффициент Пирсона это ковариация, делённая на произведение стандартных отклонений, значения лежат от минус единицы до единицы.
static double Pearson(IReadOnlyList<double> x, IReadOnlyList<double> y)
{
if (x.Count != y.Count || x.Count < 2)
throw new ArgumentException("нужны равные длины и минимум две точки");
double mx = x.Average(), my = y.Average();
double sxy = 0, sxx = 0, syy = 0;
for (int i = 0; i < x.Count; i++)
{
double dx = x[i] - mx, dy = y[i] - my;
sxy += dx * dy;
sxx += dx * dx;
syy += dy * dy;
}
return sxx == 0 || syy == 0 ? double.NaN : sxy / Math.Sqrt(sxx * syy);
}Два прохода вместо одного выбраны намеренно: наивная формула через суммы квадратов теряет точность на больших значениях с малым разбросом.
Стоит назвать соседей: коэффициент Спирмена считается так же, но по рангам, и ловит любую монотонную связь, а кросс-корреляция сдвигает одну последовательность относительно другой и ищет задержку; для длинных рядов её считают через быстрое преобразование Фурье.
Где спотыкаются
Не проверяют вырожденные случаи. Постоянная последовательность даёт нулевую дисперсию и деление на ноль, а на одной точке коэффициент не определён вовсе.
Забывают, что Пирсон видит только линейную связь и боится выбросов. Идеальная парабола даст около нуля, а одна аномальная точка вытянет коэффициент почти до единицы: спасают график и ранговый вариант.
Читают высокую корреляцию как причинность или как совпадение значений. Она говорит лишь о согласованности отклонений, не зависит от масштаба и сдвига, а на рядах с общим трендом большая величина появляется сама собой.