(Я понятия не имею, с чем это пометить, потому что я не статистик и не знаю, к какому полю это относится. Не стесняйтесь добавлять более подходящие теги.)
Я работаю в компании, которая производит программное обеспечение для анализа данных, и нам нужен приличный набор данных для тестирования и демонстрации нашего последнего продукта. Мы не можем просто заполнить базу данных выводом генератора случайных чисел, потому что вывод программы станет бессмысленным. Один из самых простых способов получить такие данные от клиента; у нас есть большое количество данных из испытания, которое мы провели. Очевидно, что мы не можем публиковать фактические данные клиента, поэтому нам нужно немного их изменить, но нам все равно нужно, чтобы они вели себя как реальные данные.
Цель здесь состоит в том, чтобы взять их набор данных и применить к ним «fuzz», чтобы они не могли быть распознаны как их особые. Моя память о статистической теории сама по себе немного размыта, поэтому я хотел бы показать вам это, ребята:
По сути, данные, которые мы имеем (от клиента), сами по себе являются образцом всех данных, которые существуют (в стране или мире). Что я хотел бы знать, так это то, какой тип операций можно применить, чтобы сделать выборку более не репрезентативной для выборочной совокупности клиента, в то же время сохраняя ее примерно представительной для населения мира.
Для справки, насколько нам известно, данные, которые мы имеем, обычно соответствуют грубым нормальным (гауссовым) распределениям.
Исходный набор данных не является широко доступным, но теоретически его можно узнать по некоторым регионально-специфическим характеристикам (мы не знаем, что это за характеристики, и сомнительно, что кто-то делает до достаточного уровня, но мы знаем, что различия существуют с места разместить). В любом случае, меня больше интересует теория этого, чем практика - я хочу знать, делает ли операция невозможным (или, по крайней мере, трудным) идентифицировать исходный набор данных по параметру X, независимо от того, есть у кого-то это или нет. параметр X на первом месте.
Подход, который я придумал, состоит в том, чтобы разделить показания на различные типы (не отдавая много, скажем, группа может быть «длиной» или «временем, затраченным на выполнение X».) Для каждого из них вычислите среднеквадратичное отклонение. Затем к каждому значению добавьте случайное значение между положительными и отрицательными значениями (n * stddev), где n - некоторая дробь, которую я могу использовать для настройки результата до тех пор, пока данные не будут достаточно «размыты». Я не хотел просто применять статический диапазон (скажем, случайный между 90% и 110% от исходного значения), потому что некоторые значения изменяются намного больше или меньше, чем другие - в некоторых измерениях, превышение среднего на 10% едва заметно , но в других это делает вас серьезным выбросом.
Достаточно ли этого для маскировки источника исходных данных? Если нет, то по каким статистическим показателям данные все еще можно будет идентифицировать, и как бы я их замаскировал, сохраняя при этом результирующие данные неопределенно реалистичными?
источник
Ответы:
Есть несколько предложений:
источник
Я бы предложил двухэтапный подход. Первым шагом будет выборка с заменой - аналогично методу, используемому при начальной загрузке. В
R
, вы могли бы использоватьТеперь у вас есть другой набор данных с теми же свойствами, что и у оригинала. Вторым шагом было бы добавить случайную переменную с центром вокруг нуля:
Любая случайная переменная, симметричная относительно нуля, будет работать, и границы распределения не важны.
В конце у вас должен быть совершенно другой набор данных с теми же свойствами, что и у старого набора данных.
источник