TGViewer
Заскуль питона (Аналитика данных) Заскуль питона (Аналитика данных) @zasql_python · 8.93K subscribers
Post #321 4.09K
Что влияет на метрику X

В нашей работе может достаточно часто возникать задача в следующей формулировке: "А что влияет на метрику X?". Метрика X может быть произвольна. В дальнейшем бизнес может сделать упор над тем, а что можно улучшить, на что стоит обратить внимание. Для решения этой задачи можно подступиться следующим способом:

🆎 Проверить это на интересующей поверхности через A/B тест. Например, мы проводим ухудшающий эксперимент на главной и хотим понять какие метрики шатаются вместе с целевой (какие в общем бывают прокси). Эксперимент может показать насколько сонаправлены различные метрики + возможно его придется долго держать, чтобы проверить необходимые гипотезы.

💻 Собрать таблицу с фичами, которые экспертно могут быть выбраны для обучения модели машинного обучения.

Что здесь можно придумать?

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


from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
import pandas as pd

X, y = make_regression(n_samples=1000, n_features=10, noise=10, random_state=42)
feature_names = [f"feature_{i}" for i in range(X.shape[1])]

model = LinearRegression()
model.fit(X, y)

importance = pd.Series(model.coef_, index=feature_names).sort_values(ascending=False)



🌲 Деревья решений и градиентный бустинг. Когда мы работаем с нелинейными зависимостями, линейная регрессия уже не даёт нам полной картины. В таких случаях можно использовать деревья решений и градиентный бустинг. Эти модели оценивают важность признаков по тому, насколько они помогают уменьшать неопределённость (снижать критерий ошибки, например, Gini или MSE) при разбиениях. catboost doc

Здесь можно получить встроенную важность фичей. Это показатель, сколько раз признак использовался для разбиения и насколько он помог улучшить модель. Если признаки сильно коррелируют, модель может выбрать один из них, а другой посчитать неважным.


from catboost import CatBoostRegressor

model = CatBoostRegressor(iterations=200, verbose=False)
model.fit(X, y)

feature_importance = pd.Series(model.get_feature_importance(), index=feature_names)


🤨 Permutation Importance. Метод, который отвечает на вопрос: "Что будет, если убрать этот признак?". doc

Шаги:

а) Перемешиваем значения одного признака случайным образом.
б) Смотрим, как падает качество модели.
в) Если качество сильно ухудшается, то признак важен.


from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import permutation_importance
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = RandomForestRegressor(n_estimators=100)
model.fit(X_train, y_train)

perm_importance = permutation_importance(model, X_test, y_test, scoring="r2")
importance = pd.Series(perm_importance.importances_mean, index=feature_names)


Может долго считаться, если данных много + если есть коррелирующие признаки, можем не учесть важность одной из фич


🙄 SHAP. Когда важно не просто узнать, какие признаки важны, но и как именно они влияют. doc


import shap

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)

shap.summary_plot(shap_values, X_test, feature_names=feature_names)


Линейная регрессия подходит для простых зависимостей, деревья и бустинг – для сложных, Permutation Importance – когда нужна честная оценка вклада признаков, а SHAP – для объяснения модели


🤔 Наберется 100 реакций, напишу более подробно про SHAP. А вы применяете эти методы или какие-то другие?
  • 🐳 19
  • 👍 8
  • ❤ 4
More from @zasql_python
  1. Sep 20, 2026Хэй, чемпион! тут курс вышел бесплатный по статистике, который будет дополняться, записыва…
  2. Sep 15, 2026Починилось 😏 zasqlpython.ru
  3. Sep 15, 2026Сайт пока не работает, ждём 30 минут… @zasql_python
  4. Sep 13, 2026😏 Кто сейчас в поисках работы на ПЕРВУЮ работу по специальности аналитиком, что прикладыв…
  5. Sep 11, 2026😌 Пятница а это значит, пора немного поговорить об обновлениях 👀 Что нового на сайте: 😠…
  6. Sep 9, 2026🍌🍌🍌 Hi, unfortunately, we’re not ready to give you more money, but we are ready to give…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →