元教師
こんにちは!データサイエンティストの青木和也(https://twitter.com/kaizen_oni)です!
今回は統計学における基本の「き」、平均値について解説していきたいと思います。
平均値はデータ全体の特徴を捉えるのに有用な指標の一つです。
ぜひ平均値についてマスターして、データを扱った意思決定の第1歩を踏み出しましょう!
平均値とは
平均値 とは、データを代表する値(代表値)の1つであり、一般的には算術平均のことを指します。
算術平均とはデータのそれぞれの値の和を、データの個数で割ったものです。
具体的には以下のような式で表されます。
つまりは一般化すると以下のような式になります。
平均値で集約することのパワー
では、どういった場合に平均値という指標を使うのでしょうか。
例えば、クラスAとクラスBの数学の点数を比較したいとします。
クラスの人数がそれぞれ3名ずつであれば個別のデータを見れば、クラスの数学の得点の特徴を掴むのは簡単でしょう。
上記のようなクラスの得点分布であれば、全体的にAクラスの生徒の方がBクラスの生徒よりも得点が高いということが言えるでしょう。
それでは、各クラスの人数が25名に増えたらどうでしょうか。
先ほどは「82点と73点」「75点と69点」「46点と38点」を見比べながら、「Aクラスの方が得点が高そう=優秀そう」という結論を出すことができましたが、25名ずつの得点を見比べるのは至難の技です。
そこで、平均値などの代表値の出番なのです。
いわば、平均値は各クラスの得点の分布を代表する値 なのです。
各クラスの平均得点を計算してみると、Aクラスが50.8点、Bクラスが51.64点ということが分かったので、「どちらのクラスの方が優秀ですか?」という質問に対しては「微妙にBクラスの方が得点が高いので、Bクラスの方が優秀かもしれない」という結論を出すことができます。
平均値だけを盲信してはいけない理由
一方で、平均値という代表値のみでグループ間の差異を比べることについての危険性についてもお話ししておきます。
例えば、以下の問いについて考えてみてください。
問い
Aクラスの数学の平均点とBクラスの数学の平均点がともに50点であった。このことからどのようなことがいえるか。
さて、いかがでしょうか。
おそらくあなたは「両クラスとも平均点が同じなのだから、数学に関しては2つのクラスは同じ程度の学力だと言えるのではないか」と考えたのではないでしょうか。
では、両クラスの得点の分布、つまり1人1人の得点が以下のようであったならばどうでしょうか。
上記の得点分布から、両クラスとも平均得点は50点でありながらも、Aクラスはクラスのみんながまんべんなく50点を取っているTHE・平均的なクラス、Bクラスは満点2名、0点2名とどんな授業をしたらこんな得点分布になるんだという気持ちになる極端クラスであることが分かります。
また、上記のクラスの得点をヒストグラムで可視化すると以下のようになります。
ヒストグラムで可視化するだけでも、両クラスは平均点が同じではあるものの、全く異なる特性を持つクラスであることが分かります。
このため、平均値のみで比較することは誤った解釈を招く可能性があり、平均値を集計する前のデータの中身や分布を可視化したものを見ることが必要と なってきます。
平均は本当に正しい代表値?
また、次のようなケースを考えてみましょう。
問い
ある年の日本国民の平均年収が547万5千円だったとします。以上のことから、547万円以下の年収の人は日本の労働人口の半分よりも年収が低いと言えるでしょうか。
いかがでしょうか。
「平均以下」ということは、そのままの意味で日本の労働人口の半分よりも年収が低いっていうのは間違いないよね?それが平均の定義だよね?
と思われた方もいらっしゃるのではないでしょうか。
おそらくそのようなイメージをされている方は以下のようなグラフをイメージしているのではないでしょうか。
このような左右対称な分布であれば、平均年収以下ならば日本の労働人口の半分よりも年収が低い、という主張は正しいように思われます。
このような左右対称で分布の平均にピーク(山の頂上)があるような分布を、正規分布 と言います。
では、実際の年収の分布はどうなっているのでしょうか。
今回の問いに使用した、平成21年に厚生労働省が出している所得の分布状況のヒストグラムを見てみましょう。
実際の分布を見てみると、ヒストグラムの山の頂上は平均値よりも少し左にあり、ヒストグラムの右側が長いような状況になっていることが分かります。
そして、ヒストグラムの山の頂上が左側にあるにも関わらず、平均値が山の頂上よりも右側にあるということは、年収の高い一部の人たちが日本の年収を100万円ほど吊り上げている、ということが言えるかと思われます。
つまり、「平均年収以下の人は日本の労働人口の半分よりも年収が低いのか」という問いに対しては、「一部の高所得者層が平均年収を吊り上げているので必ずしもそうは言えない 」という結論になります。
特に、「2000万円以上」とまとめたところには、2000万円以上の年収の人、極端な例を言えば年収1億円や10億円の人も含まれているので、このような人が日本全体としての年収を100万円ほど引き上げている要因ではないか、と考えることができます。
実際に、年収分布の中央値を見てみると、427万円となっており、平均値よりも120万円ほど低い値であることが分かります。
データを大きい順(または小さい順)に並べたときに、ちょうど真ん中にくる値を中央値 と言います。
今回の場合は、調査対象の人の年収を大きい順(または小さい順)に並べたときにちょうど真ん中にきた人の年収が427万であった、ということです。
なお、中央値はデータの総数が偶数か奇数かによって計算方法が違いますので気をつけましょう。
このヒストグラムから平均値を扱う際の注意点が2つ見えてきます。
1つは、分布の代表値として考えるときに、平均値が適切か、中央値が適切かについてよく考える必要がある 、ということです。
例えば、これも極端な例ですが、「平均値が約547万円ならば、平均的に生きていれば547万円の水準には到達するはず!」と思っていても、それは一部の億万長者が平均年収を吊り上げてた結果としての547万円であって、実際には多くの人の平均年収は中央値の427万円付近に落ち着く、ということが言えます。
2つ目は、平均値は極端な値の影響を受けやすい ということです。
有名な話に「ある年にワシントン州の独身男性の平均資産額が約500万円も増加した」という話があります。
これはワシントン州の独身男性に幸運なビジネスチャンスが巡ってきて、結果として彼らの資産額が著しく上昇したことを示すのでしょうか。
それともワシントン州の政策が功を奏し、お金持ちの男性がワシントン州に引っ越しきたことによって、ワシントン州の独身男性の平均資産額が押し上げられたのでしょうか。
上記のお話は蓋を開けてみれば非常に簡単なことで、答えは「ビルゲイツが離婚したこと 」です。
当時のビルゲイツの資産額は、諸説ありますが約14兆円、この圧倒的な外れ値によってワシントン州の平均資産額が押し上げられてしまったのです。
他に比べて極端に小さな値、または極端に大きな値を外れ値 といいます。
当時のアメリカ人の個人資産額が約3000万円であることを考えると、ビルゲイツの資産額14兆円は「極端に大きな値」として、外れ値であると言えます。
平均値に関する統計検定3級の類似問題
それでは、実際に統計検定3級に出題された問題の類似問題を解きながら、平均値の算出方法を復習してみましょう!
問題
次の枝幹図は、47都道府県の博物館数を表したものである。左端に10の位の値、右側は1の位の値を表している。
資料:文部科学省「社会教育調査(令和3年度)」
[1] 都道府県博物館数の中央値はいくつでしょうか。
[2] 都道府県別博物館数の平均値はいくつでしょうか。次の1~5のうちから最も近いものを一つ選べ。
① 18 ② 20 ③ 28 ④ 39 ⑤ 41
中央値についてはCHECKでしか説明していませんし、枝幹図についても何の説明もしていませんが、ぜひ問題文から枝幹図の読み取り方を考えて、問題に取り組んでみてください!
解答
[2] 47都道府県を数字が小さい順に並べた時の真ん中の数は、ちょうど24番目の数字が中央値になります。( 47 = 23 + 1 + 23より)
よって、枝幹図で24番目の要素を上または下から数えていくと、中央値は22 であることが分かります。
[1] 枝幹図に書かれた各都道府県の博物館数を読み解くと、以下のようになります。
1行目は「5,7,8」
2行目は「11,11,13,13,13,15,15,16,16,16,17,17,18,19」
….
12行目は「113」
これの数字を全て足すと、1305になります。
そしてデータ数、つまり都道府県数は47なので、1305を47で割ると「27.7659…」
これに最も近い選択肢は「③28」なので、③が正解となります。
Python/R/SQLでの平均値の算出方法
先ほどは都道府県別の博物館数のデータを使って、手計算で中央値と平均値を求めましたが、今度はPython/R/SQLを使って、中央値、平均値を求めてみましょう。
問題(Python/R)
次のmuseum.csvのpref列には都道府県名が、museum列にはその都道府県の博物館数が記載されています。全国の博物館数の中央値と平均値をそれぞれ求めてください。
解答(Python)
まずは、pandasを使ってcsvを読み込んで、median()とmean()を使用して中央値と平均値を算出しましょう。
#csvを読み込むためにpandasライブラリをインポート
import pandas
#csv読み込み
df = pd.read_csv('pref_museum.csv')
#median()で中央値を、mean()で平均値を算出
print('中央値: {}'.format(df['museum'].median()))
print('平均値: {}'.format(df['museum'].mean()))
中央値: 22.0
平均値: 27.76595744680851
format()メソッドは文字列の中の{}にformat()メソッドの引数として与えられた値を代入するメソッドです。数字を代入する場合には小数第何位まで記入するなど指定をすることもできます。
解答(R)
read_csvでcsvを読み込んだ後に、median()やmean()で中央値、平均値を算出しましょう。
#csvを読み込み
df <- read.csv('./pref_museum.csv')
#中央値を計算
median(df$museum)
#平均値を計算
mean(df$museum)
>median(df$museum)
[1] 22
>mean(df$museum)
[1] 27.76596
問題
次のSQL文を実行して、PREF_MUSEUMテーブルを定義し、MUSEUM列の中央値と平均値を計算してください。
CREATE TABLE PrefMuseum
(
pref VARCHAR(20),
museum INTEGER
);
INSERT INTO PrefMuseum VALUES('青森県', 5);
INSERT INTO PrefMuseum VALUES('鳥取県', 7);
INSERT INTO PrefMuseum VALUES('宮崎県', 8);
INSERT INTO PrefMuseum VALUES('秋田県', 11);
INSERT INTO PrefMuseum VALUES('徳島県', 11);
INSERT INTO PrefMuseum VALUES('福島県', 13);
INSERT INTO PrefMuseum VALUES('和歌山県', 13);
INSERT INTO PrefMuseum VALUES('佐賀県', 13);
INSERT INTO PrefMuseum VALUES('滋賀県', 15);
INSERT INTO PrefMuseum VALUES('香川県', 15);
INSERT INTO PrefMuseum VALUES('山形県', 16);
INSERT INTO PrefMuseum VALUES('長崎県', 16);
INSERT INTO PrefMuseum VALUES('大分県', 16);
INSERT INTO PrefMuseum VALUES('宮城県', 17);
INSERT INTO PrefMuseum VALUES('高知県', 17);
INSERT INTO PrefMuseum VALUES('沖縄県', 18);
INSERT INTO PrefMuseum VALUES('熊本県', 19);
INSERT INTO PrefMuseum VALUES('鹿児島県', 20);
INSERT INTO PrefMuseum VALUES('岩手県', 21);
INSERT INTO PrefMuseum VALUES('山梨県', 21);
INSERT INTO PrefMuseum VALUES('三重県', 21);
INSERT INTO PrefMuseum VALUES('島根県', 21);
INSERT INTO PrefMuseum VALUES('福井県', 22);
INSERT INTO PrefMuseum VALUES('奈良県', 22);
INSERT INTO PrefMuseum VALUES('岐阜県', 23);
INSERT INTO PrefMuseum VALUES('山口県', 24);
INSERT INTO PrefMuseum VALUES('茨城県', 25);
INSERT INTO PrefMuseum VALUES('栃木県', 25);
INSERT INTO PrefMuseum VALUES('愛媛県', 25);
INSERT INTO PrefMuseum VALUES('群馬県', 26);
INSERT INTO PrefMuseum VALUES('埼玉県', 26);
INSERT INTO PrefMuseum VALUES('広島県', 30);
INSERT INTO PrefMuseum VALUES('福岡県', 30);
INSERT INTO PrefMuseum VALUES('石川県', 31);
INSERT INTO PrefMuseum VALUES('岡山県', 33);
INSERT INTO PrefMuseum VALUES('兵庫県', 36);
INSERT INTO PrefMuseum VALUES('新潟県', 37);
INSERT INTO PrefMuseum VALUES('富山県', 37);
INSERT INTO PrefMuseum VALUES('京都府', 38);
INSERT INTO PrefMuseum VALUES('大阪府', 38);
INSERT INTO PrefMuseum VALUES('静岡県', 43);
INSERT INTO PrefMuseum VALUES('愛知県', 43);
INSERT INTO PrefMuseum VALUES('千葉県', 44);
INSERT INTO PrefMuseum VALUES('神奈川県', 51);
INSERT INTO PrefMuseum VALUES('北海道', 66);
INSERT INTO PrefMuseum VALUES('長野県', 83);
INSERT INTO PrefMuseum VALUES('東京都', 113);
解答
まずは簡単な平均値を求める方から実行しましょう。
SELECT
AVG(museum) as mean
FROM
PrefMuseum
AVGを使った非常にシンプルなクエリで平均値を求めることができます。
一方、SQLには中央値を求める関数がないので、with句やウィンドウ関数を駆使して中央値を求めることになります。
--- ①
WITH OrderMuseum as (
SELECT
pref,
museum,
--- ROW_NUMBER()関数によって、博物館数の小さい順に1から数字を割り当てる
ROW_NUMBER() OVER(order by museum) as order_id,
--- ct列に都道府県数(=47)を入れる
(SELECT COUNT(*) FROM prefmuseum) as ct
FROM prefmuseum
)
SELECT
--- ③
AVG(museum) as median
FROM OrderMuseum
--- ②
WHERE order_id BETWEEN ct/2 AND ct/2 + 1
上記クエリを段階を追って解説していきましょう。
①WITH句を使って作成したOrderMuseumテーブルのクエリを実行すると、元々のPrefMuseumテーブルにorder_id列とct列がくっつきます。
新しい列2つは中央値を計算するために後ほど使用します。
②WHERE句の条件でct列の値(=47)を割った値とその値に1を足した値の間にある数字を算出します。
これはデータ数が偶数であろうが奇数であろうが正しい中央値を求めるためです。
データ数が奇数の場合は真ん中の数字1つが選ばれ、データ数が偶数の場合は真ん中の数字2つが選ばれます。
③ ②で真ん中の数字が1つ選ばれた場合は、AVG(museum)はそのまま選ばれた1つの数字を返します。
②で真ん中の数字が2つ選ばれた場合は、AVG(museum)は選ばれた2つの数字の平均を返します。
これがデータの中央値となるわけです。
まとめ
今回の記事では統計学の超基本、平均値について演習問題つきで解説してみました。
平均値は便利な代表値である一方、データに偏りや外れ値が含まれている場合は私たちがイメージしている「真ん中」とされる値から離れてしてしまう危険性を持っています。
平均値を意思決定の指標として使う際には、必ずデータの分布について確認した上で活用するように気をつけましょう!
当ブログは「世界一分かりやすい解説」を目指しているので、分かりづらい部分があった場合はコメント等で教えていただけると幸いです!
それでは、今日も勉強おつかれさまでした!
コメント