株式リターンを統計的に扱うとき、最初に登場する分布が正規分布(normal distribution)と対数正規分布(log-normal distribution)です。本記事では、両者の関係と、現実のリターン分布との違いを整理します。

目次

  1. 正規分布
  2. 対数正規分布
  3. 株価とリターンの関係
  4. Python で生成・可視化する
  5. 現実のリターン分布
  6. 正規性を確認する手段

正規分布

平均 μ\mu、分散 σ2\sigma^2 の正規分布の確率密度関数(PDF)は次のとおりです。

f(x)=12πσ2exp((xμ)22σ2)f(x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left( -\frac{(x - \mu)^2}{2\sigma^2} \right)

形状の特徴は次のとおりです。

  • 平均を中心に左右対称
  • 平均 ± 1σ に約 68%、± 2σ に約 95%、± 3σ に約 99.7% が入る
  • 裾は急速に薄くなる(極端な値が出にくい)

統計の多くの手法(t 検定、回帰分析の誤差仮定など)は、正規分布を前提に組み立てられています。

正規分布の確率密度関数の形状

対数正規分布

ある変数 YY が正規分布に従うとき、X=eYX = e^Y は対数正規分布に従います。式で書くと次のとおりです。

lnXN(μ,σ2)    XLogNormal(μ,σ2)\ln X \sim \mathcal{N}(\mu, \sigma^2) \iff X \sim \text{LogNormal}(\mu, \sigma^2)

対数正規分布の特徴は次のとおりです。

  • 値は常に正(X>0X > 0)
  • 右に裾を引いた左右非対称の形
  • 値を対数変換すると正規分布に戻る

株価そのものは負にならないため、価格モデルとして対数正規分布を仮定することがあります。一方で、リターン(対数差)は正規分布で近似する流派が一般的です。

株価とリターンの関係

整理すると、よく使われる仮定は次のとおりです。

仮定される分布
株価 PtP_t対数正規分布
対数リターン ln(Pt/Pt1)\ln(P_t / P_{t-1})正規分布
単純リターン Pt/Pt11P_t/P_{t-1} - 1近似的に正規(短期・小変動なら)

対数リターンの加算性(#5-9「リターンの種類 — 単純リターンと対数リターン」)と、対数正規分布の数学的扱いやすさが、これらの仮定が選ばれる理由です。

Python で生成・可視化する

NumPy で 2 つの分布から乱数を生成し、ヒストグラムを比べます。

import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(0)
n = 5000
# 正規分布: 平均 0、標準偏差 0.02
normal_samples = rng.normal(loc=0.0, scale=0.02, size=n)
# 対数正規分布: 対応する正規の平均 0、標準偏差 0.02
lognormal_samples = rng.lognormal(mean=0.0, sigma=0.02, size=n)
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].hist(normal_samples, bins=50)
axes[0].set_title("Normal (returns)")
axes[1].hist(lognormal_samples, bins=50)
axes[1].set_title("Log-normal (price ratio)")
plt.tight_layout()
plt.show()

正規分布は左右対称、対数正規分布は右に裾を引いた形になります。

正規分布と対数正規分布のヒストグラム比較

現実のリターン分布

実データの株式リターンは、正規分布と比べて次のような違いを示すことが知られています。

  • 裾が厚い(fat tail): 大きな上昇・下落が、正規分布よりも頻繁に起こる
  • 負に歪む(left skew): 暴落が大幅、回復はゆっくりという非対称
  • ボラティリティクラスタリング: 大きな変動の翌日にも大きな変動が起きやすい

これらは、リスク管理(VaR、ストレステスト)で正規分布をそのまま当てはめると 損失を過小評価する 原因になります。

正規性を確認する手段

データが正規分布に近いかを確認する方法は複数あります。

手段概要
ヒストグラム視覚的に左右対称か・裾の厚みを確認
QQ プロット理論分位点との対応を直線で評価
Shapiro-Wilk 検定統計的検定、件数が少ないときに有効
Jarque-Bera 検定歪度・尖度から評価、件数が多いときに有効

QQ プロットは scipy で簡単に描けます。

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
# ここでは正規分布のサンプルを使う(現実のリターンに置き換えると比較が見える)
samples = np.random.default_rng(1).normal(loc=0, scale=1, size=500)
fig, ax = plt.subplots(figsize=(5, 5))
stats.probplot(samples, dist="norm", plot=ax)
ax.set_title("QQ plot vs normal")
plt.tight_layout()
plt.show()

理論線から両端で大きく乖離しているなら、裾が厚いサインです。

注意点

  • 正規分布の仮定は便利だが、現実のリターンには厳密に当てはまらない
  • リスク管理や検定で「正規だから ± 2σ で 95%」と機械的に当てはめないこと
  • 対数リターンに対しても、極端な相場局面では正規からのずれが大きくなる

生成AI へのプロンプト例

正規分布と実データを重ねて描画するスクリプトの例です。

日次リターンの pandas Series を受け取り、ヒストグラムと
平均・標準偏差から推定した正規分布の PDF を重ねて表示する関数
plot_return_dist(returns) を書いてください。
要件:
- matplotlib を使う
- ヒストグラムは density=True で描く
- 推定パラメータをタイトルに表示
- pandas 2.2 系の API を使う
- docstring を日本語で書く

まとめ

  • 正規分布は対称、対数正規分布は右に裾を引いた非対称
  • 株価は対数正規、対数リターンは正規で近似されることが多い
  • 現実のリターンは裾が厚く、左に歪み、ボラティリティクラスタリングを示す
  • 正規性は QQ プロットや検定で評価できる