एक उदाहरण के अनुप्रयोग के रूप में, स्टैक ओवरफ्लो उपयोगकर्ताओं के दो गुणों पर विचार करें: प्रतिष्ठा और प्रोफ़ाइल दृश्य मायने रखता है ।
यह उम्मीद की जाती है कि अधिकांश उपयोगकर्ताओं के लिए वे दो मूल्य आनुपातिक होंगे: उच्च प्रतिनिधि उपयोगकर्ता अधिक ध्यान आकर्षित करते हैं और इसलिए अधिक प्रोफ़ाइल दृश्य प्राप्त करते हैं।
इसलिए, उन उपयोगकर्ताओं को खोजना दिलचस्प है, जिनकी कुल प्रतिष्ठा की तुलना में बहुत सारे प्रोफ़ाइल दृश्य हैं।
यह इंगित कर सकता है कि उपयोगकर्ता के पास प्रसिद्धि का एक बाहरी स्रोत है। या शायद सिर्फ इतना है कि उनके पास दिलचस्प विचित्र प्रोफ़ाइल चित्र और नाम हैं।
गणितीय रूप से, प्रत्येक द्वि-आयामी नमूना बिंदु एक उपयोगकर्ता है, और प्रत्येक उपयोगकर्ता में 0 से + अनंत तक दो अभिन्न मूल्य हैं:
- प्रतिष्ठा
- प्रोफ़ाइल विचारों की संख्या
उन दो मापदंडों को रैखिक रूप से निर्भर होने की उम्मीद है, और हम नमूना बिंदुओं को खोजना चाहेंगे जो उस धारणा के लिए सबसे बड़े आउटलेर हैं।
भोली समाधान सिर्फ प्रोफ़ाइल विचार लेने, प्रतिष्ठा से विभाजित करने और सॉर्ट करने के लिए होगा।
हालांकि, यह ऐसे परिणाम देगा जो सांख्यिकीय रूप से सार्थक नहीं हैं। उदाहरण के लिए, यदि किसी उपयोगकर्ता ने सवाल का जवाब दिया, तो 1 अपवोट मिला, और किसी कारण से 10 प्रोफ़ाइल दृश्य थे, जो नकली होना आसान था, तो वह उपयोगकर्ता बहुत अधिक दिलचस्प उम्मीदवार के सामने दिखाई देगा, जिसके 1000 अपवोट और 5000 प्रोफ़ाइल विचार हैं ।
एक अधिक "वास्तविक दुनिया" उपयोग के मामले में, हम उदाहरण के लिए जवाब देने की कोशिश कर सकते हैं "कौन सा स्टार्टअप सबसे सार्थक गेंडा हैं?"। उदाहरण के लिए, यदि आप छोटी इक्विटी के साथ 1 डॉलर का निवेश करते हैं, तो आप एक गेंडा बनाते हैं: https://www.linkedin.com/feed/update/urn:li:activity:636264851685838310656
ठोस स्वच्छ आसान उपयोग वास्तविक दुनिया डेटा
इस समस्या के अपने समाधान का परीक्षण करने के लिए, आप इस छोटे (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
यह डेटा लॉग पैमाने पर कैसा दिखता है:
यह देखना दिलचस्प होगा कि क्या आपका समाधान वास्तव में हमें नए अज्ञात quirky उपयोगकर्ताओं को खोजने में मदद करता है!
प्रारंभिक डेटा 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
।
यह स्क्रिप्ट पायथन में डेटा को पढ़ने के तरीके के त्वरित संदर्भ के रूप में भी काम कर सकती है।
मैनुअल डेटा विश्लेषण
Gnuplot ग्राफ को देखने के तुरंत बाद हम उम्मीद के मुताबिक देखते हैं:
- डेटा लगभग समानुपातिक है, जिसमें कम प्रतिनिधि या कम व्यू काउंट उपयोगकर्ताओं के लिए अधिक भिन्नताएं हैं
- कम प्रतिनिधि या लो व्यू काउंट उपयोगकर्ता स्पष्ट हैं, जिसका अर्थ है कि उनके पास उच्च खाता आईडी हैं, जिसका अर्थ है कि उनके खाते नए हैं
डेटा के बारे में कुछ अंतर्ज्ञान प्राप्त करने के लिए, मैं कुछ इंटरेक्टिव प्लॉटिंग सॉफ़्टवेयर में कुछ दूर बिंदुओं को कम करना चाहता था।
Gnuplot और Matplotlib इतने बड़े डेटासेट को संभाल नहीं पाए, इसलिए मैंने VisIt को पहली बार एक शॉट दिया और यह काम कर गया। यहाँ मेरे द्वारा किए गए सभी प्लॉटिंग सॉफ़्टवेयर का विस्तृत अवलोकन है: /programming/5854515/large-plot-20-million-samples-gigabytes-of-data/5596746##55967461
OMG जिसे चलाना मुश्किल था। मुझे करना पड़ा:
- मैन्युअल रूप से निष्पादन योग्य डाउनलोड करें, कोई उबंटू पैकेज नहीं है
- सीएसवी में डेटा को
users_xml_to_rep_view_dat.py
जल्दी से हैक करके परिवर्तित करें क्योंकि मैं आसानी से यह नहीं पा सका कि इसे अलग-अलग फ़ाइलों को कैसे फीड किया जाए (सबक सीखा, अगली बार जब मैं सीधे सीएसवी के लिए जाऊंगा) - यूआई के साथ 3 घंटे के लिए लड़ाई
- डिफ़ॉल्ट बिंदु आकार एक पिक्सेल है, जो मेरी स्क्रीन पर धूल से भ्रमित हो जाता है। 10 पिक्सेल के गोले पर जाएँ
- एक उपयोगकर्ता था, जिसमें 0 प्रोफ़ाइल दृश्य थे, और VisIt ने लॉगरिथम प्लॉट को करने से सही ढंग से इनकार कर दिया, इसलिए मैंने उस बिंदु से छुटकारा पाने के लिए डेटा सीमा का उपयोग किया। इसने मुझे याद दिलाया कि gnuplot बहुत अनुज्ञेय है, और ख़ुशी से आप इसे फेंकने वाली किसी भी चीज़ की साजिश करेंगे।
- "नियंत्रण"> "एनोटेशन" के तहत अक्ष शीर्षक जोड़ें, उपयोगकर्ता नाम और अन्य चीजें निकालें
इस मैनुअल काम के थक जाने के बाद मेरी VisIt विंडो कैसी दिखी:
पत्र वे बिंदु हैं जिन्हें मैंने भयानक पिक्स फीचर के साथ मैन्युअल रूप से चुना था:
- आप पिक्स विंडो में फ्लोटिंग पॉइंट प्रिसिजन> "फ्लोट फॉर्मेट" को बढ़ाकर प्रत्येक बिंदु के लिए सटीक आईडी देख सकते हैं
%.10g
- फिर आप "Ticks के रूप में सहेजें" के साथ एक txt फ़ाइल के लिए सभी हाथ उठाया अंक डंप कर सकते हैं। यह हमें कुछ मूल पाठ प्रसंस्करण के साथ दिलचस्प प्रोफ़ाइल URL की क्लिक करने योग्य सूची बनाने की अनुमति देता है
TODO, जानें कैसे करें:
- प्रोफ़ाइल नाम स्ट्रिंग देखें, वे डिफ़ॉल्ट रूप से 0 में परिवर्तित हो जाते हैं। मैंने प्रोफ़ाइल Ids को ब्राउज़र में चिपकाया है
- एक बार में सभी बिंदुओं को एक आयत में चुनें
और अंत में, यहां कुछ उपयोगकर्ता हैं जिन्हें आपके आदेश पर उच्च प्रदर्शन करने की संभावना है:
विशाल व्यू काउंट और कम सूचना प्रोफाइल वाले बहुत कम प्रतिनिधि उपयोगकर्ता।
इन उपयोगकर्ताओं को किसी न किसी तरह से यातायात को पुनर्निर्देशित करने की संभावना है।
संबंधित: एक उपयोगकर्ता द्वारा प्रसिद्ध प्रश्न गोल्ड बैज हेरफेर के लिए एक मेटा थ्रेड था , लेकिन मैं इसे अब नहीं ढूंढ सकता।
यदि ऐसे उपयोगकर्ता बहुत अधिक हैं, तो हमारा विश्लेषण मुश्किल होगा, और हमें "धोखाधड़ी" से बचने के लिए अन्य मापदंडों पर विचार करने की कोशिश करने की आवश्यकता होगी:
- ए १ १४३१०० २४४५ https: //५ https://stackoverflow.com/users/2445750/muhammad-mahtab.semem
- D 60 51111 2139869 https://stackoverflow.com/users/2139869/xxn
- ई 40 23067 5740196 https://stackoverflow.com/users/5740196/listcrawler
- एफ 11 7738 3313079 https://stackoverflow.com/users/3313079/rikitikitaco
- G 136 11123 4102129 https://stackoverflow.com/users/4102129/abhishek-deshpande
- के 377 24453 1012351 https://stackoverflow.com/users/1012351/overstack
- एल 1489 57515 1249338 https://stackoverflow.com/users/1249338/frosty
- एम 1767 40986 2578799 https://stackoverflow.com/users/2578799/naresh-walia
- मुझे उपयोगकर्ताओं के इस समूह को दिलचस्प लगता है, जो सभी ग्राफ़ में पास हैं:
- H 58 4331 1818755 https://stackoverflow.com/users/1818755/eerongal
- I 103 4366 1816274 https://stackoverflow.com/users/1816274/angelov
- जे 157 4688 688552 https://stackoverflow.com/users/688552/oylex
बाहरी प्रसिद्धि:
- O 29799 170854 2274694 https://stackoverflow.com/users/2274694/lyndsey-scottex विक्टोरिया सीक्रेट मॉडल: https://en.wikipedia.org/wiki/Lyndsey_Scott
- पी 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 top # 2 उपयोगकर्ता, जवाबों का पागल
विचित्र प्रोफाइल:
- एन 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%e6%94%b9%809a80%a0%e4%b8%ad % E5% BF के% 83996icu% E5% 85% विज्ञापन% E5% 9b% 9b% E4% बा% 8b% E4% bb% बी -6
- T 291742 161929 560648 https://stackoverflow.com/users/560648/lightness-races-orbit-orbit
उच्च प्रतिनिधि उपयोगकर्ता जो उस समय निलंबित थे। आह, मूर्ख आपका प्रतिनिधि 1 नियम पर जाता है:
- बी 1 77456 285587 https://stackoverflow.com/users/285587/your-common-sense
यकीन नहीं है, मैं हेरफेर देखने के लिए कह रहा हूँ:
- Q 65788 126085 50776 https://stackoverflow.com/users/50776/casperone
- एस 15655 81541 293594 https://stackoverflow.com/users/293594/xnx
- डब्ल्यू 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-aiture-rating.html से विल्सन स्कोर आत्मविश्वास अंतराल के बारे में सुना है, जो अनिश्चितता के साथ सकारात्मक रेटिंग के अनुपात को "संतुलन" करता है। टिप्पणियों की एक छोटी संख्या ", लेकिन मुझे यकीन नहीं है कि इस समस्या को कैसे चित्रित किया जाए।
उस ब्लॉग पोस्ट में, लेखक उस एल्गोरिथ्म को उन वस्तुओं को खोजने की सिफारिश करता है, जिनमें डाउनवोट्स की तुलना में बहुत अधिक अपवोट्स हैं, लेकिन मुझे यकीन नहीं है कि अगर यह विचार upvote / प्रोफ़ाइल दृश्य समस्या पर लागू होता है। मैं लेने की सोच रहा था:
- प्रोफ़ाइल दृश्य == वहाँ upvotes
- यहाँ upvotes == वहां डाउनवोट्स (दोनों "खराब")
लेकिन मुझे यकीन नहीं है कि यह समझ में आता है क्योंकि अप / डाउनवोट समस्या पर, प्रत्येक आइटम को सॉर्ट किया जा रहा है एन 0/1 वोट इवेंट। लेकिन मेरी समस्या पर, प्रत्येक आइटम में इससे जुड़ी दो घटनाएं हैं: उत्थान प्राप्त करना, और प्रोफ़ाइल दृश्य प्राप्त करना।
क्या एक प्रसिद्ध एल्गोरिथ्म है जो इस तरह की समस्या के लिए अच्छे परिणाम देता है? यहां तक कि सटीक समस्या नाम जानने से मुझे मौजूदा साहित्य खोजने में मदद मिलेगी।
ग्रन्थसूची
- 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
- क्या आउटलेर्स का पता लगाने का एक सरल तरीका है?
- रेखीय प्रतिगमन विश्लेषण में आउटलेयर से कैसे निपटा जाना चाहिए?
- https://math.meta.stackexchange.com/questions/26137/who-maximizes-the-ratio-of-people-reached-to-questions-answered
उबंटू 18.10, वीआईटी 2.13.3 में परीक्षण किया गया।