Я вчера задавался вопросом, можно ли детектировать достаточно изощренный (случайный, с гиперболическим распределением) вброс на #выборыКС. Женя "rutsh" Крохалев подсказал, что можно. Можно попробовать скластеризовать голоса с помощью
EM-метода. Сам Женя с
его помощью отделил МММ-щиков. Я попробовал с его помощью поискать "вброс".
(
что получилось? )
Рассмотрим такую модель: избиратель с вероятностью p выбирает, к какой из двух групп он относится. У каждой из групп есть параметр: вектор вероятностей проголосовать за каждого кандидата. Обозначим эти вектора p1 и p2. Будем считать, что наш избиратель, после того, как он определился, к какой из двух групп он относится, просто берет соответствующий вектор вероятностей и начинает кидать нечестную монетку за каждого кандидата согласно соответствующему вектору вероятностей, решая таким образом, отдаст или нет он за него свой голос.
Лирическое отступление: выше в этом треде фактически говорилось о том, что после того, как избиратель определился со своим типом (1 или 2), его голоса за различных кандидатов становятся независимыми. Если в одной из групп 70% проголосовало за Навального и 30% за Яшина, но абсолютно все, кто голосовал за Яшина, голосовали и за Навального тоже, такая модель это проигнорирует. Для нее голоса за Навального и Яшина в каждой группе независимы, хоть одни и могут быть вероятнее других.
Мы хотим по информации о голосах избирателей оценить параметры нашей модели: p1, p2 и p. Это было бы очень легко сделать, знай мы для каждого избирателя, к какой из двух групп он относится (тогда нужно было бы просто посчитать долю голосов за каждого кандидата в пределах каждой группы). Но мы, к сожалению, этих данных не имеем.
Для решения такого типа задач (максимизации неполного правдоподобия в вероятностной модели, разделение смесей распределенй - частный случай) как раз и используется ЕМ-алгоритм. Его идея состоит в следующем:
1) Инициализируем параметры модели (p, p1, p2) случайным образом.
2) При текущих параметрах модели считаем вероятность для каждого избирателя принадлежать каждой из групп (находим распределение на т.н. скрытые переменные модели).
3) Обновляем параметры модели так, чтобы в среднем (по распределению из п.2) они были как можно правдоподобней. Фактически, считаем компоненты векторов p1 и p2 как доли голосов за соответствующего кандидата, взвешенные пропорционально вероятностям, найденным в п.2
4) Если нет сходимости, переходим на п.2
В обозначениях из вики:
X - голоса избирателей
theta - параметры (p, p1, p2)
Z - скрытые переменные "к какой из двух групп принадлежит избиратель".
Reply
Reply
Reply
Leave a comment