Criando dados "demo" a partir de dados reais: disfarçando sem desfigurar

9

(Não tenho a menor idéia de como marcar isso porque não sou estatístico e não sei em que campo esse campo se enquadra. Sinta-se à vontade para adicionar tags mais adequadas.)

Eu trabalho para uma empresa que produz software de análise de dados e precisamos de um conjunto decente de dados para testar e demonstrar nosso produto mais recente. Não podemos simplesmente preencher o banco de dados com a saída de um gerador de números aleatórios, porque as saídas do programa se tornariam sem sentido. Uma das maneiras mais simples de obter esses dados é de um cliente; temos um grande corpo de dados de um teste que executamos. Agora, obviamente, não podemos publicar os dados reais de um cliente, portanto, precisamos alterá-lo um pouco, mas ainda precisamos que ele se comporte como dados reais.

O objetivo aqui é pegar o conjunto de dados e aplicar um "fuzz" a ele, para que não possa ser reconhecido como especificamente o deles. Minha memória da teoria estatística é um pouco confusa, então eu gostaria de executar isso por vocês:

Essencialmente, os dados que temos (do cliente) são uma amostra de todos os dados que existem (no país ou no mundo). O que eu gostaria de saber é que tipo de operações pode ser aplicada para tornar a amostra não mais fortemente representativa da população da amostra do cliente, mantendo-a aproximadamente representativa da população mundial.

Para referência, até onde sabemos, os dados que temos geralmente seguem distribuições normais aproximadas (gaussianas).

O conjunto de dados original não está amplamente disponível, mas poderia, teoricamente, ser reconhecido a partir de algumas características específicas da região (não sabemos quais são essas características e é duvidoso que alguém o faça a um nível suficiente, mas sabemos que existem variações a partir do local). colocar). De qualquer forma, estou mais interessado na teoria disso do que na prática - quero saber se uma operação torna impossível (ou pelo menos difícil) identificar o conjunto de dados de origem pelo parâmetro X, se alguém tem ou poderia trabalhar parâmetro X em primeiro lugar.

A abordagem que eu propus é separar as leituras nos vários tipos (sem revelar muito, digamos que um grupo possa ter "duração" ou "tempo necessário para executar o X"). Para cada um deles, calcule o desvio padrão. Em seguida, para cada valor, adicione um valor aleatório entre os valores positivos e negativos de (n * stddev), em que n é uma fração que posso usar para ajustar o resultado até que os dados sejam suficientemente "distorcidos". Eu não queria simplesmente aplicar um intervalo estático (digamos, aleatório entre 90% e 110% do valor original) porque alguns valores variam muito mais ou menos que outros - em algumas medições, 10% acima da média é quase imperceptível , mas em outros, faz de você um sério discrepante.

Isso é suficiente para mascarar a fonte dos dados originais? Caso contrário, por quais medidas estatísticas os dados ainda seriam identificáveis ​​e como eu os mascararia, mantendo os dados resultantes vagamente realistas?

anaximander
fonte
3
Em um comentário recente a uma pergunta relacionada , forneci links para alguns documentos de pesquisa sobre esse assunto, disponíveis on-line. Os links se concentram em disfarçar os dados do Censo, mas muitos deles abordam as questões de disfarçar os dados em geral.
whuber
Pode ser prudente ressaltar que não sou de forma alguma um estatístico ou mesmo um matemático. Sou um programador de profissão, por isso posso lidar com explicações algorítmicas, mas a álgebra estranha transforma meu cérebro em massa. Além disso, isso não precisa ser particularmente rigoroso; as demonstrações em que esses dados serão usados ​​são geralmente apresentações - dez ou vinte minutos de um de nossos representantes bisbilhotando no software. Se alguém puder testar o software por um período prolongado, começará a colocar seus próprios dados nele - não conseguirá realmente examinar os dados da demonstração.
Anaximander 21/03
2
Eu sugiro contratar um estatístico que já fez isso antes. Não faça deste o seu primeiro rodeio. Você não quer ficar de fora por fazer um trabalho terrível nisso, não é? Veja arstechnica.com/tech-policy/2009/09/…
David J.

Respostas:

2

Existem algumas sugestões:

  1. Converta-o em forma adimensional. Se vai de 0 a 1 e não possui unidades como furlongs por quinzena ou toneladas de carvão anexadas, é mais difícil reconhecer.
  2. Adicione um pequeno número aleatório a ele. Quando você convoluta um gaussiano com um gaussiano, você apenas recebe outro gaussiano. Isso não muda a essência disso, mas passar de valores exatos mantém alguém pesquisando números para tentar descobrir o que é.
  3. Eu gosto da ideia de girar. Você pode demorar algumas etapas para criar um conjunto de dados 2D a partir do conjunto de dados 2D. Você pode usar o PCA ou SVD (após centralizar e dimensionar) para determinar uma rotação. Depois que os dados são rotacionados adequadamente, você alterou a variação e confundiu as informações em si. Você pode relatar um dos eixos de coordenadas rotacionados como "dados de amostra".
  4. Você pode misturá-lo com dados fortemente formados de alguma outra fonte. Portanto, se seus dados de amostra são do mercado de ações, você pode adicionar perturbações com base no clima ou nas variações da média de afinação da sua trilha sonora favorita dos Beatles. Independentemente de as pessoas entenderem ou não o Nasdaq, elas terão problemas para entender o Nasdaq + Beatles.
EngrStudent
fonte
1

Eu sugeriria uma abordagem em duas etapas. O primeiro passo seria a amostragem com substituição - semelhante ao método usado no bootstrap. Em R, você poderia usar

 newdata = sample(olddata, replace = TRUE)

Agora você tem um conjunto de dados diferente com as mesmas propriedades que o original. O segundo passo seria adicionar uma variável aleatória centralizada em torno de zero:

 newdata = newdata + runif(1, min = -10, max = 10)

Qualquer variável aleatória simétrica em torno de zero funcionará e os limites da distribuição não são importantes.

No final, você deve ter um conjunto de dados completamente diferente com as mesmas propriedades que o conjunto de dados antigo.

wcampbell
fonte
11
O que você quer dizer com "mesmas propriedades"? No mínimo, variações e covariâncias serão diferentes. Se você está interessado em relacionamentos entre variáveis, isso é realmente importante.
31713 Charlie