1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python3ではじめるシステムトレード:混合分布

1
Last updated at Posted at 2025-10-18

混合分布モデルとは?

混合分布モデル(mixture model)とは、母集団が複数の異なる確率分布に由来するという仮定の下で、観測分布をそれらの「混合」として表すモデルです。代表形は有限混合分布です。

  • 概念自体は1890年代から。

  • 医薬生物・疫学で「当たり前に使う」感覚は,1920年代に負の二項(Po–Ga)が根付いて以降。

  • 数理統計のカリキュラムで“混合=標準ツール”として広く常識化したのは,EM(1977)以後,1990〜2000年代に完全定着

  • 2000年頃まで
    EM は周知でも、主流は「正規+二乗誤差」。ヘビーテイルは Mandelbrot–Fama(1960s) で知られつつも、実務では $t$ やGH族は限られた領域(クオンツ、保険)止まり。econophysics(1990s) が“尾の厚さ”を可視化したが、統計学本流は「便利な近似」として脇に置きがち。

  • 今(実務・研究ともに明確に様相が違う)
    “ただのフィット”ではなく、意思決定に直結する理由でヘビーテイル/混合が採用されています。

何が変えたか(本質)

  1. 意思決定の評価軸が尾部へ移動
    リスク管理・レギュレーション(ストレステスト、尾部VaR/ES)、サプライチェーン、パンデミック、サイバー/気候リスク—尾側の誤差が致命的。
    → $t$・Lomax・GH族・EVT、$t$コピュラ等が標準選択肢に。
  2. データが“素で”ヘビーテイル
    Web計量、レイテンシ、売上のラスパイレス型分布、医療費・滞在日数、クレーム額など。ゼロ膨張・過分散・重尾が常態。
    → ポアソン–ガンマ(負の二項)、指数–ガンマ(Lomax)、混合ゼロ膨張がデフォルトに。
  3. ロバスト性と分布ずれ(shift)への要求
    A/B テストや因果推論で外れ値耐性がKPIに直結。
    → $t$尤度・Huber損失・分散混合正規、$t$-GLMM、重尾事前(horseshoe/Laplace/$t$)が普及。
  4. モデル検証の文化変化
    予測分布の校正(PIT、PPDチェック)、tail-focused metrics(上位分位誤差、ES)、決定理論的評価が一般化。
    → “当たりの良い平均近似”より“尾で外さない”。

どこで混合/重尾がデフォルト化したか(例)

  • 金融:$t$-GARCH、GH/NI G、$t$コピュラ、EVT統合VaR/ES。
  • 医薬生物:過分散→負の二項、待ち時間の重尾→Lomax、ランダム効果→正規–正規(メタ解析)。
  • テック/プロダクト:ロバスト回帰・重尾尤度のA/B、ゼロ膨張/混合回帰。
  • 機械学習:分布外・外れ値耐性、重尾事前でスパース推定、正規の分散混合としての$ t $が標準武器。

なぜそこで効くか(共通構造)

  • 異質性の周辺化:$X\mid\phi$ を平均して $f_X(x)=\int f(x\mid\phi)dG(\phi)$。個体差・文脈差を統合。
  • 過分散・重尾・多峰性への対応:Po–Ga $\Rightarrow$ 負の二項、Exp–Ga $\Rightarrow$ ロマックス、Nor–InvGa $\Rightarrow$ $t$。
  • 推定が回る:EM/VI/MCMCで大規模でも実用(ランダム効果、ゼロ膨張、有限混合)。

代表モデルと“症状”の対応

  • 負の二項(Po–Ga):カウントで $S^2>\bar X$。
  • ロマックス/パレートII(Exp–Ga):待ち時間・費用の重尾。
  • $t$・GH 族(正規の分散混合):外れ値に強い連続量。
  • GMM・混合回帰:多峰性・潜在クラスタ。
  • ZIP/ZINB:零が多い計数。
  • フレイルティ/ランダム効果:層間ばらつき・試験差。

定義(有限混合)

$K$ 成分の混合を
$$
f(x)=\sum_{k=1}^K \pi_k f_k(x;\theta_k),\qquad
\pi_k\ge 0,\ \sum_{k=1}^K\pi_k=1
$$
で与える。ここで $f_k(\cdot;\theta_k)$ は第 $k$ 成分の密度(例:正規分布)、$\pi_k$ は混合比(混合重み)。

階層表現(潜在変数)

潜在ラベル $Z\in{1,\dots,K}$ を導入:
$$
P(Z=k)=\pi_k,\qquad X\mid Z=k \sim f_k(\cdot;\theta_k).
$$
周辺化すると $X$ の密度は上式の $f(x)$ に一致。

混合分布が「数理」でも「医薬生物学」でも頻出になる構造的理由を、理論・統計モデリング・応用の三層で要点化します。

  1. 理論的に“核”にいるから
  • 周辺化=不確実性の統合
    未観測の異質性(潜在パラメータやクラス)を確率変数化し、周辺化(積分/総和)で観測分布を作るのが混合。統計の根本操作 $f(x)=\int f(x\mid \phi)dG(\phi)$ の練習台です。
    すると自動的に
    $$E[X]=E_\phi[E[X\mid\phi]],\quad \mathrm{Var}(X)=E_\phi[\mathrm{Var}(X\mid\phi)]+\mathrm{Var}_\phi(E[X\mid\phi])$$
    が立ち、分散が膨らむ/尾が厚くなる/多峰性が出る等の“現象学”が一発で説明できます。
  • 普遍近似性
    有限混合(特にガウス混合)は任意の連続密度を近似できる(密度推定の基底)。
  • 閉形式が豊富(可積分)
    ガンマ・ベータとの共役組で解析的に閉じる。
    例:ポアソン–ガンマ→負の二項、二項–ベータ→ベータ二項、正規–逆ガンマ→$t$(コーシー含む)、指数–ガンマ→Lomax。試験で計算と洞察が両立します。
周辺化=混合を明示的に扱う設問
  • 数理 2024 問4 [4]–[5]
    指数–ガンマ混合:

    f_X(x)=\int_0^\infty \underbrace{\lambda e^{-\lambda x}}_{X\mid\lambda}
    \underbrace{\frac{\beta^\alpha}{\Gamma(\alpha)}\lambda^{\alpha-1}e^{-\beta\lambda}}_{\lambda}d\lambda
    =\frac{\alpha\beta^\alpha}{(\beta+x)^{\alpha+1}}
    

    (Lomax/Pareto II)。この周辺化を使って $E[X]$ の存在条件・値を求める。

  • 数理 2022 問3 [3]–[5]
    ポアソン–ガンマ混合:

    P(X=k)=\int_0^\infty \underbrace{\frac{e^{-\lambda}\lambda^k}{k!}}_{X\mid\lambda}
    \underbrace{\frac{\beta^\alpha}{\Gamma(\alpha)}\lambda^{\alpha-1}e^{-\beta\lambda}}_{\lambda}d\lambda
    =\binom{k+\alpha-1}{k}\Big(\tfrac{\beta}{\beta+1}\Big)^\alpha\Big(\tfrac{1}{\beta+1}\Big)^k
    

    (負の二項)。周辺化→モーメント→MoM 推定まで一貫。

  • 医薬生物学 2022 問3
    同じくポアソン–ガンマ混合(周辺化で負の二項を導出)。

  • 医薬生物学 2022 問4
    ベータ二項分布:πによる連続混合でベイズの事前-予測分布

  • 医薬生物学 2023 問3
    正規–正規のランダム効果:
    $$Y_k\mid\theta_k\sim N(\theta_k,\sigma_k^2),\ \theta_k\sim N(\theta,\tau^2)
    \ \Rightarrow\ Y_k\sim N(\theta,\ \tau^2+\sigma_k^2)$$
    潜在 $\theta_k$ を周辺化して単一の正規に落とす($\mathrm{Var}$ が足し合わさる)。

注意:混合“的”だが周辺化を問わない例

  • 数理 2023 問2[2](コーシー)
    $X=Z/\sqrt{Y_1}$ から変数変換で密度を出す設計。コーシーは正規のスケール混合表現を持ちますが、この設問は周辺化を使わない導出です。

混合分布として成り立つ有名な確率分布として離散/連続に分け、典型的な混合形を併記します。

離散型

  • 負の二項分布(ポアソン–ガンマ混合)
    $$X\mid \lambda\sim \mathrm{Po}(\lambda)\ \lambda\sim \mathrm{Ga}(\alpha\beta)\ \Rightarrow\ X\sim \mathrm{NegBin}.$$
  • ベータ–二項分布(二項–ベータ混合)
    $$X\mid p\sim \mathrm{Bin}(n,p)\ p\sim \mathrm{Beta}(a,b)\ \Rightarrow\ X\sim \mathrm{Beta\text{-}Bin}. $$
  • ディリクレ–多項分布(多項–ディリクレ混合)
    $$\mathbf{X}\mid \mathbf{p}\sim \mathrm{Mult}(n\mathbf{p})\ \mathbf{p}\sim \mathrm{Dir}(\boldsymbol\alpha).$$
  • ZIP/ゼロ膨張ポアソン(有限混合)
    $$P(X=0)=\pi+(1-\pi)e^{-\lambda},\quad P(X=x\ge1)=(1-\pi)e^{-\lambda}\frac{\lambda^x}{x!}.$$
  • ポアソン–対数正規混合(オーバーディスパージョン対処)
    $$X\mid \Lambda\sim \mathrm{Po}(\Lambda), \log \Lambda\sim N(\mu\sigma^2).$$

連続型

  • スチューデントの$t$分布(正規–逆ガンマのスケール混合)
    $$X\mid V\sim N(\mu,V) V\sim \mathrm{Inv\text{-}Ga}\left(\tfrac{\nu}{2},\tfrac{\nu\sigma^2}{2}\right)\Rightarrow X\sim t_\nu(\mu,\sigma).$$
    ※$\nu=1$でコーシー分布($t_1$)。
  • ラプラス(両側指数)(正規の分散指数混合)
    $$X\mid \tau\sim N(\mu,\tau) \tau\sim \mathrm{Exp}\left(\tfrac{1}{2}b^{2}\right)\Rightarrow X\sim \mathrm{Laplace}(\mu,b).$$
  • ハイパー指数(hyperexponential)(有限混合の指数分布)
    $$f(x)=\sum_{k=1}^K\pi_k\lambda_k e^{-\lambda_k x}\ (x>0).$$
  • ロマックス/パレートII(指数–ガンマ混合;ヘビーテール)
    $$X\mid \Lambda\sim \mathrm{Exp}(\Lambda) \Lambda\sim \mathrm{Ga}(\alpha,\beta)\Rightarrow X\sim \mathrm{Lomax}(\alpha,\beta).$$
  • 正規の分散–平均混合(GH族)
    一般形:
    $$X=\mu+\beta W+\sqrt{W}Z,\quad Z\sim N(0,\Sigma),\quad W\sim \mathrm{GIG}(p,a,b).$$
    特例:Variance–Gamma, Normal–Inverse–Gaussian, Hyperbolic など。
  • ガウス混合モデル(GMM)(有限混合の正規)
    $$f(x)=\sum_{k=1}^K \pi_k\mathcal{N}(x\mid \mu_k\Sigma_k).$$

時系列・構造

  • HMM(隠れマルコフモデル):各時点の観測は「その時点の潜在状態」による有限混合。
  • 混合回帰/混合GLM:条件付き分布 $f(y\mid x)$ をコンポーネントごとに持つ有限混合。

要点:$f(x)=\sum_k \pi_k f_k(x)$(有限混合)や $f(x)=\int f(x\mid \phi)dG(\phi)$(連続混合)へ落ちるものは「混合分布」として成り立ちます。負の二項・ベータ二項・$t$/コーシー・ラプラス・GH族・GMM・ZIPが特に実務で頻出です。


実用性で絞った“本命”です(各項目に識別式と出題ポイントを付記)。

  1. ポアソン–ガンマ混合 ⇒ 負の二項分布
    $$P(X=k)=\binom{k+\alpha-1}{k}\Big(\tfrac{\beta}{\beta+1}\Big)^\alpha\Big(\tfrac{1}{\beta+1}\Big)^k$$
    出題ポイント:$S^2>\bar X$ の過分散、$E[X]=\alpha/\beta$、$\mathrm{Var}(X)=\alpha/\beta+\alpha/\beta^2$、MoM推定($S^2>\bar X$が必要)。

  2. 二項–ベータ混合 ⇒ ベータ二項分布
    $$P(X=k)=\binom{n}{k}\frac{B(k+a,n-k+b)}{B(a,b)}$$
    出題ポイント:集団内異質な成功確率、$E[X]=n,a/(a+b)$、$\mathrm{Var}$ の過分散、ベータ関数と$\Gamma$の使い分け。

  3. 正規–逆ガンマ(分散の混合)⇒ スチューデント$t$($\nu$自由度)
    $$X\mid V\sim N(\mu,V),\ V\sim \mathrm{Inv\mbox{-}Ga} \ \Rightarrow\ X\sim t_\nu$$
    出題ポイント:重尾・ロバスト、$\nu=1$でコーシー、周辺化で正規の分散が足しこまれる直観。

  4. 正規–正規(ランダム効果)⇒ 周辺は正規
    $$Y\mid \theta\sim N(\theta,\sigma^2),\ \theta\sim N(\mu,\tau^2)\Rightarrow Y\sim N(\mu,\sigma^2+\tau^2)$$
    出題ポイント:メタ解析、$Q$統計と$\tau^2$、$\mathrm{Var}(Y)=E[\mathrm{Var}]+ \mathrm{Var}(E)$ の確認。

  5. 指数–ガンマ混合 ⇒ Lomax(Pareto II)
    $$f(x)=\frac{\alpha\beta^\alpha}{(\beta+x)^{\alpha+1}},\ x>0$$
    出題ポイント:待ち時間の重尾、$E[X]$存在条件($\alpha>1$)、$E[X]=\beta/(\alpha-1)$。

  6. 複合ポアソン(頻度×損失)
    $$N\sim \mathrm{Po}(\lambda),\ {Y_i}\ \text{iid}\ \Rightarrow\ S=\sum_{i=1}^N Y_i$$
    出題ポイント:$M_S(t)=\exp{\lambda(M_Y(t)-1)}$、保険・クレーム集計、ゼロ質量の扱い。

  7. ゼロ膨張ポアソン(有限混合)
    $$P(X=0)=\pi+(1-\pi)e^{-\lambda},\ \ P(X=x\ge1)=(1-\pi)e^{-\lambda}\lambda^x/x!$$
    出題ポイント:ゼロ過多検出、$\pi$と$\lambda$の推定、過分散との違い。

  8. ハイパー指数(指数の有限混合)
    $$f(x)=\sum_{k=1}^K \pi_k \lambda_k e^{-\lambda_k x}$$
    出題ポイント:異なるレートの混在、直列・並列系の信頼性近似、ラプラス変換での和。

  9. ディリクレ–多項混合 ⇒ ディリクレ多項分布
    $$\mathbf{X}\mid \mathbf{p}\sim \mathrm{Mult}(n,\mathbf{p}),\ \mathbf{p}\sim \mathrm{Dir}(\boldsymbol\alpha)$$
    出題ポイント:カテゴリ過分散、$E[X_j]=n\alpha_j/\alpha_0$、分散・共分散の形。

  10. 正規の分散–平均混合(Generalized Hyperbolic, Variance–Gamma, NIG)
    一般形 $X=\mu+\beta W+\sqrt{W},Z$($Z\sim N$、$W$はGIG 等)
    出題ポイント:重尾・歪度の同時表現、$t$を包含、密度の同定よりも“混合の構造”を問われがち。


横断で“頻出”の計算・論点

  • 周辺化の型:$f(x)=\int f(x\mid\phi),dG(\phi)$、$E[X]=E_\phi[E[X\mid\phi]]$、$\mathrm{Var}(X)=E[\mathrm{Var}]+\mathrm{Var}(E)$。
  • 定番積分:$\displaystyle \int_0^\infty \lambda^{a-1}e^{-c\lambda}d\lambda=\Gamma(a)c^{-a}$。
  • 過分散の検出:$S^2>\bar X$(Poisson系)、ゼロ過多の判定。
  • MoM/MLE/EM:負の二項やLomaxはMoMが一撃、有限混合はEMの初期化にMoM。
  • パラメータ化の注意:ガンマのrate/scale、負の二項の$(r,p)$表記の揺れ。
 統計検定1級分布の関係マップ日本語重なり最小化版
 変更点
  - 注記は最小限凡例に集約
  - 座標を再配置キャンバス拡大
  - 文字サイズ調整注記の微オフセット

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle, FancyArrowPatch
from matplotlib import font_manager as fm

 ---- 日本語フォント自動検出 ----
CANDIDATES = ["Noto Sans CJK JP","Noto Sans JP","IPAexGothic","Yu Gothic",
              "MS Gothic","Hiragino Sans","Hiragino Kaku Gothic ProN","TakaoGothic"]
def pick_font():
    for f in fm.findSystemFonts(fontext='ttf'):
        try:
            n = fm.get_font(f).family_name
            if n in CANDIDATES:
                return n
        except Exception:
            pass
    return None

jp = pick_font()
if jp:
    plt.rcParams["font.sans-serif"] = [jp]
    plt.rcParams["font.family"] = "sans-serif"

plt.rcParams['figure.dpi'] = 180
plt.rcParams['font.size'] = 9

 ---- レイアウト広め ----
fig, ax = plt.subplots(figsize=(16, 10))   幅広に

nodes = {
     離散左列を縦に間隔広め
    "多項分布": (-12, 3.6),
    "ディリクレ多項": (-12, 1.6),
    "ベータ二項": (-12, -0.2),
    "ゼロ膨張ポアソン": (-12, -2.2),
    "二項分布": (-9.2, 2.6),
    "ポアソン分布": (-9.2, 0.2),
    "負の二項分布": (-9.2, -2.2),

     連続中央クラスターを上下に展開
    "一様分布": (-2.5, 4.6),
    "正規分布": (0.0, 3.4),
    "カイ二乗分布": (3.6, 2.4),
    "t分布": (0.0, 1.2),
    "コーシー分布": (0.0, -0.4),
    "F分布": (3.6, 0.0),
    "ラプラス分布": (-2.5, 1.2),

     指数族右列も縦に間隔広め
    "指数分布": (8.0, 3.6),
    "ワイブル分布": (11.0, 3.6),
    "ガンマ分布": (8.0, 2.0),
    "逆ガンマ分布": (11.0, 2.0),
    "ベータ分布": (8.0, 0.4),
    "ロマックス(パレートII)": (11.0, 0.4),
    "対数正規分布": (11.0, -1.8),
}

def box(label, xy, w=2.5, h=0.9):
    x, y = xy
    ax.add_patch(Rectangle((x-w/2, y-h/2), w, h, ec='black', fc='white', zorder=2))
    ax.text(x, y, label, ha='center', va='center', zorder=3)

for k,xy in nodes.items():
    box(k, xy)

def link(a, b, txt=None, curve=0.0, yoff=0.14):
    x1,y1 = nodes[a]; x2,y2 = nodes[b]
    ax.add_patch(FancyArrowPatch((x1,y1),(x2,y2),
        connectionstyle=f"arc3,rad={curve}", arrowstyle='->', mutation_scale=10, lw=1, zorder=1))
    if txt:   注記は最小限のみ
        xm, ym = (x1+x2)/2, (y1+y2)/2
        ax.text(xm, ym+yoff, txt, ha='center', va='bottom', fontsize=8, zorder=3)

 ---- 矢印注記は極力削減凡例に集約----
 離散
link("二項分布","ポアソン分布","n→∞, p→0, np=λ",0.0,0.2)
link("二項分布","ベータ二項", "混合", 0.18)
link("多項分布","ディリクレ多項","混合", 0.18)
link("ポアソン分布","負の二項分布","混合",-0.12)
link("ポアソン分布","ゼロ膨張ポアソン","有限混合",-0.20,0.20)

 連続中央):t/χ²/F 周辺は特に重なりやすいので注記を短縮
link("正規分布","カイ二乗分布","平方和→χ²",0.10,0.22)
link("カイ二乗分布","t分布","N/√(χ²/ν)",-0.12,0.20)
link("t分布","コーシー分布","ν=1",0.0,0.16)
link("カイ二乗分布","F分布","",0.0,0.16)
link("正規分布","t分布","スケール混合",0.22,0.16)
link("正規分布","ラプラス分布","分散の指数混合",-0.26,0.16)

 指数族
link("指数分布","ガンマ分布","特例 k=1",0.02,0.20)
link("ガンマ分布","カイ二乗分布","χ²(ν)=Ga(ν/2,1/2)",-0.24,0.18)
link("ガンマ分布","逆ガンマ分布","逆変換",0.10,0.14)
link("指数分布","ワイブル分布","一般化",0.08,0.14)
link("指数分布","ロマックス(パレートII)","混合(レート)",-0.04,0.20)
link("対数正規分布","ポアソン分布","→Poisson–Lognormal",0.24,0.22)

 近似
link("二項分布","正規分布","CLT(標準化)",0.04,0.24)
link("ポアソン分布","正規分布","正規近似",-0.10,0.24)

 余白凡例
ax.set_xlim(-13.5, 12.8)
ax.set_ylim(-3.2, 5.2)
ax.axis('off')
ax.set_title("統計検定1級:分布の関係マップ(重なり最小化)", pad=12)

legend = (
    "凡例:矢印の意味\n"
    "・極限/近似:二項→ポアソン、二項/ポアソン→正規(CLT)\n"
    "・混合:ベータ二項、ディリクレ多項、負の二項、ゼロ膨張ポアソン\n"
    "・変換/比:正規→χ²(平方和)、χ²→t(N/√(χ²/ν))、χ²比→F\n"
    "・特例:t(ν=1)=コーシー、指数はガンマの特例(k=1)"
)
ax.text(-13.2, -2.9, legend, fontsize=8, ha='left', va='bottom')

plt.tight_layout()
plt.savefig("distribution_map_ja_v3.png", bbox_inches='tight')
plt.savefig("distribution_map_ja_v3.pdf", bbox_inches='tight')
print("保存: distribution_map_ja_v3.png / distribution_map_ja_v3.pdf")

image.png

参考

Python3ではじめるシステムトレード【第2版】環境構築と売買戦略

「画像をクリックしていただくとpanrollingのホームページから書籍を購入していただけます。

「画像をクリックしていただくとpanrollingのホームページから書籍を購入していただけます。」

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?