Створення "демонстраційних" даних з реальних даних: маскування без викривлення


9

(Я не маю реальної ідеї, з чим позначити це, тому що я не статистик, і я не знаю, у яке поле це потрапляє. Сміливо додайте більш підходящі теги.)

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

Мета полягає в тому, щоб взяти їх набір даних і застосувати до них "нечіткість", щоб вони не могли бути розпізнані як конкретно їхні. Моя пам’ять про статистичну теорію сама по собі трохи нечітка, тому я хотів би це виконати вами:

По суті, дані, які ми маємо (від клієнта), є самими зразками всіх даних, що існують (у країні чи світі). Мені хотілося б знати, який тип операцій можна застосувати, щоб вибірка більше не була репрезентативною для вибіркової сукупності клієнта, при цьому вона залишається приблизно репрезентативною для світового населення.

Для довідки, наскільки нам відомі дані, ми, як правило, дотримуємось нормальних (гауссових) розподілів.

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

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

Чи достатньо цього для маскування джерела вихідних даних? Якщо ні, то за допомогою яких статистичних заходів можна було б ідентифікувати дані, і як я маскую їх, зберігаючи отримані дані невиразно реалістичними?


3
У недавньому коментарі до пов’язаного питання я надав посилання на деякі документи з опитування на цю тему, які доступні в Інтернеті. Посилання зосереджені на маскуванні даних перепису, але багато з них стосуються питань маскування даних загалом.
whuber

Можливо, доцільно зазначити, що я ні в якому разі не статистик і навіть не математик. Я програміст в галузі торгівлі, тому можу впоратися з алгоритмічними поясненнями, але чужа алгебра перетворює мій мозок на шпаклівку. Крім того, це особливо не потрібно бути жорстким; демонстрації, де будуть використовуватися ці дані, - це, як правило, презентації - десять-двадцять хвилин, коли один із наших представників розглядає програмне забезпечення. Якщо комусь дозволено пробувати пробне програмне забезпечення протягом будь-якого тривалого періоду, він почне вносити в нього свої власні дані - вони не зможуть дійсно вивчити демо-дані.
anaximander

2
Я б запропонував найняти статистику, який це робив раніше. Не робіть це першим родео. Ви не хочете бути на гаку за те, що ви робите страшну роботу, чи не так? Дивіться arstechnica.com/tech-policy/2009/09/…
David J.

Відповіді:


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.