🎓 レベル:発展 | 重要度:B(推奨)
📎 前提:リスク選好と効用の凹凸・支配と許容性 | 関連:リスクの測り方(分散・下方リスク)
要点(BLUF)
- 確率優越(stochastic dominance) は、効用関数を1つに特定せず、分布だけで代替案を順序づける基準です。
- 一次確率優越(FSD): の累積分布が常に 以下(右に位置)なら、増加するどんな効用でも を選好。要するに「 はどの確率水準でも 以上の結果」。
- 二次確率優越(SSD):累積分布の積分で なら、リスク回避(増加かつ凹)のどんな効用でも を選好。支配と許容性の状態支配とリスク選好と効用の凹凸のリスク回避を、分布のレベルで一般化したものです。
1. なぜ「効用を特定せずに」順序づけたいか
期待効用と効用関数では、特定の効用関数 を決めて期待効用を比べました。しかし の正確な形は分からないことが多い。「リスク回避なのは確かだが、 なのか なのかは不明」。
確率優越は、この不確かさに頑健な順序を与えます。「ある効用クラス(増加・あるいは増加凹)に属するすべての意思決定者が を より好む」と言えれば、効用の細部に依存せず を選べる。効用を1つに決めずに済む、強い結論です。
2. 一次確率優越(FSD)
が を一次確率優越(First-order Stochastic Dominance) するとは、累積分布関数(CDF)について
が成り立つこと(少なくとも1点で真に小)。 は「どの閾値 でも、 が 以下になる確率の方が小さい= は大きい結果が出やすい」を意味します。このとき、増加するあらゆる効用 ()で 。
import numpy as np
def cdf_on_grid(dist, grid):
c = np.zeros_like(grid, dtype=float)
for x, p in dist.items():
c += p * (grid >= x)
return c
A = {2: 0.5, 4: 0.5} # B の各結果に +1 した分布
B = {1: 0.5, 3: 0.5}
grid = np.linspace(-1, 6, 701)
cA, cB = cdf_on_grid(A, grid), cdf_on_grid(B, grid)
fsd = np.all(cA <= cB + 1e-12)
print(f"A={A}, B={B}")
print(f"A が B を一次確率優越(FSD): {fsd}")
出力:
A={2: 0.5, 4: 0.5}, B={1: 0.5, 3: 0.5}
A が B を一次確率優越(FSD): True
出力の意味: は の各結果に +1 した分布なので、どの結果も 以上——当然 FSD が成立します。FSD は支配と許容性の状態支配の確率版で、「中身がどう対応するかは問わず、分布として一方が常に右」という条件。FSD が成り立つなら、効用がどんな増加関数でも(リスク回避でも愛好でも) が勝ちます。最も強い優越です。
3. 二次確率優越(SSD)
FSD は強すぎて、滅多に成り立ちません(CDF が交差すると不成立)。リスク回避者に限れば、より緩い二次確率優越(Second-order Stochastic Dominance) で順序がつきます。条件は累積分布の積分:
このとき、増加かつ凹(リスク回避)のあらゆる効用で 。典型は平均保存スプレッド——同じ平均でばらつきが大きい方が SSD で劣る(リスク回避者はばらつきを嫌う)。確実な2と、平均2のばらつくくじを比べます。
import numpy as np
def cdf_on_grid(dist, grid):
c = np.zeros_like(grid, dtype=float)
for x, p in dist.items():
c += p * (grid >= x)
return c
A = {2: 1.0} # 確実に2(平均2)
B = {0: 0.5, 4: 0.5} # 平均2だがばらつく
grid = np.linspace(-1, 6, 701); dx = grid[1]-grid[0]
cA, cB = cdf_on_grid(A, grid), cdf_on_grid(B, grid)
fsd = np.all(cA <= cB + 1e-12) or np.all(cB <= cA + 1e-12)
IA, IB = np.cumsum(cA)*dx, np.cumsum(cB)*dx # 積分CDF
ssd = np.all(IA <= IB + 1e-9)
print(f"FSD 成立?: {fsd}(CDFが交差して不成立)")
print(f"A が B を二次確率優越(SSD): {ssd}")
# 検証:あらゆるリスク回避(増加凹)効用で A を選好するか
def EU(dist, u): return sum(p*u(x) for x, p in dist.items())
utils = {"sqrt": lambda x: np.sqrt(max(x,0)),
"log1p": lambda x: np.log(1+max(x,0)),
"1-exp": lambda x: 1-np.exp(-0.5*x)}
for name, u in utils.items():
print(f" {name:6s}: EU(A)={EU(A,u):.4f} EU(B)={EU(B,u):.4f}")
出力:
FSD 成立?: False(CDFが交差して不成立)
A が B を二次確率優越(SSD): True
sqrt : EU(A)=1.4142 EU(B)=1.0000
log1p : EU(A)=1.0986 EU(B)=0.8047
1-exp : EU(A)=0.6321 EU(B)=0.4323
出力の意味:FSD は CDF が交差するので不成立(確実な2の方が小さい結果では有利、大きい結果では不利)。しかし SSD は成立し、・・指数効用のどれでも 。特定の効用を選ばなくても、リスク回避でありさえすれば確実な2を選ぶ——これが SSD の威力です。リスク選好と効用の凹凸の「凹効用はばらつきを嫌う」を、効用を1つに固定せずに言い切った形になっています。
数式の直観的意味:積分の階数が効用クラスに対応
FSD と SSD の違いは、CDF を何回積分して比べるかです。これは効用に課す条件の階数とぴったり対応します。
- FSD(CDFそのもの)↔ (増加):1階条件だけ。
- SSD(CDFの積分)↔ かつ (増加・凹):2階条件まで。
なぜ対応するか。 を部分積分すると、 となり、 なら (FSD)で非負。もう一度部分積分すると積分CDFの差と が現れ、(凹)なら積分CDFの順序(SSD)で非負になります。「効用に課す滑らかさの階数」と「分布を積分する回数」が一対一——確率優越の階層は、効用関数の微分の階層を映した鏡です。さらに高階の優越(3次以上)は、慎重性(prudence, )といった選好の性質に対応します。
⚠️ よくある誤解
- 「FSDとSSDは別の比較」ではない:FSD は SSD を含みます(FSD が成り立てば SSD も成り立つ)。FSD の方が強い条件で、成り立つ場面は限られます。
- 「SSDは平均が高い方が勝つ」ではない:SSD は平均だけで決まりません。平均が同じでもばらつきの小さい方が SSD で優越します(平均保存スプレッド)。平均が低くてもばらつきが十分小さければ SSD で勝つこともあります。
- 「確率優越で全ペアが順序づく」ではない:多くのペアは FSD も SSD も成り立たず比較不能です。確率優越は半順序で、すべてを1列に並べはしません。そこで初めて特定の効用やリスクの測り方(分散・下方リスク)の測度が要ります。
- 「分散で代用できる」ではない:分散の大小は SSD と一般には一致しません(非対称分布では分散が大きくても SSD で優越しうる)。SSD は分布全体を見ます。
対応シミュレーション
本文のコードで、分布を変えると FSD/SSD の成否が変わります。CDF が交差する例(FSD 不成立・SSD 成立)と、両方不成立で比較不能になる例を作ると、確率優越が「半順序」であることを体感できます。
関連ノート
- 第2章 期待効用理論 目次
- リスク選好と効用の凹凸 — 前提:凹効用=リスク回避(SSDの基礎)
- 支配と許容性 — 状態支配の確率版がFSD
- リスクの測り方(分散・下方リスク) — 比較不能なペアに測度で順序を与える
- 意思決定分析・リスク分析 全体目次