Як я можу оцінити кількість унікальних випадків за допомогою випадкової вибірки даних?


15

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

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


1
Чи можете ви також урахувати кількість примірників кожного унікального значення у вибірці? Вражає мене, що може допомогти.
onestop

@onestop, так, я міг би це зробити
розум

Відповіді:


11

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

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

Нехай u1 - кількість значень, що відбулися рівно один раз у вибірці m елементів.

P[new item next] ~= u1 / m.

Нехай u - кількість унікальних предметів у вашій вибірці розміром m.

Якщо ви помилково припускаєте, що показник "новий елемент наступний" не зменшився, оскільки ви отримали більше даних, то, використовуючи Good Turing, у вас буде

total uniq set of size s ~= u + u1 / m * (s - m) 

Це має деяку неприємну поведінку, оскільки u1 стає насправді мало, але це може не бути проблемою для вас на практиці.


що sв цьому випадку? загальна кількість 'слів'?
Натан

Дійсно, sзустрічається двічі при цьому як на лівій, так і на правій руці?
PascalVKooten

1

Стратегія моделювання

Збір т випадкових вибірок розміру п з безлічі S . Для кожного з m- вибірок обчисліть кількість u унікальних значень і розділіть на n для нормалізації. З імітованого розподілу нормалізованого u , обчислюють підсумкову статистику, що цікавить (наприклад, середня величина, дисперсія, міжквартильний діапазон). Помножте модельоване середнє значення нормалізованого u на кардинальність S для оцінки кількості унікальних значень.

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


1
Невже це рішення не є кульгавим? Він взагалі не враховує ефектів насичення.
rrenaud

@rrenaud У порівнянні з вашим рішенням, я погоджуюся, що моя здається неповноцінною.
Brash Equilibrium

@rrenaud Я все ще виступаю за стратегію моделювання, за допомогою якої ви обчислюєте ймовірність унікальних елементів, використовуючи GTFE, на якомога більше можливих зразків великих, як можливих, щоб отримати певне відчуття помилки вибірки для ймовірності унікальних елементів. Або є чітка формула для обчислення всіх моментів? Я не думаю, що це негативний біном, оскільки біноміальний розподіл, згідно з посиланням на Вікіпедію, не характеризує розподіл кількості унікальних елементів. Але дивовижно! Я подам це на потім.
Brash Equilibrium

0

Ось реалізація для панд:

import math
import numpy as np
from collections import Counter

def estimate_uniqueness(df, col, r=10000, n=None):
    """ Draws a sample of size r from column col from dataframe df and 
        returns an estimate for the number of unique values given a
        population size of n """
    n = n or df.shape[0]
    sample = df[col][np.random.randint(0, n, r)]
    counts = sample.value_counts()
    fis = Counter(counts)
    estimate = math.sqrt(n / r) * fis[1] + sum([fis[x] for x in fis if x > 1])
    return estimate

Спирається на розділи 2 та 4 цього документу: http://ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/pods/towardsestimatimosur.pdf

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.