March 27, 2021

3 способа найти зависимость в данных

Как определять факторы, влияющие на исследуемую переменную. Рассмотрим некоторые из эффективных и простых подходов.

Изучение вопроса проведем на примере игрушечного датафрейма df_m о параметрах доходов и расходах людей из разных городов (идентифицируются по индексу) следующего вида:

Корреляция

Для получения коэффициентов корреляции (о данном показателе подробнее писал здесь) всех числовых столбцов друг с другом можно воспользоваться методом corr:

df_m.corr()

Напомню, что корреляция - безразмерная величина и изменяется от -1 (идеальная отрицательная взаимосвязь) до 1 (идеальная положительная взаимосвязь).

Коэффициенты регрессии

Возможность оценки взаимосвязи интересуемых переменных существует и через алгоритм линейной регрессии, которая пытается восстановить связь между предсказываемой (зависимой) и независимыми переменными путем поиска оптимальных коэффициентов, описывающих формулу:

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

Допустим, в представленных выше данных нас интересует влияние факторов доходов на расходы. Соответственно, в качестве зависимой переменной примем расходы, а независимых - будут выступать зарплата, сумма_помощи, стоимость_имущества.

Для получения коэффициентов, обучим экземпляр класса LinearRegression на наших данных и обратимся к свойству coef_, который содержит влияние признаков с сохранением порядка их записи в матрицу X:

from sklearn.linear_model import LinearRegression
reg = LinearRegression()
X, y = df_m[['зарплата', 'сумма_помощи','стоимость_имущества']],df_m['расходы']
reg.fit(X, y)
print(reg.coef_)

Важность в дереве решений

Проделаем тот же трюк, только с использованием другого алгоритма машинного обучения - дерева решений (подробнее о деталях работы писал здесь). Так как на каждом шаге дерево ищет параметр, который наилучшим образом описывает независимую переменную, эту информацию алгоритм может использовать для ранжирования важности параметров.

Напишем следующий код:

from sklearn.tree import DecisionTreeRegressor
reg = DecisionTreeRegressor()
X, y = df_m[['зарплата', 'сумма_помощи','стоимость_имущества']],df_m['расходы']
reg.fit(X, y)
print(reg.feature_importances_)

Как можно заметить, дерево по-другому оценило важность параметров зарплата и сумма_помощи, но оба алгоритма сошлись в их гораздо большей важности по сравнению со стоимостью_имущества.