🎓 レベル:標準 | 重要度:B(推奨)
📎 前提:多属性効用理論(MAUT) | 関連:重み付けと感度分析・線形代数(固有値・固有ベクトル)
要点(BLUF)
- 階層分析法(AHP: Analytic Hierarchy Process) は、目標→基準→代替案を階層化し、各レベルで一対比較を行って重みを導く手法(Saaty)。
- 重みは一対比較行列の主固有ベクトルとして求めます。「Aは何倍重要か」という相対判断を、整合的な重みベクトルに変換する仕掛けです。
- 判断の一貫性は整合比 CR(Consistency Ratio)で検査し、 なら許容。主観を構造化して定量化する点が特徴で、合意形成に向きます。
1. 一対比較:絶対値でなく相対で聞く
人は「コストの重要度は0.5」と直接答えるのは苦手ですが、「コストは性能より何倍重要か?」という2つずつの比較なら答えやすい。AHPはこの一対比較を全ペアで集め、整合的な重みに変換します。
比較は Saaty の9段階尺度(1=同等, 3=やや重要, 5=重要, 7=かなり, 9=極めて重要)で行い、 個の基準について の一対比較行列 を作ります。要素 は「基準 は基準 の何倍重要か」、対角は1、(相反性)です。
この例は「コストは性能の3倍・快適性の5倍重要、性能は快適性の2倍重要」という判断を表します。
2. 主固有ベクトルで重みを求める
もし判断が完全に整合的なら と書けて、(固有値 )が成り立ちます。現実の判断は多少ブレるので、最大固有値 に対応する主固有ベクトルを重みとして採用します。
import numpy as np
A = np.array([
[1, 3, 5],
[1/3, 1, 2],
[1/5, 1/2, 1],
])
eigvals, eigvecs = np.linalg.eig(A)
idx = np.argmax(eigvals.real) # 最大固有値の位置
lam_max = eigvals.real[idx]
w = eigvecs[:, idx].real
w = w / w.sum() # 正規化して重みに
print("AHP 重み(コスト・性能・快適性):", np.round(w, 4))
print(f"lambda_max = {lam_max:.4f}")
出力:
AHP 重み(コスト・性能・快適性): [0.6483 0.2297 0.122 ]
lambda_max = 3.0037
出力の意味:一対比較から、コスト0.648・性能0.230・快適性0.122という重みが出ました。「コストは性能の約2.8倍重視」という結果は、入力した「コストは性能の3倍」とおおむね整合します。 が基準数 にとても近い——この近さが、判断の一貫性の指標になります。
3. 整合比 CR:判断の一貫性チェック
人の判断は完全に整合的ではありません。「AはBの2倍、BはCの2倍」なら整合性からAはCの4倍のはずですが、「AはCの3倍」と答えるズレが起きます。このズレを測るのが整合度指標 CI と整合比 CR です。
RI(ランダム整合性指標)はランダムな行列のCIの期待値で、 なら 0.58。 なら「判断は十分一貫している」と見なします。
import numpy as np
A = np.array([[1, 3, 5], [1/3, 1, 2], [1/5, 1/2, 1]])
lam_max = np.max(np.linalg.eigvals(A).real)
n = A.shape[0]
CI = (lam_max - n) / (n - 1)
RI = 0.58 # n=3 のランダム整合性指標
CR = CI / RI
print(f"lambda_max = {lam_max:.4f}, CI = {CI:.4f}, CR = {CR:.4f}")
print("整合性:", "OK(CR < 0.1)" if CR < 0.1 else "要見直し(CR >= 0.1)")
出力:
lambda_max = 3.0037, CI = 0.0018, CR = 0.0032
整合性: OK(CR < 0.1)
出力の意味:CR=0.0032 で、しきい値0.1を大きく下回ります。この一対比較は非常に一貫しているので、得られた重みは信頼してよい、という判定です。もし CR が0.1を超えたら、矛盾した比較(どれが食い違っているか)を見直して入力し直します。CRは「あなたの判断、つじつまが合っていますか?」を機械的にチェックする安全弁です。
数式の直観的意味:なぜ固有ベクトルが重みか
整合的な行列なら で、行列 はランク1( の形)になり、唯一の非ゼロ固有値が 、その固有ベクトルが です。判断にブレが入ると はランク1から少しずれ、 が より少し大きくなる。 のはみ出しが、まさに非整合の大きさで、これをCIが拾います。主固有ベクトルは「ブレた比較データに最もよく合う 構造」を最小二乗的に取り出したもの——ペアごとの相対判断を、全体として整合する1本の重みベクトルに丸める操作です。これで得た重みを多属性効用理論(MAUT)の加重和に差し込めば、AHPとMAUTが連結します。
⚠️ よくある誤解
- 「CRが小さければ正しい重み」ではない:CRは一貫性だけを見ます。一貫して間違った判断(全部偏った比較)でもCRは小さくなりえます。一貫性は正しさを保証しません。
- 「順位は安定」とは限らない(順位逆転問題):AHPは代替案を1つ追加・削除すると既存の順位が入れ替わることがある(rank reversal)と批判されます。正規化の仕方に起因し、AHPの有名な弱点です。
- 「9段階尺度は絶対」ではない:尺度の取り方(1〜9か、別の数値か)で重みが変わります。尺度は便宜的なもので、結論は感度分析(重み付けと感度分析)で確かめるべきです。
- 「固有ベクトル法だけ」ではない:重みの推定には幾何平均法(各行の幾何平均を正規化)もあり、計算が簡単で結果も近い。固有ベクトル法は Saaty の原法です。
対応シミュレーション
本文のコードで一対比較行列の値を変えると、重みとCRが変わります。わざと矛盾した比較(例: を整合値から大きくずらす)を入れると、CRが0.1を超えて警告が出ることを確認できます。
関連ノート
- 第4章 多基準意思決定 目次
- 多属性効用理論(MAUT) — 前提:AHPの重みを加重和に使う
- 重み付けと感度分析 — 次のトピック:重みのブレへの頑健性
- 多目的問題とパレート最適 — 重みで選ぶ前の足切り
- 意思決定分析・リスク分析 全体目次