確率過程の定義と分類

確率過程は、時間とともにランダムに変化する現象を数学的に記述するための枠組みです。株価の変動、粒子のブラウン運動、通信路のノイズ、待ち行列の長さなど、工学や自然科学のあらゆる場面で確率過程が登場します。

本記事では、確率過程の厳密な定義と分類体系を整理し、代表的な確率過程のサンプルパスをPythonで生成・可視化します。

本記事の内容

  • 確率過程 $\{X(t)\}$ の定義
  • 離散/連続 $\times$ 離散/連続の4分類
  • 定常過程と広義定常過程
  • 独立増分過程
  • マルコフ性
  • Pythonによるサンプルパスの可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

確率過程の定義

厳密な定義

確率空間 $(\Omega, \mathcal{F}, P)$ 上の確率過程とは、時間パラメータ $t \in \mathcal{T}$ でインデックス付けされた確率変数の族です。

$$ \{X(t) : t \in \mathcal{T}\} $$

ここで各 $t$ に対して $X(t) : \Omega \to \mathcal{S}$ は確率変数であり、$\mathcal{S}$ を状態空間、$\mathcal{T}$ をパラメータ空間(時間集合)と呼びます。

2つの見方

確率過程には2つの見方があります。

  1. $t$ を固定: $X(t, \cdot) : \Omega \to \mathcal{S}$ は確率変数
  2. $\omega$ を固定: $X(\cdot, \omega) : \mathcal{T} \to \mathcal{S}$ はサンプルパス(標本路、実現値の軌跡)

サンプルパスは、一つの「シナリオ」における時間変化の軌跡です。

有限次元分布

確率過程の確率的な性質は、任意の $n$ 個の時点 $t_1 < t_2 < \cdots < t_n$ における同時分布:

$$ F_{t_1, t_2, \dots, t_n}(x_1, x_2, \dots, x_n) = P(X(t_1) \leq x_1, X(t_2) \leq x_2, \dots, X(t_n) \leq x_n) $$

の全体によって特徴づけられます。これを有限次元分布族と呼びます。

確率過程の4分類

時間集合 $\mathcal{T}$ と状態空間 $\mathcal{S}$ がそれぞれ離散か連続かで、4つに分類されます。

状態が離散 状態が連続
時間が離散 (I) 離散時間・離散状態 (II) 離散時間・連続状態
時間が連続 (III) 連続時間・離散状態 (IV) 連続時間・連続状態

(I) 離散時間・離散状態

$\mathcal{T} = \{0, 1, 2, \dots\}$, $\mathcal{S} = \{s_1, s_2, \dots\}$

例: マルコフ連鎖(天気のモデル、ランダムウォーク on グラフ)

(II) 離散時間・連続状態

$\mathcal{T} = \{0, 1, 2, \dots\}$, $\mathcal{S} = \mathbb{R}$

例: AR過程(自己回帰モデル)、ランダムウォーク

(III) 連続時間・離散状態

$\mathcal{T} = [0, \infty)$, $\mathcal{S} = \{0, 1, 2, \dots\}$

例: ポアソン過程(到着過程)、出生死滅過程

(IV) 連続時間・連続状態

$\mathcal{T} = [0, \infty)$, $\mathcal{S} = \mathbb{R}$

例: ブラウン運動(ウィーナー過程)、オルンシュタイン-ウーレンベック過程

定常過程

強定常過程(Strictly Stationary)

任意の時間シフトに対して有限次元分布が不変である確率過程を強定常過程と呼びます。

$$ (X(t_1), X(t_2), \dots, X(t_n)) \overset{d}{=} (X(t_1 + \tau), X(t_2 + \tau), \dots, X(t_n + \tau)) $$

すべての $t_1, \dots, t_n$, $\tau$, $n$ について成立します。

広義定常過程(Wide-Sense Stationary)

以下の2条件を満たす確率過程を広義定常過程(弱定常過程)と呼びます。

  1. 平均が一定: $E[X(t)] = \mu$($t$ に依存しない)
  2. 自己共分散がラグのみに依存: $\text{Cov}(X(t), X(t+\tau)) = C(\tau)$

広義定常過程の自己相関関数は:

$$ R(\tau) = E[X(t)X(t+\tau)] $$

$\tau$ のみの関数です。

強定常で2次モーメントが存在する過程は広義定常です。逆は一般には成立しません(ガウス過程では同値)。

独立増分過程

任意の $t_0 < t_1 < \cdots < t_n$ に対して、増分 $X(t_1) - X(t_0), X(t_2) - X(t_1), \dots, X(t_n) - X(t_{n-1})$ が互いに独立であるとき、$\{X(t)\}$ は独立増分過程と呼ばれます。

さらに、増分の分布が時間差のみに依存する($X(t+s) – X(t)$ の分布が $t$ に依存しない)とき、定常独立増分過程と呼ばれます。

代表例: * ポアソン過程: $X(t+s) – X(t) \sim \text{Poisson}(\lambda s)$ * ブラウン運動: $X(t+s) – X(t) \sim N(0, s)$

マルコフ性

確率過程 $\{X(t)\}$ がマルコフ性を持つとは、現在の状態が与えられたとき、未来の状態は過去の状態に依存しないことを意味します。

$$ P(X(t_{n+1}) \leq x \mid X(t_n), X(t_{n-1}), \dots, X(t_1)) = P(X(t_{n+1}) \leq x \mid X(t_n)) $$

マルコフ性は「過去の情報は現在の状態にすべて集約される」という性質であり、「記憶のなさ」とも表現されます。

マルコフ性を持つ離散時間確率過程をマルコフ連鎖、連続時間確率過程をマルコフ過程と呼びます。

注意: 独立増分過程はマルコフ性を持ちます(増分が独立なので、現在値が分かれば未来は過去に依存しない)。逆は成立しません。

Pythonでの実装

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)

fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# --- (I) 離散時間・離散状態: マルコフ連鎖 ---
# 天気モデル(晴れ=0, 曇り=1, 雨=2)
P_mc = np.array([
    [0.7, 0.2, 0.1],
    [0.3, 0.4, 0.3],
    [0.2, 0.3, 0.5]
])
states_label = ['晴れ', '曇り', '雨']
n_steps = 50
n_paths = 3

for path in range(n_paths):
    state = 0
    trajectory = [state]
    for _ in range(n_steps - 1):
        state = np.random.choice(3, p=P_mc[state])
        trajectory.append(state)
    axes[0, 0].step(range(n_steps), trajectory, alpha=0.7, linewidth=1.5,
                    label=f'パス {path+1}')

axes[0, 0].set_yticks([0, 1, 2])
axes[0, 0].set_yticklabels(states_label)
axes[0, 0].set_xlabel('Time step $n$')
axes[0, 0].set_title('(I) Markov Chain (Discrete Time, Discrete State)')
axes[0, 0].legend(fontsize=8)
axes[0, 0].grid(True, alpha=0.3)

# --- (II) 離散時間・連続状態: ランダムウォーク ---
n_steps = 200
for path in range(5):
    steps = np.random.choice([-1, 1], size=n_steps)
    walk = np.cumsum(steps)
    axes[0, 1].plot(range(n_steps), walk, alpha=0.6, linewidth=1)

axes[0, 1].axhline(y=0, color='k', linewidth=0.5)
axes[0, 1].set_xlabel('Time step $n$')
axes[0, 1].set_ylabel('$X(n)$')
axes[0, 1].set_title('(II) Random Walk (Discrete Time, Continuous State)')
axes[0, 1].grid(True, alpha=0.3)

# --- (III) 連続時間・離散状態: ポアソン過程 ---
lam = 2.0  # 到着率
T_max = 10.0

for path in range(3):
    # 指数分布の到着間隔を生成
    inter_arrivals = np.random.exponential(1/lam, size=100)
    arrival_times = np.cumsum(inter_arrivals)
    arrival_times = arrival_times[arrival_times <= T_max]

    # 階段関数としてプロット
    t_plot = np.sort(np.concatenate([[0], arrival_times, arrival_times, [T_max]]))
    n_plot = np.sort(np.concatenate([[0, 0], np.arange(1, len(arrival_times)+1),
                                      np.arange(1, len(arrival_times)+1),
                                      [len(arrival_times)]]))
    # より簡潔な方法
    t_events = np.concatenate([[0], arrival_times])
    counts = np.arange(len(t_events))

    axes[1, 0].step(t_events, counts, where='post', alpha=0.7, linewidth=1.5,
                    label=f'パス {path+1}')

axes[1, 0].set_xlabel('Time $t$')
axes[1, 0].set_ylabel('$N(t)$')
axes[1, 0].set_title(f'(III) Poisson Process (Continuous Time, Discrete State, $\\lambda={lam}$)')
axes[1, 0].legend(fontsize=8)
axes[1, 0].grid(True, alpha=0.3)

# --- (IV) 連続時間・連続状態: ブラウン運動 ---
dt = 0.01
T_max = 5.0
t = np.arange(0, T_max, dt)

for path in range(5):
    dW = np.sqrt(dt) * np.random.randn(len(t))
    W = np.cumsum(dW)
    W = np.insert(W, 0, 0)[:-1]  # W(0) = 0
    axes[1, 1].plot(t, W, alpha=0.6, linewidth=1)

axes[1, 1].axhline(y=0, color='k', linewidth=0.5)
axes[1, 1].set_xlabel('Time $t$')
axes[1, 1].set_ylabel('$W(t)$')
axes[1, 1].set_title('(IV) Brownian Motion (Continuous Time, Continuous State)')
axes[1, 1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('stochastic_process_intro.png', dpi=150, bbox_inches='tight')
plt.show()

# 各確率過程の性質をまとめて表示
print("=== 代表的な確率過程の性質 ===")
print(f"{'過程':<20} {'マルコフ性':>10} {'独立増分':>10} {'定常':>10}")
print("-" * 55)
properties = [
    ('マルコフ連鎖', 'Yes', 'No', '条件付き'),
    ('ランダムウォーク', 'Yes', 'Yes', 'No'),
    ('ポアソン過程', 'Yes', 'Yes', 'Yes(増分)'),
    ('ブラウン運動', 'Yes', 'Yes', 'Yes(増分)'),
    ('AR(1)過程', 'Yes', 'No', '条件付き'),
]
for name, markov, indep, stat in properties:
    print(f"{name:<20} {markov:>10} {indep:>10} {stat:>10}")

まとめ

本記事では、確率過程の定義と分類について解説しました。

  • 確率過程: 時間でインデックス付けされた確率変数の族 $\{X(t) : t \in \mathcal{T}\}$
  • 4分類: 時間(離散/連続)$\times$ 状態空間(離散/連続)
  • 定常過程: 分布が時間シフト不変(強定常)。平均と自己共分散がラグのみに依存(広義定常)
  • 独立増分過程: 重ならない区間の増分が独立。例: ポアソン過程、ブラウン運動
  • マルコフ性: 未来は現在のみに依存し、過去に依存しない。独立増分はマルコフ性を含意

次のステップとして、以下の記事も参考にしてください。