Wymuszanie zestawu liczb do gaussowskiej krzywej dzwonowej

9

( Odnosi się to do mojego pytania programowego dotyczącego przepełnienia stosu : algorytm gaussowski krzywej dzwonowej (Python i / lub C #) .)

Na Answers.com znalazłem ten prosty przykład:

  1. Znajdź średnią arytmetyczną (średnią) => Suma wszystkich wartości w zestawie, podzielona przez liczbę elementów w zestawie
  2. Znajdź sumę kwadratów wszystkich wartości w zestawie
  3. Podziel wynik (2) na liczbę elementów w zestawie
  4. Odejmij kwadrat średniej (1) od wyniku (3)
  5. Weź pierwiastek kwadratowy z wyniku (4)

Przykład: Ustaw 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

(Pochodzi z postu na wiki.answers.com .)

Biorąc to wszystko pod uwagę, w jaki sposób mogę dopasować powyższe dane do krzywej dzwonowej (takiej jak ocena wiarygodności kredytowej) w zakresie od 200 do 800. Oczywiście liczba 5 w powyższym zestawie wynosiłaby 500. Ale jaki jest wzór na określenie, co 3 powinno być w tej samej skali. Mimo że oryginalny zestaw A = {1,3,4,5,7} nie jest krzywą dzwonową, chcę ją zmusić do uzyskania krzywej dzwonowej.

Wyobraź sobie, że są to wyniki 5 osób. W przyszłym miesiącu wyniki mogą się zmieniać w następujący sposób: Set A2={1,2,4,5,9}(jeden facet traci punkt, a najwyższy zdobywa dwa kolejne punkty - bogaci stają się bogatsi, a biedni biednieją). Wtedy może do zestawu wchodzi nowy facet: Set A3={1,2,4,5,8,9}.

NealWalters
źródło
2
Jeśli Twój zestaw zmienia czas od czasu, nie można dopasować go do tej samej krzywej dzwonowej. Załóżmy, że masz zestaw , więc 4 powinno wynosić 800, ale jeśli pojawi się nowa obserwacja 5, powinna ona wynosić 800.A={1,2,3,4}
mpiktas
1
Witamy w CrossValidated, NealWalters. Może się okazać, że częstą odpowiedzią na pytanie statystyki „Jak to zrobić” jest „Dlaczego chcesz to zrobić?”
onestop
@onstop - zobacz mój link do poprzedniej strony. W szkole pamiętam, że słyszałem nauczycieli, którzy oceniali „na krzywej”. Niezależnie od tego, jaki wynik uzyskasz na teście, tylko określony procent osób dostanie każdą ocenę. Nie mam pojęcia, jak działają oceny zdolności kredytowej, ale jest to bardzo podobne do tego, co symuluję. Daję ludziom punkty, na przykład, kiedy spłacają pożyczkę. Ale niektórzy spłacą dziesiątki pożyczek. Chcę zagęścić moje dzikie punkty w zbiór znormalizowanych punktów.
NealWalters,
czytając twój ostatni komentarz, zastanawiam się, jakie podejście jest najlepsze: daj np. 1 punkt za każdą spłaconą pożyczkę, inne punkty za inne rzeczy, a następnie spróbuj oswoić olbrzymi wynik na końcu, lub może zrób coś bardziej znaczącego z każdym elementem, który stanowi końcowy wynik? Na przykład, jeśli podasz punkty za spłacone pożyczki, możesz obliczyć swoje punkty wypłaty pożyczki (LPO) jako log (1 + NumberOfLoansPaidOff). Tak więc osoba z zerowymi spłaconymi pożyczkami otrzymuje LPO równą 0, osoba z 3 spłaconymi pożyczkami otrzymuje LPO równą 1,1, zaś osoba z 100 spłaconymi pożyczkami otrzymuje LPO równą 4,6. Cap LPO o 5.
Wayne,

Odpowiedzi:

13

Skalowany zakres , na przykład 200 do 800 (na SATs, na przykład ), jest tylko zmiana jednostkach miary . (Działa dokładnie tak samo, jak zmiana temperatur w stopniach Fahrenheita na te w stopniach Celsjusza.)

Średnia wartość 500 ma odpowiadać średniej danych. Zakres ma odpowiadać około 99,7% danych, gdy dane mają rozkład normalny („krzywa dzwonowa”). Jest on gwarancją obejmuje 8/9 danych ( Czebyszewa za nierówność ).

W tym przypadku wzór 1-5 oblicza odchylenie standardowe danych. Jest to po prostu nowa jednostka miary dla oryginalnych danych. Musi odpowiadać 100 jednostkom w nowej skali. Dlatego, aby przekonwertować oryginalną wartość na wartość skalowaną,

  • Odejmij średnią.

  • Podziel przez odchylenie standardowe.

  • Pomnóż przez 100.

  • Dodaj 500.

Jeśli wynik wykracza poza zakres , możesz użyć go takim, jakim jest lub „zacisnąć” go w zakresie, zaokrąglając w górę do 200, w dół do 800.[200,800]

W przykładzie wykorzystującym dane średnia wynosi a SD wynosi . Dlatego po zmianie skali staje się . Cały przeskalowany zestaw danych, obliczony podobnie, to .{1,3,4,5,7}421(14)/2100+500=350{350,450,500,550,650}

Gdy oryginalne dane są dystrybuowane w wyraźnie nienormalny sposób, potrzebujesz innego podejścia . Nie obliczasz już średniej ani SD. Zamiast tego ułóż wszystkie wyniki w kolejności, od 1. (najmniejszego) do tego (największego). To są ich szeregi . Przelicz dowolną rangę na jej procent . (W tym przykładzie a dane są już w porządku rangi . Dlatego ich wartości procentowe wynoszą , często zapisywane równoważnie jako itp.) Odpowiadający dowolnemu procentowi (koniecznie od do ) jestni (i1/2)/nn=5i=1,2,3,4,51/10,3/10,5/10,7/10,9/1010%,30%01normalny kwantyl . Jest obliczany na podstawie normalnej funkcji kwantylu , która jest ściśle związana z funkcją błędu . (Proste przybliżenia numeryczne są łatwe do kodowania.) Jego wartości, które zwykle będą między -3 a 3, muszą zostać przeskalowane (tak jak poprzednio) do zakresu . Zrób to, najpierw mnożąc normalne kwantyle przez 100, a następnie dodając 500.[200,800]

Normalna funkcja kwantylu jest dostępna na wielu platformach obliczeniowych, w tym w arkuszach kalkulacyjnych ( na przykład w normach Excela ). Na przykład normalne kwantyle (lub „wyniki normalne”) dla danych to .{1,3,4,5,7}{372,448,500,552,628}

Takie podejście do „ normalnej punktacji ” zawsze daje wyniki od 200 do 800, gdy masz 370 lub mniej wartości. Jeśli masz 1111 lub mniej wartości, wszystkie oprócz najwyższej i najniższej będą miały wyniki od 200 do 800.

Whuber
źródło
+1,
usunąłem
Skąd bierzesz 5 w 1-5? 4 to średnia. Czy powinno to być 1-4? Dzisiaj testuję z Pythonem, jeszcze raz dziękuję.
NealWalters
@NealWalters Przepraszamy, to był poślizg palca. Naprawiłem to teraz, więc brzmi (1-4) / 2 * 100 + 500.
whuber
4

Możesz wypróbować to podejście - znormalizować zestaw danych w zakresie od wartości -1 do +1 w ten sposób: Spowoduje to przekonwertowanie każdej wartości w zestawie danych na wartość między -1 a +1, przy czym rzeczywiste wartości maksymalne i minimalne zostaną ustawione odpowiednio na +1 i -1, a następnie zresetuje te wartości +1 i -1 do +0,9999 i -0,9999 (niezbędne do następujących obliczeń).

(individual_valuemin_of_all_valuesmax_of_all_valuesmin_of-all_values0.5)2.

Następnie zastosuj Transformację Fishera do każdej z powyższych znormalizowanych wartości, aby „zmusić ją” do przybliżonego dostosowania się do rozkładu normalnego, a następnie „unormalizuj” każdą z tych wartości Transformacji Fishera w zakresie od 200 do 800, a zatem: Maksymalna wartość transformacji Fishera zostanie ustawiona na dokładnie 800, zostanie ustawiona minimalna wartość transformacji Fishera do dokładnie 200, a wszystkie pozostałe wartości będą znajdować się między tymi dwoma skrajnościami, zgodnie z przybliżonym rozkładem normalnym.

Fish_valuemin_all_Fish_valuesmax_all_Fish_valuesmin_all_Fish_values600+200

Odnosząc się do pierwotnego pytania dotyczącego SO i kwestii skalowalności, zaletą tego podejścia jest to, że pod warunkiem, że jakikolwiek nowy punkt danych sam w sobie nie jest nowym maksimum lub minimum dla zestawu danych jako całości, można zastosować powyższe obliczenia do nowego punktu danych aby uzyskać wynik od 200 do 800 bez wpływu na istniejące wyniki oryginalnego zestawu danych. Jeśli nowy punkt danych jest nowym maksimum lub minimum, będziesz musiał ponownie obliczyć wyniki dla całego zestawu danych z tą nową „normalizującą” wartością maksimum lub minimum.

czytnik babelproofreader
źródło