天井効果とフロア効果ってなに?~pythonでデータ分析をしてみよう~【経営工学を専門にしている大学生の日記】


こんにちは!しゅんです!

今回は天井効果とフロア効果について解説していきたいと思います。

天井効果とフロア効果はデータの分布が偏りすぎている状態を表します。ぼくが最近統計の勉強をしていたときにでてきたので皆さんにもシェアしたいと思います!また今回は説明と一緒にpythonを使ってどんなものか確かめたいと思います。

それでは解説していきましょう!


普段はNBAのデータ分析をしたりしています。ぜひこちらの記事も読んでみてください!


このブログでは経営工学を勉強している現役理系大学生が、経営工学に関することを色々話していきます!


ぼくが経営工学を勉強している中で感じたことや、興味深かったことを皆さんと共有出来たら良いなと思っています。


そもそも経営工学とは何なのでしょうか。Wikipediaによると

経営工学(けいえいこうがく、英: engineering management)は、人・材料・装置・情報・エネルギーを総合したシステムの設計・改善・確立に関する活動である。そのシステムから得られる結果を明示し、予測し、評価するために、工学的な分析・設計の原理・方法とともに、数学、物理および社会科学の専門知識と経験を利用する。

引用元 : 経営工学 – Wikipedia

長々と書いてありますが、要は経営、経済の課題を理系的な観点から解決する学問です。

天井効果ってなに?


天井効果はデータの分布が上の方に偏っていることです。下のデータを見てみましょう。


これはある学校の生徒20人の英語のテストの点数データを小さい順に並べたものです。これを見ると全体的にみんな点数が高いように感じます。例えばちょうど真ん中のJ,Kの点数はそれぞれ83点と85点なので、このデータの中央値は84点になります。

ヒストグラムにすると下の図のようになります。

やはり右側に偏っていますね。青い点線は平均点です。

天井効果の目安は

平均点 + 標準偏差 > 上限値

です。

今回英語の点数データの上限値は100です。また平均値は74.2標準偏差は27.7なので平均点と標準偏差の和は101.9で上限値を超えているので、天井効果が表れていますね。

pythonで天井効果をみてみる


先ほどのヒストグラムをpythonを使って表示してみます。
今回はnumpyとmatplotlibを使って天井効果を確かめてみたいと思います。

# numpy,pandas,matplotlibをインポートする
import numpy as np
%matplotlib inline 
import matplotlib.pyplot as plt
!pip install japanize-matplotlib
import japanize_matplotlib #日本語化matplotlib

英語のデータをリストとして作成します。

# 生徒20人の英語のテストの点数データ
data = [3,13,27,56,68,71,75,79,81,83,85,87,87,90,92,94,96,99,99,99]

このデータの平均値と標準偏差と平均値+標準偏差を表示してみます。

#平均値を表示
print(np.mean(data))
#標準偏差を表示
print(np.std(data))
#平均値+標準偏差を表示
print(np.mean(data) + np.std(data))

上から平均値、標準偏差、平均値+標準偏差の順に表示されています。これを見ると
平均値+標準偏差が100を超えているのでやはり天井効果がありそうです。

それでは最後にヒストグラムを表示してみましょう。ヒストグラムはmatplotlibの.hist()で作成できます。

fig = plt.figure()
ax = fig.add_subplot(1,1,1)

#ヒストグラムを作成(ecは枠線、colorはヒストグラムの色を表す) 
ax.hist(data, bins=range(0,101,10),ec="black", color = "lightblue")
#x座標の目盛りを設定
ax.set_xticks(range(0,101,10))
#y座標の目盛りを設定
ax.set_yticks(range(0,9,1))
#平均値を表示(colorは色,lwは太さ,lsは線の種類,alphaは透過度を表す)
ax.vlines(np.mean(data), 0, 8, color ="blue",lw=2,ls="--",alpha=1)
#平均値+標準偏差を表示(colorは色,lwは線の幅,lsは線の種類,alphaは透過度を表す)
ax.vlines(np.mean(data)+np.std(data), 0, 8, color ="red",lw=2,ls="--",alpha=1)
#ヒストグラムのタイトルを設定
ax.set_title("英語の点数のヒストグラム")
#x軸のラベルを表示
ax.set_xlabel("階級")
#y軸のラベルを表示
ax.set_ylabel("人数")

#グラフを表示
fig.show()

ということでヒストグラムを作ることができました。

フロア効果ってなに?


フロア効果はデータの分布が下の方に偏っていることです。下のデータを見てみましょう。


これはある学校の生徒20人の数学のテストの点数データを小さい順に並べたものです。これを見ると全体的にみんな点数が低いように感じます。例えばちょうど真ん中のJ,Kの点数はそれぞれ15点と19点なので、このデータの中央値は17点になります。

ヒストグラムにすると下の図のようになります。

やはり左側に偏っていますね。青い点線は平均点です。

フロア効果の目安は

平均点 ー 標準偏差 > 下限値

です。

今回数学の点数データの下限値は0です。また平均値は27.8標準偏差は29.0なので平均点と標準偏差の和は-1.2で上限値を超えているので、フロア効果が表れていますね。

pythonでフロア効果をみてみる


先ほどのヒストグラムをpythonを使って表示してみます。天井効果とやり方は同じです

# numpy,pandas,matplotlibをインポートする
import numpy as np
%matplotlib inline 
import matplotlib.pyplot as plt
!pip install japanize-matplotlib
import japanize_matplotlib #日本語化matplotlib

数学のデータをリストとして作成します。

# 生徒20人の数学のテストの点数データ
data = [0,0,5,7,8,9,11,12,15,15,19,22,25,27,27,38,41,88,89,98]

このデータの平均値と標準偏差と平均値+標準偏差を表示してみます。

#平均値を表示
print(np.mean(data))
#標準偏差を表示
print(np.std(data))
#平均値+標準偏差を表示
print(np.mean(data) + np.std(data))

上から平均値、標準偏差、平均値+標準偏差の順に表示されています。これを見ると
平均値+標準偏差が0を下回っているのでやはりフロア効果がありそうです。

それでは最後にヒストグラムを表示してみましょう。ヒストグラムはmatplotlibの.hist()で作成できます。

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
 
ax.hist(data, bins=range(0,101,10),ec="black", color = "lightblue")
ax.set_xticks(range(0,101,10))
ax.set_yticks(range(0,9,1))
ax.vlines(np.mean(data), 0, 8, color ="blue",lw=2,ls="--",alpha=1)
ax.vlines(np.mean(data)-np.std(data), 0, 8, color ="red",lw=2,ls="--",alpha=1)
ax.set_title("数学の点数のヒストグラム")
ax.set_xlabel("階級")
ax.set_ylabel("人数")
fig.show()

ということでヒストグラムを作ることができました。

おわりに


いかがでしたでしょうか。

今回の記事ではpythonを使って天井効果とフロア効果について説明していきました。こんな感じでプログラミングを使えばいろいろなことができます。非常に興味深いですよね。

これからもこのようにプログラミングで色々やっていきたいと思います。ぼくが一番勉強になるので続けていきたいです!

最後までこの記事を読んでくれてありがとうございました。

この記事が役に立ったら幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA