2 votos

Qué información se necesita para agregar los percentiles

Tengo varios miles de conjuntos de datos de gran tamaño que son demasiado grandes para caber en la memoria a la vez, por lo que necesito mantenerlos separados. Es bastante fácil obtener el recuento, la media, el desvío estándar, el mínimo y el máximo de todo el conjunto de datos, pero también necesito los percentiles de P1, P5, P10, ..., P90, P95 y P99.

Puedo generar estas cifras (o básicamente cualquier estadística) para cada conjunto de datos individual. Si tengo esta información para cada conjunto de datos individual, ¿puedo combinar la información necesaria a posteriori?

He leído muchas preguntas similares aquí, pero creo que tengo una ventaja ya que tengo todos los datos originales y no sólo un pequeño número de estadísticas resumidas.

Tenga en cuenta que todos los conjuntos de datos tienen diferentes tamaños de muestra y que la distribución no es necesariamente normal.

1voto

user1563247 Puntos 131

Resulta que existe una amplia literatura centrada en este problema en el contexto de los datos en flujo. Este sitio ofrece un excelente resumen de varios métodos. Además, hay bibliotecas como DDSketch y T-Digest que se ocupan de esta categoría exacta de problemas. Ninguna de las soluciones es exacta, pero garantizan una precisión dentro de una tolerancia determinada, que puede reducirse manteniendo más muestras (un número aún trivial en relación con el número total de muestras).

0voto

Euan Richard Puntos 13

Según entiendo, quieres combinar todos los conjuntos de datos juntos y obtener los percentiles de todo el conjunto de datos (¿una sola variable?), pero no cabe en la memoria.

No se me ocurre ninguna forma de "agregar" percentiles, así que lo enfocaría como un problema técnico.

Dependiendo de la tecnología / el software que utilices, ¿hay alguna herramienta para ordenar la variable in situ? ¿Es posible aumentar la memoria virtual?

Si no es así, puede que tengas que pensar en formas de hackear manualmente tus datos en lotes y preprocesarlos paso a paso, sin cargar todo en la memoria (yo solía hacer esto mucho para experimentos de física de partículas con conjuntos de datos increíblemente enormes).

Por ejemplo, ¿tiene muchos valores repetidos? Entonces podría pensar en una especie de compresión: escanear los conjuntos de datos uno por uno y almacenar los recuentos de cada valor que encuentre (en lugar de los valores en sí).

Si no es el caso, podrías estimar algunos "puntos de ruptura" en tus datos, y empezar a escanear los conjuntos de datos y dividirlos y escribirlos en conjuntos de datos aproximadamente "ordenados". Una vez que tengas los conjuntos de datos aproximados, puedes hacer algo más de clasificación y refinamiento en ellos hasta que consigas algo que esté ordenado y que encaje bien en la memoria, de modo que puedas obtener de P1 a P5... y luego pasar a la siguiente parte de los datos, y así sucesivamente.

O, dependiendo de lo precisos que deban ser sus resultados, puede hacer que los datos sean más gruesos reduciendo, por ejemplo, la precisión de los decimales (lo que facilita el recuento de valores similares), o algún otro tipo de "binning" (como un histograma, aunque sería un trabajo de ajuste fino elegir un binning de este tipo que pueda darle percentiles razonablemente precisos).

Es un poco vago, pero este tipo de cosas (esencialmente, pasos de preprocesamiento para reducir el volumen de datos conservando la información esencial) podría ayudar.

0voto

user306599 Puntos 11

No se pueden agregar percentiles sin perder precisión. Sin embargo, siempre que se conozca el número de muestras que han entrado en cada conjunto de percentiles, se pueden aproximar los percentiles combinados razonablemente bien.

Esto puede hacerse de varias maneras. Dado que se ha perdido información al calcular los percentiles, hay que hacer algún tipo de suposición para aproximar los datos originales a partir de los percentiles y luego calcular nuevos percentiles combinados. Una alternativa sería asumir que los puntos de datos sólo están presentes en los percentiles (y aceptar recuentos fraccionarios). Otra sería asumir que los datos están uniformemente repartidos entre los percentiles de alguna manera.

Partamos de la primera hipótesis como base de nuestra aproximación. Si dispone de dos conjuntos de medidas de percentiles con un recuento conocido de muestras para cada uno, entonces tiene los valores de los percentiles para cada uno y puede asignar una frecuencia de 1/100 del recuento total (que puede no ser un número entero). Ahora, sólo hay que sumar los recuentos totales y calcular el número de muestras por percentil en el nuevo agregado. Empezando por la parte inferior, se recorren los puntos de datos combinados (de menor a mayor) y se asignan a los nuevos percentiles hasta que cada uno se llene y luego se continúa con el siguiente y así sucesivamente. Con este método, los nuevos percentiles se alinearán perfectamente con un subconjunto de los percentiles originales.

Otra opción sería resumir cada conjunto de datos como un histograma mucho más fino. Se puede utilizar el mismo método basado en eso y se puede hacer que los cubos se alineen entre todos los conjuntos de datos desde el principio. Esto funcionará igual, pero los errores pueden ser menores.

Los errores de aproximación dependerán únicamente de que las muestras reales se aproximen de forma incorrecta como máximo en la anchura de un cubo. En otras palabras, cuanto más pequeños sean los cubos (tamaño de los percentiles o similares) con los que se empieza, menor será el error. El error puede hacerse arbitrariamente pequeño utilizando más memoria.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X