Более глубокий взгляд на данные

Введение

26 мая 2019 года в Бельгии были организованы федеральные выборы.
В этом посте я не хочу обсуждать политические последствия этих выборов. Я хочу поэкспериментировать с данными и посмотреть, что мы можем извлечь из этого.

Более конкретно, я хочу ответить на вопрос: как избиратели изменили свое мнение после прошлых выборов.

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

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

Набор данных

Все самое интересное начинается с набора данных. Поэтому я задумал найти набор данных, содержащий данные о результатах выборов.

Я наткнулся на этот сайт, на котором есть данные об итогах голосования как за 2019, так и за 2014 год (предыдущие выборы) по округам. Районы, о которых я говорю, в Бельгии называются кантонами, а их чуть больше 200.

Остается только догадываться, скопировал ли я вручную все результаты с этого веб-сайта или использовал менее легальный подход к написанию сценария Python для автоматического скринсинга результатов. Могу только сказать, что очень рекомендую библиотеку BeautifulSoup для очистки экрана.

В итоге я получил набор данных, в котором указано количество голосов для каждой партии в каждом из более чем 200 округов как в 2019, так и в 2014 году.

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

Описание модели

Чтобы понять, какие избиратели передумали, я построил очень простую модель.
Я упрощаю выборы до N партийной системы, отбрасывая все партии, набравшие менее 150 тысяч голосов в 2014 и 2019 годах.

Затем я предполагаю, что все люди, которые голосовали одинаково в 2014 году, изменят свое мнение таким же образом в 2019 году. В частности, люди, проголосовавшие за партию Pᵢ в 2014 году, имеют одинаковую вероятность проголосовать для партии Pᵣ в 2019 году (я называю эту вероятность X ᵢᵣ).

Наша цель - найти наилучшие значения вероятностей X ᵢᵣ. Другими словами: «Какие значения X ᵢᵣ лучше всего объясняют результаты 2019 года на основе результатов 2014 года».

Чтобы «объяснить» или «спрогнозировать» количество голосов V ²⁰¹⁹ для партии Pᵣ в 2019 году, на основе результатов 2014 года я могу использовать вероятности X ᵢᵣ следующим образом:

Выглядит знакомо, не так ли? Это простая линейная регрессия. Итак, я разработал и реализовал модель на Python.

Следует отметить, что даже несмотря на то, что мы говорим о прогнозировании результатов 2019 года, мы не заботимся о прогнозировании выборов 2019 года, поскольку они уже в прошлом. Мы всего лишь пытаемся создать модель прогнозирования, чтобы впоследствии изучить «внутреннее устройство этой модели» (вероятности X ᵢᵣ).

Первые результаты

Я представлю результаты этой линейной регрессии на тепловой карте. Каждая из ячеек на тепловой карте содержит одну из вероятностей X ᵢᵣ.

Эту тепловую карту следует читать следующим образом: каждая ячейка находится на пересечении строки и столбца. Строка представляет людей, проголосовавших за определенную партию в 2014 году, столбец представляет партию, за которую они голосовали в 2019 году. Значение в ячейке представляет собой соотношение людей, проголосовавших за первую партию в 2014 году, которые голосуют за вторую. вечеринка в 2019 году.

В качестве примера: если бы все люди голосовали одинаково в 2014 и 2019 годах, тепловая карта имела бы значение 1 по диагонали и ноль везде.

Мои первые результаты представлены на тепловой карте ниже.

График говорит более тысячи слов, но на этот раз кричит только об одном: «Модель неправильная!».

Проблемы модели

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

Прежде всего, в моей интерпретации модели параметры X ᵢᵣ не могут принимать произвольное значение. Поскольку они представляют собой вероятность того, что избиратели перейдут в другую партию, это должно быть число от 0 до 1. Для избирателя определенной группы просто не имеет смысла иметь -59% вероятность проголосовать за определенную партию в 2019.

Во-вторых, вероятности X ᵢᵣ не независимы друг от друга. Все избиратели должны проголосовать заново в 2019 году, в противном случае они рискуют оказаться вне закона, поскольку голосование в Бельгии является обязательным.

В результате сумма X ᵢᵣ для каждой партии должна быть «приблизительно» 100% (потому что в период с 2014 по 2019 год люди могли умереть, мигрировать или достичь минимального возраста, позволяющего голосовать).
Я мог бы пойти дальше и добавить информацию о том, как изменилось население в каждом районе в период с 2014 по 2019 год, но для упрощения я предположил, что оно будет примерно постоянным.

Улучшение модели

Поэтому я адаптировал модель, чтобы учесть эти ограничения.

Модель была адаптирована двумя способами:

  1. Я перешел от линейной регрессии по умолчанию к задаче наименьших квадратов с ограничениями независимых переменных, чтобы ограничить мои вероятности между 0 и 1.
  2. Я добавил уравнение для каждой из партий, чтобы заставить всех избирателей 2014 года снова проголосовать в 2019 году. Это уравнение было взвешено с гиперпараметром, чтобы указать его относительный вес.

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

Настройка гиперпараметров

Вышеупомянутый гиперпараметр определяет относительную важность этого ограничения по сравнению с важностью «правильного прогноза».

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

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

Результаты улучшенной модели

На тепловой карте ниже вы можете увидеть результаты улучшенной модели.

Модель однозначно показывает интересные результаты. Некоторые из них полностью соответствуют ожиданиям и «здравому смыслу».

Модель показывает, что люди меняют свое мнение между партиями, придерживающимися «единомышленников». Некоторые примеры этого:

  • PVDA, Groen и SP-A (все партии левого крыла) в основном проиграли друг другу голоса.
  • NV-A только проиграла голоса другой правой партии (Vlaams Belang)

Некоторые наблюдения неожиданны:

  • 22% избирателей СПА передумали в пользу OpenVLD (левое крыло на правое крыло)
  • Флаамс Беланг (партия довольно правого крыла) уступила 10% голосов партии довольно крайнего левого крыла (PVDA).
  • OpenVLD (партия правого крыла) потеряла голоса почти всех партий (кроме самой крайней левой партии)

Представление

Чтобы сравнить модели (или даже обучить модели), мне нужно выбрать «показатель эффективности».
Хороший вариант - «количество ошибочно предсказанных голосов» для всех районы.

Если я использую эту метрику на следующих моделях:

  • Исходная модель линейной регрессии: 9,9% ошибочно предсказанных голосов
  • Усовершенствованная модель: 13,5% ошибочно предсказанных голосов
  • Модель на основе опросов. Мне посчастливилось найти исследование RepResent, консорциума политологов из пяти бельгийских университетов, с описанием проведенного ими опроса по результатам выборов. Использование результатов их опросов привело к получению 18,9% ошибочно предсказанных голосов.

Некоторые наблюдения из этих оценок производительности:

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

Возможные следующие шаги

Текущая модель имеет лишь ограниченную информацию, на которой можно основывать свое решение. Единственная точка данных, которую он использует: За какую партию голосовал человек в 2014 году ?.

Следовательно, он должен рассматривать всех людей, которые голосовали за одну и ту же партию в 2014 году, как равных. Конечно, это очень грубое упрощение. Можно представить, что люди, проголосовавшие за определенную партию в 2014 году, имели разное происхождение и причины для этого. Эти разные причины могут привести к разному поведению на выборах 2019 года.

Если мы хотим, чтобы модель могла делать прогнозы по типу «Партия Y потеряла много своих богатых избирателей в пользу партии X, но вернула себе много пожилых избирателей», нам необходимо улучшить модель. Добавление информации о распределении богатства, урбанизации или возрастном распределении по районам для использования в модели может раскрыть этот потенциал.

Другой способ повышения производительности модели, который довольно легко реализовать, - это улучшение обучающих данных. Проведя анализ, я обнаружил, что результаты выборов также доступны на более детальном уровне (так называемом «Gemeente»). Повторное выполнение того же анализа для этого более обширного набора данных должно привести к более точным результатам. Это также позволило бы мне объединить больше политических партий, а не только самые крупные.

Вывод

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

Существует множество возможностей улучшить модель или выполнить другой анализ этого набора данных.

Но самое главное: в следующий раз, когда вы сомневаетесь, будет ли ваш голос иметь значение, знайте, что вы, по крайней мере, будете частью линейной регрессии ;-)