benford.analysis 0.1


O pacote benford.analysis (versão 0.1) está disponível no CRAN e você já pode instalar no R com o comando:

 install.packages("benford.analysis") 

O objetivo do pacote é prover algumas funções que facilitem a validação de dados utilizando a Lei de Benford (para saber mais sobre a lei, veja aqui e aqui).

Validar como e para quê?

Um dos objetivos pode ser o auxilío na detecção de manipulações contábeis. Dados financeiros (como pagamentos) tendem a seguir a Lei de Benford e tentativas de manipulação podem acabar sendo identificadas.

Por exemplo, a lei 8.666/93 estabelece que o limite para se fazer uma licitação na modalidade convite é de R$80.000,00. Será que os valores de licitações seguiriam a Lei de Benford? Pode ser que sim. E, caso haja a tendência, uma tentativa de manipular artificialmente valores licitados para algo pouco abaixo de R$80 mil geraria um “excesso” de dígitos iniciais 7. Restaria verificar uma amostra desses registros para confirmar a existência ou não de manipulação indevida.

Outro objetivo pode ser acadêmico: a validação de dados de pesquisas e censos. Por exemplo, dados de população de municípios, ou dados de renda dos indivíduos tendem a ter distribuição conforme a lei de Benford. Assim, desvios dos valores observados em relação aos valores esperados podem ajudar a identificar e corrigir dados anômalos, melhorando a qualidade da estatística.

Vejamos rapidamente alguns exemplos das funções básicas do pacote.

O benford.analysis tem 6 bases de dados reais, retiradas do livro do Mark Nigrini, para ilustrar as análises. Aqui vamos utilizar 189.470 registros de pagamentos de uma empresa no ano de 2010. Os valores vão desde lançamentos negativos (estornos) até valores na ordem de milhões de dólares.

Primeiramente, precisamos carregar o pacote (se você já o tiver instalado) e em seguida carregar os dados de exemplo:

library(benford.analysis) #carrega pacote

data(corporate.payment) #carrega dados

Para analisar os dados contra a lei de benford, basta aplicar a função benford nos valores que, no nosso caso, estão na coluna ‘Amount’.

 bfd.cp <- benford(corporate.payment$Amount)

Com o comando acima criamos um objeto chamado “bfd.cp” contendo os resultados da análise para os dois primeiros dígitos dos lançamentos positivos, que é o padrão. Caso queira, você também pode mudar quantos digitos deseja analisar, ou se quer analisar os dados negativos e positivos juntos, entre outras opções Para mais detalhes, veja a ajuda da função:

 ?benford

Com a análise feita, vejamos os principais gráficos com o comando:

 plot(bfd.cp) 

Os gráficos resultantes se encontram abaixo. Os dados da empresa estão em azul e os valores esperados pela lei de benford em vermelho.

plot_cp

O primeiro gráfico diz respeito à contagem de observações com relação aos seus dois primeiros dígitos, comparando-a com o valor esperado pela Lei de Benford.  Percebe-se que os dados da empresa se ajustam à Lei, mas, também, que há um salto claro no dígito 50!

O segundo gráfico é análogo ao primeiro, mas faz esta contagem para a diferença dos dados ordenados. Como nossos dados são discretos, este saltos em 10, 20, 30,  são naturais e não devem ser encarados como algo suspeito. Por fim, o terceiro gráfico tem um objetivo diferente e, em geral, você também não deve esperar encontrar um bom ajuste dos dados à reta vermelha, principalmente com dados de cauda pesada. Ali se encontra a soma dos valores das observações agrupadas por primeiros dígitos e a  intenção é identificar grupos de valores influentes (que, se estiverem errados, podem afetar bastante uma estatística).

Vejamos agora os principais resultados da análise com o comando

 print(bfd.cp) 

ou somente

bfd.cp

results_cp

Primeiramente são mostrados dados gerais da análise, como o nome da base de dados, o número de observações e a quantidade de primeiros dígitos analisados.

Logo em seguida têm-se as principais estatísticas da mantissa do log das observações. Se um conjunto de dados segue a lei de benford esses valores deveriam ser próximos de:

  • média: 0.5;
  • variância: 1/12 (0.08333…);
  • curtose: 1.2;
  • assimetria: 0.

Que são, de fato, similares aos dados de pagamento da empresa, confirmando a tendência.

Após isso, temos um ranking com os 5 maiores desvios, que é o que mais nos interessa aqui. Veja que o primeiro grupo é o dos números que começam com o dígito 50, como estava claro no gráfico, e o segundo grupo é o dos números que começam com 11. Esses registros são bons candidatos para uma análise mais minuciosa.

Por fim, temos um conjunto de estatísticas de grau de ajuste – que não irei detalhar agora para não prolongar muito este post. Tomemos como exemplo o teste de Pearson, que é bem conhecido. Veja que o p-valor do qui-quadrado é praticamente zero, sinalizando um desvio em relação ao esperado. Mas, como já dissemos várias vezes neste blog, o mais importante não é saber se os dados seguem ou não a lei de benford exatamente. Para isso você não precisaria sequer testá-los. O mais importante é verificar qual o tamanho do desvio e a sua importância prática. Assim, há um pequeno aviso ao final: Real data will never conform perfectly to Benford’s Law. You should not focus on p-values!

Voltando, portanto, à identificação dos desvios, você pode pegar os conjuntos dos dados “suspeitos” para análise com a função getSuspects.

 suspeitos <- getSuspects(bfd.cp, corporate.payment)

Isto irá gerar uma tabela com os dados dos 2 grupos de dígitos com maior discrepância (pela diferença absoluta), conforme ilustrado abaixo. Veja que são exatamente os dados que começam com 50 ou 11. Você pode personalizar qual a métrica de discrepância utilizar e também quantos grupos analisar. Para mais detalhes veja a ajuda da função:

 ?getSuspects

suspects

Note que nossa base de dados é de mais de 189 mil observações. Verificar todos os dados seria infactível. Poderíamos analisar uma amostra aleatória desses dados. Mas, não necessariamente isso seria eficiente.  Veja, assim, que a análise de benford, com apenas os dois primeiros dígitos, nos deu um grupo de dados suspeitos com menos de 10% das observações, permitindo um foco mais restrito e talvez mais efetivo para análise.

Há outras funcionalidades no pacote e na ajuda há exemplos com dados reais. O pacote é bem simples, o intuito é fornecer um mínimo de funções que automatize os procedimentos, facilite a vida e minimize a quantidade de caracteres digitados de quem queira fazer a análise. Algumas funcionalidades que serão adicionadas no futuro são: melhoria na parte gráfica com o Lattice, inclusão de comparação dos dados com a lognormal e inclusão de mais dados de exemplo.

Se encotrar algum bug, tiver alguma dúvida ou se quiser deixar alguma sugestão, comente aqui!

PS: com relação às sugestões, tanto o R quanto este pacote são livres e com código aberto. Então, sinta-se à vontade não somente para sugerir, mas principalmente para escrever novas funções e funcionalidades!

Lei de Benford – por que ela surge?


No post anterior falamos da Lei de Benford e que ela surge naturalmente em diversos fenômenos do mundo real, inclusive em dados contábeis e econômicos. Mas não explicamos o porquê. Aqui traremos duas explicações.  A primeira, bastante intuitiva, é pensar que estes dados tem crescimento exponencial. Por exemplo, na economia (brasileira), variáveis como o PIB real e os preços crescem entre 2% e 6% ao ano, respectivamente. E como o crescimento exponencial levaria à Lei de Benford?

Suponha que o valor inicial de uma variável seja 10 e que ela tenha uma taxa de crescimento de 10% por período. Veja que, ao crescer exponencialmente, a variável vai demorar 7 períodos para chegar na casa dos 20’s. Todavia, após chegar no 20, ela cresce mais rapidamente, e leva apenas 4 períodos para chegar na casa dos 30’s. Note que esta variável irá ficar apenas um período na casa dos 90’s, para logo em seguida passar mais 7 períodos nos 100’s (e com primeiro digito 1). Parece condizer com a Lei.

Para verificar, façamos uma simulação, com uma variável que cresça 3% por período. Após 2000 períodos, a distribuição dos dígitos da série segue muito aproximadamente a Lei de Benford (como a amostra é grande, no gráfico utilizamos a distribuição dos dois primeiros dígitos, que tem maior capacidade de discriminação do que apenas a distribuição do primeiro dígito).

cresc_benfordAlém do crescimento exponencial, existe, ainda, uma razão mais convincente. Dados contábeis e econômicos também são, em geral, fruto da multiplicação de diversos números. Para saber o valor da produção,por exemplo, multiplicam-se quantidades e preços. E ocorre que a multiplicação de distribuições contínuas tem como distribuição limite um conjunto  de Benford. Façamos uma simulação com distribuições normal – N(10,10) – qui-quadrado – Q(3) e uniforme – U(0,1).

Perceba que elas, separadamente, não seguem a Lei.  Primeiro, a normal:

norm_benford

Agora a Qui-Quadrado:

qui_benford

E a Uniforme:

unif_benford

Entretanto, ao multiplicarmos as 3, eis que surge a distribuição dos dígitos!

mult_benford

Sobre a acurácia das variáveis econômicas II


Em post anterior tratamos da importância de se conhecer bem as variáveis com que se trabalha. Muitas vezes o economista utiliza dados que, por sua dificuldade de mensuração, são estimados por terceiros (IBGE, Banco Central, Tesouro Nacional etc). Assim, há uma tendência a se saber muito pouco sobre como esses dados são produzidos na prática e, sem entender quais suas limitações e quais seus pontos fortes, se esquece de tratá-los devidamente como estimativas.

Neste sentido, gostei muito de ver que outros blogs tem compartilhado desta mesma preocupação.

Dave Giles, por exemplo, resume algumas verdades importantes sobre dados oficiais, que são comumente esquecidas:

  • Dados são revisados o tempo inteiro: o número que saiu ontem do PIB pode mudar drasticamente amanhã.
  • Dados somem: eu já enfrentei isso com uma série de horas de trabalho que estava disponível no IPEA Data e que, alguns meses depois, simplesmente foi descontinuada e excluída.
  • As definições e metodologia mudam: por exemplo, a metodologia do Censo de Capitais Estrangeiros no País mudou recentemente. O usuário tem que ter isto em mente e não pode simplesmente comparar um dado com outro sem ajustes.
  • Os dados oficiais são estimativas: sobre isso tratamos no post anterior!

Dave Giles também recomendou alguns papers sobre o assunto e tratou de um interessante relatório sobre a qualidade dos dados chineses, aspecto fundamental para quem analisa aquela economia.

Já Mark Thoma começou a se dar conta do problema ao ler a notícia de que o IBGE americano está incorporando novos aspectos às contas nacionais que, simplesmente, podem “reescrever a história econômica”. Você já parou para se perguntar quantos “fatos estilizados” que conhecemos, como, por exemplo, a semi-estagnação de algumas economias desenvolvidas, podem (ou não) ser fruto da adoção de uma ou outra metodologia? Em posts futuros trarei exemplos interessantes de dados oficiais que são estimativas, mas agora queria tratar sobre aspectos que norteiam a discussão sobre a qualidade dos dados.

Sobre este quesito, o FMI tem um site inteiramente dedicado ao assunto: o Data Quality Reference Site. Trata-se de um louvável esforço para promover a agenda de pesquisa sobre a qualidade dos dados (macro)econômicos. O Fundo criou um interessante marco para a avaliação da qualidade – em um aspecto ainda qualitativo e não quantitativo – dividido em 6 dimensões:

0 – Condições Prévias: busca verificar alguns aspectos institucionais para a produção do dado, como o entorno jurídico e a quantidade de recursos disponível;

1 – Garantias de Integridade: avalia aspectos como o profissionalismo, a transparência e as normas éticas da produção;

2 – Rigor Metodológico: inspeciona se os conceitos e definições adotados estão conformes ao padrão internacional, se o alcance da pesquisa é suficiente, se as categorizações são adequadas;

3 – Acurácia e Confiança: verificam a adequação das fontes de dados utilizadas, se há um processo de avaliação, validação e revisão dos dados, se as técnicas estatísticas são sólidas;

4 – Utilidade para o Usuário: trata de questões de periodicidade, pontualidade, consistência e revisão;

5 – Acesso: aborda questões de acesso aos dado, acesso aos metadados (isso é, aos dados sobre como os dados foram produzidos) e assistência aos usuários.

O ideal seria termos, também, uma noção quantitativa do erro, mas este esforço já é um grande passo. Você pode encontrar o detalhamento destes pontos para contas nacionais, contas externas, finanças públicas, índices de preço, entre outros, em seu respectivo Data Quality Assessment Framework.

Você, que já trabalhou ou pretende trabalhar com dados em painel, comparando diversos países, já teve a curiosidade de se perguntar sobre a diferente qualidade dos dados que está misturando?

Para alguns países, é possível fazer isso analisando o seu Report on the Observance of Standards and Codes (mais conhecido como ROSC) sobre dados. Tomando o caso do Chile como exemplo, que possui um ROSC para dados no ano de 2007, seria possível descobrir que havia sérios problemas no escopo da pesquisa de índices de preços, e que havia propostas para solucionar a questão em dezembro de 2008. Perceba que, para quem trabalha com dados de preços chilenos antes de 2007, esta é uma informação fundamental!