Дискложес  ☰      

декларации о доходах

Дискложес     Автоматизированный сбор деклараций о доходах

Предсказание приобретения транспортного средства в декларациях о доходах

Алексей Сокирко, май 2021, sokirko@yandex.ru

Введение

На апрель 2021 году в базе disclosures.ru содержится 5782811 деклараций к 1775340 чиновникам (2010-2020 гг). Кроме дохода и объектов недвижимости, чиновники обязаны публиковать информацию о транспортных средствах , которые принадлежат им или их супругам. Всех чиновников мы можем разделить на три класса:

1. Чиновники, у которых нет машин вообще, ни в какой декларации.

2. Чиновники, у которых машин сначала не было, а потом в какой-то год появились.

3. Чиновники, у которых автомобиль есть в самой первой известной декларации.

В настоящем исследовании нас интересует второй класс, т.е. нам интересны случаи появления информации о машинах в декларациях, если за предыдущие годы такой информации не было. Второй класс занимает только 20% от всех чиновников. Мы попытаемся построить систему машинного обучения, которая предскажет факт появления информации об автомобиле в декларации на основе всей остальной информации. Построенную модель можно применить к чиновникам, у которых нет автомобиля. Если модель говорит, что данный чиновник вероятно должен иметь машину, а в декларации ее нет, тогда есть повод усомниться в правдивости декларации. Таким образом мы можем использовать методы машинного обучения для антикоррупционного исследования. Понятно, что сомнения в правдивости декларации не являются доказательством ее ложности, но надо более внимательно относиться к представленным в ней фактам.

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

Основная выборка

Основная выборка на 793270 примеров формируется следующим sql-запросом:

select person_id, section_id, income_year, v.name
from declarations_section s
left join (
   select section_id, group_concat(name) as name
   from declarations_vehicle
   group by section_id
) v on s.id = v.section_id
where person_id is not null and
   s.source_document_id in ( select s2.source_document_id from declarations_section s2
      where s2.id in (select section_id from declarations_vehicle))
order by person_id, income_year

В этом запросе мы конкатенируем все записи о транспортных средствах за один год для одной декларации одного чиновника. Если записей было много, например, чиновник владел сразу двумя автомобилями «Volvo XC-90» и «ВАЗ-2121», мы объединяем это в одну строку. Кроме этого, мы удаляем из рассмотрения все документы (документы — это много деклараций для многих чиновников), если ни у кого в целом документе нет упоминания машин. Мы предполагаем, что документы совсем без машин — это ошибка парсинга (подробнее о парсинге ), например, программа Смартпарсер вообще не нашла столбец с транспортными средствами.

Для формирования основной выборки мы идем по строкам указанного sql-запроса. Упорядочим декларации чиновника по году публикации d1,d2,...dN. Возьмем все декларации, начиная с d2. Если предыдущая декларация (за прошлый год) была без машины и текущая декларация — без машины, тогда объявим это отрицательным примером, если текущая декларация с машиной, а предыдущая — без машины, тогда это положительный пример. Если найден положительный пример, тогда больше этот чиновник не рассматривается, переходим к следующему чиновнику. Получается, если у чиновника все декларации без машины, это все будут отрицательные примеры (за исключением самой первой декларации), а положительный пример может быть только один для одного чиновника. Положительных примеров в выборке — 73966 штук, а отрицательных почти в 10 раз больше - 719304 штуки. Подобный дисбаланс - довольно стандартная проблема машинного обучения.

Факторы дохода

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

select s.person_id, s.income_year, i.size, i.relative
from declarations_section s
join declarations_income i on i.section_id = s.id

Видно,что здесь используется информация о доходе в год возможной покупки машины, т. е. мы предсказываем факт покупки машины по фактам, которые получены вместе в фактом покупки машины (в том же самом документе). Это довольно сильно обесценивает нашу модель, если думать о ее коммерческом использовании. Впрочем, полученные результаты даже с этими факторами нельзя назвать успешными, поэтому пока мы позволим нашей модели использовать информацию по максимуму.

Для усиления силы факторов мы делим доход за предыдущий год на текущий доход, таким образом мы получаем информацию о том, во сколько раз доход за текущий год вырос по сравнению с предыдущим (факторы income_diff и spouse_income_diff)

Факторы недвижимости

Для чиновника и его(ее) супруги(а) в декларации публикуется информация об объектах недвижимости. По недвижимости вычисляются следующие факторы:

1. общая площадь недвижимости за год;
2. общая площадь недвижимости за предыдущий год;
3. число объектов недвижимости за этот год;
4. типы недвижимости (квартира, земельный участок, жилой дом)

Сразу скажем, что группа факторов с типом недвижимости не «зажгла» (не оказалось значимой), хотя казалась перспективной. Кроме этого, по непонятным для нас причинам для рассматриваемой задачи только недвижимости супруги является значимой информацией. Два фактора «spouse_square_sum» и «spouse_real_estate.real_estate_count» в сумме дают половину от значимости всех факторов модели. Столь резкая зависимость требует внимательной перепроверки данных в будущем. Фактор «square_sum» (сумма площадей недвижимости для самого декларанта) может быть использован, но его важность крайне низка в построенной модели

Остальные факторы

Кроме перечисленных факторов, мы построили следующее:

1. Фактор gender (пол декларанта), подробнее об определении пола здесь
2. Фактор rubric ( рубрика ведомства );
3. Фактор has_children (у декларанта записаны дети в декларации);
4. Фактор year (год подачи декларации).

Как уже говорилось выше, мы совсем не претендуем на то, что перебрали все факторы. Если у читателя есть гипотезы, что стоит проверить, пожалуйста, пишите на sokirko@yandex.ru

Машинное обучение

Мы попробовали три системы машинного обучения:

1. RandomForest (случайные деревья) — это популярная и понятная система машинного обучения, применяемая в том числе для классификации на основе разнородных факторов (категориальные или численные).
2. Catboost - проприетарная разработка Яндекса, предсказание осуществляют деревья решения, но сами деревья некоторым образом регулярны (oblivious decision tree) и для их построения используется градиентный бустинг.
3. TensorFlow — библиотека, разработанная компанией Google для решения задач построения и тренировки нейронной сети.

Все три системы запускались фактически «из коробки» без дополнительных настроек просто ради утоления нашего любопытства.

Для оценки качества систем мы использовали метрику  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

Как уже говорилось, видно, что качество модели почти полностью определяется факторами о сурпруге.

Заключение

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

Конечно, напрямую использовать такую систему нельзя, поскольку точность слишком низкая. Можно сказать, что задача пока не поддаётся решению. Существуют ли дополнительные факторы? Есть ли серьёзная зависимость от размеров обучающей выборки? Есть ли успехи решения подобных задач где-то еще? На все эти вопросы надо будет ответить в будущем.