การสร้างข้อมูล“ ตัวอย่าง” จากข้อมูลจริง: ปลอมตัวโดยไม่ทำให้เสียโฉม


9

(ฉันไม่มีความคิดที่แท้จริงว่าจะติดแท็กสิ่งนี้กับอะไรเพราะฉันไม่ใช่นักสถิติและฉันไม่ทราบว่าฟิลด์นี้ตรงกับอะไรรู้สึกฟรีเพื่อเพิ่มแท็กที่เหมาะสมยิ่งขึ้น)

ฉันทำงานให้กับ บริษัท ที่ผลิตซอฟต์แวร์วิเคราะห์ข้อมูลและเราต้องการชุดข้อมูลที่เหมาะสมเพื่อทดสอบและสาธิตผลิตภัณฑ์ล่าสุดของเราด้วย เราไม่สามารถเติมเต็มฐานข้อมูลด้วยผลลัพธ์ของตัวสร้างตัวเลขสุ่มได้เนื่องจากผลลัพธ์ของโปรแกรมจะกลายเป็นเรื่องไร้สาระ วิธีที่ง่ายที่สุดวิธีหนึ่งในการรับข้อมูลดังกล่าวมาจากไคลเอนต์ เรามีข้อมูลจำนวนมากจากการทดลองที่เราวิ่ง ตอนนี้เห็นได้ชัดว่าเราไม่สามารถเผยแพร่ข้อมูลจริงของลูกค้าได้ดังนั้นเราจึงจำเป็นต้องแก้ไขข้อมูลเล็กน้อย แต่เรายังต้องการให้มันทำงานเหมือนข้อมูลจริง

จุดมุ่งหมายที่นี่คือการใช้ชุดข้อมูลของพวกเขาและใช้ "fuzz" กับมันเพื่อที่จะไม่สามารถจดจำได้ว่าเป็นของพวกเขาโดยเฉพาะ ความทรงจำเกี่ยวกับทฤษฎีทางสถิติของฉันนั้นค่อนข้างคลุมเครือดังนั้นฉันอยากจะเรียกใช้สิ่งนี้โดยพวกคุณ:

โดยพื้นฐานแล้วข้อมูลที่เรามี (จากลูกค้า) เป็นตัวอย่างของข้อมูลทั้งหมดที่มีอยู่ (ในประเทศหรือโลก) สิ่งที่ฉันอยากรู้คือประเภทของการดำเนินการที่สามารถนำมาใช้เพื่อทำให้ตัวอย่างไม่ได้เป็นตัวแทนของกลุ่มตัวอย่างของลูกค้าอีกต่อไปในขณะที่ยังคงเป็นตัวแทนของประชากรโลกอย่างคร่าวๆ

สำหรับการอ้างอิงเท่าที่เราทราบว่าข้อมูลที่เรามีติดตามการแจกแจงแบบคร่าวๆปกติ (เกาส์)

ชุดข้อมูลดั้งเดิมไม่สามารถใช้งานได้อย่างกว้างขวาง แต่อาจได้รับการยอมรับในทางทฤษฎีจากลักษณะเฉพาะบางภูมิภาค (เราไม่ทราบว่าคุณลักษณะเหล่านั้นคืออะไรและเป็นที่น่าสงสัยว่าใครก็ตามสามารถทำได้ในระดับที่เพียงพอ แต่เรารู้ว่า ไปยังสถานที่) อย่างไรก็ตามฉันสนใจทฤษฎีนี้มากกว่าการฝึกฝน - ฉันต้องการทราบว่าการดำเนินการทำให้เป็นไปไม่ได้ (หรืออย่างน้อยก็ยาก) เพื่อระบุชุดข้อมูลต้นฉบับโดยพารามิเตอร์ X ไม่ว่าใครจะมีหรือไม่สามารถทำงานได้ พารามิเตอร์ X ในสถานที่แรก

วิธีที่ฉันคิดขึ้นมาก็คือการแยกการอ่านออกเป็นประเภทต่าง ๆ (โดยไม่ให้มากไปสมมติว่ากลุ่มอาจเป็น "ความยาว" หรือ "เวลาที่ใช้ในการทำ X") สำหรับแต่ละคนคำนวณ ส่วนเบี่ยงเบนมาตรฐาน. จากนั้นให้เพิ่มค่าสุ่มระหว่างค่าบวกและลบของ (n * stddev) โดยที่ n คือเศษส่วนบางส่วนที่ฉันสามารถใช้เพื่อปรับผลลัพธ์จนกว่าข้อมูลจะ "fuzzed" เพียงพอ ฉันไม่ต้องการใช้ช่วงคงที่เพียงอย่างเดียว (พูดสุ่มระหว่าง 90% ถึง 110% ของค่าดั้งเดิม) เพราะค่าบางค่าแตกต่างกันมากหรือน้อยกว่าค่าอื่น ๆ - ในการวัดบางค่า 10% ในค่าเฉลี่ยนั้นแทบจะสังเกตไม่เห็น แต่ในคนอื่น ๆ มันทำให้คุณเป็นคนที่จริงจังมาก

มันเพียงพอที่จะปกปิดแหล่งที่มาของข้อมูลต้นฉบับหรือไม่? หากไม่ใช้การวัดทางสถิติข้อมูลก็ยังสามารถระบุตัวตนได้และฉันจะปกปิดข้อมูลเหล่านั้นอย่างไรในขณะที่ยังคงรักษาข้อมูลผลลัพธ์ที่เป็นจริงได้อย่างคลุมเครือ


3
ในความคิดเห็นเมื่อเร็ว ๆ นี้สำหรับคำถามที่เกี่ยวข้องฉันให้ลิงก์ไปยังเอกสารแบบสำรวจบางรายการในหัวข้อนี้ที่มีอยู่ออนไลน์ ลิงก์เหล่านี้มุ่งเน้นไปที่การปลอมแปลงข้อมูลสำมะโน แต่ส่วนมากเชื่อมโยงกับคำถามเรื่องการปลอมแปลงข้อมูลโดยทั่วไป
whuber

อาจเป็นการระมัดระวังที่จะชี้ให้เห็นว่าฉันไม่ได้เป็นนักสถิติหรือแม้แต่นักคณิตศาสตร์ ฉันเป็นโปรแกรมเมอร์โดยการแลกเปลี่ยนดังนั้นฉันสามารถจัดการกับคำอธิบายอัลกอริทึม แต่พีชคณิตต่างชาติเปลี่ยนสมองของฉันให้เป็นสีโป๊ว นอกจากนี้ไม่จำเป็นต้องเข้มงวดอย่างยิ่ง การสาธิตที่จะใช้ข้อมูลนี้โดยทั่วไปแล้วจะมีการนำเสนอ - สิบหรือยี่สิบนาทีของพนักงานของเราคนหนึ่งโผล่เข้ามาในซอฟต์แวร์ หากใครก็ตามที่ได้รับอนุญาตให้ทดลองใช้ซอฟต์แวร์เป็นระยะเวลานานพวกเขาจะเริ่มต้นด้วยการใส่ข้อมูลของตัวเองเข้าไปในนั้น - พวกเขาจะไม่ได้ทำการตรวจสอบข้อมูลตัวอย่างจริง ๆ
anaximander

2
ฉันขอแนะนำให้จ้างนักสถิติที่เคยทำสิ่งนี้มาก่อน อย่าทำให้นี่เป็นครั้งแรกของคุณ คุณไม่ต้องการที่จะเป็นตะขอสำหรับการทำงานที่น่ากลัวในเรื่องนี้คุณ? ดูarstechnica.com/tech-policy/2009/09/…
David J.

คำตอบ:


2

มีข้อเสนอแนะบางอย่าง:

  1. แปลงเป็นรูปแบบไร้มิติ ถ้ามันไปจาก 0 ถึง 1 และไม่มีหน่วยเช่น furlongs ต่อรายปักษ์หรือตันของถ่านหินที่แนบมามันก็ยากที่จะรับรู้
  2. เพิ่มจำนวนสุ่มขนาดเล็กลงไป เมื่อคุณโน้มน้าว Gaussian ด้วย Gaussian คุณจะได้ Gaussian อีกตัว มันไม่ได้เปลี่ยนแก่นแท้ของมัน แต่การย้ายจากค่าที่แน่นอนทำให้ใครบางคน googling ตัวเลขเพื่อลองและคิดออกว่ามันคืออะไร
  3. ฉันชอบความคิดที่จะหมุนมัน คุณอาจใช้เวลาหลายขั้นตอนล่าช้าในการสร้างชุดข้อมูล 2d จากชุดข้อมูล 1d จากนั้นคุณสามารถใช้ PCA หรือ SVD (หลังจากอยู่ตรงกลางและปรับสัดส่วน) เพื่อกำหนดการหมุน เมื่อข้อมูลถูกหมุนอย่างเหมาะสมคุณได้เปลี่ยนความแปรปรวนและทำให้ข้อมูลในตัวเองสับสน คุณสามารถรายงานแกนพิกัดที่หมุนหนึ่งในนั้นเป็น "ข้อมูลตัวอย่าง"
  4. คุณสามารถผสมกับข้อมูลที่เกิดขึ้นอย่างมากจากแหล่งอื่น ดังนั้นหากข้อมูลตัวอย่างของคุณคือข้อมูลการลงทุนในตลาดหุ้นคุณสามารถเพิ่มการก่อกวนขึ้นอยู่กับสภาพอากาศหรือจากความแปรปรวนจากระดับเสียงจากซาวด์แทร็กที่คุณชื่นชอบของ Beatles ไม่ว่าผู้คนจะทำความเข้าใจกับ Nasdaq ได้หรือไม่พวกเขาก็จะมีปัญหากับ Nasdaq + Beatles

1

ฉันขอแนะนำวิธีการสองขั้นตอน ขั้นตอนแรกคือการสุ่มตัวอย่างด้วยการแทนที่ - คล้ายกับวิธีที่ใช้ในการบูตสแตรป ในRคุณสามารถใช้

 newdata = sample(olddata, replace = TRUE)

ตอนนี้คุณมีชุดข้อมูลอื่นที่มีคุณสมบัติเหมือนกันกับต้นฉบับ ขั้นตอนที่สองจะเพิ่มตัวแปรสุ่มกึ่งกลางรอบศูนย์:

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

ตัวแปรสุ่มใด ๆ ที่สมมาตรรอบศูนย์จะทำงานได้และขอบเขตของการแจกแจงไม่สำคัญ

ในตอนท้ายคุณควรมีชุดข้อมูลที่แตกต่างอย่างสิ้นเชิงกับคุณสมบัติเดียวกันกับชุดข้อมูลเดิม


1
คุณหมายถึง "ด้วยคุณสมบัติเดียวกัน"? อย่างน้อยที่สุดความแปรปรวนและความแปรปรวนร่วมจะแตกต่างกัน หากคุณสนใจในความสัมพันธ์ระหว่างตัวแปรนั่นสำคัญมาก
Charlie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.