예제 응용 프로그램으로 Stack Overflow 사용자의 두 가지 속성 인 평판 및 프로필보기 수를 고려하십시오 .
대부분의 사용자에게는이 두 값이 비례합니다. 높은 응답 사용자는 더 많은 관심을 끌고 더 많은 프로필보기를 얻습니다.
따라서 전체 평판에 비해 많은 프로필 조회수를 가진 사용자를 검색하는 것이 흥미 롭습니다.
이는 사용자에게 외부 명성 소스가 있음을 나타낼 수 있습니다. 아니면 흥미로운 프로필 사진과 이름이있을 수도 있습니다.
더 수학적으로, 각 2 차원 샘플 포인트는 사용자이며, 각 사용자는 0에서 + 무한 범위의 두 가지 정수 값을 갖습니다.
- 평판
- 프로필 조회수
이 두 매개 변수는 선형으로 종속 될 것으로 예상되며 해당 가정에서 가장 큰 특이점 인 샘플 포인트를 찾고 싶습니다.
순진한 솔루션은 물론 프로필보기를 취하고 평판으로 나누고 정렬하는 것입니다.
그러나 이는 통계적으로 의미가없는 결과를 제공합니다. 예를 들어, 사용자가 질문에 답변하고 1 개의 투표를 받았으며 어떤 이유로 10 개의 프로필보기를 가지고있어 쉽게 가짜 인 경우 1000 명의 투표와 5000 개의 프로필보기를 가진 훨씬 더 흥미로운 후보자 앞에 표시됩니다. .
좀 더 "실제 세계"사용 사례에서 "가장 의미있는 유니콘은 어떤 스타트 업인가?"와 같은 대답을 시도 할 수 있습니다. 예를 들어 작은 자본으로 1 달러를 투자하면 유니콘을 만듭니다 : https://www.linkedin.com/feed/update/urn:li:activity:6362648516858310656
사용하기 쉬운 실제 깨끗한 콘크리트 데이터
이 문제에 대한 솔루션을 테스트하려면 2019-03 Stack Overflow 데이터 덤프 에서 추출한이 작은 (75M 압축, ~ 10M 사용자) 전처리 파일을 사용하면 됩니다 .
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
users_rep_view.dat
매우 간단한 일반 텍스트 공간 분리 형식을 갖는 UTF-8 인코딩 파일을 생성 합니다.
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
이것은 데이터가 로그 스케일에서 어떻게 보이는지입니다.
그러면 솔루션이 실제로 알려지지 않은 새로운 사용자를 발견하는 데 실제로 도움이되는지 확인하는 것이 흥미로울 것입니다!
초기 데이터는 다음과 같이 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 그래프를 보면 예상대로 다음과 같은 결과가 나타납니다.
- 데이터는 대략적으로 비례하며, 낮은 rep 또는 낮은 조회수 사용자에 대한 분산이 더 큽니다.
- 담당자 수가 적거나 조회수가 적을수록 더 명확합니다. 즉, 계정 ID가 더 높기 때문에 계정이 더 새롭습니다.
데이터에 대한 직관을 얻기 위해 일부 대화 형 플로팅 소프트웨어에서 일부 상위 포인트를 드릴 다운하고 싶었습니다.
Gnuplot과 Matplotlib는 이러한 큰 데이터 세트를 처리 할 수 없었으므로 VisIt 에 처음으로 사진을 제공하여 효과가있었습니다. 여기에 내가 해봤 모든 음모를 꾸미고 소프트웨어의 자세한 개요는 다음과 같습니다 /programming/5854515/large-plot-20-million-samples-gigabytes-of-data/55967461#55967461
실행하기 어려운 OMG. 나는해야했다 :
- 실행 파일을 수동으로 다운로드하십시오. 우분투 패키지가 없습니다.
users_xml_to_rep_view_dat.py
공간으로 구분 된 파일을 공급하는 방법을 쉽게 찾을 수 없기 때문에 빠르게 해킹하여 데이터를 CSV로 변환- UI로 3 시간 동안 싸우다
- 기본 포인트 크기는 픽셀이며 화면의 먼지와 혼동됩니다. 10 픽셀 구로 이동
- 프로필보기가 0 인 사용자가 있었고 VisIt는 로그 플롯을 올바르게 거부했기 때문에 데이터 제한을 사용하여 해당 지점을 제거했습니다. 이것은 gnuplot이 매우 관대하다는 것을 상기시켜 주었으며, 당신이 던지는 모든 것을 행복하게 그릴 것입니다.
- "컨트롤"> "주석"에서 축 제목 추가, 사용자 이름 및 기타 사항 제거
이 수동 작업에 지친 후 VisIt 창이 어떻게 생겼는가 :
편지는 멋진 추천 기능을 사용하여 수동으로 선택한 포인트입니다.
- Picks window> "Float Format"에서 부동 소수점 정밀도를 증가시켜 각 포인트의 정확한 Id를 볼 수 있습니다.
%.10g
- 그런 다음 "다른 이름으로 선택 저장"을 사용하여 손으로 선택한 모든 점을 txt 파일로 덤프 할 수 있습니다. 이를 통해 몇 가지 기본 텍스트 처리로 흥미로운 프로필 URL의 클릭 가능한 목록을 생성 할 수 있습니다
해야할 일 :
- 프로필 이름 문자열을 참조하면 기본적으로 0으로 변환됩니다. 방금 프로필 ID를 브라우저에 붙여 넣었습니다.
- 한 번에 사각형의 모든 점을 선택
마지막으로 몇 명의 사용자가 귀하의 주문에서 높은 순위를 차지해야합니다.
조회수가 많고 정보 프로필이 적은 매우 낮은 담당자입니다.
이러한 사용자는 어딘가에서 트래픽을 리디렉션 할 수 있습니다.
관련 : 사용자가 유명한 질문 금 배지 조작을 위한 메타 스레드가 있었지만 지금 찾을 수 없습니다.
그러한 사용자가 너무 많으면 분석이 어려워 지므로 이러한 "사기"를 피하기 위해 다른 매개 변수를 고려해야합니다.
- 1 143100 2445750 https : //.com/users/2445750/muhammad-mahtab-saleem
- D 60 51111 2139869 https://stackoverflow.com/users/2139869/xxn
- E 4023067 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
- I 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 검색어 / 목록에 표시되므로 더 많은 프로필 조회수를 얻는 경향이 있습니다.
- C # 디자인에 관련된 U 542861 401220 88656 https://stackoverflow.com/users/88656/eric-lippert
- 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%e6%94%b9%e9%80%a0%e4%b8%ad % e5 % bf % 83996icu % e5 % 85 % ad % 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 에서 Wilson 점수 신뢰 구간 에 대해 들었습니다 . 불확실성과 긍정적 인 평가 비율의 균형을 맞 춥니 다. 적은 수의 관찰 결과 "라고했지만이 문제에 어떻게 매핑하는지 잘 모르겠습니다.
이 블로그 게시물에서 저자는 다운 보트보다 더 많은 투표를 가진 항목을 찾는 알고리즘을 권장하지만 동일한 아이디어가 upvote / profile view 문제에 적용되는지 확실하지 않습니다. 나는 복용을 생각하고 있었다 :
- 프로필 조회수 == 찬성
- 여기서 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
- 특이 치를 탐지하는 간단한 방법이 있습니까?
- 선형 회귀 분석에서 특이 치를 어떻게 처리해야합니까?
- https://math.meta.stackexchange.com/questions/26137/who-maximizes-the-ratio-of-people-reached-to-questions-answered
Ubuntu 18.10, VisIt 2.13.3에서 테스트되었습니다.