Создание «демо» данных из реальных данных: маскировка без уродства


9

(Я понятия не имею, с чем это пометить, потому что я не статистик и не знаю, к какому полю это относится. Не стесняйтесь добавлять более подходящие теги.)

Я работаю в компании, которая производит программное обеспечение для анализа данных, и нам нужен приличный набор данных для тестирования и демонстрации нашего последнего продукта. Мы не можем просто заполнить базу данных выводом генератора случайных чисел, потому что вывод программы станет бессмысленным. Один из самых простых способов получить такие данные от клиента; у нас есть большое количество данных из испытания, которое мы провели. Очевидно, что мы не можем публиковать фактические данные клиента, поэтому нам нужно немного их изменить, но нам все равно нужно, чтобы они вели себя как реальные данные.

Цель здесь состоит в том, чтобы взять их набор данных и применить к ним «fuzz», чтобы они не могли быть распознаны как их особые. Моя память о статистической теории сама по себе немного размыта, поэтому я хотел бы показать вам это, ребята:

По сути, данные, которые мы имеем (от клиента), сами по себе являются образцом всех данных, которые существуют (в стране или мире). Что я хотел бы знать, так это то, какой тип операций можно применить, чтобы сделать выборку более не репрезентативной для выборочной совокупности клиента, в то же время сохраняя ее примерно представительной для населения мира.

Для справки, насколько нам известно, данные, которые мы имеем, обычно соответствуют грубым нормальным (гауссовым) распределениям.

Исходный набор данных не является широко доступным, но теоретически его можно узнать по некоторым регионально-специфическим характеристикам (мы не знаем, что это за характеристики, и сомнительно, что кто-то делает до достаточного уровня, но мы знаем, что различия существуют с места разместить). В любом случае, меня больше интересует теория этого, чем практика - я хочу знать, делает ли операция невозможным (или, по крайней мере, трудным) идентифицировать исходный набор данных по параметру X, независимо от того, есть у кого-то это или нет. параметр X на первом месте.

Подход, который я придумал, состоит в том, чтобы разделить показания на различные типы (не отдавая много, скажем, группа может быть «длиной» или «временем, затраченным на выполнение X».) Для каждого из них вычислите среднеквадратичное отклонение. Затем к каждому значению добавьте случайное значение между положительными и отрицательными значениями (n * stddev), где n - некоторая дробь, которую я могу использовать для настройки результата до тех пор, пока данные не будут достаточно «размыты». Я не хотел просто применять статический диапазон (скажем, случайный между 90% и 110% от исходного значения), потому что некоторые значения изменяются намного больше или меньше, чем другие - в некоторых измерениях, превышение среднего на 10% едва заметно , но в других это делает вас серьезным выбросом.

Достаточно ли этого для маскировки источника исходных данных? Если нет, то по каким статистическим показателям данные все еще можно будет идентифицировать, и как бы я их замаскировал, сохраняя при этом результирующие данные неопределенно реалистичными?


3
В недавнем комментарии к связанному вопросу я предоставил ссылки на некоторые исследовательские работы на эту тему, которые доступны в Интернете. Ссылки нацелены на маскировку данных переписи, но многие из них посвящены вопросам маскировки данных в целом.
whuber

Может быть разумно указать, что я ни в коем случае не статистик или даже математик. По профессии я программист, поэтому я могу справляться с алгоритмическими объяснениями, но диковинная алгебра превращает мой мозг в замазку. Кроме того, это не должно быть особенно строгим; демонстрации, где эти данные будут использоваться, - это, как правило, презентации - десять или двадцать минут, когда один из наших представителей ковырялся в программном обеспечении. Если кому-то разрешено испытывать программное обеспечение в течение какого-либо длительного периода, он начнет с того, что поместит в него свои собственные данные - он не сможет реально изучить демонстрационные данные.
Анаксимандр

2
Я бы предложил нанять статистика, который делал это раньше. Не делай это своим первым родео. Вы не хотите быть на крючке за ужасную работу в этом, не так ли? См. Arstechnica.com/tech-policy/2009/09/…
Дэвид Дж.

Ответы:


2

Есть несколько предложений:

  1. Переведите его в безразмерную форму. Если он идет от 0 до 1 и не имеет единиц измерения, таких как фарлонги за две недели или тонны угля, то его сложнее распознать.
  2. Добавьте к нему небольшое случайное число. Когда вы сворачиваете гауссиан с гауссианом, вы просто получаете другой гауссиан. Это не меняет сути, но переход от точных значений заставляет кого-то гуглить числа, пытаясь выяснить, что это такое.
  3. Мне нравится идея его вращения. Вы могли бы сделать задержку в несколько временных шагов, чтобы создать 2d набор данных из 1d набора данных. Затем вы можете использовать PCA или SVD (после центрирования и масштабирования) для определения поворота. Как только данные повернуты соответствующим образом, вы изменили дисперсию и запутали информацию в себе. Вы можете указать одну из повернутых координатных осей как «пример данных».
  4. Вы можете смешать это с сильно сформированными данными из какого-то другого источника. Так что, если ваши примерные данные представляют собой данные фондового рынка, вы можете добавить возмущения, основанные на погоде или отклонениях от среднего значения высоты тона в вашем любимом саундтреке к фильму «Битлз». Независимо от того, могут ли люди понимать смысл Nasdaq, у них будут проблемы с пониманием Nasdaq + Beatles.

1

Я бы предложил двухэтапный подход. Первым шагом будет выборка с заменой - аналогично методу, используемому при начальной загрузке. В R, вы могли бы использовать

 newdata = sample(olddata, replace = TRUE)

Теперь у вас есть другой набор данных с теми же свойствами, что и у оригинала. Вторым шагом было бы добавить случайную переменную с центром вокруг нуля:

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

Любая случайная переменная, симметричная относительно нуля, будет работать, и границы распределения не важны.

В конце у вас должен быть совершенно другой набор данных с теми же свойствами, что и у старого набора данных.


1
Что вы имеете в виду "с такими же свойствами"? По крайней мере, различия и ковариации будут отличаться. Если вас интересуют отношения между переменными, это действительно важно.
Чарли
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.