Дискложес Автоматизированный сбор деклараций о доходах | |
На апрель 2021 году в базе disclosures.ru содержится 5782811 деклараций к 1775340 чиновникам (2010-2020 гг). Кроме дохода и объектов недвижимости, чиновники обязаны публиковать информацию о транспортных средствах , которые принадлежат им или их супругам. Всех чиновников мы можем разделить на три класса:
1. Чиновники, у которых нет машин вообще, ни в какой декларации.
2. Чиновники, у которых машин сначала не было, а потом в какой-то год появились.
3. Чиновники, у которых автомобиль есть в самой первой известной декларации.
В настоящем исследовании нас интересует второй класс, т.е. нам интересны случаи появления информации о машинах в декларациях, если за предыдущие годы такой информации не было. Второй класс занимает только 20% от всех чиновников. Мы попытаемся построить систему машинного обучения, которая предскажет факт появления информации об автомобиле в декларации на основе всей остальной информации. Построенную модель можно применить к чиновникам, у которых нет автомобиля. Если модель говорит, что данный чиновник вероятно должен иметь машину, а в декларации ее нет, тогда есть повод усомниться в правдивости декларации. Таким образом мы можем использовать методы машинного обучения для антикоррупционного исследования. Понятно, что сомнения в правдивости декларации не являются доказательством ее ложности, но надо более внимательно относиться к представленным в ней фактам.
Нужно добавить, что факт сокрытия транспортного средства не равен факту возникновения (покупки) машины. Если бы нас интересовал только факт сокрытия транспортного средства, надо было просто взять примеры деклараций без машины и деклараций с машинами. Может быть, мы в будущем попробуем решить такую задачу, и мы надеемся, что опыт построения моделей с транспортными средствами будет полезен. Кроме этого, поставленная задача может быть интересна не только для антикоррупционной оценки деклараций, но и для любых маркетинговых исследований — мы фактически предсказываем, что человек с большой вероятностью купит в этом году автомобиль. Нужно понимать, что в таком виде задача похожа на другие коммерческие задачи (клики на рекламу, покупка любых товаров и пр.) Машинное обучение давно применяется в этих областях, любое изменения метрик здесь может привести к миллионным убыткам или выигрышам. Однако было бы наивно приуменьшать спонтанность (случайность) человеческой природы, ведь решение о покупке того или иного товара часто бывает абсолютно иррационально, т.е. не предсказуемо никакими машинными методами. Исходя из этого мы не ожидаем высокого результата, скорее, мы просто пытаемся познакомиться с данными.
Основная выборка на 793270 примеров формируется следующим sql-запросом:
select person_id, section_id, income_year, v.nameВ этом запросе мы конкатенируем все записи о транспортных средствах за один год для одной декларации одного чиновника. Если записей было много, например, чиновник владел сразу двумя автомобилями «Volvo XC-90» и «ВАЗ-2121», мы объединяем это в одну строку. Кроме этого, мы удаляем из рассмотрения все документы (документы — это много деклараций для многих чиновников), если ни у кого в целом документе нет упоминания машин. Мы предполагаем, что документы совсем без машин — это ошибка парсинга (подробнее о парсинге ), например, программа Смартпарсер вообще не нашла столбец с транспортными средствами.
Для формирования основной выборки мы идем по строкам указанного sql-запроса. Упорядочим декларации чиновника по году публикации d1,d2,...dN. Возьмем все декларации, начиная с d2. Если предыдущая декларация (за прошлый год) была без машины и текущая декларация — без машины, тогда объявим это отрицательным примером, если текущая декларация с машиной, а предыдущая — без машины, тогда это положительный пример. Если найден положительный пример, тогда больше этот чиновник не рассматривается, переходим к следующему чиновнику. Получается, если у чиновника все декларации без машины, это все будут отрицательные примеры (за исключением самой первой декларации), а положительный пример может быть только один для одного чиновника. Положительных примеров в выборке — 73966 штук, а отрицательных почти в 10 раз больше - 719304 штуки. Подобный дисбаланс - довольно стандартная проблема машинного обучения.
В качестве возможных факторов мы попробуем следующие параметры: доход чиновника за текущий год, за прошедший год, доход супруги за текущий год и за прошедший год. Для построения этих четырех факторов мы используем следующие sql-запрос:
select s.person_id, s.income_year, i.size, i.relativeВидно,что здесь используется информация о доходе в год возможной покупки машины, т. е. мы предсказываем факт покупки машины по фактам, которые получены вместе в фактом покупки машины (в том же самом документе). Это довольно сильно обесценивает нашу модель, если думать о ее коммерческом использовании. Впрочем, полученные результаты даже с этими факторами нельзя назвать успешными, поэтому пока мы позволим нашей модели использовать информацию по максимуму.
Для усиления силы факторов мы делим доход за предыдущий год на текущий доход, таким образом мы получаем информацию о том, во сколько раз доход за текущий год вырос по сравнению с предыдущим (факторы income_diff и spouse_income_diff)
Для чиновника и его(ее) супруги(а) в декларации публикуется информация об объектах недвижимости. По недвижимости вычисляются следующие факторы:
1. общая площадь недвижимости за год;Сразу скажем, что группа факторов с типом недвижимости не «зажгла» (не оказалось значимой), хотя казалась перспективной. Кроме этого, по непонятным для нас причинам для рассматриваемой задачи только недвижимости супруги является значимой информацией. Два фактора «spouse_square_sum» и «spouse_real_estate.real_estate_count» в сумме дают половину от значимости всех факторов модели. Столь резкая зависимость требует внимательной перепроверки данных в будущем. Фактор «square_sum» (сумма площадей недвижимости для самого декларанта) может быть использован, но его важность крайне низка в построенной модели
Кроме перечисленных факторов, мы построили следующее:
1. Фактор gender (пол декларанта), подробнее об определении пола здесьКак уже говорилось выше, мы совсем не претендуем на то, что перебрали все факторы. Если у читателя есть гипотезы, что стоит проверить, пожалуйста, пишите на sokirko@yandex.ru
Мы попробовали три системы машинного обучения:
1. RandomForest (случайные деревья) — это популярная и понятная система машинного обучения, применяемая в том числе для классификации на основе разнородных факторов (категориальные или численные).Все три системы запускались фактически «из коробки» без дополнительных настроек просто ради утоления нашего любопытства.
Для оценки качества систем мы использовали метрику AUC . Фактически все три системы показали, что зависимость между входными факторами и фактом «покупки» есть, но довольно слабая:
Видно, что первые две системы сработали почти одинаково, TensorFlow предсказуемо немного отстаёт от деревьев решений, поскольку, кажется, что для нейронных сетей здесь не хватает данных и сигналы очень разнородные.
Если пытаться найти точку на приведенном выше графике, которую можно было использовать для классификаций, получится, что это точка (precision=0.2579, recall=0.4456, f1=0.3267). Это точность и полнота для положительных примеров. Получается, что мы может найти 44% положительных примера (покупки машины), но ошибаться будем в 3 из 4 случаев (точность 25%).
Важность(сила) факторов можно считать разными способами. Мы взяли дефолтное решение от системы Catboost и у нас получилось такое:
Feature | Importance |
---|---|
year | 8.368 |
income_diff | 10.534 |
spouse_income_diff | 12.205 |
income | 5.797 |
gender | 8.359 |
rubric | 3.816 |
region | 7.795 |
spouse_square_sum | 21.056 |
has_children | 3.844 |
spouse_real_estate.real_estate_count | 18.226 |
Как уже говорилось, видно, что качество модели почти полностью определяется факторами о сурпруге.
Исходный код данного упражнения по машинному обучению выложен здесь.
Конечно, напрямую использовать такую систему нельзя, поскольку точность слишком низкая. Можно сказать, что задача пока не поддаётся решению. Существуют ли дополнительные факторы? Есть ли серьёзная зависимость от размеров обучающей выборки? Есть ли успехи решения подобных задач где-то еще? На все эти вопросы надо будет ответить в будущем.