Làm thế nào để tìm các điểm mẫu có tỷ lệ ngoại lệ lớn có ý nghĩa thống kê giữa hai giá trị của điểm?


12

Là một ứng dụng ví dụ, hãy xem xét hai thuộc tính của người dùng Stack Overflow: danh tiếng và số lượt xem hồ sơ .

Đối với hầu hết người dùng, hai giá trị này sẽ tỷ lệ thuận với nhau: người dùng đại diện cao thu hút nhiều sự chú ý hơn và do đó có được nhiều lượt xem hồ sơ hơn.

Do đó, thật thú vị khi tìm kiếm người dùng có nhiều lượt xem hồ sơ so với tổng danh tiếng của họ.

Điều này có thể chỉ ra rằng người dùng đó có một nguồn danh tiếng bên ngoài. Hoặc có thể chỉ là họ có hình ảnh và tên hồ sơ kỳ quặc thú vị.

Về mặt toán học, mỗi điểm mẫu hai chiều là một người dùng và mỗi người dùng có hai giá trị tích phân từ 0 đến + vô cùng:

  • uy tín
  • số lượt xem hồ sơ

Hai tham số này được dự kiến ​​sẽ phụ thuộc tuyến tính và chúng tôi muốn tìm các điểm mẫu là các ngoại lệ lớn nhất cho giả định đó.

Tất nhiên, giải pháp ngây thơ sẽ chỉ là lấy quan điểm hồ sơ, chia theo danh tiếng và sắp xếp.

Tuy nhiên, điều này sẽ cho kết quả không có ý nghĩa thống kê. Ví dụ: nếu một người dùng trả lời về câu hỏi, có 1 upvote và vì lý do nào đó có 10 lượt xem hồ sơ, dễ giả mạo, thì người dùng đó sẽ xuất hiện trước một ứng cử viên thú vị hơn có 1000 lượt xem và 5000 lượt xem hồ sơ .

Trong trường hợp sử dụng "thế giới thực" hơn, chúng ta có thể cố gắng trả lời ví dụ "khởi nghiệp nào là kỳ lân có ý nghĩa nhất?". Ví dụ: Nếu bạn đầu tư 1 đô la với vốn chủ sở hữu nhỏ, bạn tạo một con kỳ lân: https://www.linkedin.com/feed/update/urn:li:activity:6362648516858310656

Bê tông sạch dễ sử dụng dữ liệu thế giới thực

Để kiểm tra giải pháp của bạn cho vấn đề này, bạn chỉ có thể sử dụng tệp nhỏ được xử lý trước (75M, ~ 10 triệu người dùng) được trích xuất từ ​​kết xuất dữ liệu Stack Overflow 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

tạo ra tệp được mã hóa UTF-8 users_rep_view.datcó định dạng phân tách không gian văn bản đơn giản rất đơn giản:

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

Đây là cách dữ liệu trông như thế nào trên thang đo log:

nhập mô tả hình ảnh ở đây

kịch bản gnuplot .

Sau đó, sẽ rất thú vị để xem liệu giải pháp của bạn có thực sự giúp chúng tôi khám phá những người dùng kỳ quặc mới chưa biết!

Dữ liệu ban đầu được lấy từ kết xuất dữ liệu 2019-03 như sau:

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

Nguồn chousers_xml_to_rep_view_dat.py .

Sau khi chọn các ngoại lệ của bạn bằng cách sắp xếp lại users_rep_view.dat, bạn có thể nhận danh sách HTML có siêu liên kết để xem nhanh các lựa chọn hàng đầu với:

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

Nguồn chousers_rep_view_dat_to_html.py .

Kịch bản này cũng có thể phục vụ như một tài liệu tham khảo nhanh về cách đọc dữ liệu vào Python.

Phân tích dữ liệu thủ công

Ngay lập tức bằng cách nhìn vào biểu đồ gnuplot, chúng ta thấy điều đó như mong đợi:

  • dữ liệu là một tỷ lệ xấp xỉ, với phương sai lớn hơn cho người dùng có số lượt xem thấp hoặc số người xem thấp
  • Người dùng ít đại diện hoặc số lượt xem thấp thì rõ ràng hơn, điều đó có nghĩa là họ có ID tài khoản cao hơn, điều đó có nghĩa là tài khoản của họ mới hơn

Để có được một số trực giác về dữ liệu, tôi muốn đi sâu vào một số điểm xa trong một số phần mềm vẽ đồ họa tương tác.

Gnuplot và Matplotlib không thể xử lý một tập dữ liệu lớn như vậy, vì vậy tôi đã cho VisIt một lần chụp đầu tiên và nó đã hoạt động. Dưới đây là tổng quan chi tiết về tất cả các phần mềm vẽ đồ họa mà tôi đã thử: /programming/5854515/large-plot-20-million-samples-gigabytes-of-data/55967461#55967461

OMG thật khó để chạy. Tôi phải:

  • tải về thực thi thủ công, không có gói Ubuntu
  • chuyển đổi dữ liệu sang CSV bằng cách hack users_xml_to_rep_view_dat.pynhanh chóng vì tôi không thể dễ dàng tìm thấy cách cung cấp cho các tệp được phân tách không gian (bài học đã học, lần sau tôi sẽ đi thẳng vào CSV)
  • chiến đấu trong 3 giờ với UI
    • kích thước điểm mặc định là một pixel, bị lẫn với bụi trên màn hình của tôi. Di chuyển đến các hình cầu 10 pixel
    • có một người dùng có 0 lượt xem hồ sơ và VisIt đã từ chối thực hiện âm mưu logarit, vì vậy tôi đã sử dụng các giới hạn dữ liệu để thoát khỏi điểm đó. Điều này nhắc nhở tôi rằng gnuplot rất dễ dãi, và sẽ vui vẻ vạch ra bất cứ điều gì bạn ném vào nó.
    • thêm tiêu đề trục, xóa tên người dùng và những thứ khác trong "Điều khiển"> "Chú thích"

Đây là cách cửa sổ VisIt của tôi trông giống như sau khi tôi cảm thấy mệt mỏi với công việc thủ công này:

nhập mô tả hình ảnh ở đây

Chữ cái là những điểm mà tôi đã chọn thủ công với tính năng Chọn tuyệt vời:

  • bạn có thể thấy Id chính xác cho từng điểm bằng cách tăng độ chính xác của dấu phẩy động trong cửa sổ Chọn> "Định dạng nổi" thành %.10g
  • sau đó bạn có thể kết xuất tất cả các điểm đã chọn vào một tệp txt với "Lưu chọn dưới dạng". Điều này cho phép chúng tôi tạo một danh sách có thể nhấp các URL hồ sơ thú vị với một số xử lý văn bản cơ bản

TODOs, tìm hiểu làm thế nào để:

  • Xem các chuỗi tên hồ sơ, chúng được chuyển đổi thành 0 theo mặc định. Tôi vừa dán Id hồ sơ vào trình duyệt
  • chọn tất cả các điểm trong một hình chữ nhật trong một lần

Và cuối cùng, đây là một vài người dùng có thể sẽ hiển thị cao khi đặt hàng của bạn:

Phương pháp khả thi

Tôi đã nghe về khoảng tin cậy của điểm Wilson từ https://www.evanmiller.org/how-not-to-sort-by-aenses-rating.html trong đó "cân bằng [tỷ lệ] tỷ lệ xếp hạng tích cực với độ không chắc chắn của một số lượng nhỏ các quan sát ", nhưng tôi không chắc làm thế nào để ánh xạ vấn đề đó.

Trong bài đăng trên blog đó, tác giả khuyến nghị thuật toán đó để tìm các mục có nhiều upvote hơn downvote, nhưng tôi không chắc liệu ý tưởng tương tự có áp dụng cho vấn đề xem upvote / hồ sơ hay không. Tôi đã nghĩ đến việc dùng:

  • lượt xem hồ sơ == upvotes there
  • upvotes here == downvotes there (cả "xấu")

nhưng tôi không chắc liệu nó có hợp lý hay không bởi vì trong vấn đề tăng / giảm, mỗi mục được sắp xếp có N 0/1 sự kiện bình chọn. Nhưng về vấn đề của tôi, mỗi mục có hai sự kiện liên quan đến nó: nhận upvote và nhận chế độ xem hồ sơ.

Có một thuật toán nổi tiếng nào mang lại kết quả tốt cho loại vấn đề này không? Ngay cả khi biết tên vấn đề chính xác sẽ giúp tôi tìm thấy tài liệu hiện có.

Thư mục

Đã thử nghiệm trong Ubuntu 18.10, VisIt 2.13.3.


1
Tôi chưa quen với điều này, vì vậy xin vui lòng chỉnh sửa tiêu đề / câu hỏi để làm cho thuật ngữ chính xác hơn. Cảm ơn.
Ciro Santilli 冠状 病毒 审查 事件

điều này có vẻ như bạn đang tìm kiếm các ngoại lệ. Tôi sẽ sử dụng một kỹ thuật trong không gian này
xác suất

1
@probabilityislogic btw, tôi đã cập nhật câu hỏi với một số dữ liệu dễ sử dụng cụ thể.
Ciro Santilli 冠状 病毒 审查 事件

1
Tôi chỉ muốn nói rằng đây không chỉ là một câu hỏi thú vị, mà còn rất cụ thể và được định dạng tốt. Một ví dụ để tìm đến. Làm tốt lắm @Ciro!
Julio Cezar Silva

1
@JulioCezarSilva cảm ơn !! Lần này tôi không mong đợi tìm hiểu về âm mưu tương tác hoàn hảo cao, nhưng tôi đã làm được. Cổ điển.
Ciro Santilli 冠状 病毒 审查 事件

Câu trả lời:


4

Tôi nghĩ rằng khoảng tin cậy điểm Wilson có thể được áp dụng trực tiếp cho vấn đề của bạn. Điểm số được sử dụng trong blog là giới hạn dưới của khoảng tin cậy thay vì giá trị mong đợi.

Một phương pháp khác cho vấn đề như vậy là điều chỉnh (sai lệch) ước tính của chúng tôi đối với một số kiến ​​thức trước đây mà chúng tôi có, ví dụ như tỷ lệ xem / đại diện chung.

Giả sử số lượt xem trên danh tiếng tuân theo phân phối bình thường , sau đó tỷ lệ lượt xem / đại diện có thể được hiểu là ước tính khả năng tối đa (MLE) của phân phối có nghĩa là .vN(μ,σ)μ

Vấn đề là, như bạn đã đề cập, khi không có đủ dữ liệu, kết quả MLE có phương sai cao (quá mức). Một giải pháp đơn giản cho việc này là giới thiệu phân phối trước đó của và thực hiện tối đa ước tính posteriori (MAP). Phân phối trước có thể là một phân phối bình thường khác được ước tính từ tất cả các mẫu chúng tôi có.μp(μ)

Trong thực tế, đây thực chất là trung bình có trọng số của tỷ lệ xem / rep tổng thể và tỷ lệ xem / rep của người dùng, trong đó là số lượng đại diện người dùng có, là hằng số, là tỷ lệ xem / đại diện của người dùng và tỷ lệ xem / đại diện chung.

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


Để so sánh hai phương thức (khoảng tin cậy điểm Wilson giới hạn dưới và MAP), cả hai đều đưa ra ước tính chính xác khi có đủ dữ liệu (đại diện), khi số lượng đại diện nhỏ, phương pháp giới hạn thấp hơn của Wilson sẽ thiên về 0 và MAP sẽ thiên vị đối với trung bình.


1
Cảm ơn vì đã trả lời! Tôi đã cập nhật câu hỏi với một số dữ liệu cụ thể và dễ sử dụng, hãy xem liệu ai đó có thể tạo ra một số phát hiện thú vị không.
Ciro Santilli 冠状 病毒 审查 事件

1
@CiroSantilli 改造 心 心 996ICU 六四 làm tốt lắm!
dontloo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.