¿Cómo puedo estimar recuentos de ocurrencias únicas a partir de un muestreo aleatorio de datos?


15

Digamos que tengo un gran conjunto de valores S que a veces se repiten. Deseo estimar el número total de valores únicos en el conjunto grande.

Si tomo una muestra aleatoria de valores y determino que contiene valores únicos , ¿puedo usar esto para estimar el número de valores únicos en el conjunto grande?TTu


1
¿Puede también contar el número de copias de cada valor único en la muestra? Me parece que eso podría ayudar.
parada el

@onestop, sí, podría hacer eso
cordura el

Respuestas:


11

Aquí hay un artículo completo sobre el problema, con un resumen de varios enfoques. Se llama Estimación de valor distinto en la literatura.

Si tuviera que hacer esto por mí mismo, sin haber leído papeles elegantes, lo haría. Al construir modelos de lenguaje, a menudo hay que estimar la probabilidad de observar una palabra previamente desconocida, dado un montón de texto. Un enfoque bastante bueno para resolver este problema para los modelos de lenguaje en particular es usar el número de palabras que ocurrieron exactamente una vez, dividido por el número total de tokens. Se llama el Estimación de Good Turing .

Sea u1 el número de valores que ocurrieron exactamente una vez en una muestra de m elementos.

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

Sea la cantidad de elementos únicos en su muestra de tamaño m.

Si asume erróneamente que la tasa de 'nuevo elemento siguiente' no disminuyó a medida que obtuvo más datos, entonces usando Good Turing, tendrá

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

Esto tiene un comportamiento desagradable ya que u1 se vuelve realmente pequeño, pero eso podría no ser un problema para usted en la práctica.


¿Qué hay sen este caso? el número total de 'palabras'?
Nathan

De hecho, ¿ socurre dos veces en esto, tanto en el tamaño de la mano izquierda como en la derecha?
PascalVKooten

1

La estrategia de simulación

Collect m muestras aleatorias de tamaño n de la serie S . Para cada una de las m muestras, calcule el número u de valores únicos y divídalo por n para normalizar. A partir de la distribución simulada de u normalizada , calcule estadísticas resumidas de interés (p. Ej., Media, varianza, rango intercuartil). Multiplique la media simulada de u normalizada por la cardinalidad de S para estimar el número de valores únicos.

Cuanto mayor es m y n , cuanto más cerca su media simulada coincidirá con el verdadero número de valores únicos.


1
¿No es esta solución un poco aburrida? No tiene en cuenta los efectos de saturación en absoluto.
rrenaud

@rrenaud En comparación con su solución, estoy de acuerdo en que la mía parece inferior.
Brash Equilibrium

@rrenaud Sigo abogando por una estrategia de simulación mediante la cual calcule la probabilidad de artículos únicos usando el GTFE en muestras tan grandes como sea posible para obtener una sensación de error de muestreo para la probabilidad de artículos únicos. ¿O hay una fórmula explícita para calcular todos los momentos? No creo que sea el binomio negativo, ya que la distribución binomial, según la referencia de Wikipedia, no caracteriza la distribución del número de elementos únicos. ¡Pero asombroso! Archivaré esto para más tarde.
Brash Equilibrium

0

Aquí hay una implementación para pandas:

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

Se basa en las secciones 2 y 4 de este documento: http://ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/pods/towardsestimatimosur.pdf

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.