Напомню, что пакет LIME появился в ответ на проблему "черного ящика" машинного обучения: предиктивная модель показывает прогноз (сколько кандидат будет продавать, будет он успешным или нет, насколько у него серьезные риски увольнения или нет), но модель не отвечает на вопрос о том, какое именно качество кандидата "западает". Речь идет о непараметрических моделях, в параметрических есть коэффициенты, поэтому если мы стандартизуем признаки, то можем понимать вес переменных, см. подробнее Интерпретабельность HR-аналитики, пост не про это.
См. также с тему Про деструкторы в отношениях с руководителем. И о том, как правильно их измерять
Итого, LIME позволяет ответить на вопрос про конкретного кандидата, какие качестве его "вытаскивают", какие "западают".
Цель поста - показать, как LIME работает на задачах классификации, а нам бы хотелось использовать LIME для задач регрессии, дожития, кластеризации.....
Задача - на основе данных о кандидате на входе в компанию спрогнозировать продажи.
Поскольку у нас цель поста показать пакет LIME для задачи регрессии, я не буду вникать в особенности задачи прогноза, просто скажу, что у нас есть две значимые переменные для прогноза - IQ и E (наличие релевантного опыта работы).
и отбираем необходимые переменные
См. также с тему Про деструкторы в отношениях с руководителем. И о том, как правильно их измерять
Итого, LIME позволяет ответить на вопрос про конкретного кандидата, какие качестве его "вытаскивают", какие "западают".
Цель поста - показать, как LIME работает на задачах классификации, а нам бы хотелось использовать LIME для задач регрессии, дожития, кластеризации.....
Ну и так.
Я показываю решение на основе датасета case1 первого пакета по HR аналитике в R. Как установить, см. Пакет R HR analytics для HR аналитиков. Используем датасет "case1". Понятно, что кейс игрушечный, но достаточный для того, чтобы вы умели применять его на своих данных.Описание данных
У нас есть информация о 81 сотруднике компании: информация при приеме - уровень IQ, измеряемый с помощью теста, наличие аналогичного опыта на предыдущем месте работы, образование. И спустя время после начала работы мы измеряем уровень продаж.Задача - на основе данных о кандидате на входе в компанию спрогнозировать продажи.
Поскольку у нас цель поста показать пакет LIME для задачи регрессии, я не буду вникать в особенности задачи прогноза, просто скажу, что у нас есть две значимые переменные для прогноза - IQ и E (наличие релевантного опыта работы).
Решение
Необходимые пакетыlibrary(lime) library(HRanalytics) data("case1")
и отбираем необходимые переменные
df = case1[, c('Продажи', 'IQ', 'E')]Далее я переменную E - опыт - делаю факторной только для того, чтобы показать, что факторные переменные также работают в модели.
df$E = as.factor(df$E)И модель. Напоминаю, что я делаю совсем простую модель, поскольку цель в другом.
model = lm(Продажи ~ IQ + E, df)Переходим к пакету LIME. Первое, что нам нужно, определить тип модели, выясняем его так.
class(model) [1] "lm"И создаем тип модели
model_type.lm = function(x, ...) { return("regression") }
Т.е. мы говорим LIME, что мы в типе модели 'lm' будем использовать регрессию.
Следующая формула нужна, чтобы показать, какой тип переменной прогноза желаем используем (числовая в отличие от вероятности для классификации).
predict_model.lm = function(x, newdata, type, ...) { pred = predict(x, newdata, type ='response') return(as.data.frame(pred)) }Собственно ради двух вышеуказанных форму и нужен был пост:). Но поскольку я в интернете не встретил полного описания, то сделал сам.
Далее мы тренируем эхплейнер - то, что в LIME отвечает за индивидуальные прогнозы
explainer = lime(df[, c( 'IQ', 'E')], model)Обратите внимание, я указываю эксплейнеру конкретные переменные датасета. Задаем новые данные - я показываю двух новых кандидатов.
newd = data.frame(IQ=c(99, 37), E=c('1', '0'))Как видите, у одного высокий интеллект и наличие опыта работы, у другого низкий интеллект и отсутствие опыта работы. И запускаем эхплейнер на новых данных.
explanation = explain(newd, explainer, n_features = 2 )Думаю, что с помощью ?explain вы сможете прочитать, что здесь что обозначает. Получаем вот такой вывод
head(explanation) model_type case model_r2 model_intercept model_prediction feature feature_value feature_weight feature_desc 1 regression 1 0.276435 79.85067 93.79742 IQ 99 5.499671 97 < IQ <= 102 2 regression 1 0.276435 79.85067 93.79742 E 2 8.447084 E = 1 3 regression 2 0.726847 92.15528 70.59510 IQ 37 -13.919076 IQ <= 91 4 regression 2 0.726847 92.15528 70.59510 E 1 -7.641104 E = 0 data prediction 1 99, 2 93.56856 2 99, 2 93.56856 3 37, 1 30.02060 4 37, 1 30.02060И самое вкусное, что надо показывать Заказчику
plot_features(explanation, ncol = 1)
Картинка
- каждая диаграмма для каждого кандидата;
- переменные по каждому кандидату (попутно замечу, что высота столбика говорит о весе фактора);
- зеленый цвет означает, что качество кандидата позволяет ему показывать более высокие результаты, красное - это наоборот - "западение".
__________________________________________________________
На этом все, читайте нас в фейсбуке, телеграмме и вконтакте