Як знайти вибіркові точки, які мають статистично значущі великі коефіцієнти випередження між двома значеннями точки?


12

В якості прикладу програми розглянемо наступні два властивості користувачів переповнення стека: кількість репутації та перегляду профілю .

Очікується, що для більшості користувачів ці два значення будуть пропорційними: користувачі з високою кількістю представників привертають більше уваги і, отже, отримують більше переглядів профілю.

Тому цікаво шукати користувачів, які мають багато переглядів профілю порівняно із загальною репутацією.

Це може означати, що у цього користувача є зовнішнє джерело слави. А може просто те, що вони мають цікаві вигадливі фотографії та назви.

Більш математично, кожна двовимірна точка вибірки є користувачем, і кожен користувач має два інтегральних значення, що варіюються від 0 до + нескінченності:

  • репутація
  • кількість переглядів профілю

Очікується, що ці два параметри будуть лінійно залежними, і ми хотіли б знайти вибіркові точки, які є найбільшими переживцями цього припущення.

Наївним рішенням було б, звичайно, просто взяти профільний погляд, розділити за репутацією та сортувати.

Однак це дало б результати, які не мають статистичного значення. Наприклад, якщо користувач відповів на запитання, отримав 1 підсумок і чомусь мав 10 переглядів профілів, що легко підробити, тоді цей користувач з’явиться перед набагато цікавішим кандидатом, який має 1000 оновлених результатів і 5000 переглядів профілю .

У випадку більш "реального" використання, ми могли б спробувати відповісти, наприклад, "які стартапи є найбільш значущими єдинорогами?". Наприклад, якщо ви інвестуєте 1 долар з крихітним капіталом, ви створюєте єдиноріг: https://www.linkedin.com/feed/update/urn:li:activity:6362648516858310656

Бетонні чисті прості у використанні дані реального світу

Щоб перевірити своє вирішення цієї проблеми, ви можете просто скористатися цим невеликим попередньо обробленим файлом ( стислий 75M , ~ 10М користувачів), витягнутим із дамп-дату переповнення стека 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

який створює закодований файл UTF-8, users_rep_view.datякий має дуже простий простий текстовий розділений формат:

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 .

Цей скрипт також може слугувати швидкою довідкою про те, як читати дані в Python.

Аналіз даних вручну

Відразу, дивлячись на графік gnuplot, ми бачимо, як і очікувалося:

  • дані є приблизно пропорційними, з більшими відхиленнями для користувачів із низьким числом представників або низьким числом перегляду
  • Користувачі з низьким числом представників або низьким числом перегляду зрозуміліші, це означає, що вони мають більш високі ідентифікатори облікового запису, а це означає, що їх облікові записи новіші

Для того, щоб отримати деяку інтуїцію щодо даних, я хотів детальніше ознайомитись з деякими інтерактивними програмами для побудови графіків.

Gnuplot і Matplotlib не змогли обробити такий великий набір даних, тому я вперше дав VisIt, і він спрацював. Ось детальний огляд всього програмного забезпечення для побудови графіків, який я спробував: /programming/5854515/large-plot-20-million-samples-gigabytes-of-data/55967461#55967461

OMG, який важко було бігти. Мені довелося:

  • завантажуйте виконуваний файл вручну, немає пакета Ubuntu
  • конвертувати дані в CSV шляхом users_xml_to_rep_view_dat.pyшвидкого злому, тому що я не міг легко знайти, як подати на нього файли, розділені між собою.
  • боротися 3 години з інтерфейсом
    • Типовий розмір точки - піксель, який плутається з пилом на моєму екрані. Переміщення до 10 піксельних сфер
    • був користувач з 0 переглядами профілів, і VisIt він правильно відмовився робити графік логарифму, тому я використав обмеження даних, щоб позбутися цієї точки. Це нагадало мені, що gnuplot дуже вседозволений і з радістю зможе зробити все, що ви на нього кинете.
    • додайте заголовки осей, видаліть ім’я користувача та інші речі в розділі "Керування"> "Анотації"

Ось як виглядало моє вікно VisIt після того, як я втомився від цієї ручної роботи:

введіть тут опис зображення

Листи - це пункти, які я вибрав вручну за допомогою дивовижної функції "Вибір":

  • Ви можете побачити точний Id для кожної точки, збільшивши точність плаваючої точки у вікні Вибору> "Формат поплавця" до %.10g
  • ви можете скинути всі вибрані вручну точки до файлу txt із "Зберегти вибір як". Це дозволяє нам скласти список цікавих URL-адрес профілю, який можна легко отримати, з базовою обробкою тексту

TODO, дізнайтеся, як:

  • див. рядки імен профілю, вони за замовчуванням перетворюються на 0. Я щойно вставив ідентифікатори профілю в браузер
  • виберіть усі точки прямокутника за один раз

І, нарешті, ось кілька користувачів, які, ймовірно, можуть проявити високу оцінку під час замовлення:

Можливі рішення

Я чув про інтервал достовірності балів Вілсона від https://www.evanmiller.org/how-not-to-sort-by-average-rating.html, який "врівноважує частку позитивних оцінок з невизначеністю невеликої кількості спостережень ", але я не впевнений, як це віднести до цієї проблеми.

У цій публікації в блозі автор рекомендує алгоритму знайти елементи, які мають набагато більше результатів, ніж загальнодоступні, але я не впевнений, чи застосовується така ж проблема і до проблеми перегляду upvote / profile. Я думав взяти:

  • перегляди профілю == оновлення там
  • upvotes here == downvotes там (обидва "погані")

але я не впевнений, чи є це сенсом, оскільки в проблемі "вгору / знизу" кожен сортований пункт має N 0/1 подій голосування. Але в моїй проблемі кожен елемент пов’язаний з цим двома подіями: отримання резюме та отримання перегляду профілю.

Чи існує добре відомий алгоритм, який дає хороші результати для подібної проблеми? Навіть знання точної назви проблеми допомогло б мені знайти існуючу літературу.

Бібліографія

Тестовано в Ubuntu 18.10, VisIt 2.13.3.


1
Я новачок у цьому, тому не соромтесь редагувати заголовок / питання, щоб зробити термінологію більш правильною. Дякую.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

це схоже на те, що ви шукаєте іншопланетян. Я б застосував техніку в цьому просторі
ймовірність, що вона

1
@probabilityislogic btw, я оновив питання з деякими конкретними простими у використанні даними.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

1
Я просто хотів би сказати, що це не лише цікаве запитання, але й дуже конкретне та добре відформатоване. Приклад, на який слід звернути увагу. Гарна робота @Ciro!
Хуліо Сезар Сільва

1
@JulioCezarSilva дякую !! Цього разу я не сподівався дізнатися про інтерактивний сюжет із високим рівнем парфумерії, але я це зробив. Класичний.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Відповіді:


4

Я думаю, що довірчий інтервал оцінки Wilson можна застосувати безпосередньо до вашої проблеми. Оцінка, використана в блозі, була нижньою межею довірчого інтервалу замість очікуваного значення.

Іншим методом такої проблеми є виправлення (упередженість) нашої оцінки щодо деяких попередніх знань, наприклад, загального співвідношення перегляду / повторень.

vN(μ,σ)μ

μp(μ)

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


Для порівняння двох методів (нижня межа довіри інтервалу оцінки Вільсона та MAP) вони обидва дають точну оцінку, коли є достатня кількість даних (повторень), коли кількість повторень невелика, метод нижньої межі Вілсона буде зміщуватися до нуля і MAP буде ухил до середнього.


1
Дякуємо за Ваш відповідь! Я оновив запитання деякими конкретними та простими у користуванні даними, давайте подивимось, чи вдасться комусь зробити цікаві висновки.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

1
@CiroSantilli 新疆 改造 中心 996ICU 六四 事件 хороша робота!
dontloo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.