【初心者向け】平均・中央値・最頻値で株価を読む統計学入門

※本記事のコードや情報は執筆時点の仕様に基づいています。投資は自己責任であり、必ずデモ環境や少額資金でテストした上で運用してください。

統計学の第一歩:代表値とは何か

「この銘柄の株価は平均いくらか?」という質問は単純そうに見えますが、「平均」にも種類があります。統計学では代表値と呼ばれる「データの中心を表す値」を使って、大量のデータを1つの数字で要約します。

代表値には主に3種類あります。

名称 意味 特徴
平均値(Mean) すべての値を足して個数で割る 外れ値の影響を受けやすい
中央値(Median) データを並べたときの真ん中の値 外れ値に強い
最頻値(Mode) 最も多く登場する値 カテゴリデータに有効

なぜ「平均だけ」では危険なのか

例えば5日間の株価が「100, 101, 99, 102, 500」だったとします。平均値は180.4円になりますが、500円が1日だけ異常に高い日(スプリットや誤値)だった場合、180.4円という数字は実態を全く反映していません。

このような外れ値が存在するとき、平均より中央値の方が「本当の相場感」を正確に表します。中央値はこの場合101円となり、実態に近い値です。

Pythonで実際に計算してみよう

yfinanceを使ってトヨタ自動車(7203.T)の株価データを取得し、3つの代表値を計算します。

import yfinance as yf
import pandas as pd
import numpy as np
from scipy import stats

# ==============================
# 設定エリア
# ==============================
SYMBOL = "7203.T"   # トヨタ自動車
PERIOD = "1y"       # 過去1年分のデータ

# ==============================
# データ取得
# ==============================
ticker = yf.Ticker(SYMBOL)
df = ticker.history(period=PERIOD)

# 終値を使って代表値を計算
close = df["Close"]

mean_val   = close.mean()          # 平均値
median_val = close.median()        # 中央値
mode_val   = stats.mode(close.round(0), keepdims=True).mode[0]  # 最頻値(整数に丸めて計算)

print(f"銘柄: {SYMBOL}")
print(f"データ件数: {len(close)}日分")
print(f"平均値  (Mean)  : {mean_val:,.1f} 円")
print(f"中央値  (Median): {median_val:,.1f} 円")
print(f"最頻値  (Mode)  : {mode_val:,.1f} 円")
print()

# 平均値と中央値の差が大きいほど「外れ値の影響あり」
diff = abs(mean_val - median_val)
print(f"平均と中央値の差: {diff:.1f} 円")
if diff > mean_val * 0.02:
    print("→ 差が大きいため、外れ値の影響が出ている可能性があります")
else:
    print("→ 差が小さく、データは比較的均一に分布しています")

実行結果の読み方

平均値と中央値の差が大きい場合は、急騰・急落などの「特異な日」が含まれているサインです。バックテストや戦略の評価には中央値を使うと、異常値に引きずられない判断ができます。

まとめ

  • 平均値は最もよく使われるが、外れ値に弱い
  • 中央値は外れ値の影響を受けにくく、実態に近いことが多い
  • 最頻値は価格帯の集中ポイントを知るのに有効
  • Pythonならyfinanceとnumpyで数行で計算できる
タイトルとURLをコピーしました