Forzare un insieme di numeri su una curva a campana gaussiana


9

( Questo si riferisce alla mia domanda di programmazione su Stack Overflow : Bell Curve Gaussian Algorithm (Python e / o C #) .)

Su Answers.com ho trovato questo semplice esempio:

  1. Trova la media aritmetica (media) => Somma di tutti i valori nell'insieme, divisa per il numero di elementi nell'insieme
  2. Trova la somma dei quadrati di tutti i valori nel set
  3. Dividi l'output di (2) per il numero di elementi nell'insieme
  4. Sottrarre il quadrato della media (1) dall'output di (3)
  5. Prendi la radice quadrata del risultato di (4)

Esempio: impostare 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

(Questo deriva da un post su wiki.answers.com .)

Ora dato tutto ciò, come posso adattare i dati sopra a una curva a campana (come un punteggio di credito) che va da 200 a 800. Ovviamente il numero 5 nel set sopra sarebbe 500. Ma allora qual è la formula per determinare cosa 3 dovrebbe essere sulla stessa scala. Anche se il set originale Set A = {1,3,4,5,7} non è una curva a campana, voglio forzarlo in una curva a campana.

Immagina che siano decine di 5 persone. Il mese prossimo i punteggi potrebbero cambiare nel modo seguente: Set A2={1,2,4,5,9}(un ragazzo perde un punto e il primo guadagna altri due punti: i ricchi diventano più ricchi e i poveri diventano più poveri). Quindi forse un nuovo ragazzo entra nel set: Set A3={1,2,4,5,8,9}.


2
Se il tuo set cambia di volta in volta è impossibile adattarlo alla stessa curva a campana. Supponiamo di avere il set , quindi 4 dovrebbe essere 800, ma se arriva una nuova osservazione 5, dovrebbe diventare 800.A={1,2,3,4}
mpiktas

1
Benvenuti in CrossValidated, NealWalters. Potresti scoprire che una risposta comune alla domanda a uno statistico "Come faccio a fare questo" è "Perché vuoi farlo?"
Onestop,

@onestop - vedi il mio link al post precedente. A scuola, ricordo di aver sentito degli insegnanti che si sono classificati "sulla curva". Quindi, indipendentemente dal punteggio ottenuto durante un test, solo una determinata percentuale di persone otterrebbe ogni voto. Non ho idea di come funzionano i punteggi di credito, ma è molto simile a quello che sto simulando. Fornisco punti ad esempio quando pagano un prestito. Ma alcune persone pagheranno decine di prestiti. Voglio condensare i miei punti selvaggi in un insieme di punti normalizzati.
NealWalters,

leggendo il tuo ultimo commento, mi chiedo quale sia l'approccio migliore: dare, ad esempio 1 punto per ogni prestito pagato, altri punti per altre cose, quindi provare a domare l'enorme punteggio alla fine, o forse fare qualcosa di più significativo con ogni componente che compone il punteggio finale? Ad esempio, se si danno punti per i prestiti pagati, è possibile calcolare i punti Prestiti pagati (LPO) come log (1 + NumberOfLoansPaidOff). Quindi qualcuno con zero prestiti pagati ottiene un LPO di 0, qualcuno con 3 prestiti pagati ottiene un LPO di 1.1, mentre qualcuno con 100 prestiti pagati ottiene un LPO di 4.6. Cap LPO a 5.
Wayne,

Risposte:


13

Un intervallo in scala , come da 200 a 800 (per SAT, ad esempio ), è solo un cambiamento di unità di misura . (Funziona esattamente come il cambiamento delle temperature in gradi Fahrenheit a quelli in gradi Celsius.)

Il valore medio di 500 è destinato a corrispondere alla media dei dati. L'intervallo è destinato a corrispondere a circa il 99,7% dei dati quando i dati seguono una distribuzione normale ("curva a campana"). È garantito che includa l'8 / 9 dei dati ( disuguaglianza di Chebyshev ).

In questo caso, la formula 1-5 calcola la deviazione standard dei dati. Questa è semplicemente una nuova unità di misura per i dati originali. Deve corrispondere a 100 unità nella nuova scala. Pertanto, per convertire un valore originale nel valore ridimensionato,

  • Sottrai la media.

  • Dividi per la deviazione standard.

  • Moltiplicare per 100.

  • Aggiungi 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}

Questo approccio " punteggio normale " darà sempre punteggi tra 200 e 800 quando si hanno 370 o meno valori. Quando hai 1111 o meno valori, tutti tranne il più alto e il più basso avranno punteggi tra 200 e 800.


+1, ho cancellato la mia risposta, poiché la tua era molto meglio e ha reso la mia obsoleta :)
mpiktas

Dove stai ottenendo il 5 nell'1-5? 4 è la media. Dovrebbe essere 1-4? Oggi collaudo con Python, grazie ancora.
NealWalters,

@NealWalters Siamo spiacenti, è stato un colpo di dito. L'ho risolto ora in modo che legga (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

Facendo riferimento alla domanda originale su SO e al problema della scalabilità, il vantaggio di questo approccio è che, a condizione che qualsiasi nuovo punto dati non sia esso stesso un nuovo massimo o minimo per l'insieme di dati nel suo insieme, è possibile applicare i calcoli sopra riportati al nuovo punto dati per ottenere un punteggio compreso tra 200 e 800 senza influire su nessuno dei punteggi esistenti del set di dati originale. Se un nuovo punto dati è un nuovo massimo o minimo, sarà necessario ricalcolare i punteggi per l'intero set di dati con questo nuovo valore "normale" massimo o minimo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.