@ agnasg

agnasg


Benford’s Law

01-05-2011 1:24 PM

A veces cuando estoy realmente procrastinador (es decir, no quiero hacer lo que tengo que hacer, por ejemplo, terminar la nueva imagen de mi compañía smnpservicios.com) me pongo a jugar con mis pasatiempos. Por ejemplo, la ley de Benford. Esta ley dice que en una gran colección de datos, podemos esperar que los números que comienzan con 1 tendrán un frecuencia del 30%, mientras los números que comienzan por 9 apenas los encontraremos un 5% de las veces. Suena contraintuitivo pero es así. ¿Para qué sirve esto? Pues si analizamos un conjunto de datos (por ejemplo un informe bancario o cualquier otros informe que incluya estadísticas) podemos sospechar que está maquillado si los númros no cumplen con la ley. Encontré este script escrito en PHP que calcula la frecuencia de los dígitos en un conjunto de datos y estuve probándolo sobre archivos SQL que contienen precios de productos en algunos de los sitios web que he desarrollado ultimanente (gadgetize.co.za por ejemplo). ¿Resultado? ¡La ley se cumple perfectamente!

Aqui está el script tomado de aqui sin permiso:

$fh = fopen("data.txt", 'r');
$score = array();
$total = 0;
$nums = range(1, 9);
// Count up appearances of digits
while($data = fgets($fh)) {
        $total++;
        $digit = substr(trim($data), 0, 1);
        if(!in_array($digit, $nums)) {
                continue;
        }
        if(!isset($score[$digit])) {
                $score[$digit] = 0;
        }
        $score[$digit]++;
}
arsort($score);
echo "# - Data  - Benford", PHP_EOL;
foreach($score as $digit => $count) {
        echo    "$digit - ",
                number_format($count/$total, 3),
                " - ",
                number_format(benford($digit), 3),
                PHP_EOL;
}

Bien, voy a regresar a smnpservicios.com… pero antes voy a ver cómo va mi juego destellos de oscuridad… estoy ansioso de terminarlo. Apenas lleva 7 años en desarrollo