Что влияет на карьеру чиновника или «Муниципальные мойры»

В этой статье хочу поделиться с вами интересным опытом участия в хакатоне по машинному обучению «Муниципальные мойры». Он проводился Европейским университетом в Санкт-Петербурге. Призовой фонд составлял 100 000 руб, и его могла получить только одна команда.

Кейс и решение

Команда центра Res Publica ЕУСПб, которая организовывала мероприятие, проводит исследование качества муниципального управления и его динамику в России с 2007 года.

Так что, участникам хакатона предстояло ответить на вопрос, от чего зависит ход карьеры глав городов и районов. Предполагается, что отставка главы муниципального образования — это показатель неэффективности его работы, а карьерное продвижение на вышестоящие уровни — наоборот. На наш взгляд, это логично и так должно быть на самом деле (спойлер: нет).

В качестве данных для предсказания карьерных траекторий чиновников, предлагалось использовать их биографических данные, а также различные показатели из базы данных муниципальных образований. Например, общее состояние дорог или число больниц.

У участников была история глав муниципалитетов за 18-летний период. Каждая запись в датасете рассказывала о состоянии карьеры главы в какой-то определенный год, а именно содержала следующие поля: год и регион работы, муниципальное образование, название должности, пол и возраст человека, уровень и сфера образования, текущее состояние карьеры и другие.

Данные были анонимизированы, но при желании их можно было восстановить. Такое считалось за нарушение правил и каралось дисквалификацией.

Самым интересным полем здесь является состояние карьеры, так как именно это поле и нужно было предсказывать. Состояние карьеры главы описывается не только тремя значениями («назначили на должность», «работает», «уволили с должности»), которые было бы логично предположить, но куда более разнообразным и детальным набором. Например, глава МО мог уйти с должности по состоянию здоровья или в связи с заведенным на него уголовным делом. Всего таких категорий было 13.

Типичный пример карьерной траектории главы:

Сначала уточню, что нужно было предсказывать карьерные траектории не на будущие года, а для других кандидатов, живущих параллельно. Но на наш взгляд, это куда более скучная задача, чем предсказание будущего. Однако, правила устанавливает организатор.

Мы остановились на one-vs-rest модели, то есть когда для каждого класса мы строим отдельный классификатор. В качестве ответа для сэмпла выбираем тот класс, чья модель более уверена в принадлежности примера этому класса.

Немного поизучав данные, мы обратили внимание на периодичность появления категории “победа в выборах” в зависимости от года. На картинке хорошо видны пики в каждый пятый год. И это кажется довольно логичным, если большинство кандидатов часто выбирают на 5 следующих лет.

Далее мы решили посмотреть, как распределены категории в зависимости от региона. Чтобы получить картинку ниже, мы сначала отнормировали все по столбцам, а потом по строкам.

Из хитмапы выше видно, что некоторые клетки сильно выделяются по сравнению с остальными. Например, в Республике Удмуртии должности устраняются сильно чаще, чем в других регионах. А в Ярославской области кандидаты часто переходят на другую работу.

Из-за наличия таких особенностей мы решили добавить все эти признаки, то есть частоты классов по регионам. И это действительно помогло: взглянем на важность признаков в наших модельках и увидим, что частота играет самую важную роль.

Здесь приведены примеры для двух классов: переназначение и выход на пенсию, соответственно.

Еще из интересных технических моментов можно сказать про то, что дополнительная база с данными о муниципальных образованиях весила больше 30 Гб, поэтому можно было либо ее парсить, либо скачать на сервер, где бы хватало RAM для обработки.

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

Тестирование проводилось с помощью специального бота в telegram. Участник отсылает ему свои ответы, а бот возвращает значение оценивающей метрики и позицию команды в таблице результатов. То есть результаты других команд никто не знает. Например, вот так это выглядело на этом соревновании:

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

Хочется упомянуть, почему у нас получается довольно маленькое значение F1 скора. Все дело в том, что у классов сильный дисбаланс. Одних очень много, других — мало. Поэтому, предсказывая многие классы с хорошей точностью, а некоторые, которые встречаются в тесте всего пару раз, плохо, мы не получим впечатляющего значения метрики.

Кто-то может начать плеваться от того, мол почему бы не проводить такое соревнование на kaggle? Согласен, kaggle довольно приятная система. Однако тестирование с помощью бота выглядит не так пошло и обыденно, что придает соревнованию свою необычность.

Результаты

В конце хакатона были выступления команд. Мы презентовали свою работу первыми. Из отрицательных моментов: жюри упомянуло, что рассказывали мы слишком техническим языком и некоторые термины были понятны только по контексту. Задумывайтесь об этом как при составлении слайдов, так и при репетиции речи.

Сразу же после рассказа, мы осознали одну важную ошибку. Несмотря на то, что победитель определяется не позицией на лидерборде, в этот раз мы почему-то слепо следовали цели: максимизировать скор, и потратили не очень много времени для составления полноценного ответа на вопрос: «Что же нужно делать, чтобы получить повышение?»

Жюри тоже считает, что не получило убедительного ответа, но, судя по их отзыву, другие результаты тоже будут полезными. Кстати, это был первый для нас хакатон, после которого нам попросили открыть доступ к коду и кратко описать решение и используемые признаки. Приятно, что результат может помочь кому-то в исследованиях этой области.

Как маленький и очевидный вывод, друзья: никогда не забывайте основную цель, которую преследуете, несмотря на уровень и масштабность мероприятия.

Пост написан совместно с Rebryk.