?

Log in

No account? Create an account
Фальсификация голосования на сайте РОИ - Alexey Kruglov — LiveJournal
May 31st, 2013
03:04

[Link]

Previous Entry Share Next Entry
Фальсификация голосования на сайте РОИ
Это должно быть около 1,0 (+-0,7)Леонид Волков недавно сообщил о том, что обнаружена фальсификация голосования на сайте РОИ (Российской общественной инициативы) тут. Фальсификация заключается в том, что в голосовании за отмену предела в 0‰ алкоголя для водителей кроме натурально выглядещей компоненты прироста голосов примерно раз в час счётчик голосов сразу скачет примерно на 20--50. Массух, представитель РОИ, написал комментарий в ответ на это. Кроме всяких общих слов он высказал мысль, что выбросы голосов в 20 могут быть и случайными с учётом того, что за инициативу Навального голосовало вначале по 120 человек за интервал измерения. В поддержку он ещё показывает статистику открытий страницы в минуту, на которых видны случайные флуктуации количества с разбросом где-то до 50 (при среднем ~50). Тут я собираюсь с цифрами выяснить, могут ли эти пики в 20 голосов быть случайными. (И заодно ссылка на инициативу Навального, из-за которой и разгорелся весь этот сыр-бор.)

Для начала отступление про критерий истины в естественных науках. У нас есть какое-то количество наблюдательных данных (в нашем случае это то, что можно посчитать из данных о скорости роста числа голосов). И есть разные гипотезы о процессе, который дал эти данные. Например, гипотезы "голоса набрасывают" или "голоса не набрасывают". Чтобы сравнить одну из гипотез с данными надо дополнить её предположениями до теории, из которой можно посчитать (получить) что-нибудь наблюдаемое, и сравнить это с реально наблюдаемым. Чем менее экзотическими предположениями надо дополнять (в лучшем случае) и лучше при этом согласие с данными, тем гипотеза лучше. Творческая компонента тут в том, чтобы 1) придумать какие именно параметры сравнивать с наблюдениями, чтобы предположитльно неверная гипотеза не проходила, как её ни дополняй предположениями, 2) наиболее удачным способом дополнить гипотезу до теории-гипотезы, и 3) суметь вывести из теории-гипотезы наблюдаемые следствия. Оппонент может улучшать 2 для своей гипотезы или находить ошибки в нашем 3.

Данные о росте числа голосов брались по ссылкам из поста Волкова здесь (машины чиновников) и здесь (промилле). Там данные идут 1) сначала раз в примерно 5 минут (11--15 апреля), 2) потом раз в 5 минут (15--22 апреля), 3) потом раз в 10 минут (с 23 апреля). Вначале (до 15 апреля), похоже, период взятия данных с сайта не совсем стабильный (может быть, например, сайт тормозил и не отдавал данные сразу, может, какие-то непонятные тормоза в скрипте, который скачивал, или на сайте данные обновлялись тогда не со стабильным периодом). На сайте, откуда брались данные, они, похоже, обновляются раз в 10 минут. Из-за этого увеличение сначала идёт нерегулярно: иногда между соседними данными голоса не меняются совсем, потому что на сайте не обновились, а изредка случается, что между соседними они обновляются сразу два раза (прирост при этом примерно вдвое больше, чем рядом -- такое до 15 апреля встречалось). Для моего метода важно, чтобы все приросты голосов брались за одинаковый промежуток времени, поэтому с данными до 15 апреля он ничего хорошего не даёт. После 15 апреля всё нормально.

Раз Массух говорит, что скачки на 20 голосов -- это нормально, надо разобраться что тут на самом деле нормально. Если считать, что люди приходят независимо и в случайный момент времени, для числа пришедших в какой-нибудь интервал времени из теории вероятности известно, что его стандартное отклонение равно квадратному корню из его же среднего значения. Стандартное отклонение -- это мера разброса случайной величины, равна корню из среднего квадрата отклонения от её среднего значения. Если взять два соседних интервала по 10 минут, то среднее число пришедших голосов Ed1 и Ed2 должно быть примерно одинаковым, значит их разность (d1d2) будет иметь нулевое среднее значение: E(d1d2)=0, а стандартное отклонение разности sqrt(E(d1d2)2)=sqrt(E(d1+d2)), т.е. равно корню из суммы их значений. Проще говоря, типичное значение для разности соседних приростов голосов (за одинаковые периоды времени) -- корень из суммы этих приростов.

Чтобы количественно проверить насколько правильно ведут себя флуктуации числа голосов, можно рассмотреть такую величину ("показатель дёргания"):
si=(di+1di)2 / (di+1+di),
где di -- величины соседних приростов голосов. Среднее этой величины в теории равно 1 (я это проверил численно; реализации, в которых получается 0/0, откидываются), стандартное отклонение меняется от 0,31 при среднем приросте Edi=0,1 до ~1,4 при приросте 10 и больше. Т.е. разброс получается довольно большой:
Это должно быть в среднем 1
По горизонтали откладываются сутки от полуночи 0 апреля. Так что 25 -- это 0:00 25 апредя, 35 -- это 0:00 5 мая.

Чтобы шум стал поменьше, сгладим простейшим IIR-фильтром:
ui = (1−r)ui−1 + rsi,
где r=1/24 определяет характерное время сглаживания в 4 часа (=24×10 минут). Шум при этом должен уменьшится в sqrt(24...12) раз (12 -- потому что соседние si положительно коррелируют), т.е. составить где-то в районе 0,2...0,8 (удвоенное стандартное отклонение).
Это должно быть около 1,0 (+-0,7)

Видно, что голосование за машины чиновников (красная линия) хорошо укладывается в эту схему за исключением редких выбросов. Выбросы связаны, похоже, с неполадками сайта в основном: счётчик там не увеличивается по 5...30 минут (на t=24,6, 44,75, 44.83, 29,69, 53,75, 53,93, 54,43) -- на графике приростов там провалы. В основном эти короткие провалы там случаются при наплыве голосующих. Странно выглядит разве что t=50,8...51,1 -- приросты там дёргаются туда-сюда. Может быть, там какие-нибудь проблемы с сайтом были, которые так модулировали возможность голосовать.

А вот голосование за промилле дёргается сильно больше, чем должно по теории. Варианты объяснения без предположения о фальсификации такие. 1) Если люди приходят не независимо, может быть Esi≠1. Например, если все голосуют парами (например, семьями), каждая пара одновременно, то Esi=2. Если n-ками, то Esi=n. Одновременно значит в пределах ~5 минут, чтобы попадать в один 10-минутный интервал. Даже для этих данных получается, что должны голосовать "семьи" минимум по 5 человек и очень быстро, по минуте на человека максимум. (В исходных же данных видно, что "семьи" вообще человек по 20.) 2) Глядя на исходные данные, можно было бы подумать, что данные для промилле на сайте обновляются не раз в 10 минут, а раз в примерно час. Но это тоже не проходит, потому что голоса потихоньку увеличиваются и между этими "обновлениями". И это межденное увеличение как раз соответствует теории, как видно на не сглаженном графике (t=38...44 и 48...50) -- там есть нижняя компонента, которая выглядит вполне нормально и соответствует этому медленному росту между скачками. Да и вообще это как-то странно, если бы одни голоса обновлялись с периодом 10 минут, а другие с ~60 минут. 3) Ещё вариант объяснения -- что на сайте roipetition.ru, который, похоже, связан с Навальным, испорченные данные по голосованию за промилле. То, что данные испорчены случайно непохоже: а) данные качаются тем же скриптом, что и по машинам (потому что это делается синхронно, одинаковые форматы и т.п.); б) таких проблем, которые были до 15 апреля по машинам, в данных по промилле нет -- там не нули и, иногда, удвоенные приросты, а скачки, сильно превышающие фоновые приросты: например, раз в 40 больше фоновых приростов. Что данные испортили специально тоже не похоже: как я уже написал, рост между скачками идёт с правдоподобными флуктуациями, не больше и не меньше, чем должны быть. 4) Других идей как объяснить эти скачки без фальсификаций у меня нет. Зато с фальсификациями легко,-- например, на сервере roi работает скрипт, который через случайный интервал времени около часа увеличивает счётчик голосов на нужную случайную величину.

Архив с данными и исходниками: roi-stat.zip (под AWK и gnuplot).

Tags: ,

(49 comments | Leave a comment)

Comments
 
[User Picture]
From:oude_rus
Date:May 31st, 2013 06:31 (UTC)
(Link)
Складываются квадраты СО, а из суммы извлекается корень -- иначе размерность не сойдется. И было бы полезно, если бы вы отложили три сигма на графиках. И еще интересно, к какому кумулятивному значению приводят пики. Если это 1%, то плевать, если 50% - то уже нет.

Анализ Пуассоновской статистики фотонов, испущенных молекулой (а это именно такая задача), довольно хорошо известен: надо считать автокорреляционную функцию и изображать ее на лог-шкале времени, тогда все процессы станут отлично видны. Но для этого нужна четкая ось времени, чего, по-моему, в данной статистике не происходит -- ну, вы и сами про это пишите.
From:a_kruglov
Date:May 31st, 2013 08:35 (UTC)
(Link)
ЖЖ почему-то никак не даёт отправить ответ в виде коммента, поэтому выложу ответ так: http://pastebin.com/6GTXVxsr .
(Deleted comment)
[User Picture]
From:jackhard
Date:May 31st, 2013 08:00 (UTC)
(Link)
Админил я как то местный сайт линэйджа, ну и играл на нем. Угадайте, чей клан был самым сильным и одетым?
[User Picture]
From:newereverwasted
Date:May 31st, 2013 08:07 (UTC)
(Link)
Ты прям как путин, в своем роде
[User Picture]
From:newereverwasted
Date:May 31st, 2013 08:03 (UTC)
(Link)
Блин, говноскрипт, нельзя было чтоли написать, чтобы к каждому проголосовавшему добавлялось еще 3 , голоса, красиво бы довольно получилось ))) и ночных бы всплесков не было ) не могу понять что в голове у этих фальсификаторов )))
[User Picture]
From:no_reazon
Date:May 31st, 2013 08:05 (UTC)
(Link)
На хабре было предположение, что это саботаж исполнителя.
(Deleted comment)
From:(Anonymous)
Date:May 31st, 2013 08:20 (UTC)
(Link)
Есть мнение, что даже не скрипт работает, а сидит человек и руками вбрасывает, теперь раз в 5 минут: http://oroi.ru/viewtopic.php?f=2&t=277&start=110#p1842
From:a_kruglov
Date:May 31st, 2013 08:43 (UTC)
(Link)
На глаз выглядит как раз, что вброс идёт автоматически, да ещё и прямо на сайте РОИ. Потому что, если бы вброс шёл извне сайта РОИ, то пачки время от времени бы размазывались между соседними 10-минутными интервалами, а они (на глаз) всегда попадают в один. Это значит, что процесс добавления либо синхронизован с 10-нимутными интервалами (это сложно сделать вне сайта, хотя и теоретически возможно, но непонятно для чего это делать), либо он очёнь короткий. Например, все голоса за < 0,5 минуты -- не знаю, насколько просто реализовать такую скорость с их сайтом извне. Это надо смотреть пристальнее, чтобы разобраться насколько эти столбики размазываются. Итог такой, что есть некоторые данные наводят на мысль, что это делается внутри сайта, на это только подозрение пока, точно не уверен.

А вручную это сделать нереально. За полминуты нереально вручную вбить даже 20 голосов. С заходом на сайт, выходом и т.п.
(no subject) - (Anonymous) - Expand
(Deleted comment)
(no subject) - (Anonymous) - Expand
[User Picture]
From:andrewd68
Date:May 31st, 2013 08:29 (UTC)
(Link)
Вот вам ещё сайт с данными. Тоже мониторинг РОИ.
http://roi.f1p.net/
[User Picture]
From:alucardische
Date:May 31st, 2013 08:40 (UTC)
(Link)
Могли быть не фальсификации в смысле пририсовки несуществующих людей, а просто занесение списков, заранее поданых подневольными людьми. Правда против этой версии жестко говорит тот факт, что такие же скачки, просто меньшего размера, наблюдаются и в других инициативах.

И еще как то непонятно - Вы точки типа 0/0 чем заменяли? предыдущим значением?
From:a_kruglov
Date:May 31st, 2013 08:46 (UTC)
(Link)
Такие точки откидывались и не учитывались. Точки, где интервалы времени для соседних приростов разные, тоже откидывались. Средняя величина s_i равна 1 именно при условии откидывания точек 0/0. Если их заменять, например, на 0, то теоретическое среднее уже стало бы не 1.
From:A A
Date:May 31st, 2013 09:25 (UTC)
(Link)
Здравствуйте!
Вы пишете:
"Чтобы количественно проверить насколько правильно ведут себя флуктуации числа голосов, можно рассмотреть такую величину ("показатель дёргания"):
si=(di+1−di)2 / (di+1+di),
где di -- величины соседних приростов голосов. Среднее этой величины в теории равно 1"

"Среднее этой величины в теории равно 1" - откуда вы взяли это?
Достаточно увеличить в 2 раза все значения di, чтобы значения si из этого списка также увеличились в 2 раза. Таким образом, при увеличении di и si тоже увеличивается, и вряд ли будет близко к единице для любых процессов.

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

Вопрос: вы можете дополнительно дать график не "показателя дергания" si, а самих значений di? Если можно, два графика (по этим двум разным голосованиям) на одной шкале, чтобы можно было бы сравнить.

И еще такой небольшой вопрос: что означает 1:6 на ваших графиках в правом верхнем углу?

Edited at 2013-05-31 10:13 am (UTC)
From:a_kruglov
Date:May 31st, 2013 11:23 (UTC)
(Link)
> "Среднее этой величины в теории равно 1" - откуда вы взяли это?

Я численно посчитал, что для случайных величин d_1, d_2, которые должны получаться, если люди приходят независимо друг от друга в случайные моменты времени с постоянным средним потоком людей, получается 1. Точнее, 1 с точностью не хуже 0,001 -- а лучше тут и не требуется.

> Достаточно увеличить в 2 раза все значения di, чтобы значения si из этого списка также увеличились в 2 раза. Таким образом, при увеличении di и si тоже увеличивается, и вряд ли будет близко к единице для любых процессов.

Для процесса прихода людей независимо друг от друга разброс значений d_i пропорционален корню из среднего значения -- это известно из тервера. Так что если будет приходить в 2 раза больше, разброс должен увеличиться только в 1,4... раза. Что для любых процессов будет 1 я не говорю, только если приходят независимо друг от друга. Если за 10 минут будет приходить одинаковое число, показатель будет 0, а если всегда приходить будут парами (что эквиватентно удвоению d_i), будет 2. Но это не выглядит как настоящее голосование, т.к. люди в разных местах не имеют возможности скоординироваться, чтобы как-то одновременно или, наоборот, равномерно голосовать.

Графики d_i можно посмотреть тут: http://roi.f1p.net/ , http://habrahabr.ru/post/181315/ , http://leonwolf.livejournal.com/497261.html . Столбики идут примерно раз в час, имеют высоту 15...50, поэтому при просмотре надо выбирать соответствующий масштаб, чтобы их было видно.

1:6 -- это номера столбцов из файла, которые откладываются по x и по у. Т.е., фактически, это ничего не значит кроме того, что я поленился более разумные подписи поставить.
From:A A
Date:May 31st, 2013 09:46 (UTC)
(Link)
Да, и еще чисто технический вопрос:
Что это за пологие места в обоих графиках (как зеленом, так и красном) перед значениями 30 и 60 по оси абсцисс?
Я имею в виду "сглаженный" график si.

Вообще по оси X - какая единица измерения? Я имею в виду 30, 60 чего именно?
Дней? То есть это что-то перед окончанием месяца, примерно, 29 апреля и 30 мая, причем на протяжении целого дня (если я правильно понимаю масштаб шкалы X).

Что бы это могло быть? Причем это график si, а не di. Чтобы переменная si не меняла значений в теч. дня, каждый интервал измерения di должна колебаться, например, 5,3,5,3,5,3... и так каждые 10 минут в теч. суток. Только в таком случае у di будет какое-то одинаковое значение (в случае этого примера - (5-3)^2/(5+3)=0.5)

Edited at 2013-05-31 10:20 am (UTC)
(Deleted comment)
(Deleted comment)
From:a_kruglov
Date:May 31st, 2013 11:27 (UTC)
(Link)
Посчитал численно с достаточной точностью для нескольких λ.
[User Picture]
From:oude_rus
Date:May 31st, 2013 20:19 (UTC)
(Link)
полностью поддерживаю.
а вот автор заглавного поста сомневается, что получится что-то дельное.
From:A A
Date:May 31st, 2013 14:21 (UTC)
(Link)
a_kruglov, realeugene

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

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

О.к.
Положим, что d - пуассоновский поток. Каждый его элемент d[i] - насколько я понимаю, есть дискретная случайная величина, с экспоненциальным распределением.
Функция распределения зависит от Lambda - интенсивности и T - единицы времени.
В нашем случае единица времени одна и так же - 10 минут (хотя есть интервалы в апреле и по 5 минут, а также и более крупные интервалы, чем 10 минут - о.к., мы их отбросим).
Интенсивность - будем условно считать, что она тоже одна и та же, в первом приближении (хотя реально, очевидно, существует несколько интенсивностей, в будние дни и выходные, днем и ночью и т.п.).
То есть любые взятые d[i] и d[j] при вышеуказанных допущениях об одинакомых интервалах времени и одинаковой интенсивности будут одинаково распределенными и независимыми случ. величинами?
Так?

Кстати, у меня тут один вопрос по ходу:
Вот это свойство, я имею в виду, что матожидание случ. величины s[i]=(d[i+1]-d[i])^2/(d[i+1]+d[i]) должно быть равно 1 - это откуда конкретно следует? Можно ли это вывести из свойств независимых одинаково распределенных сл. величин d[i], вообще без использования факта, что они экспоненциально распределены? Что-то мне подсказывает, что это должно быть не так сложно, но у меня пока не получилось.

И насколько я понимаю, то же будет верно не только для s[i]=(d[i+1]-d[i])^2/(d[i+1]+d[i]), но и для любой величины вида (d[i]-d[i+n])^2/(d[i]+d[i+n]), где n - некое фиксированное число (1,2,...) так?


В целом я хочу понять, почему именно этот критерий - близость среднего значения s[i]=(d[i+1]-d[i])^2/(d[i+1]+d[i]) к единице используется в качестве критерия пуассоновского процесса? Или в качестве необходимого критерия независимости двух одинаково рапределенных сл. величин?


Это первый вопрос.
И второй вопрос связан с применением этого критерия.
Например, возьмем май (т.к. в апреле есть какие-то откровенно кривые данные и по Навальному).

Я тут обработал данные в Excel, отбросил все лишнее и взял данные только за май. И вот что получилось:
Для одного набора данных (в случае с инициативой Навального) получилось среднее значение для s[i] 1.12, а для другого (инициатива промилле) - 5.16.
Важный параметр - кол-во временных 10-минутных интервалов - N=4000 (около того).

Что нам это говорит? Грубо говоря, это просто два значения. И еще N.
Да, 5.16 значительно дальше от 1, чем 1.12.
Но как критерий-то формулируется?
Может быть и значение для инициативы Навального (1.12) недостаточно близко к единице для данного N=4000.

Понимаете мой вопрос?
Хочу увидеть точную формулировку критерия соответствия процесса простому пуассоновскому процессу на основе сравнения среднего значения s[i] с 1.
Это будет необходимый критерий, правильно ли я понимаю?
И, собственно говоря, что именно этот критерий будет проверять? Именно соответствие процесса пуассоновскому или какое-то более слабое утверждение?


Edited at 2013-05-31 02:55 pm (UTC)
(Deleted comment)
(Deleted comment)
(Deleted comment)
Powered by LiveJournal.com