Mímisbrunnr知恵の泉

← 意思決定分析 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:多属性効用理論(MAUT)階層分析法(AHP) | 関連:経営の意思決定とシナリオ分析

要点(BLUF)

1. なぜ感度分析が必須か

重み(多属性効用理論(MAUT))や一対比較(階層分析法(AHP))は、突き詰めれば主観です。コストの重みが0.5なのか0.55なのか、厳密な根拠はありません。だとすれば問うべきは「重みがこの範囲で動いても、選ぶべき案は同じか?」。

感度分析をしない多基準評価は、「たまたまその重みだから出た結論」を絶対視する危うさを抱えます。

2. 重みを動かして順位逆転を探す

多属性効用理論(MAUT)の車の例で、コストの重み wcostw_{\text{cost}} を動かし、残りを性能:快適性=3:2 で配分しながら、最良案の変化を追います。

import numpy as np

names = ["A", "B", "C"]
# 正規化済みの部分効用(04-02 と同じ):[コスト, 性能, 快適性]
norm = {
    "A": np.array([0.000, 1.0, 0.4]),
    "B": np.array([1.000, 0.0, 0.0]),
    "C": np.array([0.333, 0.5, 1.0]),
}

print("コスト重み w_cost を動かす(残りは性能:快適性=3:2)")
for wc in [0.2, 0.4, 0.5, 0.55, 0.6, 0.8]:
    rest = 1 - wc
    w = np.array([wc, rest*0.6, rest*0.4])      # コスト・性能・快適性
    scores = {a: np.dot(w, norm[a]) for a in names}
    best = max(scores, key=scores.get)
    s_str = " ".join(f"{a}={scores[a]:.3f}" for a in names)
    print(f"  w_cost={wc:.2f}: {s_str} -> 最良 {best}")

出力:

コスト重み w_cost を動かす(残りは性能:快適性=3:2)
  w_cost=0.20: A=0.608 B=0.200 C=0.627 -> 最良 C
  w_cost=0.40: A=0.456 B=0.400 C=0.553 -> 最良 C
  w_cost=0.50: A=0.380 B=0.500 C=0.517 -> 最良 C
  w_cost=0.55: A=0.342 B=0.550 C=0.498 -> 最良 B
  w_cost=0.60: A=0.304 B=0.600 C=0.480 -> 最良 B
  w_cost=0.80: A=0.152 B=0.800 C=0.407 -> 最良 B

出力の意味:コストの重みが低い〜中程度(〜0.50)ではバランス型の C が勝ち、0.55を超えると最安の B に逆転します。順位逆転点は wcost0.52w_{\text{cost}} \approx 0.52 付近。現在の重み0.50はこの境界のすぐ手前——つまり結論「Cが最良」は重みに敏感で僅差です。コストをあと少し重視する人なら結論はBになる。「Cが最良」を採用するなら、「コスト重視がそこまで強くないという前提で」と注釈すべき、と分かります。

3. 感度分析の読み方

感度分析の結果は、次の3つの観点で読みます。

感度分析は「結論を覆す」ためでなく、「結論がどんな前提に支えられているかを可視化する」ために行います。これは経営の意思決定とシナリオ分析のシナリオ思考——前提を変えて結論の安定性を見る——と同じ精神です。

数式の直観的意味:順位逆転は線形の交点

総合スコア Ua(w)=kwkua,kU_a(w) = \sum_k w_k u_{a,k} は、重み ww について線形です。2案 a,ba, b のスコア差 Ua(w)Ub(w)=kwk(ua,kub,k)U_a(w) - U_b(w) = \sum_k w_k (u_{a,k} - u_{b,k})ww の線形関数。だから重みを1次元的に動かすと、各案のスコアは直線で、順位逆転は2直線の交点として現れます。上の例で C と B のスコアは wcostw_{\text{cost}} の直線で、交点 0.52\approx 0.52 がちょうど逆転点。線形だからこそ、逆転点は連立方程式で厳密に解けます——UC(w)=UB(w)U_C(w) = U_B(w)wcostw_{\text{cost}} について解けば、グリッド探索なしで境界が出ます。重み空間が高次元なら、この交点は「超平面」になり、現在の重みからその超平面までの距離が頑健性の尺度になります。

⚠️ よくある誤解

対応シミュレーション

本文のコードで、動かす重みをコスト以外(性能・快適性)に変えると、逆転点や敏感さが属性ごとに違うことが見えます。逆転点を二分探索や連立方程式で厳密に求める拡張も容易です。

関連ノート