ในฐานะแอปพลิเคชันตัวอย่างให้พิจารณาคุณสมบัติสองประการของผู้ใช้ 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 โดยค่าเริ่มต้น ฉันเพิ่งวางรหัสโปรไฟล์ลงในเบราว์เซอร์
- เลือกจุดทั้งหมดในสี่เหลี่ยมในหนึ่งไป
และในที่สุดนี่คือผู้ใช้ไม่กี่รายที่น่าจะแสดงผลการสั่งซื้อสูง
ผู้ใช้ตัวแทนต่ำมากที่มีจำนวนการดูมากและโปรไฟล์ข้อมูลต่ำ
ผู้ใช้เหล่านี้อาจเปลี่ยนเส้นทางการรับส่งข้อมูลจากที่ใดที่หนึ่ง
ที่เกี่ยวข้อง: มีเมตาดาต้าสำหรับการจัดการตราคำถามทองคำที่มีชื่อเสียงโดยผู้ใช้ แต่ตอนนี้ฉันไม่สามารถหาได้
หากมีผู้ใช้จำนวนมากเกินไปการวิเคราะห์ของเราจะเป็นเรื่องยากและเราจะต้องลองพิจารณาพารามิเตอร์อื่น ๆ เพื่อหลีกเลี่ยง "การหลอกลวง" ดังกล่าว:
- 1 143100 2445750 https://stackoverflow.com/users/2445750/muhammad-mahtab-saleem
- D 60 51111 2139869 https://stackoverflow.com/users/2139869/xxn
- E 40 23067 5740196 https://stackoverflow.com/users/5740196/listcrawler
- F 11 7738 3313079 https://stackoverflow.com/users/3313079/rikitikitaco
- G 136 11123 4102129 https://stackoverflow.com/users/4102129/abhishek-deshpande
- K 377 24453 1012351 https://stackoverflow.com/users/1012351/overstack
- L 1489 57515 1249338 https://stackoverflow.com/users/1249338/frosty
- M 1767 40986 2578799 https://stackoverflow.com/users/2578799/naresh-walia
- ฉันพบว่ากลุ่มผู้ใช้ที่น่าสนใจทั้งหมดนี้อยู่ในกราฟ:
- H 58 4331 1818755 https://stackoverflow.com/users/1818755/eerongal
- ฉัน 103 4366 1816274 https://stackoverflow.com/users/1816274/angelov
- J 157 4688 688552 https://stackoverflow.com/users/688552/oylex
ชื่อเสียงภายนอก:
- O 29799 170854 2274694 https://stackoverflow.com/users/2274694/lyndsey-scottexแบบจำลองของ Victoria's Secret: https://en.wikipedia.org/wiki/Lyndsey_Scott
- P 45742 454747 1 https://stackoverflow.com/users/1/jeff-atwood SO ผู้ร่วมก่อตั้ง
- Y 29230 75102 4 https://stackoverflow.com/users/4/joel-spolsky SO ผู้ร่วมก่อตั้ง
- ผู้ใช้ที่มีชื่อเสียงมากที่สุดมักจะได้รับการดูโปรไฟล์มากขึ้นเนื่องจากพวกเขาปรากฏในข้อความค้นหา / รายชื่อของ Google "ผู้ใช้ที่มีชื่อเสียงมากที่สุด"
- U 542861 401220 88656 https://stackoverflow.com/users/88656/eric-lippert มีส่วนร่วมในการออกแบบ C #
- V 852319 396830 157882 https://stackoverflow.com/users/157882/baluscผู้ใช้อันดับ # 2 อันดับแรกจำนวนบ้าคำตอบ
โปรไฟล์ที่เล่นโวหาร:
- N 13690 108073 63550 https://stackoverflow.com/users/63550/peter-mortensenรูปภาพของตัวเอง! ฉันก็คิดว่าเขาเป็นผู้ดูแลก่อนหน้านี้
- R 143904 144287 895245 https://stackoverflow.com/users/895245/ciro-santilli-%e6%96%b0%e7%96%86%e%%%%%%%%%%%%%%9%8%3%3%3%3%3%3%0%3%3%%%%%%%% 'B จำนวนสัตว์เลี้ยงที่ได้รับ % e5% BF% 83996icu% e5% 85% โฆษณา% e5% 9b% 9b% e4% BA% 8b% e4% bb% b6
- T 291742 161929 560648 https://stackoverflow.com/users/560648/lightness-races-in-orbit
ผู้ใช้ตัวแทนสูงที่ถูกระงับในเวลานั้น อาตัวแทนของคุณโง่ไปกฎ 1:
- B 1 77456 285587 https://stackoverflow.com/users/285587/your-common-sense
ไม่แน่ใจฉันล่อลวงที่จะบอกว่าการจัดการมุมมอง:
- Q 65788 126085 50776 https://stackoverflow.com/users/50776/casperone
- S 15655 81541 293594 https://stackoverflow.com/users/293594/xnx
- W 12019 37047 2227834 https://stackoverflow.com/users/2227834/unheilig
- X 1421 27963 1255427 https://stackoverflow.com/users/1255427/jack-nicholson
การแก้ปัญหาที่เป็นไปได้
ฉันเคยได้ยินเกี่ยวกับช่วงคะแนนความเชื่อมั่นของวิลสันจาก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 และรับมุมมองโปรไฟล์
มีอัลกอริทึมที่รู้จักกันดีซึ่งให้ผลลัพธ์ที่ดีสำหรับปัญหาประเภทนี้หรือไม่? แม้การรู้ชื่อปัญหาที่แม่นยำจะช่วยฉันค้นหาวรรณกรรมที่มีอยู่
บรรณานุกรม
- https://meta.stackoverflow.com/questions/307117/are-profile-views-on-stack-overflow-positively-correlated-to-the-level-of-reputa
- ทดสอบค่าผิดปกติของตัวแปร
- /programming/41462073/multivariate-outlier-detection-using-r-with-probability
- มีวิธีง่ายๆในการตรวจจับผู้ผิดหรือไม่?
- Outliers ควรได้รับการจัดการอย่างไรในการวิเคราะห์การถดถอยเชิงเส้น
- https://math.meta.stackexchange.com/questions/26137/who-maximizes-the-ratio-of-people-reached-to-questions-answered
ทดสอบใน Ubuntu 18.10, VisIt 2.13.3