Bagaimana menemukan titik sampel yang memiliki rasio outlier besar yang bermakna secara statistik antara dua nilai titik?

12

Sebagai contoh aplikasi, pertimbangkan dua properti berikut pengguna Stack Overflow: reputasi dan jumlah tampilan profil .

Diharapkan bahwa bagi sebagian besar pengguna, kedua nilai tersebut akan proporsional: pengguna tingkat tinggi menarik lebih banyak perhatian dan karenanya mendapatkan lebih banyak tampilan profil.

Karena itu, menarik untuk mencari pengguna yang memiliki banyak tampilan profil dibandingkan dengan total reputasi mereka.

Ini dapat menunjukkan bahwa pengguna tersebut memiliki sumber ketenaran eksternal. Atau mungkin hanya karena mereka memiliki gambar dan nama profil unik yang menarik.

Lebih matematis, setiap titik sampel dua dimensi adalah pengguna, dan setiap pengguna memiliki dua nilai integral mulai dari 0 hingga + tak terhingga:

  • reputasi
  • jumlah tampilan profil

Kedua parameter tersebut diharapkan akan bergantung secara linear, dan kami ingin mencari titik sampel yang merupakan outlier terbesar untuk asumsi tersebut.

Solusi naif tentu saja dengan hanya mengambil tampilan profil, dibagi berdasarkan reputasi, dan urutkan.

Namun, ini akan memberikan hasil yang tidak bermakna secara statistik. Misalnya, jika pengguna menjawab pertanyaan, mendapat 1 upvote, dan karena alasan tertentu memiliki 10 tampilan profil, yang mudah dipalsukan, maka pengguna itu akan muncul di depan kandidat yang jauh lebih menarik yang memiliki 1000 upvotes dan 5000 tampilan profil. .

Dalam kasus penggunaan yang lebih "dunia nyata", kita dapat mencoba menjawab misalnya "startup mana yang paling bermakna unicorn?". Misalnya, jika Anda menginvestasikan 1 dolar dengan ekuitas kecil, Anda membuat unicorn: https://www.linkedin.com/feed/update/urn:li:activity:6362648516858310656

Data nyata dari dunia nyata yang bersih dan mudah digunakan

Untuk menguji solusi Anda untuk masalah ini, Anda bisa menggunakan file praproses kecil (75M terkompresi, ~ 10M pengguna) yang diekstrak dari dump data 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

yang menghasilkan file users_rep_view.datyang disandikan UTF-8 yang memiliki format dipisahkan ruang teks biasa yang sangat sederhana:

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

Begini tampilannya data pada skala log:

masukkan deskripsi gambar di sini

skrip gnuplot .

Maka akan menarik untuk melihat apakah solusi Anda benar-benar membantu kami menemukan pengguna aneh baru yang tidak dikenal!

Data awal diperoleh dari dump data 2019-03 sebagai berikut:

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

Sumber untukusers_xml_to_rep_view_dat.py .

Setelah memilih outlier Anda dengan memesan ulang users_rep_view.dat, Anda bisa mendapatkan daftar HTML dengan hyperlink untuk dengan cepat melihat pilihan teratas dengan:

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

Sumber untukusers_rep_view_dat_to_html.py .

Script ini juga bisa berfungsi sebagai referensi cepat tentang cara membaca data ke Python.

Analisis data manual

Segera dengan melihat grafik gnuplot kita melihat bahwa seperti yang diharapkan:

  • datanya kira-kira proporsional, dengan varian yang lebih besar untuk pengguna dengan rep rendah atau jumlah tampilan rendah
  • rep rendah atau jumlah tampilan rendah pengguna lebih jelas, yang berarti bahwa mereka memiliki ID akun yang lebih tinggi, yang berarti bahwa akun mereka lebih baru

Untuk mendapatkan intuisi tentang data, saya ingin menelusuri beberapa poin yang jauh dalam beberapa perangkat lunak plot interaktif.

Gnuplot dan Matplotlib tidak bisa menangani dataset sebesar itu, jadi saya memberi VisIt kesempatan untuk pertama kalinya dan itu berhasil. Berikut ini adalah ikhtisar terperinci dari semua perangkat lunak yang telah saya coba: /programming/5854515/large-plot-20-million-samples-gigabytes-of-data/55967461#55967461

OMG itu sulit dijalankan. Saya harus:

  • unduh executable secara manual, tidak ada paket Ubuntu
  • mengonversi data ke CSV dengan meretas dengan users_xml_to_rep_view_dat.pycepat karena saya tidak dapat dengan mudah menemukan cara memberi makan file-file yang dipisahkan oleh ruang (pelajaran dipelajari, lain kali saya akan langsung menuju CSV)
  • berjuang selama 3 jam dengan UI
    • ukuran titik default adalah pixel, yang menjadi bingung dengan debu di layar saya. Pindah ke bola 10 piksel
    • ada pengguna dengan 0 profil view, dan VisIt dengan benar menolak untuk melakukan plot logaritma, jadi saya menggunakan batasan data untuk menyingkirkan titik itu. Ini mengingatkan saya bahwa gnuplot sangat permisif, dan dengan senang hati akan merencanakan apa pun yang Anda lemparkan padanya.
    • tambahkan judul sumbu, hapus nama pengguna, dan hal-hal lain di bawah "Kontrol"> "Anotasi"

Begini tampilan jendela Visit saya setelah saya bosan dengan pekerjaan manual ini:

masukkan deskripsi gambar di sini

The Letters adalah poin yang saya pilih secara manual dengan fitur Pilihan yang luar biasa:

  • Anda dapat melihat ID yang tepat untuk setiap titik dengan meningkatkan presisi titik apung di jendela Pilihan> "Format Float" ke %.10g
  • Anda kemudian dapat membuang semua poin pilihan tangan ke file txt dengan "Simpan Pilihan sebagai". Ini memungkinkan kami untuk menghasilkan daftar URL profil menarik yang dapat diklik dengan beberapa pemrosesan teks dasar

TODO, pelajari cara:

  • lihat string nama profil, mereka dapat dikonversi ke 0 secara default. Saya baru saja menempel Id profil ke browser
  • pilih semua poin dalam persegi panjang sekaligus

Dan akhirnya, berikut adalah beberapa pengguna yang mungkin akan menunjukkan pesanan Anda:

Solusi yang memungkinkan

Saya pernah mendengar tentang interval kepercayaan skor Wilson dari https://www.evanmiller.org/how-not-to-sort-by-average-rating.html yang "menyeimbangkan proporsi peringkat positif dengan ketidakpastian. dari sejumlah kecil pengamatan ", tapi saya tidak yakin bagaimana memetakan itu untuk masalah ini.

Dalam posting blog itu, penulis merekomendasikan algoritma tersebut untuk menemukan item yang memiliki lebih banyak upvotes daripada downvotes, tetapi saya tidak yakin apakah ide yang sama berlaku untuk masalah tampilan profil / upvote. Saya berpikir untuk mengambil:

  • profil dilihat == upvotes di sana
  • naik turun di sini == turun di sana (keduanya "buruk")

tapi saya tidak yakin apakah itu masuk akal karena pada masalah naik / turun, setiap item yang disortir memiliki N 0/1 suara acara. Tetapi pada masalah saya, setiap item memiliki dua peristiwa yang terkait: mendapatkan upvote, dan mendapatkan tampilan profil.

Apakah ada algoritma terkenal yang memberikan hasil yang baik untuk masalah seperti ini? Bahkan mengetahui nama masalah yang tepat akan membantu saya menemukan literatur yang ada.

Bibliografi

Diuji di Ubuntu 18.10, VisIt 2.13.3.

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
sumber
1
Saya baru dalam hal ini, jadi silakan mengedit judul / pertanyaan untuk membuat terminologi lebih benar. Terima kasih.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
ini terlihat seperti Anda mencari outlier. Saya akan menggunakan teknik di ruang ini
probabilityislogic
1
@probabilityislogic btw, saya telah memperbarui pertanyaan dengan data konkret yang mudah digunakan.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
1
Saya hanya ingin mengatakan ini bukan hanya pertanyaan yang menarik, tetapi juga sangat konkret dan diformat dengan baik. Contoh untuk melihat. Kerja bagus @Ciro!
Julio Cezar Silva
1
@JulioCezarSilva terima kasih !! Saya tidak berharap untuk belajar tentang merencanakan interaktif perf tinggi kali ini, tapi saya lakukan. Klasik.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Jawaban:

4

Saya pikir interval kepercayaan skor Wilson dapat diterapkan langsung ke masalah Anda. Skor yang digunakan di blog adalah batas bawah dari interval kepercayaan bukannya nilai yang diharapkan.

Metode lain untuk masalah tersebut adalah untuk mengoreksi (bias) estimasi kami terhadap beberapa pengetahuan sebelumnya yang kami miliki, misalnya rasio tampilan / rep keseluruhan.

vN(μ,σ)μ

μp(μ)

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


Untuk membandingkan dua metode (Wilson skor interval kepercayaan batas bawah dan PETA), keduanya memberikan estimasi yang akurat ketika ada data yang cukup (repetisi), ketika jumlah repetisi kecil, metode batas bawah Wilson akan bias menuju nol dan MAP akan Bias menuju mean.

dontloo
sumber
1
Terima kasih untuk balasan Anda! Saya telah memperbarui pertanyaan dengan beberapa data yang konkret dan mudah digunakan, mari kita lihat apakah seseorang berhasil membuat beberapa temuan yang menyenangkan.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
1
@CiroSantilli 新疆 改造 中心 996ICU 六四 事件 kerja bagus!
dontloo