Erstellen von Demodaten aus realen Daten: Verkleidung ohne Entstellung

9

(Ich habe keine wirkliche Ahnung, womit ich das markieren soll, da ich kein Statistiker bin und nicht weiß, in welches Feld dies fällt. Sie können gerne weitere geeignete Tags hinzufügen.)

Ich arbeite für ein Unternehmen, das Datenanalyse-Software herstellt, und wir benötigen einen anständigen Datensatz, um unser neuestes Produkt mit zu testen und zu testen. Wir können die Datenbank nicht einfach mit der Ausgabe eines Zufallszahlengenerators füllen, da die Ausgaben des Programms unsinnig werden würden. Eine der einfachsten Möglichkeiten, solche Daten abzurufen, ist von einem Client. Wir haben eine große Datenmenge aus einem von uns durchgeführten Test. Natürlich können wir die tatsächlichen Daten eines Kunden nicht veröffentlichen, daher müssen wir sie ein wenig ändern, aber wir brauchen sie immer noch, um uns wie echte Daten zu verhalten.

Das Ziel hier ist es, ihren Datensatz zu nehmen und einen "Fuzz" darauf anzuwenden, so dass er nicht als spezifisch ihrer erkannt werden kann. Meine Erinnerung an die statistische Theorie ist selbst ein wenig verschwommen, deshalb möchte ich dies von euch ausführen lassen:

Im Wesentlichen sind die Daten, die wir (vom Kunden) haben, selbst eine Stichprobe aller vorhandenen Daten (im Land oder auf der Welt). Was ich wissen möchte, ist, welche Art von Operationen angewendet werden können, um die Stichprobe nicht mehr stark repräsentativ für die Stichprobenpopulation des Kunden zu machen, während sie dennoch ungefähr repräsentativ für die Weltbevölkerung bleibt.

Als Referenz folgen die uns vorliegenden Daten im Allgemeinen groben Normalverteilungen (Gaußschen).

Der ursprüngliche Datensatz ist nicht weit verbreitet, könnte aber theoretisch anhand einiger regional spezifischer Merkmale erkannt werden (wir wissen nicht, was diese Merkmale sind, und es ist zweifelhaft, ob jemand dies in ausreichendem Maße tut, aber wir wissen, dass Abweichungen von Ort zu Ort bestehen hinstellen). Wie auch immer, ich interessiere mich mehr für die Theorie als für die Praxis - ich möchte wissen, ob eine Operation es unmöglich (oder zumindest schwierig) macht, den Quelldatensatz anhand von Parameter X zu identifizieren, ob jemand hat oder arbeiten könnte oder nicht Parameter X an erster Stelle.

Der Ansatz, den ich mir ausgedacht habe, besteht darin, die Messwerte in die verschiedenen Typen zu unterteilen (ohne viel preiszugeben, nehmen wir an, eine Gruppe könnte "Länge" oder "Zeit, die für X benötigt wird" sein.) Berechnen Sie für jeden dieser Werte die Standardabweichung. Fügen Sie dann zu jedem Wert einen zufälligen Wert zwischen den positiven und negativen Werten von (n * stddev) hinzu, wobei n ein Bruchteil ist, mit dem ich das Ergebnis optimieren kann, bis die Daten ausreichend "unscharf" sind. Ich wollte nicht einfach einen statischen Bereich anwenden (z. B. zufällig zwischen 90% und 110% des ursprünglichen Werts), da einige Werte viel mehr oder weniger variieren als andere - bei einigen Messungen ist es kaum wahrnehmbar, 10% über dem Mittelwert zu liegen , aber in anderen macht es Sie zu einem ernsthaften Ausreißer.

Reicht dies aus, um die Quelle der Originaldaten zu maskieren? Wenn nicht, durch welche statistischen Maßnahmen wären die Daten noch identifizierbar, und wie würde ich diese maskieren, während die resultierenden Daten noch vage realistisch bleiben?

Anaximander
quelle
3
In einem kürzlich veröffentlichten Kommentar zu einer verwandten Frage habe ich Links zu einigen Umfragepapieren zu diesem Thema bereitgestellt, die online verfügbar sind. Die Links konzentrieren sich auf die Verschleierung von Volkszählungsdaten, aber viele von ihnen befassen sich mit den Fragen der Verschleierung von Daten im Allgemeinen.
whuber
Es mag klug sein, darauf hinzuweisen, dass ich in keiner Weise ein Statistiker oder sogar ein Mathematiker bin. Ich bin von Beruf Programmierer, daher kann ich mit algorithmischen Erklärungen umgehen, aber die ausgefallene Algebra verwandelt mein Gehirn in Kitt. Auch muss dies nicht besonders streng sein; Die Demonstrationen, bei denen diese Daten verwendet werden, sind in der Regel Präsentationen - zehn oder zwanzig Minuten, in denen einer unserer Mitarbeiter in der Software herumstochert. Wenn jemand die Software über einen längeren Zeitraum testen darf, beginnt er damit, seine eigenen Daten darin abzulegen - er kann die Demo-Daten nicht wirklich überprüfen.
Anaximander
2
Ich würde vorschlagen, einen Statistiker einzustellen, der dies bereits getan hat. Mach das nicht zu deinem ersten Rodeo. Du willst doch nicht auf dem Haken sein, um einen schrecklichen Job zu machen, oder? Siehe arstechnica.com/tech-policy/2009/09/…
David J.

Antworten:

2

Es gibt einige Vorschläge:

  1. Konvertieren Sie es in dimensionslose Form. Wenn es von 0 auf 1 geht und keine Einheiten wie Furlong pro zwei Wochen oder Tonnen Kohle angeschlossen sind, ist es schwieriger zu erkennen.
  2. Fügen Sie eine kleine Zufallszahl hinzu. Wenn Sie einen Gaußschen mit einem Gaußschen verschachteln, erhalten Sie nur einen weiteren Gaußschen. Es ändert nichts an der Essenz, aber wenn man von exakten Werten abweicht, googelt jemand Zahlen, um herauszufinden, was es ist.
  3. Ich mag die Idee, es zu drehen. Sie können einige Zeitschritte verzögern, um einen 2D-Datensatz aus dem 1D-Datensatz zu erstellen. Sie können dann PCA oder SVD (nach dem Zentrieren und Skalieren) verwenden, um eine Drehung zu bestimmen. Sobald die Daten entsprechend gedreht wurden, haben Sie die Varianz geändert und die Informationen an sich verwechselt. Sie können eine der gedrehten Koordinatenachsen als "Beispieldaten" melden.
  4. Sie können es mit stark geformten Daten aus einer anderen Quelle mischen. Wenn es sich bei Ihren Beispieldaten um Börsendaten handelt, können Sie Störungen hinzufügen, die auf dem Wetter oder den Abweichungen vom Mittelwert der Tonhöhe Ihres Lieblingssoundtracks der Beatles basieren. Unabhängig davon, ob Menschen Nasdaq verstehen können oder nicht, werden sie Schwierigkeiten haben, Nasdaq + Beatles zu verstehen.
EngrStudent
quelle
1

Ich würde einen zweistufigen Ansatz vorschlagen. Der erste Schritt wäre das Abtasten mit Ersetzen - ähnlich der beim Bootstrapping verwendeten Methode. In Rkönnten Sie verwenden

 newdata = sample(olddata, replace = TRUE)

Sie haben jetzt einen anderen Datensatz mit denselben Eigenschaften wie das Original. Der zweite Schritt wäre das Hinzufügen einer Zufallsvariablen, die um Null zentriert ist:

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

Jede Zufallsvariable, die um Null symmetrisch ist, funktioniert und die Grenzen der Verteilung sind nicht wichtig.

Am Ende sollten Sie einen völlig anderen Datensatz mit denselben Eigenschaften wie der alte Datensatz haben.

wcampbell
quelle
1
Was meinst du mit "mit den gleichen Eigenschaften"? Zumindest werden Varianzen und Kovarianzen unterschiedlich sein. Wenn Sie an Beziehungen zwischen Variablen interessiert sind, ist das wirklich wichtig.
Charlie