从真实数据中创建“演示”数据:伪装而不毁容

机器算法验证 数据预处理
2022-03-25 05:30:36

(我不知道用什么来标记它,因为我不是统计学家,也不知道它属于哪个领域。随意添加更合适的标签。)

我在一家生产数据分析软件的公司工作,我们需要一套不错的数据来测试和演示我们的最新产品。我们不能只用随机数生成器的输出填充数据库,因为程序的输出会变得毫无意义。获取此类数据的最简单方法之一是从客户端获取;我们有大量来自我们进行的试验的数据。现在,显然我们不能发布客户的实际数据,所以我们需要对其进行一些修改,但我们仍然需要它像真实数据一样表现。

这里的目的是获取他们的数据集,并对其应用“模糊”,这样就不会被识别为他们的特定数据。我对统计理论的记忆本身就有点模糊,所以我想由你们来运行这个:

从本质上讲,我们(来自客户)拥有的数据本身就是(在国家或世界)存在的所有数据的样本。我想知道的是,可以应用什么类型的操作来使样本不再强烈代表客户的样本总体,同时仍使其大致代表世界人口。

作为参考,据我们所知,我们拥有的数据通常遵循粗略的正态(高斯)分布。

原始数据集并未广泛使用,但理论上可以从一些特定区域的特征中识别出来(我们不知道这些特征是什么,是否有人做到了足够的水平值得怀疑,但我们知道各地存在差异放置)。无论如何,我对此理论比实践更感兴趣 - 我想知道一个操作是否使通过参数 X 识别源数据集变得不可能(或至少难以),无论是否有人已经或可以解决首先是参数 X。

我想出的方法是将读数分成各种类型,(不给出太多信息,假设一个组可能是“长度”或“做 X 所花费的时间”。)对于其中的每一个,计算标准差。然后,对于每个值,在 (n * stddev) 的正值和负值之间添加一个随机值,其中 n 是我可以用来调整结果的某个分数,直到数据充分“模糊化”。我不想简单地应用一个静态范围(例如,在原始值的 90% 和 110% 之间随机),因为某些值的变化比其他值大得多或小得多 - 在某些测量中,超过平均值 10% 几乎不明显,但在其他情况下,它会让你成为一个严重的异常值。

这足以掩盖原始数据的来源吗?如果不是,通过哪些统计措施仍然可以识别数据,我将如何掩盖这些,同时仍然保持结果数据模糊真实?

2个回答

有一些建议:

  1. 将其转换为无量纲形式。如果它从 0 变为 1,并且没有像每两周弗隆或附加吨煤这样的单位,那么它就更难识别了。
  2. 添加一个小的随机数。当您将高斯与高斯卷积时,您只会得到另一个高斯。它并没有改变它的本质,但是从精确的值转移会让人们在谷歌上搜索数字来试图找出它是什么。
  3. 我喜欢旋转它的想法。您可以延迟一些时间步长来从 1d 数据集创建 2d 数据集。然后,您可以使用 PCA 或 SVD(在居中和缩放之后)来确定旋转。一旦数据被适当地旋转,您就改变了方差并混淆了信息本身。您可以将旋转的坐标轴之一报告为“样本数据”。
  4. 您可以将其与来自其他来源的强格式数据混合。因此,如果您的样本数据是股票市场数据,您可以根据天气添加扰动,或者根据您最喜欢的披头士配乐的音高平均值的变化添加扰动。无论人们能否理解纳斯达克,他们都很难理解纳斯达克+披头士乐队。

我建议采用两步法。第一步是带放回抽样——类似于自举中使用的方法。R中,您可以使用

 newdata = sample(olddata, replace = TRUE)

您现在拥有与原始数据集具有相同属性的不同数据集。第二步是添加一个以零为中心的随机变量:

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

任何围绕零对称的随机变量都可以工作,分布的界限并不重要。

最后,您应该拥有与旧数据集具有相同属性的完全不同的数据集。