Корреляции посчитаны на разных строках: матрица числа наблюдений

В таблице метрик три столбца, каждый заполнен не на всех клиентах. corr выдаёт аккуратную матрицу, и кажется, что все коэффициенты описывают одну аудиторию. На деле каждая пара может использовать свой набор строк, поэтому сравнение силы связей становится неоднозначным.

pandas считает корреляцию по доступным парам наблюдений. Строка с пропуском в третьем столбце может участвовать в первой паре, а в другой уже нет. Вместе с коэффициентами стоит вывести число совместно заполненных наблюдений и проверить, как сформировались разные подвыборки.

Как изменить решение

import pandas as pd
df = pd.DataFrame({'a':[1,2,3,None],
                   'b':[1,2,None,4],
                   'c':[None,2,3,4]})
valid = df.notna().astype('int64')
counts = valid.T @ valid
correlations = df.corr(min_periods=3)
assert counts.loc['a','b'] == 2
assert pd.isna(correlations.loc['a','b'])
print(counts.to_string())
print(correlations.to_string())

Для каждой пары здесь только два совместных значения, поэтому min_periods=3 скрывает коэффициент. На диагонали видно количество заполненных значений отдельного столбца. Приведение маски к int64 важно: нам нужно численно суммировать совместную доступность.

Порог количества строк не устраняет смещение выборки. Если доход заполняют только активные клиенты, корреляция с ним описывает активную подгруппу. До интерпретации полезно сравнить доли пропусков по каналам, регионам или типам клиентов, которые важны для вопроса анализа.

Что проверить на своих данных

Для запуска установите pandas. Добавьте строку, заполненную во всех трёх столбцах, и проверьте изменение counts. Затем сравните df.corr с df.dropna().corr: второй вариант использует общий набор полных строк, но может исключить большую часть данных. Выбор между ними зависит от задачи, а не от красоты матрицы.

Не заполняйте пропуски нулями ради одинакового числа наблюдений: так вы добавите искусственные совместные значения. И не делайте причинный вывод из большого коэффициента. Полезный результат такого разбора — коэффициент с описанием аудитории, размером пары и пониманием механизма пропусков. Для регулярного отчёта сохраняйте counts рядом с матрицей, чтобы изменение покрытия не выглядело изменением самой связи.

Практика дальше

После проверки покрытия данных можно переходить к содержательному анализу. Курс «Практическая аналитика данных» даёт три кейса: продажи, клиенты и удержание, рекламные каналы. Вы выбираете SQL или pandas, собираете дашборд DataLens и формулируете вывод в аналитической записке.

Посмотреть программу и практику курса

Источник: Корреляции посчитаны на разных строках — официальная документация.

Другие задачи по теме: Календарь, пропуски и точность вычислений.

Продолжить на практике

  • Практическая аналитика данных ↗

    Превратите знания SQL или Python в аналитическую работу: проверяйте данные, считайте бизнес-метрики, стройте дашборды и объясняйте выводы на трёх прикладных кейсах.