#кейсы #ML
Раз уж пошло про KPI – вот безобидный прием против вредного манагера. Прием для настоящих каналий!
Если вразумлять и просвещать манагера на метрики регресии, распределения остатков и прочее сил уж больше нет, то могу предположить что каналья-манагер не знает разницу между MAPE и MDAPE (и наверняка про MASE, eB, варианты SMAPE, WAPE и тд).
Так что ничего не стоит вам выдать MDAPE за MAPE (и только если спросят – сказать что M это, совершенно очевидно, медиана, разве можно было предположить иначе?!).
В примере ниже мы не будем оптимизировать MAPE напрямую (хотя это не то чтобы сложно – один из методов – взвесить наблюдения на таргет), а просто посмотрите выигрыш (не повторяйте это дома!!!):
import numpy as np
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
x, y = make_regression(n_samples=10_000, n_features=10, n_informative=8, noise=5, shuffle=True, random_state=42)
x_train , x_test, y_train, y_test = train_test_split(x, y, test_size = 0.35, random_state = 42)
import xgboost as xgb
regressor=xgb.XGBRegressor(eval_metric='rmse')
regressor.fit(x_train, y_train)
preds = regressor.predict(x_test)
residuals = preds - y_test
r_mape = np.mean(abs(residuals) / abs(y_test))
r_mdape = np.median(abs(residuals) / abs(y_test))
print(f'MAPE {r_mape:.2f}')
print(f'MDAPE {r_mdape:.2f}')
>>> MAPE 3.74
>>> MDAPE 0.16
а вообще, если интересна тема метрик регрессии -- то лучше всего она освещена в неизданной книге Александра Дьконова
Раз уж пошло про KPI – вот безобидный прием против вредного манагера. Прием для настоящих каналий!
Если вразумлять и просвещать манагера на метрики регресии, распределения остатков и прочее сил уж больше нет, то могу предположить что каналья-манагер не знает разницу между MAPE и MDAPE (и наверняка про MASE, eB, варианты SMAPE, WAPE и тд).
Так что ничего не стоит вам выдать MDAPE за MAPE (и только если спросят – сказать что M это, совершенно очевидно, медиана, разве можно было предположить иначе?!).
В примере ниже мы не будем оптимизировать MAPE напрямую (хотя это не то чтобы сложно – один из методов – взвесить наблюдения на таргет), а просто посмотрите выигрыш (не повторяйте это дома!!!):
import numpy as np
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
x, y = make_regression(n_samples=10_000, n_features=10, n_informative=8, noise=5, shuffle=True, random_state=42)
x_train , x_test, y_train, y_test = train_test_split(x, y, test_size = 0.35, random_state = 42)
import xgboost as xgb
regressor=xgb.XGBRegressor(eval_metric='rmse')
regressor.fit(x_train, y_train)
preds = regressor.predict(x_test)
residuals = preds - y_test
r_mape = np.mean(abs(residuals) / abs(y_test))
r_mdape = np.median(abs(residuals) / abs(y_test))
print(f'MAPE {r_mape:.2f}')
print(f'MDAPE {r_mdape:.2f}')
>>> MAPE 3.74
>>> MDAPE 0.16
а вообще, если интересна тема метрик регрессии -- то лучше всего она освещена в неизданной книге Александра Дьконова