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_)
Как можно заметить, дерево по-другому оценило важность параметров зарплата и сумма_помощи, но оба алгоритма сошлись в их гораздо большей важности по сравнению со стоимостью_имущества.