思わず身構えてしまう「統計」ですが、手をつけてしまえば何とかなるものです。今回はデータ解析手法の“王様”である「平均」について、解説します。
まだ言葉も話せない赤ん坊が、良い方を取るため本能的に2つの物を比較するよう、エンジニアにとってデータ比較は非常に重要です。特に「生産性」と「品質」は情報処理系技術者の最大関心事で、いろいろなプロジェクトからデータを収集しています。
大量に集めたデータから「プロジェクトの現状や課題」を炙り出すには、統計的な手法が必要となります。統計的な分析は、複雑な数式が満載で「茨の道」のように見え、腰が引けてしまいますが、そんな「統計の食わず嫌い」を直すのがこのシリーズです。
前回は、グラフを利用した視覚的なデータ表示を説明しました。今回は、データの解析手法の王様である「平均」を説明します。
上司から、「ソフトウェア開発で収集したデータを分析せよ」とのお達しがあったとすると、まず思い浮かぶ分析手法が「平均値」でしょう。筆者は、大学の「ソフトウェア工学」の授業で、「この授業で、残存バグ数予測法をいくつか解説したが、その方法以外で自分独自の予測法を考えよ」という課題を出題します。すると大半の学生は、「サンプリング法と過去の統計データの平均を計算して残存バグを決定する」など、平均を使った方法を書いてきます。
例えば、現在開発中のソフトウェアにサンプリング法を実施して残存バグが4件、過去の統計から7件だと分かっている場合、「残存バグ数は、(4+7) / 2で5.5件と推測できる」のようなイメージです。筆者の感覚では、7割の学生が、データ分析手法に「平均」を使う印象があります。
良しあしはさておき、平均値を使ったデータ分析は、誰でも使える簡単で強力なデータ分析手法です。使いやすく分かりやすい方法ですが、いくつか「落とし穴」があります。今回は、平均値の「注意点」を解説します。
蛇足ながらの復習ですが、平均値は、データを全て加算して、データ数で割れば算出できます。簡単ですね。電卓で足し算をするのが面倒なら、ExcelのAverage関数を使います。
例えば、次のような開発プロジェクトがあるとします。
表.1 あるプロジェクトのプログラマの1カ月の生産性(LOC) | |
---|---|
名前 | 生産性(LOC) |
エンジニアA | 770 |
エンジニアB | 1030 |
エンジニアC | 940 |
エンジニアD | 410 |
エンジニアE | 990 |
平均 | 828 |
表.1では、左側がエンジニアの名前、右側がプログラマの1カ月の生産性 (ソースコード行数)を示したものです。平均値は、エンジニアAからエンジニアEのソースコード行数を足し、人数で割れば計算できます。(770 + 1030 + 940 + 410 + 990) / 5で平均値は828です。簡単ですね
続いて、度数分布表の場合はどうでしょう。度数分布の平均値の求め方は次のようになります。
次に下の表.2データに対し、上記(1)〜(3)を適用する手順を詳細に解説します。
表.3を参照しながら見てください。
まず(1)から階級値を求めます。「100〜200」の場合、(100+200)/ 2で150ですね。それを「500〜600」まで繰り返します。(2)より、階級値と人数を乗算します。「200〜300」の場合、階級値は250、度数は3なので、250 * 3 = 750です。それを全ての階級で行います。(3)から各階級の「階級値*度数」を足して、合計を出すと4250です。最後に、合計を人数の合計で割ると、4250 / 12となり、約351となります。
表.2 あるプロジェクトのプログラマの1カ月の生産性(LOC) | |
---|---|
階級(1カ月あたりの生産性) | 度数 |
100〜200 | 1 |
200〜300 | 3 |
300〜400 | 5 |
400〜500 | 2 |
500〜600 | 1 |
表.3 あるプロジェクトのプログラマの1カ月の生産性(LOC) | |||
---|---|---|---|
階級(1カ月あたりの生産性) | 階級値 | 度数 | 階級値*度数 |
100〜200 | 150 | 1 | 300 |
200〜300 | 250 | 3 | 750 |
300〜400 | 350 | 5 | 1750 |
400〜500 | 450 | 2 | 900 |
500〜600 | 550 | 1 | 550 |
合計 | - | 12 | 4250 |
平均(度数分布) | - | - | 351 |
Copyright © ITmedia, Inc. All Rights Reserved.