점의 두 값 사이에 통계적으로 의미있는 특이 치 비율이 큰 표본 점을 찾는 방법은 무엇입니까?


12

예제 응용 프로그램으로 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

이것은 데이터가 로그 스케일에서 어떻게 보이는지입니다.

여기에 이미지 설명을 입력하십시오

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 .

이 스크립트는 또한 파이썬으로 데이터를 읽는 방법에 대한 빠른 참조 역할을 할 수 있습니다.

수동 데이터 분석

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를 브라우저에 붙여 넣었습니다.
  • 한 번에 사각형의 모든 점을 선택

마지막으로 몇 명의 사용자가 귀하의 주문에서 높은 순위를 차지해야합니다.

가능한 해결책

https://www.evanmiller.org/how-not-to-sort-by-average-rating.html 에서 Wilson 점수 신뢰 구간 에 대해 들었습니다 . 불확실성과 긍정적 인 평가 비율의 균형을 맞 춥니 다. 적은 수의 관찰 결과 "라고했지만이 문제에 어떻게 매핑하는지 잘 모르겠습니다.

이 블로그 게시물에서 저자는 다운 보트보다 더 많은 투표를 가진 항목을 찾는 알고리즘을 권장하지만 동일한 아이디어가 upvote / profile view 문제에 적용되는지 확실하지 않습니다. 나는 복용을 생각하고 있었다 :

  • 프로필 조회수 == 찬성
  • 여기서 upvotes == 거기에서 downvotes (둘 다 "나쁜")

그러나 up / downvote 문제로 정렬되는 각 항목에 N 0 / 1 투표 이벤트가 있기 때문에 의미가 있는지 확실하지 않습니다. 그러나 내 문제에서 각 항목에는 두 가지 이벤트가 있습니다. upvote 가져 오기 및 프로필보기 가져 오기.

이런 종류의 문제에 대해 좋은 결과를 제공하는 잘 알려진 알고리즘이 있습니까? 정확한 문제 이름을 아는 것조차도 기존 문헌을 찾는 데 도움이 될 것입니다.

서지

Ubuntu 18.10, VisIt 2.13.3에서 테스트되었습니다.


1
나는 이것에 익숙하지 않으므로 용어 / 질문을 자유롭게 편집하여 용어를보다 정확하게 만드십시오. 감사.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

특이 치를 찾고있는 것 같습니다. 나는이 공간에서 기술을 사용합니다
probabilityislogic

1
@ probabilityislogic btw, 나는 구체적이고 사용하기 쉬운 데이터로 질문을 업데이트했습니다.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功 '

1
나는 이것이 흥미로운 질문 일뿐 만 아니라 매우 구체적이고 형식이 좋은 것이라고 말하고 싶습니다. 살펴볼 예제입니다. @Ciro 잘 했어요!
Julio Cezar Silva 12시 14 분

1
트윗 담아 가기 나는 이번에 고성능 대화식 음모에 대해 배우기를 기대하지 않았지만 그렇게했습니다. 권위 있는.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

답변:


4

윌슨 점수 신뢰 구간이 문제에 직접 적용될 수 있다고 생각합니다. 블로그에 사용 된 점수는 예상 값이 아닌 신뢰 구간의 하한이었습니다.

그러한 문제에 대한 또 다른 방법은 우리가 가지고있는 사전 지식, 예를 들어 전체보기 / 응답 비율에 대한 추정을 수정 (바이어스)하는 것입니다.

vN(μ,σ)μ

μp(μ)

실제로 이것은 본질적으로 전체보기 / 비율 및 사용자보기 / 비율의 가중 평균입니다. 여기서 는 사용자가 보유한 반복 횟수이며, 는 상수입니다. 은 사용자의 조회 / 응답 비율이며 은 전체 조회 / 응답 비율입니다.

μMAP=nμMLE+cμ0n+c
ncμMLEμ0


두 방법 (Wilson 점수 신뢰 구간 하한과 MAP)을 비교하기 위해 충분한 데이터 (회수)가있을 때 정확한 추정치를 제공하고 반복 횟수가 적을 때 Wilson 하한 방법은 0으로 편향되며 MAP는 평균을 향한 편견.


1
답장을 보내 주셔서 감사합니다! 구체적이고 사용하기 쉬운 데이터로 질문을 업데이트했습니다.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功 '

1
@CiroSantilli 新疆 改造 中心 996ICU 六四 事件 잘 했어요!
dontloo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.