Noktanın iki değeri arasında istatistiksel olarak anlamlı büyük aykırı oranlara sahip örnek noktalar nasıl bulunur?


12

Örnek bir uygulama olarak, Stack Overflow kullanıcılarının iki özelliğini izlemeyi düşünün: itibar ve profil görünümü sayıları .

Çoğu kullanıcı için bu iki değerin orantılı olması beklenir: yüksek rep kullanıcıları daha fazla dikkat çeker ve bu nedenle daha fazla profil görünümü elde eder.

Bu nedenle, toplam itibarlarına kıyasla çok sayıda profil görüntülemesine sahip kullanıcıları aramak ilginçtir.

Bu kullanıcının harici bir şöhret kaynağına sahip olduğunu gösterebilir. Ya da belki ilginç ilginç profil resimleri ve isimleri var.

Daha matematiksel olarak, her iki boyutlu örnek noktası bir kullanıcıdır ve her kullanıcının 0 ila + sonsuz arasında değişen iki integral değeri vardır:

  • itibar
  • profil görüntüleme sayısı

Bu iki parametrenin doğrusal olarak bağımlı olması beklenir ve bu varsayımın en büyük aykırı değerleri olan örnek noktaları bulmak isteriz.

Naif çözüm elbette sadece profil görüşlerini almak, itibara bölünmek ve sıralamak olacaktır.

Ancak, bu istatistiksel olarak anlamlı olmayan sonuçlar verecektir. Örneğin, bir kullanıcı soruya cevap verdiğinde, 1 yukarı oy aldıysa ve bazı nedenlerden dolayı sahte olması kolay 10 profil görünümü varsa, bu kullanıcı 1000 yukarı ve 5000 profil görüntülemesine sahip çok daha ilginç bir adayın önünde görünecektir. .

Daha "gerçek bir dünya" kullanım örneğinde, örneğin "hangi girişimler en anlamlı tek boynuzlu atlar?" Örneğin, küçük bir özkaynak ile 1 dolar yatırım yaparsanız, bir tek boynuzlu at yaratırsınız: https://www.linkedin.com/feed/update/urn:li:activity:6362648516858310656

Beton temiz, kullanımı kolay gerçek dünya verileri

Bu soruna çözümünüzü test etmek için, 2019-03 Yığın Taşması veri dökümünden çıkarılan bu küçük (75M sıkıştırılmış, ~ 10M kullanıcı) önceden işlenmiş dosyayı kullanabilirsiniz :

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çok basit bir düz metin alanı ayrılmış formatı olan UTF-8 kodlu dosyayı üretir :

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

Veriler bir günlük ölçeğinde şöyle görünür:

resim açıklamasını buraya girin

gnuplot betiği .

Daha sonra çözümünüzün yeni bilinmeyen ilginç kullanıcıları keşfetmemize gerçekten yardımcı olup olmadığını görmek ilginç olacaktır!

İlk veriler 2019-03 veri dökümünden aşağıdaki gibi elde edilmiştir:

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

İçin kaynakusers_xml_to_rep_view_dat.py .

Sıralamanızı yeniden users_rep_view.datsıralayarak seçtikten sonra , en iyi seçimleri hızlı bir şekilde görüntülemek için köprüler içeren bir HTML listesi alabilirsiniz:

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

İçin kaynakusers_rep_view_dat_to_html.py .

Bu komut dosyası, verilerin Python'a nasıl okunacağına hızlı bir başvuru olarak da hizmet edebilir.

Manuel veri analizi

Hemen gnuplot grafiğine bakarak beklediğimiz gibi görüyoruz:

  • veriler yaklaşık orantılıdır ve düşük rep veya düşük görüntüleme sayısı kullanıcıları için daha büyük varyanslar vardır
  • düşük rep veya düşük görüntüleme sayısı kullanıcıları daha nettir, bu da daha yüksek hesap kimliklerine sahip oldukları anlamına gelir. Bu, hesaplarının daha yeni olduğu anlamına gelir

Veriler hakkında bazı sezgiler elde etmek için, bazı interaktif çizim yazılımlarında bazı uzak noktaları incelemek istedim.

Gnuplot ve Matplotlib böyle büyük bir veri kümesini işleyemedi, bu yüzden VisIt'a ilk kez bir çekim yaptım ve işe yaradı. Denediğim tüm çizim yazılımlarına ayrıntılı bir genel bakış: /programming/5854515/large-plot-20-million-samples-gigabytes-of-data/55967461#55967461

OMG koşmak zor oldu. Yapmak zorundaydım:

  • yürütülebilir dosyayı manuel olarak indirin, Ubuntu paketi yok
  • verileri users_xml_to_rep_view_dat.pyhızlı bir şekilde hackleyerek CSV'ye dönüştürün çünkü alandan ayrılmış dosyaları nasıl besleyeceğimizi kolayca bulamadım (öğrendiğim ders, bir dahaki sefere CSV için düz gideceğim)
  • kullanıcı arayüzü ile 3 saat boyunca savaş
    • varsayılan nokta boyutu, ekranımdaki tozla karışan bir pikseldir. 10 piksel küreye gitme
    • 0 profil görüntülemesine sahip bir kullanıcı vardı ve VisIt logaritma grafiğini yapmayı reddetti, bu yüzden bu noktadan kurtulmak için veri sınırları kullandım. Bu bana gnuplot'un çok izin verici olduğunu ve ona attığınız her şeyi mutlu bir şekilde çizeceğini hatırlattı.
    • "Kontroller"> "Ek Açıklamalar" altında eksen başlıkları ekleyin, kullanıcı adını kaldırın ve diğer işlemleri yapın

Bu manuel çalışmadan bıktıktan sonra VisIt pencerem şöyle görünüyordu:

resim açıklamasını buraya girin

Harfler, harika Seçimler özelliği ile manuel olarak seçtiğim noktalardır:

  • Seçtikler penceresinde "Kayan Biçim" bölümündeki kayan nokta hassasiyetini artırarak her nokta için kesin kimliği görebilirsiniz. %.10g
  • daha sonra "El ile Farklı Kaydet" i kullanarak tüm elle toplanan noktaları bir txt dosyasına dökebilirsiniz. Bu, bazı temel metin işlemleriyle tıklanabilir ilginç profil URL'lerinin tıklanabilir bir listesini oluşturmamızı sağlar

YAPILACAKLAR, şunları yapmayı öğrenin:

  • profil adı dizelerine bakın, varsayılan olarak 0'a dönüştürülürler. Profil ID'leri tarayıcıya yeni yapıştırdım
  • bir kerede bir dikdörtgen içindeki tüm noktaları seç

Ve son olarak, siparişinizde büyük olasılıkla ortaya çıkması gereken birkaç kullanıcı:

Olası çözümler

Ben duydum Wilson skoru güven aralığı dan https://www.evanmiller.org/how-not-to-sort-by-average-rating.html hangi "denge [s] belirsizlikle pozitif değerlendirmesi oranı "ancak bunu bu sorunla nasıl eşleştireceğimden emin değilim.

Bu blog gönderisinde yazar, algoritmanın downvotes'tan çok daha fazla upvotes içeren öğeleri bulmasını önerir, ancak aynı fikrin upvote / profil görünümü problemi için geçerli olup olmadığından emin değilim. Almayı düşünüyordum:

  • profile views == orada oylar
  • upvotes here == orada downvotes (her ikisi de "kötü")

ancak yukarı / aşağı oylama sorununda, sıralanan her öğenin N 0/1 oy olayları olduğundan mantıklı olup olmadığından emin değilim. Ama benim sorunumda, her öğenin kendisiyle ilişkili iki olay var: upvote almak ve profil görünümünü almak.

Bu tür bir sorun için iyi sonuçlar veren iyi bilinen bir algoritma var mı? Kesin problem ismini bilmek bile mevcut literatürü bulmama yardımcı olacaktır.

Kaynakça

Ubuntu 18.10, VisIt 2.13.3'te test edilmiştir.


1
Bu konuda yeniyim, bu yüzden terminolojiyi daha doğru hale getirmek için başlığı / soruyu düzenlemekten çekinmeyin. Teşekkürler.
Ciro Santilli 法轮功 illi: 六四 事件 法轮功

Bu, aykırı değer aradığınıza benziyor. Bu alanda bir teknik kullanırım
olasılık

1
@probabilityislogic btw, soruyu kullanımı kolay bazı somut verilerle güncelledim.
Ciro Santilli 法轮功 病毒 审查 六四 事件 法轮功

1
Sadece bunun ilginç bir soru değil, aynı zamanda çok somut ve iyi biçimlendirilmiş olduğunu söylemek isterim. Bakmak için bir örnek. İyi iş @Ciro!
Julio Cezar Silva

1
@JulioCezarSilva teşekkürler !! Bu sefer yüksek perf interaktif çizim hakkında bilgi almayı beklemiyordum ama yaptım. Klasik.
Ciro Santilli 法轮功 病毒 审查 六四 事件 法轮功

Yanıtlar:


4

Wilson skor güven aralığının doğrudan probleminize uygulanabileceğini düşünüyorum. Blogda kullanılan puan, beklenen değer yerine güven aralığının alt sınırıydı.

Bu tür bir problem için başka bir yöntem, örneğin genel bakış / tekrar oranı gibi önceden sahip olduğumuz bazı bilgilere yönelik tahminimizi düzeltmektir (saptırmak).

Ün başına görüntüleme sayısı normal dağılımı aşağıdaki ki , ardından görünüm / rep oranı dağılımı ortalama maksimum olabilirlik kestirimi (MLE) olarak yorumlanabilir .vN(μ,σ)μ

Sorun, belirttiğiniz gibi, yetersiz veri olduğunda, MLE sonucunun yüksek varyans (aşırı uydurma) olmasıdır. Bunun için basit bir çözüm, bir önceki dağılımını tanıtmak ve maksimum bir posteriori tahmin (MAP) yapmaktır. Önceki dağılım sahip olduğumuz tüm numunelerden tahmin edilen başka bir normal dağılım olabilir.μp(μ)

Uygulamada, bu aslında toplam görüntüleme / oranı ve kullanıcı görüntüleme / oranı ağırlıklı ortalamasıdır, burada bir kullanıcının sahip olduğu tekrar sayısı, sabittir, kullanıcının görüntüleme / tekrar oranı ve genel görüntüleme / tekrar oranıdır.

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


İki yöntemi karşılaştırmak için (Wilson skor güven aralığı alt sınırı ve MAP), her ikisi de yeterli veri (tekrar) olduğunda doğru bir tahmin verir, tekrar sayısı az olduğunda, Wilson alt sınır yöntemi sıfıra doğru yönelir ve MAP ortalamaya doğru önyargı.


1
Cevabın için teşekkürler! Soruyu somut ve kullanımı kolay verilerle güncelledim, birisinin eğlenceli bulgular yapmayı başarabildiğini görelim.
Ciro Santilli 法轮功 病毒 审查 六四 事件 法轮功

1
@CiroSantilli 新疆 改造 中心 996ICU 六四 事件 iyi iş çıkardın!
dontloo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.