A digit doctoring detection package
DrDigit is a digit doctoring detection package at an early stage. Interested in contributing? Please feel free to contact me, e.g. by commenting on the issue "Contributors welcome!" at https://github.com/brezniczky/drdigit/issues/1.
DrDigit requires Python 3.5 or later.
The tests are based on the statistics of digits which are assumed to have a uniform distribution. Near-uniform distributions can be obtained by looking at the last digits of sufficiently large values - such as vote counts (possibly above 100).
On a smaller scale, you can query for the probablity of a digit sequence using probability mass functions represented by Python functions.
There are larger scale tests for a sequence of digit groups. This is so to support situations where different groups are expected to be doctored by different people - testing for an overarching, consistent anomaly could be too strict in such cases.
Based on the current features (entropy, digit repetition, coincident digits in parallel sequences), it is possible to sort a data frame containing digit groups by probability, so then it is possible to inspect if there is any apparent sanity behind the doctoring.
A couple of hints
Handle results with care, there is always some uncertainity
Try to focus on interesting groups, this should yield much sharper results
When committing Kaggle scripts, switch off the on-disk caching of tests before committing, e.g. via
import drdigit as drd drd.set_option(physical_cache_path="")
You can find more about it via
DrDigit can be installed using pip:
$ pip install drdigit-brezniczky $ ipython
Digit entropy behaves a little weirdly when different digit sequence lengths are considered - isn't the sequence 1, 2 as diverse as possible?
Python 3.5.2 (default, Nov 12 2018, 13:43:14) Type 'copyright', 'credits' or 'license' for more information IPython 7.7.0 -- An enhanced Interactive Python. Type '?' for help. In : import drdigit as drd In : help(drd) In : print(drd.get_entropy([1, 2])) 0.6931471805599453 In : print(drd.get_entropy([1, 1, 2, 2])) 0.6931471805599453
Probabilities are often more suited for a comparison:
In : drd.prob_of_entr(2, drd.get_entropy([1, 2])) cdf for 2 was generated Out: 1.0 In : drd.prob_of_entr(4, drd.get_entropy([1, 1, 2, 2])) cdf for 4 was generated Out: 0.0624
Indeed, the latter sequence is unusually repetitive.
More examples to follow, for now you can have a look at the Kaggle notebook at
for instance in the
Some complicated (and - sorry, sometimes unreliabe/slightly outdated) details about the considerations/methodology and future ideas can be found in the Hungarian elections document
The few tests that there are can be run by
For this, I would just use
virtualenvwrapper and do something akin to
$ mkvirtualenv drdigit_test $ pip install -r requirements/requirements_test.txt $ pytest
from the directory of the
Release history Release notifications
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size drdigit_brezniczky-0.0.17-py3-none-any.whl (41.9 kB)||File type Wheel||Python version py3||Upload date||Hashes View hashes|
|Filename, size drdigit-brezniczky-0.0.17.tar.gz (26.2 kB)||File type Source||Python version None||Upload date||Hashes View hashes|
Hashes for drdigit_brezniczky-0.0.17-py3-none-any.whl
Hashes for drdigit-brezniczky-0.0.17.tar.gz