漸近理論#
関係する定理#
マルコフの不等式#
マルコフの不等式
非負の確率変数
が成立する。
証明
指示関数
マルコフの不等式は 期待値よりも極端に大きな値を取る確率が低い ことを意味する。
例えば
from scipy.stats import expon
mean = 2 # 期待値 E[X] = 2 の指数分布は scale=2
dist = expon(scale=mean)
threshold = 5 * mean # 5 * E[X]
# P(X >= 5 * E[X]) = 1 - CDF(threshold)
prob = 1 - dist.cdf(threshold)
upper_bound = 1 / 5 # マルコフの不等式の上限
print(f"P(X >= 5E[X]) = {prob:.2g}")
print(f"Markov Inequality Upper Bound = {upper_bound:.2g}")
P(X >= 5E[X]) = 0.0067
Markov Inequality Upper Bound = 0.2
チェビシェフの不等式#
チェビシェフの不等式
このとき任意の
が成立する。
証明
を適用すれば、
ここで
が成立する
チェビシェフの不等式は 期待値から値が極端に離れる確率が低い ことを意味する。
例えば
例:2シグマ範囲#
期待値からの2シグマ範囲には正規分布だと95%が入る。
import numpy as np
from scipy.stats import norm
mu = 0 # 平均
sigma = 1 # 標準偏差
lower = mu - 2 * sigma
upper = mu + 2 * sigma
dist = norm(loc=mu, scale=sigma)
# P(∣X−μ∣ ≤ 2σ) = P(μ−2σ ≤ X ≤ μ+2σ) = cdf(μ+2σ) - cdf(μ-2σ)
p_2sigma = dist.cdf(upper) - dist.cdf(lower) # P(-2σ <= X <= 2σ)
print(f"P(∣X−μ∣ ≤ 2σ) = {p_2sigma:.3f}")
P(∣X−μ∣ ≤ 2σ) = 0.954
Show code cell source
import matplotlib.pyplot as plt
# plot
fig, ax = plt.subplots(figsize=[5, 2])
x = np.linspace(-4, 4, 100)
y = dist.pdf(x)
ax.plot(x, y)
# 2σ points
x_2sig = dist.ppf(dist.cdf(2 * sigma))
ax.axvline(mu + x_2sig, color="gray", linestyle="--")
ax.axvline(mu - x_2sig, color="gray", linestyle="--")
ax.text(mu + x_2sig, 0.1, f" μ+2σ", ha="left", color="gray")
ax.text(mu - x_2sig, 0.1, f"μ−2σ ", ha="right", color="gray")
x = np.linspace(mu - x_2sig, mu + x_2sig, 100)
y = dist.pdf(x)
ax.fill_between(x, y, 0, alpha=0.3)
ax.text(0, 0.01, f"P(μ−2σ ≤ X ≤ μ+2σ)\n= {p_2sigma:.3f}", ha="center", color="darkblue")
plt.show()

チェビシェフの不等式による任意の分布への下限は
となり、正規分布以外でも75%以上あることがわかる
例:期待値からのズレ#
もし
例えばサンプルが商談から成約したかどうかであり、真の成約率が20%という確率変数
となり、仮に
Show code cell source
import numpy as np
from scipy.stats import bernoulli
import matplotlib.pyplot as plt
p = 0.2
dist = bernoulli(p=p)
n = 100
c = 0.1
bound = p * (1-p) / n / c**2
n_trials = 1000
x_bars = []
for i in range(n_trials):
x = dist.rvs(size=n, random_state=i)
x_bars.append( x.mean() )
fig, ax = plt.subplots(figsize=[4, 3])
ax.hist(x_bars, bins=10)
ax.axvline(p + c, color="gray", linestyle="--")
ax.axvline(p - c, color="gray", linestyle="--")
x_bars = np.array(x_bars)
is_over = np.abs(x_bars - p) >= c
ax.set(
# title=r"histogram of $\bar{X}$",
title=r"num of |$\bar{X} - p| \geq c$ =" + f"{is_over.sum()}, num of simulations={n_trials} (→{is_over.sum()}/{n_trials} = {is_over.sum() / n_trials:.1%})",
xlabel=r"$\bar{X}$",
ylabel="count"
)
fig.show()

ヘフディングの不等式#
チェビシェフの不等式は幅広い範囲で有用ではあるものの、裾の確率を緩く評価してしまう。
例えば上記の期待値からのズレの例
では、
Show code cell source
import numpy as np
from scipy.stats import bernoulli
import matplotlib.pyplot as plt
p = 0.2
dist = bernoulli(p=p)
n = 1000
c = 0.1
bound = p * (1-p) / n / c**2
n_trials = 1000
x_bars = []
for i in range(n_trials):
x = dist.rvs(size=n, random_state=i)
x_bars.append( x.mean() )
fig, ax = plt.subplots(figsize=[4, 3])
ax.hist(x_bars, bins=10)
ax.axvline(p + c, color="gray", linestyle="--")
ax.axvline(p - c, color="gray", linestyle="--")
x_bars = np.array(x_bars)
is_over = np.abs(x_bars - p) >= c
ax.set(
# title=r"histogram of $\bar{X}$",
title=r"num of |$\bar{X} - p| \geq c$ =" + f"{is_over.sum()}, num of simulations={n_trials} (→{is_over.sum()}/{n_trials} = {is_over.sum() / n_trials:.1%})",
xlabel=r"$\bar{X}$",
ylabel="count"
)
fig.show()

このような裾の確率をより厳しく抑えるのに役立つのが ヘフディングの不等式 (Hoeffding’s inequality)
定理(ヘフディングの不等式)
が成り立つ。
すべての確率変数
となる。
前出の成約率の例だと、
となり、観測結果に近くなる。
しかし
とだいぶ大きく評価することもある様子…?
確率収束#
(定義)確率収束
サンプル数
ならば、「
あるいは
と表す
平均2乗収束#
(定義)平均2乗収束
確率変数列
となることをいう。
チェビシェフの不等式を使うと「確率変数列がある確率変数に平均2乗収束するならば確率収束する」という命題が導かれる → 大数の法則
例:大数の法則#
(定理)大数の(弱)法則
証明
となる。ここで
例:推定量の一致性#
推定量
するとき、その推定量は一致性(consistency)を持つという
概収束#
(定義)概収束
確率変数列
となるとき概収束(almost sure convergence)するといい、
と表す。
分布収束#
(定義)分布収束
確率変数列
が
例:中心極限定理#
確率変数列
ここで
(※なお、
なお、上の式は
のように整理できる。
(