จะหาจุดตัวอย่างที่มีอัตราส่วนค่าผิดปกติขนาดใหญ่ที่มีความหมายทางสถิติระหว่างสองค่าของจุดได้อย่างไร


12

ในฐานะแอปพลิเคชันตัวอย่างให้พิจารณาคุณสมบัติสองประการของผู้ใช้ Stack Overflow: นับตั้งแต่ชื่อเสียงและมุมมองโปรไฟล์

คาดว่าสำหรับผู้ใช้ส่วนใหญ่ค่าทั้งสองนั้นจะเป็นสัดส่วน: ผู้ใช้ตัวแทนสูงดึงดูดความสนใจมากขึ้นและได้รับมุมมองโปรไฟล์มากขึ้น

ดังนั้นจึงเป็นเรื่องที่น่าสนใจในการค้นหาผู้ใช้ที่มีจำนวนการดูโปรไฟล์มากเมื่อเทียบกับชื่อเสียงโดยรวม

สิ่งนี้สามารถระบุได้ว่าผู้ใช้นั้นมีแหล่งภายนอกที่มีชื่อเสียง หรืออาจแค่ว่าพวกเขามีรูปโปรไฟล์และชื่อแปลก ๆ ที่น่าสนใจ

ทางคณิตศาสตร์ยิ่งขึ้นตัวอย่างจุดสองมิติแต่ละจุดคือผู้ใช้และผู้ใช้แต่ละคนมีค่าที่สำคัญสองค่าตั้งแต่ 0 ถึง + อินฟินิตี้:

  • ชื่อเสียง
  • จำนวนการดูโปรไฟล์

พารามิเตอร์ทั้งสองนั้นคาดว่าจะขึ้นอยู่กับแบบเส้นตรงและเราต้องการค้นหาจุดตัวอย่างซึ่งเป็นค่าผิดปกติที่ใหญ่ที่สุดในสมมติฐานนั้น

แน่นอนว่าวิธีแก้ปัญหาที่ไร้เดียงสานั้นจะเป็นเพียงการดูโปรไฟล์แบ่งตามชื่อเสียงและการจัดเรียง

อย่างไรก็ตามสิ่งนี้จะให้ผลลัพธ์ที่ไม่มีความหมายทางสถิติ ตัวอย่างเช่นหากผู้ใช้ตอบคำถามได้รับ 1 upvote และด้วยเหตุผลบางอย่างมี 10 การดูโปรไฟล์ซึ่งง่ายต่อการปลอมผู้ใช้นั้นจะปรากฏต่อหน้าผู้สมัครที่น่าสนใจมากกว่าที่มี 1,000 upvotes และ 5000 profile profile .

ในกรณีการใช้ "โลกแห่งความเป็นจริง" ที่มากขึ้นเราอาจลองตอบคำถาม "ซึ่ง startups คือยูนิคอร์นที่มีความหมายมากที่สุด?" เช่นหากคุณลงทุน 1 ดอลลาร์ด้วยเงินทุนเพียงเล็กน้อยคุณสร้างยูนิคอร์น: https://www.linkedin.com/feed/update/urn:li:activity:6362648516858310656

ข้อมูลคอนกรีตที่สะอาดและง่ายต่อการใช้งานในโลกแห่งความจริง

เพื่อทดสอบวิธีการแก้ปัญหาของคุณคุณสามารถใช้ไฟล์ที่ประมวลผลแล้วซึ่งถูกบีบอัดขนาดเล็ก (75M, ผู้ใช้ ~ 10M) ที่แยกมาจากการถ่ายโอนข้อมูลกองข้อมูลล้นล้น 2019-03 :

wget https://github.com/cirosantilli/media/raw/master/stack-overflow-data-dump/2019-03/users_rep_view.dat.7z
7z x users_rep_view.dat.7z

ซึ่งสร้างไฟล์ที่เข้ารหัส UTF-8 users_rep_view.datซึ่งมีรูปแบบการเว้นวรรคข้อความธรรมดาที่ง่ายมาก:

Id Reputation Views DisplayName
-1 1 649 Community
1 45742 454747 Jeff_Atwood
2 3582 24787 Geoff_Dalgas
3 13591 24985 Jarrod_Dixon
4 29230 75102 Joel_Spolsky
5 39973 12147 Jon_Galloway
8 942 6661 Eggs_McLaren
9 15163 5215 Kevin_Dente
10 101 3862 Sneakers_O'Toole

นี่คือลักษณะของข้อมูลในมาตราส่วนบันทึก:

ป้อนคำอธิบายรูปภาพที่นี่

สคริปต์ gnuplot

มันจะน่าสนใจเพื่อดูว่าโซลูชันของคุณช่วยให้เราค้นพบผู้ใช้ที่แปลกใหม่ที่ไม่รู้จัก!

ข้อมูลเริ่มต้นได้รับจากดัมพ์ข้อมูล 2019-03 ดังต่อไปนี้:

wget https://archive.org/download/stackexchange/stackoverflow.com-Users.7z

# Produces Users.xml
7z x stackoverflow.com-Users.7z

# Preprocess data to minimize it.
./users_xml_to_rep_view_dat.py Users.xml > users_rep_view.dat
7z a users_rep_view.dat.7z users_rep_view.dat

sha256sum stackoverflow.com-Users.7z users_rep_view.dat.7z > checksums

users_xml_to_rep_view_dat.pyแหล่งที่มาสำหรับ

หลังจากเลือกค่าผิดปกติของคุณโดยการเรียงลำดับใหม่users_rep_view.datคุณสามารถรับรายการ HTML พร้อมไฮเปอร์ลิงก์เพื่อดูอันดับสูงสุดอย่างรวดเร็วด้วย:

./users_rep_view_dat_to_html.py users_rep_view.dat | head -n 1000 > users_rep_view.html
xdg-open users_rep_view.html

users_rep_view_dat_to_html.pyแหล่งที่มาสำหรับ

สคริปต์นี้ยังสามารถใช้เป็นข้อมูลอ้างอิงอย่างย่อเกี่ยวกับวิธีการอ่านข้อมูลลงใน Python

การวิเคราะห์ข้อมูลด้วยตนเอง

ทันทีที่ดูกราฟ gnuplot เราจะเห็นว่าเป็นไปตามที่คาดไว้:

  • ข้อมูลมีสัดส่วนประมาณโดยมีความแปรปรวนมากขึ้นสำหรับผู้ใช้จำนวนน้อยหรือผู้ดูต่ำ
  • ผู้ใช้ที่มีจำนวนน้อยหรือดูน้อยมีความชัดเจนมากขึ้นซึ่งหมายความว่าพวกเขามีรหัสบัญชีที่สูงกว่าซึ่งหมายความว่าบัญชีของพวกเขานั้นใหม่กว่า

เพื่อให้ได้สัญชาตญาณเกี่ยวกับข้อมูลฉันต้องการเจาะลึกประเด็นในซอฟต์แวร์การวางแผนเชิงโต้ตอบ

Gnuplot และ Matplotlib ไม่สามารถจัดการชุดข้อมูลขนาดใหญ่ได้ดังนั้นฉันให้VisItเป็นครั้งแรกและใช้งานได้ นี่คือภาพรวมโดยละเอียดของซอฟต์แวร์การวางแผนทั้งหมดที่ฉันได้ลอง: /programming/5854515/large-plot-20-million-samples-gigabytes-of-data/55967461#55967461

OMG ที่ทำงานได้ยาก ฉันต้อง:

  • ดาวน์โหลดไฟล์ปฏิบัติการด้วยตนเองไม่มีแพ็คเกจ Ubuntu
  • แปลงข้อมูลเป็น CSV โดยการแฮ็กข้อมูลusers_xml_to_rep_view_dat.pyอย่างรวดเร็วเพราะฉันไม่สามารถค้นหาวิธีการให้อาหารแยกไฟล์ได้อย่างง่ายดาย (บทเรียนเรียนรู้ครั้งต่อไปฉันจะไปหา CSV)
  • ต่อสู้เป็นเวลา 3 ชั่วโมงด้วย UI
    • ขนาดจุดเริ่มต้นคือพิกเซลซึ่งสับสนกับฝุ่นบนหน้าจอของฉัน ย้ายไปที่ 10 พิกเซลทรงกลม
    • มีผู้ใช้ที่มีการดูโปรไฟล์ 0 รายการและ VisIt ปฏิเสธการพล็อตลอการิทึมอย่างถูกต้องดังนั้นฉันจึงใช้การ จำกัด ข้อมูลเพื่อกำจัดจุดนั้น สิ่งนี้เตือนฉันว่า gnuplot อนุญาตอย่างมากและจะวางแผนทุกอย่างที่คุณโยนทิ้งไว้อย่างมีความสุข
    • เพิ่มชื่อแกนลบชื่อผู้ใช้และสิ่งอื่น ๆ ภายใต้ "การควบคุม"> "คำอธิบายประกอบ"

นี่เป็นวิธีที่หน้าต่าง VisIt ของฉันดูเหมือนหลังจากที่ฉันเบื่อกับการทำงานด้วยตนเอง:

ป้อนคำอธิบายรูปภาพที่นี่

ตัวอักษรเป็นจุดที่ฉันเลือกด้วยตัวเองด้วยคุณสมบัติคัดสรรที่ยอดเยี่ยม:

  • คุณสามารถดูรหัสที่แน่นอนสำหรับแต่ละจุดได้โดยการเพิ่มความแม่นยำของจุดลอยตัวในหน้าต่างเลือก> "รูปแบบลอยตัว" เป็น %.10g
  • จากนั้นคุณสามารถถ่ายโอนคะแนนที่เลือกด้วยมือทั้งหมดไปยังไฟล์ txt ด้วย "Save Picks as" สิ่งนี้ทำให้เราสามารถสร้างรายการโปรไฟล์ URL ที่น่าสนใจที่คลิกได้ด้วยการประมวลผลข้อความพื้นฐาน

สิ่งที่ต้องทำเรียนรู้วิธี:

  • ดูสตริงชื่อโปรไฟล์พวกเขาได้รับการแปลงเป็น 0 โดยค่าเริ่มต้น ฉันเพิ่งวางรหัสโปรไฟล์ลงในเบราว์เซอร์
  • เลือกจุดทั้งหมดในสี่เหลี่ยมในหนึ่งไป

และในที่สุดนี่คือผู้ใช้ไม่กี่รายที่น่าจะแสดงผลการสั่งซื้อสูง

การแก้ปัญหาที่เป็นไปได้

ฉันเคยได้ยินเกี่ยวกับช่วงคะแนนความเชื่อมั่นของวิลสันจากhttps://www.evanmiller.org/how-not-to-sort-by-average-rating.htmlซึ่ง "สมดุล [s] สัดส่วนการจัดอันดับเชิงบวกกับความไม่แน่นอน จากการสังเกตจำนวนน้อย "แต่ฉันไม่แน่ใจว่าจะแมปกับปัญหานี้อย่างไร

ในบล็อกโพสต์นั้นผู้เขียนแนะนำให้อัลกอริทึมนั้นค้นหารายการที่มี upvotes มากกว่า downvote มาก แต่ฉันไม่แน่ใจว่าแนวคิดเดียวกันนี้ใช้กับปัญหามุมมอง upvote / profile หรือไม่ ฉันกำลังคิดที่จะ:

  • มุมมองโปรไฟล์ == upvotes ที่นั่น
  • upvotes ที่นี่ == downvotes ที่นั่น (ทั้ง "ไม่ดี")

แต่ฉันไม่แน่ใจว่ามันสมเหตุสมผลหรือไม่เพราะในปัญหา up / downvote แต่ละรายการที่เรียงลำดับมีเหตุการณ์การโหวต N 0/1 แต่สำหรับปัญหาของฉันแต่ละรายการมีสองเหตุการณ์ที่เกี่ยวข้อง: รับ upvote และรับมุมมองโปรไฟล์

มีอัลกอริทึมที่รู้จักกันดีซึ่งให้ผลลัพธ์ที่ดีสำหรับปัญหาประเภทนี้หรือไม่? แม้การรู้ชื่อปัญหาที่แม่นยำจะช่วยฉันค้นหาวรรณกรรมที่มีอยู่

บรรณานุกรม

ทดสอบใน Ubuntu 18.10, VisIt 2.13.3


1
ฉันยังใหม่กับสิ่งนี้ดังนั้นโปรดแก้ไขชื่อ / คำถามเพื่อให้คำศัพท์ถูกต้องมากขึ้น ขอบคุณ
Ciro Santilli 冠状病毒审查六四事件法轮功

ดูเหมือนว่าคุณกำลังค้นหาผู้ผิดกฎหมาย ฉันจะใช้เทคนิคในพื้นที่นี้
ความน่าจะเป็นทาง

1
@probabilityislogic btw ฉันได้อัปเดตคำถามด้วยข้อมูลที่เป็นรูปธรรมใช้งานง่าย
Ciro Santilli 法轮功病毒审查六四事件法轮功

1
ฉันแค่อยากจะบอกว่านี่ไม่ใช่แค่คำถามที่น่าสนใจ แต่ยังเป็นรูปธรรมและมีรูปแบบที่ดี ตัวอย่างที่จะค้นหา เก่งมาก @Ciro!
Julio Cezar Silva

1
@JulioCezarSilva ขอบคุณ !! ฉันไม่ได้คาดหวังว่าจะได้เรียนรู้เกี่ยวกับการวางแผนเชิงโต้ตอบระดับสูงในครั้งนี้ แต่ฉันก็ทำได้ คลาสสิก
Ciro Santilli 冠状病毒审查六四事件法轮功

คำตอบ:


4

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

อีกวิธีหนึ่งสำหรับปัญหาดังกล่าวคือการแก้ไข (อคติ) การประเมินของเราที่มีต่อความรู้เดิมที่เรามีตัวอย่างเช่นอัตราส่วนมุมมอง / ตัวแทนโดยรวม

โวลต์~ยังไม่มีข้อความ(μ,σ)μ

μพี(μ)

μMAP=nμMLE+μ0n+
nμMLEμ0


ในการเปรียบเทียบทั้งสองวิธี (Wilson ช่วงความเชื่อมั่นที่คะแนนต่ำกว่าขอบเขตและ MAP) พวกเขาทั้งสองให้การประมาณที่แม่นยำเมื่อมีข้อมูลเพียงพอ (reps) เมื่อจำนวนของ reps มีขนาดเล็กวิธี Wilson ล่างที่ จำกัด จะเป็นศูนย์และ MAP จะ อคติต่อค่าเฉลี่ย


1
ขอบคุณสำหรับการตอบกลับของคุณ! ฉันได้อัปเดตคำถามด้วยข้อมูลที่เป็นรูปธรรมและใช้งานง่ายมาดูกันว่ามีใครจัดการเพื่อให้ค้นพบสิ่งที่สนุกหรือไม่
Ciro Santilli 法轮功病毒审查六四事件法轮功

1
@CiroSantilli 新疆改造中心 996ICU 六四事件ทำได้ดีมาก!
dontloo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.