Gerçek verilerden “demo” verileri oluşturma: şekil değiştirmeden gizleme


9

(Bunu ne ile etiketleyeceğime dair gerçek bir fikrim yok çünkü istatistikçi değilim ve bunun hangi alana girdiğini bilmiyorum. Daha uygun etiketler eklemekten çekinmeyin.)

Veri analiz yazılımı üreten bir şirkette çalışıyorum ve en son ürünümüzü test etmek ve tanıtmak için iyi bir veri setine ihtiyacımız var. Veritabanını rastgele bir sayı üretecinin çıktısıyla dolduramayız çünkü programın çıktıları saçma olur. Bu tür verileri almanın en basit yollarından biri bir istemciden; yürüttüğümüz bir denemeden büyük miktarda veri var. Şimdi, bir müşterinin gerçek verilerini yayınlayamayacağımız açıktır, bu yüzden biraz değiştirmemiz gerekir, ancak yine de gerçek veriler gibi davranması gerekir.

Buradaki amaç, kendi veri kümelerini almak ve bu veri tabanına "fuzz" uygulamak, böylece özellikle kendi verileri olarak tanınamamaktır. İstatistik teorisinin hafızamın kendisi biraz bulanık, bu yüzden bunu sizin tarafınızdan çalıştırmak istiyorum:

Esasen, sahip olduğumuz verilerin (müşteriden) kendisi (ülkede veya dünyada) var olan tüm verilerin bir örneğidir. Bilmek istediğim şey, numuneyi artık müşterinin örnek popülasyonunu güçlü bir şekilde temsil etmemek için ne tür operasyonların uygulanabileceğini, ancak yine de dünya nüfusunun kabaca temsil edilmesini sağlıyor.

Referans olarak, bildiğimiz kadarıyla, genel olarak kaba normal (Gauss) dağılımları takip ediyoruz.

Orijinal veri kümesi yaygın olarak mevcut değildir, ancak teorik olarak bölgeye özgü bazı özelliklerden tanınabilir (bu özelliklerin ne olduğunu bilmiyoruz ve herhangi birinin yeterli bir seviyede yapılıp yapılmadığından şüpheleniliyor , ancak varyasyonların yerden var olduğunu biliyoruz. yerleştirmek). Her neyse, bunun teorisiyle pratiğe daha çok ilgi duyuyorum - bir işlemin, kaynak veri kümesini X parametresi ile tanımlamayı imkansız (veya en azından zor), kimsenin çalışıp çalışmadığı veya çalışamayacağını bilmek istiyorum parametre X ilk etapta.

Yaklaştığım yaklaşım, okumaları çeşitli türlere ayırmaktır (çok fazla vermeden, bir grubun "uzunluk" veya "X yapmak için harcanan zaman" olabileceğini varsayalım.) Bunların her biri için standart sapma. Daha sonra, her bir değere, (n * stddev) 'in pozitif ve negatif değerleri arasına, veriler yeterince "bulanıklaşana" kadar sonucu ayarlamak için kullanabileceğim bir kesir olan rastgele bir değer ekleyin. Basitçe statik bir aralık uygulamak istemedim (örneğin, orijinal değerin% 90 ila% 110'u arasında rastgele) çünkü bazı değerler diğerlerinden çok daha fazla veya daha az değişir - bazı ölçümlerde, ortalamanın% 10 üzerinde olması zar zor fark edilir , ancak diğerlerinde sizi ciddi bir aykırı yapar.

Bu, orijinal verilerin kaynağını maskelemek için yeterli mi? Değilse, veriler hangi istatistiksel önlemlerle hala tanımlanabilir olacak ve sonuçta elde edilen verileri belirsiz bir şekilde gerçekçi tutarken bunları nasıl maskeleyebilirim?


3
İlgili bir soruya yakın zamanda yapılan bir yorumda , bu konuyla ilgili çevrimiçi olarak sunulan bazı anket belgelerine bağlantılar sağladım. Bağlantılar Nüfus Sayımı verilerini gizlemeye odaklanır, ancak birçoğu genel olarak verileri gizleme ile ilgili soruları ele alır.
whuber

Hiçbir şekilde bir istatistikçi, hatta bir matematikçi olmadığımı belirtmek ihtiyatlı olabilir. Ben ticaretle programcıyım, bu yüzden algoritmik açıklamalarla başa çıkabiliyorum ama tuhaf cebir beynimi macun haline getiriyor. Ayrıca, bunun büyük çapta titiz olması gerekmez; bu verilerin kullanılacağı gösteriler genellikle sunumlardır - yazılımda dolaşan temsilcilerinden on veya yirmi dakika. Herhangi bir kişinin yazılımı herhangi bir uzun süre denemesine izin verilirse, kendi verilerini içine koyarak başlayacaklardır - demo verilerini gerçekten incelemeye başlayamazlar.
anaximander

2
Bunu daha önce yapan bir istatistikçi işe almanızı öneririm. Bunu ilk rodeo yapmayın. Bunda korkunç bir iş yapmak için kancaya girmek istemiyorsun, değil mi? Bkz. Arstechnica.com/tech-policy/2009/09/…
David J.

Yanıtlar:


2

Bazı öneriler var:

  1. Boyutsuz forma dönüştürün. 0'dan 1'e giderse ve iki haftada furlong veya tonlarca kömür bağlı değilse, tanımak daha zordur.
  2. Küçük bir rasgele sayı ekleyin. Bir gaussianı bir gaussianla ikna ettiğinizde, sadece başka bir gaussian alırsınız. Bunun özünü değiştirmez, ancak kesin değerlerden hareket etmek, birinin ne olduğunu bulmaya ve bulmaya çalışmasını sağlar.
  3. Döndürme fikrini seviyorum. 1d veri kümesinden bir 2d veri kümesi oluşturmak için bir takım zaman adımlarını geciktirebilirsiniz. Daha sonra bir dönüş belirlemek için PCA veya SVD'yi (merkezleme ve ölçeklendirmeden sonra) kullanabilirsiniz. Veriler uygun şekilde döndürüldükten sonra, varyansı değiştirdiniz ve bilgileri kendi içinde karıştırdınız. Döndürülmüş koordinat eksenlerinden birini "örnek veri" olarak bildirebilirsiniz.
  4. Başka bir kaynaktan güçlü şekilde oluşturulmuş verilerle karıştırabilirsiniz. Dolayısıyla, örnek verileriniz borsa verileriyse, hava durumuna veya Beatles'ın en sevdiğiniz film müziğinden sesin ortalamasındaki değişimlere ekleyebilirsiniz. İnsanlar Nasdaq'ı anlamış olsun ya da olmasın, Nasdaq + Beatles'ı anlamakta zorlanacaklardır.

1

İki adımlık bir yaklaşım öneririm. İlk adım, önyüklemede kullanılan yönteme benzer şekilde değiştirme ile örnekleme olacaktır. İçinde R, kullanabilirsiniz

 newdata = sample(olddata, replace = TRUE)

Artık orijinal ile aynı özelliklere sahip farklı bir veri kümeniz var. İkinci adım, sıfır etrafında ortalanmış rastgele bir değişken eklemek olacaktır:

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

Sıfır etrafında simetrik olan herhangi bir rastgele değişken çalışacaktır ve dağılım sınırları önemli değildir.

Sonunda, eski veri kümesiyle aynı özelliklere sahip tamamen farklı bir veri kümesine sahip olmalısınız.


1
Ne demek "aynı özelliklere sahip"? En azından, varyanslar ve kovaryanslar farklı olacaktır. Değişkenler arasındaki ilişkilerle ilgileniyorsanız, bu gerçekten önemlidir.
Charlie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.