У меня возник интересный проект, который мне подкинул клиент, и за который я по традиции ничего не получил.
Но проект интересен эвристикой, которую я нарыл, и ей хочу поделиться.
Задачка такая: порядка 500 манагеров в компании, работа которых связана с профессиональными знаниями. Поэтому логичным выглядело решение менеджмента компании протестировать работников на тест профессиональных знаний.
Про эффективность скажу только, что она измерялась "1" - эффективный и "0" - не совсем чтобы.
Задача осложнялась тем, что спецы были не монопрофильные, в компании 8 функциональных направлений и три уровня должности (спец, спец повыше и спец еще повыше).
В тестах использовалось около 300 вопросов (!!!), но вопросы не шли сплошняком для всех менеджеров, а давались выборочно, поэтому мы не могли получить датасет размером 500 манагеров Х 300 вопросов. Точнее, мы его получить получили, но это была sparse матрица - с большим количеством пропущенных значений. Итого у нас в ячейках могло быть три значения: 1 - если респондент ответил правильно на вопрос, 0 - если ответил не правильно, пустая ячейка, если респондент не отвечал на этот вопрос.
К плюсам можно было только отнести только то, что вопросы не строго соответствовали позиции и функциональному направлению, а было много пересечений, т.е. один вопрос мог перекрывать несколько функциональных направлений и уровней должности.
Как вы уже догадались, по оси X - % правильных ответов, красная линия - для не очень эффективных, зеленая линия - для эффективных.
Решение уже выглядит не зряшным. Описательные статистики для двух групп такие
Т.е. эффективные в медиане отвечают на 70 % вопросов правильно, а не эффективные - на 37 %.
Это значит, что если вы отвечаете на 43 % вопросов правильно и выше, то с 87 % вероятностью вы будете эффективным. Если вы отвечаете на менее чем 34 % вопрос правильно, с 66 % вероятностью вы будете неэффективным. И сонфьюзион матрикс на тест сете дает нам такую картину
FALSE TRUE
0 11 19
1 5 73
Базовая точность 72 %, мы получили 78 %. Пресижн - 79 %. Хотя в нашем случае под пресижн надо считать не 73/(73+19), а скорее 11 / (11+5) = 69 % . И мы отсекаем 35-40 % неэффективных (11 / (11+19).
Если взять случайный лес и прочие алгоритмы, то они конечно же дают точность выше. Но не критично выше - точность на 5-7 % повыше. Кстати, если в модель добавлять собственно вопросы, то точность также не особо растет. Растет, как ни странно, при добавлении вопросов, которые отрицательно коррелируют с эффективностью. Но я таки не стал их включать в модель, ибо сердце человеческое требует гармонии.
И не забывайте, что этот "алгоритм" можно уже завтра ставить клиенту и считать. Просто считаем % правильных вопросов по нужным вопросам и принимаем решение - скоринговая карта.
Вот собственно вся эвристика.
Но проект интересен эвристикой, которую я нарыл, и ей хочу поделиться.
Задачка такая: порядка 500 манагеров в компании, работа которых связана с профессиональными знаниями. Поэтому логичным выглядело решение менеджмента компании протестировать работников на тест профессиональных знаний.
Задача
как на основе теста профессиональных знаний выявить эффективных.Про эффективность скажу только, что она измерялась "1" - эффективный и "0" - не совсем чтобы.
Задача осложнялась тем, что спецы были не монопрофильные, в компании 8 функциональных направлений и три уровня должности (спец, спец повыше и спец еще повыше).
В тестах использовалось около 300 вопросов (!!!), но вопросы не шли сплошняком для всех менеджеров, а давались выборочно, поэтому мы не могли получить датасет размером 500 манагеров Х 300 вопросов. Точнее, мы его получить получили, но это была sparse матрица - с большим количеством пропущенных значений. Итого у нас в ячейках могло быть три значения: 1 - если респондент ответил правильно на вопрос, 0 - если ответил не правильно, пустая ячейка, если респондент не отвечал на этот вопрос.
К плюсам можно было только отнести только то, что вопросы не строго соответствовали позиции и функциональному направлению, а было много пересечений, т.е. один вопрос мог перекрывать несколько функциональных направлений и уровней должности.
Варианты
- Можно было бы сделать свою модель для каждой из 24 позиций (8 функциональных направлений Х 3 уровня позиции). Это не вариант, потому что на каждую позицию среднем выпадает по 20 строк, что не позволяет говорить хоть мало мальски статистической валидации. Можно типа было объединить спеца повыше и спеца еще повыше, но и в этом случае данные нам мало что дают.
- Можно было бы тупо запихать все в алгоритм машинного обучения, дамми кодинг и все такое. Но возникает вопрос, насколько это вообще правильно? К примеру вопрос был задан 100 манагерам, 50 ответили правильно, 50 ответили неправильно. У нас в одной переменной 50 единиц и 450 нулей, в другой 50 единиц и 450 нулей.
- Я избрал третий путь, причем этот путь определялся не только задачей собственно получения точности, сколько позицией клиента. Клиенту нужно было "живое" решение. Ну т.е. чтобы дать что-то, что клиент мог бы применять прям и сразу. А в случае алгоритма машинного обучения это был бы черный ящик: ты туда загружаешь данные, а оттуда колбаса. Клиент не поймет.
Решение
- Решение должно быть наглядным. Первым делом я отбросил вопросы с низкой дисперсией, т.е. вопросы, на которые почти все ответили правильно или почти все ответили неправильно. Понятно, что такие вопросы в принципе не могут дифференцировать эффективных и не очень.
- Далее, я тупо запустил цикл с Хи квадрат (у нас показатели эффективности - "1" и "0", и в ячейках "1" и "0") с поправкой йейтса, канечна же. И отобрал только те вопросы, где p-value было ниже 0, 05. Без учета позиции, функционального направления и т.п..
- В уже отобранном списке я еще запустил цикл с уже корреляцией, чтобы выявить те вопросы, которые отрицательно коррелировали с эффективностью. И такое тоже было: порядка 5-6 вопросов. Они были значимо связаны с эффективностью, но я решил от них отказаться, потому что противоречило содержательной логике: если работник правильно отвечает на вопрос, то с больше вероятностью он будет не эффективным. Наверное, разработчики вопросов не закладывали такой логики.
- Остались только вопросы, положительно связанные с эффективностью, и в этом месте я делаю финт ушами: я считаю общее количество вопросов по строке - по каждому работнику, я считаю количество правильных ответов, и я считаю % правильных ответов. Где то в глубине души полагая, что если если каждый выбранный вопрос положительно коррелирует с эффективностью, то сумма даст более точное решение.
- В итоге мы получаем две переменные: эффективность и % правильных ответов.
Как вы уже догадались, по оси X - % правильных ответов, красная линия - для не очень эффективных, зеленая линия - для эффективных.
Решение уже выглядит не зряшным. Описательные статистики для двух групп такие
$`0`
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0000 0.2500 0.3750 0.4084 0.5357 0.8750
$`1`
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0000
0.5000 0.7029 0.6647 0.8235 1.0000Т.е. эффективные в медиане отвечают на 70 % вопросов правильно, а не эффективные - на 37 %.
Дерево решений и другие ужасы нашего городка
дает нам скоринговую картуЭто значит, что если вы отвечаете на 43 % вопросов правильно и выше, то с 87 % вероятностью вы будете эффективным. Если вы отвечаете на менее чем 34 % вопрос правильно, с 66 % вероятностью вы будете неэффективным. И сонфьюзион матрикс на тест сете дает нам такую картину
FALSE TRUE
0 11 19
1 5 73
Базовая точность 72 %, мы получили 78 %. Пресижн - 79 %. Хотя в нашем случае под пресижн надо считать не 73/(73+19), а скорее 11 / (11+5) = 69 % . И мы отсекаем 35-40 % неэффективных (11 / (11+19).
Если взять случайный лес и прочие алгоритмы, то они конечно же дают точность выше. Но не критично выше - точность на 5-7 % повыше. Кстати, если в модель добавлять собственно вопросы, то точность также не особо растет. Растет, как ни странно, при добавлении вопросов, которые отрицательно коррелируют с эффективностью. Но я таки не стал их включать в модель, ибо сердце человеческое требует гармонии.
И не забывайте, что этот "алгоритм" можно уже завтра ставить клиенту и считать. Просто считаем % правильных вопросов по нужным вопросам и принимаем решение - скоринговая карта.
Вот собственно вся эвристика.