LESSON

記述統計

田中VPoE「データの前処理が終わったね。ここからは統計の力を使ってデータを深く理解していこう。まずは記述統計からだ。」

あなた「記述統計って、平均とか標準偏差のことですよね?」

田中VPoE「そうだけど、ただ計算するだけじゃなく、数値の意味を正しく解釈することが大事だ。データの分布の形を理解しないと、平均値に騙されてしまうことがあるからね。」

記述統計とは

記述統計(Descriptive Statistics)は、データの特徴を数値や図表で要約する手法です。データ全体の傾向を把握するための第一歩です。

代表値(中心傾向の尺度)

平均値(Mean)

import pandas as pd
import numpy as np

mean_amount = df['amount'].mean()
print(f"平均注文金額: {mean_amount:,.0f}円")
  • 全データの重心
  • 外れ値に弱い:1件の超高額注文で大きく変動する

中央値(Median)

median_amount = df['amount'].median()
print(f"中央値: {median_amount:,.0f}円")
  • データを大きさ順に並べた中央の値
  • 外れ値に強い(ロバスト)

最頻値(Mode)

mode_category = df['category'].mode()[0]
print(f"最も多いカテゴリ: {mode_category}")
  • 最も頻繁に出現する値
  • カテゴリカル変数に適している

代表値の使い分け

代表値適する場面注意点
平均値正規分布に近いデータ外れ値で歪む
中央値歪んだ分布(収入、売上)外れ値に頑健
最頻値カテゴリカルデータ複数存在する場合がある

実例:NetShop社の注文金額が「平均5,000円、中央値2,500円」の場合、一部の高額注文が平均を押し上げています。「典型的な注文」は中央値の2,500円に近いと解釈すべきです。

散布度(ばらつきの尺度)

分散と標準偏差

variance = df['amount'].var()
std_dev = df['amount'].std()
print(f"分散: {variance:,.0f}")
print(f"標準偏差: {std_dev:,.0f}円")
  • 分散:各データ点と平均の差の2乗の平均
  • 標準偏差:分散の平方根(元のデータと同じ単位)

変動係数(CV)

cv = df['amount'].std() / df['amount'].mean()
print(f"変動係数: {cv:.2f}")
  • 平均に対する標準偏差の比率
  • 異なるスケールのデータのばらつきを比較できる

四分位範囲(IQR)

Q1 = df['amount'].quantile(0.25)
Q3 = df['amount'].quantile(0.75)
IQR = Q3 - Q1
print(f"Q1: {Q1:,.0f}円, Q3: {Q3:,.0f}円, IQR: {IQR:,.0f}円")
  • 外れ値検出にも使用:Q1 - 1.5IQR 未満、Q3 + 1.5IQR 超を外れ値とする

分布の形状

歪度(Skewness)

skewness = df['amount'].skew()
print(f"歪度: {skewness:.2f}")
歪度分布の形特徴
≈ 0左右対称平均 ≈ 中央値
> 0右に裾が長い(正の歪み)平均 > 中央値
< 0左に裾が長い(負の歪み)平均 < 中央値

EC の注文金額は典型的に正の歪みを持ちます(少数の高額注文が右裾を伸ばす)。

尖度(Kurtosis)

kurtosis = df['amount'].kurtosis()
print(f"尖度: {kurtosis:.2f}")
尖度分布の形特徴
≈ 0正規分布に近い標準的な裾の重さ
> 0尖った分布裾が重い(外れ値が多い)
< 0平たい分布裾が軽い

実践:NetShop社データの記述統計

# 全体の記述統計
print(df['amount'].describe())

# カテゴリ別の記述統計
category_stats = df.groupby('category')['amount'].agg([
    'count', 'mean', 'median', 'std',
    lambda x: x.quantile(0.25),
    lambda x: x.quantile(0.75)
])
category_stats.columns = ['count', 'mean', 'median', 'std', 'Q1', 'Q3']

# 平均と中央値の乖離をチェック
category_stats['mean_median_ratio'] = category_stats['mean'] / category_stats['median']
print(category_stats)

解釈のポイント

  • mean/median比が1.5以上なら、分布が大きく歪んでいる
  • stdがmeanより大きい場合、ばらつきが非常に大きい
  • カテゴリ間でパターンが異なるか注目する

パーセンタイル分析

# 売上のパーセンタイル分析
percentiles = [10, 25, 50, 75, 90, 95, 99]
for p in percentiles:
    value = df['amount'].quantile(p / 100)
    print(f"P{p}: {value:,.0f}円")

上位顧客の貢献度を把握するのに有効です(パレートの法則:上位20%の顧客が売上の80%を占める)。

まとめ

項目ポイント
代表値平均・中央値・最頻値を分布に応じて使い分ける
散布度標準偏差でばらつきを把握、CVで異なるスケールを比較
分布の形歪度・尖度で分布の非対称性と裾の重さを評価
外れ値IQR法(Q1-1.5IQR〜Q3+1.5IQR)で検出
解釈数値だけでなく、ビジネス文脈で意味を考える

チェックリスト

  • 平均値と中央値の使い分けを説明できる
  • 標準偏差と変動係数の違いを理解している
  • 歪度の正負が分布の形にどう対応するか説明できる
  • IQR法で外れ値を検出できる

次のステップへ

記述統計で「データの全体像」を把握する方法を学びました。次は、サンプルデータから母集団について推測する「推測統計」を学びましょう。


推定読了時間:30分