Création de données «démo» à partir de données réelles: déguiser sans défigurer


9

(Je ne sais pas vraiment avec quoi étiqueter cela parce que je ne suis pas un statisticien et je ne sais pas dans quel domaine cela se situe. N'hésitez pas à ajouter des étiquettes plus appropriées.)

Je travaille pour une entreprise qui produit un logiciel d'analyse de données, et nous avons besoin d'un ensemble de données décent pour tester et faire la démonstration de notre dernier produit. Nous ne pouvons pas simplement remplir la base de données avec la sortie d'un générateur de nombres aléatoires car les sorties du programme deviendraient absurdes. L'un des moyens les plus simples d'obtenir de telles données est à partir d'un client; nous avons un grand nombre de données provenant d'un essai que nous avons mené. Maintenant, évidemment, nous ne pouvons pas publier les données réelles d'un client, nous devons donc les modifier un peu, mais nous en avons toujours besoin pour se comporter comme de vraies données.

Le but ici est de prendre leur ensemble de données, et d'y appliquer un "fuzz" afin qu'il ne puisse pas être reconnu comme spécifiquement le leur. Ma mémoire de la théorie statistique est elle-même un peu floue, donc j'aimerais faire ça par vous les gars:

Essentiellement, les données que nous avons (du client) sont elles-mêmes un échantillon de toutes les données qui existent (dans le pays ou dans le monde). Ce que j'aimerais savoir, c'est quel type d'opérations peut être appliqué pour que l'échantillon ne soit plus fortement représentatif de la population de l'échantillon du client, tout en le gardant à peu près représentatif de la population mondiale.

Pour référence, pour autant que nous sachions, les données que nous avons suivent généralement des distributions normales (gaussiennes) approximatives.

L'ensemble de données d'origine n'est pas largement disponible, mais pourrait théoriquement être reconnu à partir de certaines caractéristiques régionales (nous ne savons pas quelles sont ces caractéristiques, et il est douteux que quelqu'un le fasse à un niveau suffisant, mais nous savons que des variations existent d'un endroit à l'autre) placer). Quoi qu'il en soit, je suis plus intéressé par la théorie que par la pratique - je veux savoir si une opération rend impossible (ou du moins difficile) d'identifier l'ensemble de données source par le paramètre X, que quelqu'un ait ou puisse travailler paramètre X en premier lieu.

L'approche que j'ai trouvée consiste à séparer les lectures en différents types, (sans en dire beaucoup, disons qu'un groupe peut être «longueur» ou «temps nécessaire pour faire X».) Pour chacun d'entre eux, calculez le écart-type. Ensuite, à chaque valeur, ajoutez une valeur aléatoire entre les valeurs positives et négatives de (n * stddev) où n est une fraction que je peux utiliser pour régler le résultat jusqu'à ce que les données soient suffisamment "floues". Je ne voulais pas simplement appliquer une plage statique (disons aléatoire entre 90% et 110% de la valeur d'origine) parce que certaines valeurs varient beaucoup plus ou moins que d'autres - dans certaines mesures, être 10% au-dessus de la moyenne est à peine perceptible , mais dans d'autres, cela fait de vous une valeur aberrante grave.

Est-ce suffisant pour masquer la source des données d'origine? Sinon, par quelles mesures statistiques les données seraient-elles toujours identifiables et comment les masquerais-je tout en gardant les données résultantes vaguement réalistes?


3
Dans un commentaire récent à une question connexe , j'ai fourni des liens vers certains documents d'enquête sur ce sujet qui sont disponibles en ligne. Les liens se concentrent sur le déguisement des données du recensement, mais beaucoup d'entre eux abordent les questions de déguisement des données en général.
whuber

Il peut être prudent de souligner que je ne suis en aucun cas un statisticien ou même un mathématicien. Je suis programmeur de métier, donc je peux gérer des explications algorithmiques mais l'algèbre bizarre transforme mon cerveau en mastic. De plus, cela n'a pas particulièrement besoin d'être extrêmement rigoureux; les démonstrations où ces données seront utilisées sont généralement des présentations - dix ou vingt minutes d'un de nos représentants fouillant dans le logiciel. Si quelqu'un est autorisé à tester le logiciel pendant une période prolongée, il commencera par y mettre ses propres données - il ne pourra pas vraiment examiner les données de démonstration.
anaximander

2
Je suggère d'embaucher un statisticien qui l'a déjà fait. Ne faites pas de cela votre premier rodéo. Vous ne voulez pas être accroché pour faire un travail terrible à ce sujet, n'est-ce pas? Voir arstechnica.com/tech-policy/2009/09/…
David J.

Réponses:


2

Il y a quelques suggestions:

  1. Convertissez-le en forme sans dimension. S'il passe de 0 à 1 et n'a pas d'unités comme des stades par quinzaine ou des tonnes de charbon attachées, il est plus difficile à reconnaître.
  2. Ajoutez-y un petit nombre aléatoire. Lorsque vous alambiquez un gaussien avec un gaussien, vous obtenez simplement un autre gaussien. Cela ne change pas l'essentiel de cela, mais le fait de passer des valeurs exactes permet à quelqu'un de googler les nombres pour essayer de comprendre de quoi il s'agit.
  3. J'aime l'idée de le faire tourner. Vous pouvez prendre un certain nombre de pas de temps pour créer un ensemble de données 2D à partir de l'ensemble de données 1D. Vous pouvez ensuite utiliser PCA ou SVD (après centrage et mise à l'échelle) pour déterminer une rotation. Une fois que les données ont subi une rotation appropriée, vous avez modifié l'écart et confondu les informations en elles-mêmes. Vous pouvez signaler l'un des axes de coordonnées pivotés en tant que "données d'échantillon".
  4. Vous pouvez le mélanger avec des données fortement formées d'une autre source. Donc, si vos données d'échantillonnage sont des données boursières, vous pouvez ajouter des perturbations en fonction de la météo ou des variations de la moyenne de la hauteur de votre bande sonore préférée des Beatles. Que les gens puissent ou non comprendre le Nasdaq, ils auront du mal à comprendre le Nasdaq + Beatles.

1

Je proposerais une approche en deux étapes. La première étape serait l'échantillonnage avec remplacement - similaire à la méthode utilisée dans le bootstrap. Dans R, vous pouvez utiliser

 newdata = sample(olddata, replace = TRUE)

Vous avez maintenant un ensemble de données différent avec les mêmes propriétés que l'original. La deuxième étape serait d'ajouter une variable aléatoire centrée autour de zéro:

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

Toute variable aléatoire symétrique autour de zéro fonctionnera et les limites de la distribution ne sont pas importantes.

À la fin, vous devriez avoir un ensemble de données complètement différent avec les mêmes propriétés que l'ancien ensemble de données.


1
Que voulez-vous dire "avec les mêmes propriétés"? À tout le moins, les variances et les covariances seront différentes. Si vous êtes intéressé par les relations entre les variables, c'est vraiment important.
Charlie
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.