Forzar un conjunto de números a una curva de campana gaussiana

9

( Esto se relaciona con mi pregunta de programación sobre Stack Overflow : Algoritmo gaussiano de curva de campana (Python y / o C #)) .

En Answers.com, encontré este simple ejemplo:

  1. Encuentre la media aritmética (promedio) => Suma de todos los valores en el conjunto, dividido por el número de elementos en el conjunto
  2. Encuentra la suma de los cuadrados de todos los valores en el conjunto
  3. Divida la salida de (2) sobre el número de elementos en el conjunto
  4. Resta el cuadrado de la media (1) de la salida de (3)
  5. Saca la raíz cuadrada del resultado de (4)

Ejemplo: Conjunto A = {1,3,4,5,7}

  1. (1 + 3 + 4 + 5 + 7) / 5 = 4
  2. (1 * 1 + 3 * 3 + 4 * 4 + 5 * 5 + 7 * 7) = 1 + 9 + 16 + 25 + 49 = 100
  3. 100/5 = 20
  4. 20 - 4 * 4 = 20-16 = 4
  5. SQRT (4) = 2

(Esto proviene de una publicación en wiki.answers.com ).

Ahora dado todo eso, ¿cómo puedo ajustar los datos anteriores a una curva de campana (como un puntaje de crédito) que oscila entre 200 y 800. Obviamente, el número 5 en el conjunto anterior sería 500. Pero entonces, ¿cuál es la fórmula para determinar qué 3 deben estar en la misma escala. Aunque el conjunto original Set A = {1,3,4,5,7} no es una curva de campana, quiero forzarlo a una curva de campana.

Imagina que son decenas de 5 personas. El próximo mes, los puntajes pueden cambiar de la siguiente manera: Establecido A2={1,2,4,5,9}(uno pierde un punto y el mejor gana dos puntos más: los ricos se enriquecen y los pobres se empobrecen). Entonces tal vez un nuevo chico entra en el set: Set A3={1,2,4,5,8,9}.

NealWalters
fuente
2
Si su conjunto cambia de tiempo en tiempo, es imposible ajustarlo a la misma curva de campana. Suponga que tiene el conjunto , entonces 4 debería ser 800, pero si llega una nueva observación 5, entonces debería convertirse en 800.A={1,2,3,4}
mpiktas
1
Bienvenido a CrossValidated, NealWalters. Puede encontrar que una respuesta común al preguntarle a un estadístico "¿Cómo hago esto?" Es "¿Por qué quieres hacer eso?"
parada el
@onestop: vea mi enlace a anteriorpost. En la escuela, recuerdo haber oído hablar de maestros que calificaron "en la curva". Entonces, no importa qué puntaje obtuviste en un examen, solo un cierto porcentaje de personas obtendrían cada calificación. No tengo idea de cómo funcionan los puntajes de crédito, pero eso es muy similar a lo que estoy simulando. Le doy puntos a las personas, por ejemplo, cuando pagan un préstamo. Pero algunas personas pagarán docenas de préstamos. Quiero condensar mis puntos salvajes en un conjunto de puntos normalizados.
NealWalters
Al leer su último comentario, me pregunto qué enfoque es mejor: dar, por ejemplo, 1 punto por cada préstamo pagado, otros puntos por otras cosas, luego tratar de domar la enorme puntuación al final, o tal vez hacer algo más significativo con cada componente que compone el puntaje final? Por ejemplo, si otorga puntos por préstamos cancelados, podría calcular sus puntos de préstamos pagados (LPO) como log (1 + NumberOfLoansPaidOff). Entonces, alguien con cero préstamos cancelados obtiene un LPO de 0, alguien con 3 préstamos cancelados obtiene un LPO de 1.1, mientras que alguien con 100 préstamos cancelados obtiene un LPO de 4.6. Cap LPO a las 5.
Wayne

Respuestas:

13

Un rango escalado , como 200 a 800 (para SAT, por ejemplo ), es solo un cambio de unidades de medida . (Funciona exactamente como el cambio de temperaturas en Fahrenheit a las de Celsius).

El valor medio de 500 está destinado a corresponder con el promedio de los datos. Se pretende que el rango corresponda a aproximadamente el 99.7% de los datos cuando los datos siguen una distribución Normal ("curva de Bell"). Se garantiza que incluye 8/9 de los datos ( Desigualdad de Chebyshev ).

En este caso, la fórmula 1-5 calcula la desviación estándar de los datos. Esto es simplemente una nueva unidad de medida para los datos originales. Debe corresponder a 100 unidades en la nueva escala. Por lo tanto, para convertir un valor original al valor escalado,

  • Resta el promedio.

  • Dividir por la desviación estándar.

  • Multiplica por 100.

  • Añadir 500.

[200,800]

{1,3,4,5,7}421(14)/2100+500=350{350,450,500,550,650}

ni (i1/2)/nn=5i=1,2,3,4,51/10,3/10,5/10,7/10,9/1010%,30%01[200,800]

{1,3,4,5,7}{372,448,500,552,628}

Este enfoque de " puntaje normal " siempre dará puntajes entre 200 y 800 cuando tenga 370 o menos valores. Cuando tiene 1111 o menos valores, todos menos los más altos y más bajos tendrán puntajes entre 200 y 800.

whuber
fuente
1, he borrado mi respuesta, ya que su era mucho mejor e hizo minas obsoletas :)
mpiktas
¿De dónde sacas el 5 en el 1-5? 4 es el promedio. ¿Debería ser 1-4? Hoy estoy probando con Python, gracias de nuevo.
NealWalters
@NealWalters Lo siento, eso fue un deslizamiento del dedo. Lo he arreglado ahora para que lea (1-4) / 2 * 100 + 500.
whuber
4

(individual_valuemin_of_all_valuesmax_of_all_valuesmin_of-all_values0.5)2.

Fish_valuemin_all_Fish_valuesmax_all_Fish_valuesmin_all_Fish_values600+200

Al hacer referencia a su pregunta original sobre SO y el tema de la escalabilidad, la ventaja de este enfoque es que siempre que un nuevo punto de datos no sea en sí mismo un nuevo máximo o mínimo para el conjunto de datos en su conjunto, puede aplicar los cálculos anteriores al nuevo punto de datos para obtener su puntaje entre 200 y 800 sin afectar ninguno de los puntajes existentes del conjunto de datos original. Si un nuevo punto de datos es un nuevo máximo o mínimo, tendrá que volver a calcular las puntuaciones para todo el conjunto de datos con este nuevo valor máximo o mínimo de "normalización".

lector de babelproof
fuente