統計の話をしようじゃないか - ソフトウェア品質のための統計入門(No.5 形状を知る:歪度・尖度と分布のクセ)
Back to Top
はじめに
#「統計の話をしようじゃないか」第5回では、データの「形」に着目します。
これまでに代表値やばらつきを見てきましたが、分布の形状そのものに注目することで、データの本質がより明確になります。
今回は以下の2つの指標を中心に紹介します:
- 歪度(Skewness)… 分布の“非対称性”
- 尖度(Kurtosis)… 分布の“とがり具合”や“尾の重さ”
品質管理においても、「正規分布であること」を前提に統計的な管理や判断が行われる場面が多いため、非正規分布を見抜く力が求められます。
正規分布とは:
これまで何度か「正規分布」という分布が登場しました。
詳しくは「確率と分布」のところで説明しますが、それまでの間ずっと「後の回で詳細を…」と言い続けるのも何なので、ここでは「正規分布の直感的理解」に必要な情報をお伝えしたいと思います。
正規分布とは、データの多くが平均値の近くに集中し、左右対称な山型の形をした分布です。
数学的には「平均を中心として、標準偏差に従う連続的な確率分布」として定義されます。
(平均については 第3回、標準偏差については 第4回 で紹介しました)
自然界やビジネスの多くの現象で観察される、非常に基本的かつ重要な分布です。
正規分布の主な特徴:
- 平均値を中心に左右対称
- 山の高さと幅は標準偏差(σ)で決まる
- 平均±1σに全体の約68%、±2σに約95%、±3σに約99.7%が含まれる
この性質により、たとえば「平均から2σ以上離れていたら異常」といった判断が可能になります。
青い曲線は平均0・標準偏差1の正規分布を表し、色付きの範囲はそれぞれ以下を示します:
- 緑:±1σ(約68.3%のデータが含まれる)
- オレンジ:±2σ(約95.4%までカバー)
- 赤:±3σ(約99.7%までカバー)
ソフトウェア品質との関係:
ソフトウェアの処理時間やレビュー所要時間など、ランダムな要因の積み重ねで生じる現象は、理論上、正規分布に近づくことが知られています。
ただし、実際のデータは「正規分布に近いもの」もあれば、「極端に歪んでいるもの」「外れ値が多く尖っているもの」もあります。
こうしたクセを見抜くには、単に平均や標準偏差を見るだけでは不十分です。
そこで、この回では 分布の形を数値化する「歪度」と「尖度」 について紹介し、実務で遭遇する非正規分布にどう向き合うべきかを学んでいきます。
歪度(Skewness):左右対称かどうか
#● 定義
#歪度とは、データの分布が左右どちらに傾いているかを数値で表す指標です。
「データが平均値の左右どちら側に偏っているのか?」を評価することで、単なる平均や標準偏差では見えにくい“偏りのクセ”を把握できます。
- 歪度 = 0:左右対称な分布(例:正規分布)
- 歪度 > 0:右に長い尾を持つ(右に外れ値が多い)
- 歪度 < 0:左に長い尾を持つ(左に外れ値が多い)
歪度の計算式は以下のように定義されます。
● 記述統計
- :データの各値
- :平均(記述統計では全体平均として扱うため、実質的には母平均 と同義と見なせます)
- :標準偏差(補正なし、分母は )
- :データ数(今あるデータの個数)
● 推測統計
- :データの各値
- :標本平均
- :標本の標準偏差
- :データ数
歪度はツールで計算できますので、覚えなくても大丈夫です。
※「」という記号は、標本モーメントから求められる形の歪度を指す略記です。
● グラフでの視覚イメージ
#● 実務での例
#ソフトウェア開発や品質管理の現場では、データが歪んでいるケースは珍しくありません。
- 修正所要日数の分布
通常は1~3日で終わる修正が多いが、たまに1週間以上かかるケースがある → 右に歪む - ユーザー満足度アンケート
回答の多くが「5段階中の4や5」(高い満足度)に集中し、低い満足度の回答が少ない → 左に歪む
● 歪度を見逃すとどうなる?
#歪度があるにもかかわらず、単純に平均値だけで判断すると、“典型的な状況”を誤って把握してしまう可能性があります。
- 平均値が大きくズレて、KPI(※1)やSLA(※2)の設定が実態に合わなくなる
- レビューやテストの所要時間を過小または過大に見積もってしまう
- 「一部の極端なケース」に品質判断を引っ張られる
※1:KPI(Key Performance Indicator)→重要業績評価指標。プロジェクトや業務の達成度を測るための数値目標です。(例:バグ修正平均日数、レビュー完了率など)
※2:SLA(Service Level Agreement)→サービス提供者と利用者の間で取り決められるサービス品質に関する合意指標です。(例:障害対応の初動時間や修正完了までの時間など)
歪度の把握は、異常の早期発見や、より適切な代表値の選定(平均・中央値の使い分け) に役立ちます。
データの“クセ”を捉えることで、より実態に即した判断や改善が可能になります。
尖度(Kurtosis):尖り具合と尾の重さ
#● 定義
#尖度は、分布のピークの高さ(中心集中の度合い)や尾の重さ(外れ値の出やすさ) を表す指標です。
尖度の値 | 形状の特徴 | 意味 |
---|---|---|
尖度 = 0 | 正規分布と同じ | 基準となる形。中心と外れ値のバランスが標準的 |
尖度 > 0 | ピークが鋭く、尾が重い | 多くが中心に集まりつつ、極端な外れ値も出やすい |
尖度 < 0 | 平坦な山。尾も短く、外れ値が少ない | データが均一にばらけている状態 |
尖度の高い分布は「多くのデータは似た値なのに、時々極端に離れた値が出る」ような分布です。
尖度の低い分布は「平均から大きく離れた値が少なく、全体がなだらかに広がっている」分布です。
尖度の計算式は次のように定義されます。
● 記述統計
※ここで「−3」は正規分布の尖度を0とするための補正です(これを「超過尖度」と呼びます)
● 推測統計
尖度はツールで計算できますので、覚えなくても大丈夫です。
※「」という記号は、標本モーメントから求められる形の尖度を指す略記です。
● グラフでの視覚イメージ
#- 尖度が高い分布: 中央が細く高く、両端に細くて長い尾がついている(とがった山と長いヒゲ)
- 尖度が低い分布: 平坦で広く、中央もぼんやりしていて尾も短い
● 注意点:「尖度」が高い方が良いとは限らない
#一見「尖度が高い=多くのデータが平均に集中している」と聞くと、良いことのように思えるかもしれません。
しかし、実務においては「尖度が高い」ことがリスクの兆候になる場面も少なくありません。
尖度が高い分布(Leptokurtic)
-
特徴:
- 多くのデータが平均付近に集中
- しかし、極端な外れ値(異常に長い所要時間など)を含みやすい
- ピークが鋭く、尾が重い
-
リスク:
- 平均だけでは「異常ケースの影響」を見逃すおそれがある
- 一見安定して見えるが、実際はたまに重大な遅延やトラブルが発生する可能性がある
-
例:
- 普段はレビューが20分で終わるのに、1件だけ120分かかる
→ 平均では見えないが、尖度を見ればその異常性に気づける
- 普段はレビューが20分で終わるのに、1件だけ120分かかる
尖度が低い分布(Platykurtic)
-
特徴:
- データは全体的にばらけている(ばらつきは大きい)
- しかし、外れ値はあまり含まれない
- ピークがなだらか、尾も短い
-
意味合い:
- ブレはあるが、極端に悪いケースは少ない
- コントロール可能な範囲内のバラつき
比較表
観点 | 尖度が高い分布 | 尖度が低い分布 |
---|---|---|
一見すると | 安定して見える | ばらついて見える |
実際には | 外れ値のリスクが高い | 外れ値は出にくい |
管理上の注意点 | 異常の見逃しに注意 | 安全だがバラつきは多い |
実務での“分布のクセ”の重要性
#多くの統計手法(特に推測統計)は、データが正規分布に従うことを前提としています。
しかし、実務で扱うデータの多くは、実際には非正規分布を示すことが少なくありません。
これは、実務データが「人の作業」「突発的な事象」「環境要因」など不確実性の重なりによって生成されるため、理想的な“山型”の分布から外れてしまうためです。
● ソフトウェア品質での例:
#- 修正工数:ほとんどが短時間だが、まれに数十時間かかる作業がある → 右に歪んだ分布(正の歪度)
- レビュー所要時間:ごく一部に極端に長いレビューがある → 外れ値による高尖度
- バグ密度:ほとんどのモジュールは低密度だが、一部にバグ集中 → 多峰性のある分布
こうした分布の“クセ”を理解せずに、平均値や標準偏差だけで評価・判断すると、
- 実態に合わない目標が設定される
- 平均で報告したら「話が違う」とクレームになる
- 指標が外れ値に振り回されて改善効果が見えない
といった実務上の誤解・誤判断につながるリスクがあります。
こうした“正規分布ではないデータ”に対しては、歪度・尖度といった分布形状の指標を活用して、正しい把握と意思決定につなげる視点が求められます。
● 可視化で見抜く:ヒストグラムと箱ひげ図
#ヒストグラムと箱ひげ図は第4回でも利用しました。
偏りや山の鋭さが一目でわかります。
PythonやExcelでも簡単に描画できるので、分析時に活用することをお勧めします。
- ヒストグラムで左右の偏りや山の鋭さを目視できる
- 箱ひげ図で非対称性や外れ値の有無を確認できる
Pythonプログラム(ヒストグラムと箱ひげ図)
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import skew, kurtosis
np.random.seed(0)
data = np.concatenate([np.random.normal(50, 5, 950), np.random.normal(100, 5, 50)])
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.hist(data, bins=30, color="skyblue", edgecolor="black")
plt.title("ヒストグラム(歪度と尖度の例)")
plt.xlabel("値")
plt.ylabel("度数")
plt.subplot(1, 2, 2)
plt.boxplot(data, vert=False, patch_artist=True, boxprops=dict(facecolor='lightgreen'))
plt.title("箱ひげ図")
plt.tight_layout()
plt.show()
print("歪度:", skew(data))
print("尖度:", kurtosis(data))
まとめ
#- 歪度・尖度は「分布のクセ」を数値で把握するために重要
- 正規分布に近いかどうかの判断材料として使える
- 統計処理の前提条件(正規性)をチェックするためにも役立つ
- 目視での確認(グラフ)と数値指標の両面で理解を深めよう
次回予告
#次回は「グラフによる可視化テクニック」について解説します。
“適切なグラフ選び”と“伝わる資料作り”のコツをお届けします。
データ分析にご活用いただければ幸いです。