あいつの日誌β

働きながら旅しています。

標準偏差の求め方

あらすじ

数学は思ったよりも人生に影響すると思ったので復習しようとおもいました。

標準偏差とは

下記URLをご覧ください。本記事はこちらを参考に Node.js を使って紹介しています。

https://atarimae.biz/archives/5379

標準偏差を求める

主に以下の手順で求めることができます。

  • 平均値を求める
  • 平均値から偏差を求める
  • 偏差から分散を求める

平均値を求める

以下のようなテスト情報があります。

const childMathTests = [
  {name: "A", value: 35},
  {name: "B", value: 55},
  {name: "C", value: 70},
  {name: "D", value: 80}
];

この生徒たちの平均値は以下の通り

(35 + 55 + 70 + 80) / 4 // 60

平均値から偏差を求める

各データの値から平均値を引いた値を求めます。これを偏差と呼びます。

35 - 60 === -25 // A
55 - 60 === -5  // B
70 - 60 === 10  // C
80 - 60 === 20  // D

求めた偏差を2乗します。

(35 - 60) ** 2 === 625
(55 - 60) ** 2 === 25
(70 - 60) ** 2 === 100
(80 - 60) ** 2 === 400

分散を求める

求めた偏差の2乗を合計して 4 で割ります。

(625 + 25 + 100 + 400) / 4 === 287.5

標準偏差を求める

分散の正の平方根を求めます。これがこの4人の数学の標準偏差です。

Math.sqrt((625 + 25 + 100 + 400) / 4) === 16.95582495781317

実装

Node.js では以下のように書けます

const childMathTests = [ 
  {name: "A", value: 35},
  {name: "B", value: 55},
  {name: "C", value: 70},
  {name: "D", value: 80} 
];

const values = childMathTests.map(x => x.value);

function sum(accumulator, currentValue) {
  return accumulator + currentValue;
}

function getStandardDeviation(values) {
  const average = values.reduce(sum) / values.length;
  const deviations = values.map(x => x - average);
  const dispersion = deviations.map(x => x ** 2).reduce(sum) / values.length;
  return Math.sqrt(dispersion);
}

console.log(getStandardDeviation(values));

実践

というわけでテスト結果からばらつきが多いテストかばらつきが少ないテストかを判断できるようになりました。

const childMathTestValues0316 = [0, 5, 10, 70, 80, 80, 82, 85, 93, 95];
const childMathTestValues0318 = [50, 52, 54, 60, 60, 60, 61, 61, 70, 72];

console.log(getStandardDeviation(childMathTestValues0316)); // 36.67151483099655
console.log(getStandardDeviation(childMathTestValues0318)); // 6.6783231428256

0316 はほとんどのが80点以上とっているもしくは一部の生徒が平均点を下げています。つまり平均点付近にあまりマッチする生徒がいない。 0318 はほとんどの人が平均点付近である点数にマッチしています。

両日のテストはどちらも平均点が60点です。どちらのテストも「平均点が60点のテストで70点もとった」という言い方ができます。

なんですがばらつきの多い 0316 ではほとんどの生徒が 80点を超えているので実はそんなにすごくないです。 0318 だと70点を超えている生徒が 2人しかいないのですごいと言えると思います。

まとめ

というわけで標準偏差は学校で習ったようですが(記憶にない)社会に出てから使う機会はないと思っていました。 なんですが使う機会がなかったわけではなく、応用が効く場面に遭遇してもそれを使えてなかった気がします。

そんなわけで久しぶりに数学を勉強してみました。こちらからは以上です。

補足: 平均偏差と標準偏差

偏差を2乗する理由は平均偏差ではばらつきを正しく把握できないケースがあるので、「離れれば離れるほど、ポイントを高くする」という手法が編み出されました。これが標準偏差。2乗して計算したものを平方根で元に戻しています。