Вопрос или проблема
У меня есть четыре независимых переменных, чтобы проанализировать их влияние на одну зависимую переменную. Одна из независимых переменных закодирована в процентах. Как я могу определить ее влияние на зависимую переменную?
Я подумал, что одним из потенциальных решений будет использование пакета shap и проверка влияния/важности признаков или зависимости целевого признака по сравнению с отдельным признаком, используя теорию игр.
![]() |
![]() |
---|---|
Рис. 1: Сводный график, показывающий важность признаков, используя LinearRegression() | Рис. 2: График зависимости, показывающий эффект признака “Percentage” с использованием LinearRegression() |
# Импорт необходимых библиотек
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import shap
import matplotlib.pyplot as plt
# Шаг 1: Генерация синтетических данных
np.random.seed(42)
n_samples = 1000
# Создание независимых переменных
data = {
'Percentage': np.random.uniform(0, 100, n_samples), # Переменная процентов (0-100)
'Feature1': np.random.normal(50, 10, n_samples),
'Feature2': np.random.uniform(0, 1, n_samples),
'Feature3': np.random.randint(1, 10, n_samples)
}
# Создание зависимой переменной с некоторым шумом
data['Target'] = (
2.5 * data['Percentage'] +
3.0 * data['Feature1'] +
10.0 * data['Feature2'] -
5.0 * data['Feature3'] +
np.random.normal(0, 5, n_samples)
)
# Конвертация в DataFrame
df = pd.DataFrame(data)
# Разделение данных на обучающую и тестовую выборки
X = df[['Percentage', 'Feature1', 'Feature2', 'Feature3']]
y = df['Target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Шаг 2: Обучение модели машинного обучения
#model = RandomForestRegressor(random_state=42, n_estimators=100)
model = LinearRegression()
model.fit(X_train, y_train)
# Шаг 3: Применение SHAP для объяснимости
# Объяснение модели с использованием SHAP
explainer = shap.Explainer(model, X_train)
shap_values = explainer(X_test)
# Шаг 4: Визуализация результатов SHAP
# Сводный график, показывающий важность признаков
shap.summary_plot(shap_values, X_test)
# График зависимости, показывающий эффект признака "Percentage"
# Доступ к необработанным значениям SHAP с использованием shap_values.values
#shap.dependence_plot('Percentage', shap_values, X_test)
shap.dependence_plot('Percentage', shap_values.values, X_test)
Эта идея может помочь вам подстраивать ваш сценарий для зависимых и независимых признаков. Однако, вы можете попробовать RandomForestRegressor()
вместо LinearRegression()
.
Вы также можете проверить водопадный график.
# Водопадный график для одного предсказания
# Выберите один образец из тестового набора
sample_index = 0 # Выберите индекс образца из X_test
sample = X_test.iloc[sample_index]
# Создание водопадного графика
shap.plots.waterfall(shap_values[sample_index])
plt.show()
.
Ответ или решение
Для анализа влияния переменных на зависимую переменную в контексте IT и данных, вы можете воспользоваться различными методами, включая анализ на основе процентов и более продвинутыми методами машинного обучения. Ваша задача — оценить, какое влияние одна из независимых переменных, представленных в процентах, оказывает на зависимую переменную.
Теория
Первоначально, очень важно понимать природу ваших данных и связи между переменными. Когда одна из переменных закодирована как процент, это источник количественной информации, который может влиять на результирующую переменную в фактическом или относительном выражении. Использование процентов позволяет нормализовать данные, чтобы вам было проще анализировать их масштабируемость и пропорциональность влияния.
Для детального анализа влияния переменной на зависимую переменную можно использовать несколько методов:
-
Регрессионный анализ: Позволяет выявить линейные зависимости между переменными. Линейная регрессия может непосредственно показать, как изменение процентной переменной влияет на целевую переменную.
-
Shapley Values и SHAP (SHapley Additive exPlanations): SHAP использует теорию игр для объяснения вывода моделей машоного обучения. Каждое значение показывает, какое влияние определенная переменная оказывает на предсказание модели. Это полезно, когда надо объяснить сложные модели машинного обучения, например, как ваш feature в процентах может влиять на модель.
-
Функции важности признаков: Этим механизмом можно воспользоваться при использовании моделей машинного обучения, таких как RandomForestRegressor. Важность признаков отражает, какие из независимых переменных наиболее значительно влияют на предсказания.
Пример
Рассмотрим пример, приведенный в вашем описании. Вы создали модель, которая обучается на данных, содержащих несколько независимых переменных, включая одну в процентном формате. Вы использовали линейную регрессию для обучения модели. Далее, вы применили библиотеку SHAP для объяснения того, каким образом каждая из переменных, включая ту, что в процентах, влияет на переменные результирующие.
# Обучение и объяснение модели
model = LinearRegression()
model.fit(X_train, y_train)
explainer = shap.Explainer(model, X_train)
shap_values = explainer(X_test)
# Визуализация влияния переменных
shap.summary_plot(shap_values, X_test)
shap.dependence_plot('Percentage', shap_values.values, X_test)
Здесь вы сначала обучаете линейную регрессию, а потом используете SHAP, чтобы интерпретировать влияние ваших признаков (включая "Percentage") на зависимую переменную.
Применение
-
Понимание и анализ данных: Прежде чем переходить к моделям, тщательно изучите данные. Поймите характер зависимости между переменными, какие из них могут быть связаны, и какими методами их можно анализировать. Диаграммы корреляции могут помочь обнаружить взаимосвязи.
-
Выбор модели: Определите, какую модель использовать для анализа. Линейная регрессия подходит для простых линейных взаимосвязей. Если предполагается сложная нелинейная взаимосвязь, стоит рассмотреть более сложные модели, такие как RandomForestRegressor или даже методы глубокого обучения.
-
Проверка важности признаков: Используйте SHAP для проверки, как именно каждый признак вносит вклад в предсказание модели. Это даст более детальное понимание как проценты, как и другие переменные, влияют на зависимую переменную.
-
Визуализация и интерпретация: Создайте графики, показывающие распределение влияния переменных (например, summary plots и dependence plots), чтобы легче объяснять и обосновывать сделанные выводы. Это будет полезно как для проверки гипотез, так и для презентации результатов.
В конечном итоге, ваша задача в анализе данных c процентными значениями заключается в том, чтобы аккуратно и тщательно вычислить и интерпретировать влияние каждого признака, чтобы сделать ваши прогнозы более точными и объяснимыми. Использование SHAP и линейной регрессии, как описано, является эффективным методом для достижения этих целей.