Tworzenie danych „demo” z rzeczywistych danych: maskowanie bez zniekształcania


9

(Nie mam pojęcia, jak to otagować, ponieważ nie jestem statystykiem i nie wiem, do czego to pole. Możesz dodać więcej odpowiednich tagów).

Pracuję dla firmy produkującej oprogramowanie do analizy danych i potrzebujemy przyzwoitego zestawu danych do testowania i demonstrowania naszego najnowszego produktu. Nie możemy po prostu wypełnić bazy danych danymi wyjściowymi generatora liczb losowych, ponieważ wyniki programu stałyby się nonsensowne. Jednym z najprostszych sposobów na uzyskanie takich danych jest klient; mamy duży zbiór danych z przeprowadzonego przez nas procesu. Oczywiście nie możemy opublikować rzeczywistych danych klienta, więc musimy je nieco zmienić, ale nadal musimy zachowywać się jak prawdziwe dane.

Tutaj celem jest pobranie ich zestawu danych i zastosowanie „kłębka”, aby nie można było go rozpoznać jako specjalnie do nich. Moja pamięć teorii statystycznej jest trochę niewyraźna, więc chciałbym to zrobić przez was:

Zasadniczo dane, które mamy (od klienta) same w sobie są próbką wszystkich danych, które istnieją (w kraju lub na świecie). Chciałbym wiedzieć, jaki rodzaj operacji można zastosować, aby próba nie była już silnie reprezentatywna dla populacji próby klienta, przy jednoczesnym zachowaniu jej przybliżonej reprezentatywności dla populacji na świecie.

Dla porównania, o ile wiemy, dane, które mamy na ogół, są zgodne z przybliżonymi rozkładami normalnymi (gaussowskimi).

Oryginalny zestaw danych nie jest powszechnie dostępny, ale teoretycznie można go rozpoznać po niektórych cechach specyficznych dla regionu (nie wiemy, jakie są te cechy, i wątpliwe jest, czy ktoś robi to na wystarczającym poziomie, ale wiemy, że różnice istnieją od miejsca do miejsca). W każdym razie bardziej interesuje mnie teoria niż praktyka - chcę wiedzieć, czy operacja uniemożliwia (lub przynajmniej utrudnia) identyfikację źródłowego zestawu danych za pomocą parametru X, niezależnie od tego, czy ktoś ma, czy nie może, wypracować parametr X w pierwszej kolejności.

Podejście, które wymyśliłem, polega na rozdzieleniu odczytów na różne typy (bez zdradzania, powiedzmy, że grupa może mieć „długość” lub „czas potrzebny na wykonanie X”.) Dla każdego z nich oblicz odchylenie standardowe. Następnie do każdej wartości dodaj losową wartość między dodatnimi i ujemnymi wartościami (n * stddev), gdzie n jest ułamkiem, którego mogę użyć, aby dostroić wynik, aż dane będą wystarczająco „zamglone”. Nie chciałem po prostu stosować zakresu statycznego (powiedzmy, losowy między 90% a 110% pierwotnej wartości), ponieważ niektóre wartości różnią się znacznie bardziej lub mniej niż inne - w niektórych pomiarach 10% powyżej średniej jest ledwo zauważalne , ale w innych sprawia, że ​​jesteś poważnym odstającym.

Czy to wystarczy, aby zamaskować źródło oryginalnych danych? Jeśli nie, to przy pomocy jakich miar statystycznych dane byłyby nadal możliwe do zidentyfikowania i w jaki sposób miałbym je maskować, jednocześnie utrzymując otrzymane dane niejasno realistyczne?


3
W ostatnim komentarzu do powiązanego pytania podałem linki do niektórych artykułów na ten temat dostępnych w Internecie. Linki koncentrują się na ukrywaniu danych spisu powszechnego, ale wiele z nich odnosi się do kwestii ukrywania danych w ogóle.
whuber

Rozsądne może być wskazanie, że w żaden sposób nie jestem statystykiem ani nawet matematykiem. Z zawodu jestem programistą, więc potrafię obsługiwać wyjaśnienia algorytmiczne, ale dziwaczna algebra zamienia mój mózg w kit. Nie musi to być szczególnie rygorystyczne; demonstracje, w których będą wykorzystywane te dane, są na ogół prezentacjami - dziesięć lub dwadzieścia minut jednego z naszych przedstawicieli, którzy grzebią w oprogramowaniu. Jeśli ktoś może wypróbować oprogramowanie przez dłuższy czas, zacznie od umieszczenia w nim własnych danych - nie będzie w stanie dokładnie przeanalizować danych demonstracyjnych.
anaximander

2
Sugeruję zatrudnienie statystyk, którzy już to robili. Nie rób z tego pierwszego rodeo. Nie chcesz być na haju, wykonując okropną robotę, prawda? Zobacz arstechnica.com/tech-policy/2009/09/…
David J.

Odpowiedzi:


2

Istnieje kilka sugestii:

  1. Przekształć w formę bezwymiarową. Jeśli zmienia się od 0 do 1 i nie ma jednostek takich jak furlongi na dwa tygodnie lub tony węgla, trudniej jest to rozpoznać.
  2. Dodaj do niego małą liczbę losową. Kiedy splot gaussa z gaussianem, po prostu dostajesz kolejnego gaussa. Nie zmienia to jego esencji, ale przejście od dokładnych wartości sprawia, że ​​ktoś googluje liczby, aby spróbować dowiedzieć się, co to jest.
  3. Podoba mi się pomysł jego obracania. Możesz zrobić opóźnienie o kilka kroków czasowych, aby utworzyć zestaw danych 2d z zestawu danych 1d. Następnie można użyć PCA lub SVD (po wyśrodkowaniu i skalowaniu), aby określić obrót. Po odpowiednim obróceniu danych zmieniono wariancję i wprowadzono w błąd samą informację. Możesz zgłosić jedną z obróconych osi współrzędnych jako „przykładowe dane”.
  4. Możesz mieszać to z silnie uformowanymi danymi z innego źródła. Więc jeśli przykładowymi danymi są dane giełdowe, możesz dodawać zakłócenia w zależności od pogody lub różnic od średniej wysokości tonu z ulubionej ścieżki dźwiękowej Beatlesów. Bez względu na to, czy ludzie mogą zrozumieć Nasdaq, będą mieli problemy ze zrozumieniem Nasdaq + Beatlesów.

1

Sugerowałbym podejście dwuetapowe. Pierwszym krokiem byłoby próbkowanie z zamianą - podobnie jak w metodzie używanej podczas ładowania. W R, możesz użyć

 newdata = sample(olddata, replace = TRUE)

Masz teraz inny zestaw danych o takich samych właściwościach jak oryginał. Drugim krokiem byłoby dodanie losowej zmiennej wyśrodkowanej wokół zera:

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

Każda zmienna losowa, która jest symetryczna wokół zera, będzie działać, a granice rozkładu nie są ważne.

Na koniec powinieneś mieć zupełnie inny zestaw danych o takich samych właściwościach jak stary zestaw danych.


1
Co masz na myśli „o tych samych właściwościach”? Przynajmniej wariancje i kowariancje będą różne. Jeśli jesteś zainteresowany relacjami między zmiennymi, to naprawdę ważne.
Charlie
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.