一連の数値をガウスの鐘型曲線に強制する


9

これは、スタックオーバーフローに関するプログラミングの質問に関連していますベルカーブガウスアルゴリズム(Pythonおよび/またはC#)。)

Answers.comで、次の簡単な例を見つけました。

  1. 算術平均(平均)を見つける=>セット内のすべての値の合計をセット内の要素数で割る
  2. セット内のすべての値の二乗の合計を求めます
  3. (2)の出力をセット内の要素数で除算する
  4. (3)の出力から平均二乗(1)を引く
  5. (4)の結果の平方根をとる

例:セット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

(これはwiki.answers.comの投稿からのものです。)

以上を踏まえて、上記のデータを200から800の範囲のベルカーブ(クレジットスコアなど)にどのように当てはめることができますか?上記のセットの数値5は500になることは明らかです。 3は同じスケールでなければなりません。元のセットSet A = {1,3,4,5,7}はベルカーブではありませんが、強制的にベルカーブにします。

これらが5人のスコアだと想像してください。来月のスコアは次のように変化する可能性があります:セットA2={1,2,4,5,9}(1人の男がポイントを失い、上位の男はさらに2ポイントを獲得します-金持ちは金持ちになり、貧乏人は貧しくなります)。次に、おそらく新しい人がセットに入りA3={1,2,4,5,8,9}ます:Set 。


2
セットが時々変化する場合、同じベルカーブに合わせるのは不可能です。あなたは、セットがあると 4は800でなければなりませんので、しかし、新たな観測5が到着した場合、それは800になるはず、A={1,2,3,4}
mpiktas

1
CrossValidated、NealWaltersへようこそ。統計担当者に「これを行うにはどうすればよいですか」と尋ねることに対する一般的な応答は、「なぜそれをしたいのですか?」
ワンストップ2010

@onestop-以前の投稿へのリンクを参照してください。学校では、「カーブで」等級をつけた教師の聞き取りを覚えています。したがって、テストで得点が何であれ、一定の割合の人だけが各学年を取得します。クレジットスコアがどのように機能するかはわかりませんが、それは私がシミュレーションしているものと非常によく似ています。私は人々にローンを返済するときなどにポイントを与えます。しかし、一部の人々は数十のローンを完済します。ワイルドポイントを一連の正規化されたポイントに圧縮したい。
NealWalters 2010

あなたの最後のコメントを読んで、私はどのアプローチが最善か疑問に思います:たとえば、返済された各ローンに1ポイント、他の点に他のポイントを与え、最後に巨大なスコアを飼いならすか、またはおそらく各コンポーネントでより意味のあることを行います最終スコアは?たとえば、返済されたローンのポイントを与える場合、ログ(1 + NumberOfLoansPaidOff)としてローン返済(LPO)ポイントを計算できます。したがって、ローンがゼロに支払われた人はLPOが0になり、ローンが3支払われた人はLPOが1.1になり、ローンが100支払われた人はLPOが4.6になります。LPOの上限を5に
Wayne

回答:


13

200から800(SATの場合など)などのスケーリングされた範囲は測定単位の変更にすぎません。(華氏の気温を摂氏の気温に変えるのとまったく同じように機能します。)

中央値の500は、データの平均に対応することを目的としています。範囲は、データが正規分布に従う場合(「ベル曲線」)、データの約99.7%に対応することを目的としています。8/9のデータを含むことが保証されています(チェビシェフの不等式)。

この場合、式1-5はデータの標準偏差を計算します。これは単に、元のデータの新しい測定単位です。新しいスケールで100ユニットに対応する必要があります。したがって、元の値をスケーリングされた値に変換するには、

  • 平均を差し引きます。

  • 標準偏差で割ります。

  • 100を掛けます。

  • 500を追加します。

結果が範囲を超えている場合は、そのまま使用するか、200に切り上げて800に切り下げて範囲に「クランプ」することができます。[200,800]

この例では、データを使用して、平均はで、SDはです。したがって、再スケーリングすると、はます。同様に計算された再スケーリングされたデータセット全体はです。{1,3,4,5,7}421(14)/2100+500=350{350,450,500,550,650}

元のデータが明らかに通常ではない方法で配布される場合、別のアプローチが必要です。平均またはSDを計算しなくなりました。代わりに、1番目(最小)から番目(最大)までのすべてのスコアを順番に並べます。これらはランクです。ランクをパーセンテージ変換します。(この例では、あり、データはすでにランク順です。したがって、それらのパーセンテージは、多くの場合などと同等に記述されます。)任意のパーセンテージ(必ずと間)に対応するのは、ni (i1/2)/nn=5i=1,2,3,4,51/10,3/10,5/10,7/10,9/1010%,30%01通常の分位。これは、誤差関数と密接に関連している通常の分位関数で計算されます。(単純な数値近似は簡単にコード化できます。)その値(通常は-3から3の間)は、範囲 200、800]に(以前と同じように)再スケーリングする必要があります。まず、通常の分位数に100を掛け、次に500を加えます。[200,800]

通常の分位関数は、スプレッドシート(​​Excelのnormsinvなど)を含む多くのコンピューティングプラットフォームで使用できます。 例えば、通常の変位値(または"正常スコア")データのためのである。、{ 372 448 500 552 628 }{1,3,4,5,7}{372,448,500,552,628}

この「通常のスコアリング」アプローチでは、370以下の値の場合、常に200から800のスコアが得られます。値が1111以下の場合、最高値と最低値を除くすべてのスコアが200〜800になります。


+1、私は私の答えを削除しました。あなたの方がずっと良く、私のものを時代遅れにしたからです:)
mpiktas

1-5の5はどこにありますか?4は平均です。1〜4にすべきですか?今日はPythonでテストしています。ありがとうございます。
NealWalters、2011年

@NealWaltersすみません、それは指の滑りでした。(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

SOとスケーラビリティの問題に関する元の質問を参照すると、このアプローチの利点は、新しいデータポイント自体がデータセット全体の新しい最大値または最小値ではない場合、上記の計算を新しいデータポイントに適用できることです。元のデータセットの既存のスコアに影響を与えずに200〜800のスコアを取得します。新しいデータポイントが新しい最大値または最小値である場合、この新しい「正規化」最大値または最小値を使用して、データセット全体のスコアを再計算する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.