21  階層分析法

ヒント予備知識
  • 線形代数

AHPは,複数の代替案の中から一つの代替案を選択するための手法である.

21.1 代替案

代替案の集合 \(X = \{x_1, x_2, \ldots, x_n\}\) とする.代替案の重要度を

\[ \mathbf{w} = (w_1, w_2, \ldots, w_n)^T \]

で表す.ここで,\(w_i\) は代替案 \(x_i\) の重要度を表し,\(\sum_{i=1}^n w_i = 1\) を満たす.AHPでは,\(\mathbf{w}\) を計算できるものとする.計算する方法は後述する.

\(w_i\) が大きいほど,代替案 \(x_i\) が望ましいとする.\(w_i > w_j\) ならば,代替案 \(x_i\) は代替案 \(x_j\) より望ましい.このとき,\(x_i \succ x_j\) と表す.

例 21.1 旅行先の代替案 \[ X = \{\text{北海道}, \text{沖縄}, \text{九州}\} \]

とし,各代替案の重要度を \(\mathbf{w} = (0.3, 0.5, 0.2)^T\) とするとき, \[ \text{沖縄} \succ \text{北海道} \succ \text{九州} \] である.

このように,それぞれの代替案の重要度が与えられるならば,望ましい代替案の選択は容易である.しかし,実際には,代替案の重要度を直接決定することは難しい.

21.2 記号

記号 意味
\(\mathbf{A}\) 一対比較行列
\(X\) 代替案の集合
\(x_i\) 代替案 \(i\)
\(a_{ij}\) 一対比較値
\(\mathbf{w}\) 重要度ベクトル

21.3 一対比較

すべての代替案を並べて比較することは難しい.そこで,AHPでは,2つの代替案を比較する一対比較 (pairwise comparison)を用いる.その理由として,\(\{x_1, x_2, \ldots, x_n\}\) の中から最も望ましい代替案を選ぶことは難しいが,2つの代替案 \(x_i\)\(x_j\) のどちらが望ましいかを決定することは比較的容易であることが挙げられる.

AHPでは,\(x_i\)\(x_j\) よりどれくらい望ましいかを一対比較値で表す.正式には,一対比較値 \(a_{ij}\)\(x_i\)\(x_j\) より \(a_{ij}\) 倍望ましいことを表す.

例えば,\(a_{ij} = 3\) ならば,\(x_i\)\(x_j\) より3倍望ましいことを表す.例 21.1 で,\(a_{12} = 3\) ならば,\(x_1\) (北海道)は \(x_2\) (沖縄)より3倍望ましいことを表す.

Saatyは,一対比較値を以下の尺度で表すことを提案した.

Table: The fundamental scale of absolute numbers (Saaty, 2008)

Importance Definition Explanation
1 Equal Two activities contribute equally to the objective
2 Weak or slight -
3 Moderate Experience and judgment slightly favor one activity over another
4 Moderate plus -
5 Strong Experience and judgment strongly favor one activity over another
6 Strong plus -
7 Very strong An activity is favored very strongly over another activity
8 Very, very strong -
9 Extreme The evidence favoring one activity over another is of the highest possible order

21.4 一対比較行列

すべての代替案の組み合わせについて一対比較を行い,その結果を一対比較行列 (pairwise comparison matrix)にまとめる.一対比較行列は \(\mathbf{A} = [a_{ij}]_{n \times n}\) と定義され,以下のように表される。

\[ \mathbf{A} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nn} \\ \end{bmatrix} \]

理論的には,

\[ a_{ij} \approx \frac{w_i}{w_j} \quad \forall i, j \]

が想定されている.

ヒント

意思決定者が一対比較を行うとき,\(\mathbf{w} = (w_1, w_2, \ldots, w_n)^T\) が知らないが,合理的な意思決定者ならば,\(a_{ij} = w_i/w_j\) を満たすと考えられる.

意思決定者が完全に合理的であるならば,\(a_{ij} = w_i/w_j\) を満たす. このとき,一対比較行列 \(\mathbf{A}\) は以下のようになる.

\[ \mathbf{A} = \begin{bmatrix} w_1/w_1 & w_1/w_2 & \cdots & w_1/w_n \\ w_2/w_1 & w_2/w_2 & \cdots & w_2/w_n \\ \vdots & \vdots & \ddots & \vdots \\ w_n/w_1 & w_n/w_2 & \cdots & w_n/w_n \\ \end{bmatrix} \]

このとき,\(\mathbf{A}\) は完全に整合性 (consistency) を持つと言う.\(\mathbf{A}\) は,以下の性質が成り立つ.

  • \(a_{ii} = 1, \forall i\)
  • \(a_{ij} = 1/a_{ji}, \forall i, j\)
  • \(a_{ik} = a_{ij} a_{jk}, \forall i, j, k\)
ヒント

\(a_{ij} = w_i/w_j\) とするとき,これらの性質は,以下のように導かれる.

\[ a_{ii} = \frac{w_i}{w_i} = 1 \]

\[ a_{ij} = \frac{w_i}{w_j} = \frac{1}{\frac{w_j}{w_i}} = \frac{1}{a_{ji}} \]

\[ a_{ik} = \frac{w_i}{w_k} = \frac{w_i}{w_j} \times \frac{w_j}{w_k} = a_{ij} a_{jk} \]

例 21.2 A さんがクッキー(\(x_1\))はチョコレート(\(x_2\))より3倍好きで,チョコレート(\(x_2\))はアイスクリーム(\(x_3\))より2倍好きならば,クッキーはアイスクリームより6倍好きである.すなわち,\(a_{12} = 3\)\(a_{23} = 2\) ならば,\(a_{13} = 6\) である.また,A さんがクッキーはチョコレートより3倍好きであるならば,チョコレートはクッキーの1/3倍好きである.すなわち,\(a_{12} = 3\) ならば,\(a_{21} = 1/3\) である.

例 21.3 旅行先の代替案 \(X = \{\text{北海道}, \text{沖縄}, \text{九州}\}\) とし,以下の一対比較を行ったとする.

  • \(x_1\) (北海道)は \(x_2\) (沖縄)より3倍望ましい
  • \(x_1\) (北海道)は \(x_3\) (九州)より6倍望ましい
  • \(x_2\) (沖縄)は \(x_3\) (九州)より2倍望ましい

このとき,一対比較行列 \(\mathbf{A}\) は以下のようになる.

\[ \mathbf{A} = \begin{bmatrix} 1 & 3 & 6 \\ 1/3 & 1 & 2 \\ 1/6 & 1/2 & 1 \\ \end{bmatrix} \]

21.5 重要度ベクトル

一対比較行列 \(\mathbf{A}\) が与えられたとき,重要度ベクトル \(\mathbf{w}\) を計算する方法を説明する.

まず,意思決定者が完全に合理的であるならば,\(a_{ij} = w_i/w_j\) を満たすため,\(\mathbf{A}\)

\[ \mathbf{A} = \begin{bmatrix} w_1/w_1 & w_1/w_2 & \cdots & w_1/w_n \\ w_2/w_1 & w_2/w_2 & \cdots & w_2/w_n \\ \vdots & \vdots & \ddots & \vdots \\ w_n/w_1 & w_n/w_2 & \cdots & w_n/w_n \\ \end{bmatrix} \]

であるから,\(\mathbf{A}\) の各列は比例している.このとき,重要度ベクトル \(\mathbf{w}\) は,\(\mathbf{A}\) の任意の列を正規化することで求められる.

例 21.3 の一対比較行列 \(\mathbf{A}\) を考える.

\[ \mathbf{A} = \begin{bmatrix} 1 & 3 & 6 \\ 1/3 & 1 & 2 \\ 1/6 & 1/2 & 1 \\ \end{bmatrix} \]

このとき,\(\mathbf{A}\) の第3列を正規化すると,重要度ベクトル \(\mathbf{w}\) は以下のようになる. \[ w_1 = \frac{6}{6 + 2 + 1} = \frac{6}{9} \approx 0.67 \] \[ w_2 = \frac{2}{6 + 2 + 1} = \frac{2}{9} \approx 0.22 \] \[ w_3 = \frac{1}{6 + 2 + 1} = \frac{1}{9} \approx 0.11 \]

21.6 階層

AHPでは,複数の評価基準(criterion)を用いて代替案を評価することができる.例えば,旅行先の代替案を評価するとき,費用,距離,環境などの評価基準を用いることができる.

ヒント

意思決定者が直接代替案を一対比較することは難しいが,評価基準を用いて代替案を評価することは比較的容易であると考えられる.

AHPでは,評価基準を用いて代替案を評価するために,階層 (hierarchy) を用いる.階層は,以下の要素から構成される.

  • 目的 (goal)
  • 評価基準 (criteria)
  • 代替案 (alternatives)

正式に,評価基準の集合を \(C = \{c_1, c_2, \ldots, c_m\}\) とする.

例えば,旅行先の代替案を \(X = \{\text{北海道}, \text{沖縄}, \text{九州}\}\) とし,評価基準 \(C = \{\text{気候}, \text{食事}, \text{費用}\}\) とする.このとき,図 21.1 に示すような階層構造を考えることができる.

AHP Goal 旅行先の選択 Climate 気候 Goal->Climate Food 食事 Goal->Food Cost 費用 Goal->Cost Hokkaido 北海道 Climate->Hokkaido Okinawa 沖縄 Climate->Okinawa Kyushu 九州 Climate->Kyushu Food->Hokkaido Food->Okinawa Food->Kyushu Cost->Hokkaido Cost->Okinawa Cost->Kyushu
図 21.1: 階層構造

このような階層構造を用いることで,評価基準に基づいて代替案を評価することができる.各評価基準 \(c_k \in C\) を用いて,代替案の一対比較行列 \(\mathbf{A}^{(k)}\) を構築する.

例えば,\(A^{(1)}\)\(A^{(2)}\)\(A^{(3)}\) をそれぞれ評価基準 \(c_1\)\(c_2\)\(c_3\) に対応する一対比較行列とする.

\[ \mathbf{A}^{(1)} = \begin{bmatrix} 1 & 1/3 & 3 \\ 3 & 1 & 9 \\ 1/3 & 1/9 & 1 \\ \end{bmatrix}, \quad \mathbf{A}^{(2)} = \begin{bmatrix} 1 & 1 & 4 \\ 1 & 1 & 4 \\ 1/4 & 1/4 & 1 \\ \end{bmatrix}, \quad \mathbf{A}^{(3)} = \begin{bmatrix} 1 & 1/2 & 1/6 \\ 2 & 1 & 1/3 \\ 6 & 3 & 1 \\ \end{bmatrix} \]

ヒント

以上の一対比較行列から見ると,この人は以下のような評価をしていることがわかる.

  • 気候に関しては,沖縄が最も望ましく,次に北海道,最後に九州である
  • 食事に関しては,北海道と沖縄が同じくらい望ましく,九州が最も望ましくない
  • 費用に関しては,九州が最も望ましく,次に沖縄,最後に北海道である

重要度ベクトル \(\mathbf{w}^{(k)}\) をそれぞれの一対比較行列 \(\mathbf{A}^{(k)}\) から計算する.

\[ \mathbf{w}^{(1)} = \begin{bmatrix} 3/13 \\ 9/13 \\ 1/13 \\ \end{bmatrix}, \quad \mathbf{w}^{(2)} = \begin{bmatrix} 4/9 \\ 4/9 \\ 1/9 \\ \end{bmatrix}, \quad \mathbf{w}^{(3)} = \begin{bmatrix} 1/9 \\ 2/9 \\ 6/9 \\ \end{bmatrix} \]

各評価基準 \(c_k \in C\) において,代替案の重要度ベクトル \(\mathbf{w}^{(k)}\) が計算できた.次に,評価基準はどれくらい重要かを評価する.評価基準の一対比較行列 \(\mathbf{B}\) を構築する.

例えば,以下のような一対比較行列 \(\mathbf{B}\) を考える.

  • 評価基準 \(c_1\) (気候)は \(c_2\) (食事)より1/4倍重要である
  • 評価基準 \(c_1\) (気候)は \(c_3\)(費用)より2倍重要である
  • 評価基準 \(c_2\) (食事)は \(c_3\)(費用)より8倍重要である
ヒント

この人は,食事を最も重要視しており,次に気候,最後に費用を重要視していることがわかる.

\[ \mathbf{B} = \begin{bmatrix} 1 & 1/4 & 2 \\ 4 & 1 & 8 \\ 1/2 & 1/8 & 1 \\ \end{bmatrix} \]

同様に,重要度ベクトル \(\mathbf{v}\) を一対比較行列 \(\mathbf{B}\) から計算する.

\[ \mathbf{v} = \begin{bmatrix} 2/11 \\ 8/11 \\ 1/11 \\ \end{bmatrix} \]

最終的に,代替案の重要度ベクトル \(\mathbf{w}\) は以下のように計算される.

\[ \mathbf{w} = \sum_{k=1}^m v_k \mathbf{w}^{(k)} = \frac{2}{11} \begin{bmatrix} 3/13 \\ 9/13 \\ 1/13 \\ \end{bmatrix} + \frac{8}{11} \begin{bmatrix} 4/9 \\ 4/9 \\ 1/9 \\ \end{bmatrix} + \frac{1}{11} \begin{bmatrix} 1/9 \\ 2/9 \\ 6/9 \\ \end{bmatrix} \approx \begin{bmatrix} 0.38 \\ 0.47 \\ 0.16 \\ \end{bmatrix} \]

コード
import numpy as np

w1 = np.array([3/13, 9/13, 1/13])
w2 = np.array([4/9, 4/9, 1/9])
w3 = np.array([1/9, 2/9, 6/9])
v = np.array([2/11, 8/11, 1/11])
w = v[0] * w1 + v[1] * w2 + v[2] * w3
w
array([0.37529138, 0.46930847, 0.15540016])

このとき,重要度ベクトル \(\mathbf{w}\) から,望ましい代替案は \(x_2\) (沖縄)であることがわかる.

ノート階層の一般化

今回は,目標,評価基準,代替案の3層の階層を考えたが,評価基準の下にさらに評価基準を追加するなど,より複雑な階層を考えることもできる.

21.7 重要度ベクトルの推定

しかし,人間の評価は必ずしも合理的でないため,一般には \(a_{ij} = w_i/w_j\) を満たさない.このとき,他の方法で一対比較行列 \(\mathbf{A}\) から重要度ベクトル \(\mathbf{w}\) を計算する必要がある.計算する方法として,主に幾何平均法 (geometric mean method) と固有ベクトル法 (eigenvector method) の2つがある.

ヒント

幾何平均法と固有ベクトル法のどちらが優れているかについては議論がある.AHPの創始者であるSaatyは固有ベクトル法が優れていると主張しているが,幾何平均法が優れているとする出張する研究もある.

他にもnormalized columns methodという方法もあるが,理論的根拠がないと言われている.

21.7.1 幾何平均法

Crawford と Williams (1985) は,幾何平均法を提案した.幾何平均法では,重要度ベクトル \(\mathbf{w}\) の各要素 \(w_k\) を以下のように計算する.

\[ w_k = \frac{\left(\prod_{j=1}^n a_{kj}\right)^{1/n}}{\sum_{i=1}^n \left(\prod_{j=1}^n a_{ij}\right)^{1/n}} \quad \forall k \]

ヒント

\(\mathbf{A}\) の各行の幾何平均を計算し,正規化することで,重要度ベクトル \(\mathbf{w}\) を求めている.

例 21.3 の一対比較行列 \(\mathbf{A}\) を考える.

\[ \mathbf{A} = \begin{bmatrix} 1 & 3 & 6 \\ 1/3 & 1 & 2 \\ 1/6 & 1/2 & 1 \\ \end{bmatrix} \]

このとき,重要度ベクトル \(\mathbf{w}\) は以下のようになる.これは,理論から計算した重要度ベクトルと一致する.

\[ w_1 = \frac{(1 \times 3 \times 6)^{1/3}}{(1 \times 3 \times 6)^{1/3} + (1/3 \times 1 \times 2)^{1/3} + (1/6 \times 1/2 \times 1)^{1/3}} \approx 0.67 \]

\[ w_2 = \frac{(1/3 \times 1 \times 2)^{1/3}}{(1 \times 3 \times 6)^{1/3} + (1/3 \times 1 \times 2)^{1/3} + (1/6 \times 1/2 \times 1)^{1/3}} \approx 0.22 \]

\[ w_3 = \frac{(1/6 \times 1/2 \times 1)^{1/3}}{(1 \times 3 \times 6)^{1/3} + (1/3 \times 1 \times 2)^{1/3} + (1/6 \times 1/2 \times 1)^{1/3}} \approx 0.11 \]

一般に,一対比較行列 \(\mathbf{A}\) が整合性を持つならば,幾何平均法で計算した重要度ベクトル \(\mathbf{w}\) は理論から計算した重要度ベクトルと一致する.興味があれば,証明してみよう.

21.7.2 固有ベクトル法*

ヒント

固有ベクトル法は直感的に理解することが難しいため,講義では扱わない.

一対比較行列 \(\mathbf{A}\) が整合性を持つとき,

\[ \mathbf{A} \mathbf{w} = \begin{bmatrix} w_1/w_1 & w_1/w_2 & \cdots & w_1/w_n \\ w_2/w_1 & w_2/w_2 & \cdots & w_2/w_n \\ \vdots & \vdots & \ddots & \vdots \\ w_n/w_1 & w_n/w_2 & \cdots & w_n/w_n \\ \end{bmatrix} \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_n \\ \end{bmatrix} = \begin{bmatrix} n w_1 \\ n w_2 \\ \vdots \\ n w_n \\ \end{bmatrix} = n \mathbf{w} \]

が成り立つ.式 \(\mathbf{A} \mathbf{w} = n \mathbf{w}\) より,\(\mathbf{w}\)\(\mathbf{A}\) の固有ベクトル,\(n\)\(\mathbf{A}\) の固有値である.

Saatyは,最大固有値 \(\lambda_{max}\) に対応する固有ベクトルを重要度ベクトルとして用いることを提案した.すなわち,重要度ベクトル \(\mathbf{w}\) を求めるには,以下の式を解く.

\[ \mathbf{A} \mathbf{w} = \lambda_{max} \mathbf{w} \]

例 21.3 の一対比較行列が与えられたとする.

\[ \mathbf{A} = \begin{bmatrix} 1 & 3 & 6 \\ 1/3 & 1 & 2 \\ 1/6 & 1/2 & 1 \\ \end{bmatrix} \]

このとき,\(\mathbf{A}\) の固有値は,\(\det(\mathbf{A} - \lambda \mathbf{I}) = 0\) を解くことで求められる.

\[\begin{align*} \det(\mathbf{A} - \lambda \mathbf{I}) &= \det\begin{bmatrix} 1 - \lambda & 3 & 6 \\ 1/3 & 1 - \lambda & 2 \\ 1/6 & 1/2 & 1 - \lambda \\ \end{bmatrix} \\ &= -\lambda^3 + 3\lambda^2 \\ &= -\lambda^2(\lambda - 3) \end{align*}\]

\(\lambda^2(\lambda - 3) = 0\) より,\(\lambda = 0, 3\) が得られる.この例において,\(\mathbf{A}\) の最大固有値は \(\lambda_{max} = 3\) であり,それ以外の固有値は \(\lambda = 0\) である.また,\(\mathbf{A}\)\(3 \times 3\) 行列であるため,\(\lambda_{max} = n\) が成り立つ.これは特別な例ではなく,一般に 命題 21.1 が成り立つ.

命題 21.1 整合性のある \(n \times n\) 行列 \(\mathbf{A}\) の最大固有値は \(\lambda_{max} = n\) であり,それ以外の固有値は \(\lambda = 0\) である.

行列 \(\mathbf{A}\) は整合性を持たないとき,\(\lambda_{max} > n\) が成り立つ.命題 21.2\(\lambda_{max}\) の性質を述べている.

命題 21.2 (Saaty) \(\mathbf{A}\) を一対行列とする.\(\mathbf{A}\) が整合性を持つならば,\(\lambda_{max} = n\) である.\(\mathbf{A}\) が整合性を持たないならば,\(\lambda_{max} > n\) である.

21.8 整合性*

計算された重要度ベクトル \(\mathbf{w}\) が一対比較行列 \(\mathbf{A}\) とどれくらい整合しているかを評価する指標として,様々な指標が提案されている..

21.8.1 CI

Saatyは,一対比較行列 \(\mathbf{A}\) の整合性を評価する指標として整合度 (consistency index, CI) を提案した.

\[ CI = \frac{\lambda_{max} - n}{n - 1} \]

21.8.2 GCI

Aguarón が平均幾何整合度 (geometric consistency index, GCI) を提案した.

一対比較値 \(a_{ij}\) と重要度ベクトル \(\mathbf{w}\) から,以下のように \(e_{ij}\) を定義する.

\[ e_{ij} = a_{ij} \frac{w_j}{w_i} \]

\(a_{ij} = w_i/w_j\) を満たすならば,\(e_{ij} = 1\) である.

GCIは以下のように定義される.

\[ GCI = \frac{2}{(n-1)(n-2)} \sum_{i=1}^{n-1} \sum_{j=i+1}^{n} \left(\ln e_{ij}\right)^2 \]

21.9 文献案内

Saaty (1977) は初めてAHPを提案している.この論文では,固有ベクトル法と整合性の指標CIを提案している.

Crawford と Williams (1985) は幾何平均法を提案している.

Brunelli (2015) はAHPを丁寧に解説した書籍である.深く理解したい人にお勧めする.

21.10 用語

English Japanese
multi-criteria decision making (MCDM) 多基準意思決定
Analytic Hierarchy Process (AHP) 階層分析法
Consistency index 整合度
pairwise comparison matrix 一対比較行列
alternative 代替案
criterion 評価基準
priority vector 重要度ベクトル

21.11 練習問題

練習 21.1 相馬さんは,パソコンを購入しようと考えている.調査した結果,A,B,Cの3つの機種に絞り込んだ.相馬さんは,デザイン(\(c_1\))、性能(\(c_2\))、メーカー(\(c_3\))の三つの基準でパソコンを選定しようと考えている.相馬さんは,以下のような一対比較を行った.

基準 デザイン 性能 メーカー
デザイン 1 2 1/4
性能 1/2 1 1/5
メーカー 4 5 1
デザイン A B C
A 1 3 4
B 1/3 1 1/5
C 1/4 5 1
性能 A B C
A 1 1/3 2
B 3 1 1/2
C 1/2 2 1
メーカー A B C
A 1 1/2 1
B 2 1 1/2
C 1 2 1

AHPを用いて,相馬さんに最も適したパソコンを選定せよ.

解答 21.1.

コード
import numpy as np

# 基準の一対比較行列
B = np.array([[1, 2, 1 / 4], [1 / 2, 1, 1 / 5], [4, 5, 1]])
# 代替案の一対比較行列
A1 = np.array([[1, 3, 4], [1 / 3, 1, 1 / 5], [1 / 4, 5, 1]])
A2 = np.array([[1, 1 / 3, 2], [3, 1, 1 / 2], [1 / 2, 2, 1]])
A3 = np.array([[1, 1 / 2, 1], [2, 1, 1 / 2], [1, 2, 1]])


# 幾何平均法で重要度ベクトルを計算する関数
def geometric_mean_method(A):
    n = A.shape[0]
    w = np.zeros(n)
    for i in range(n):
        w[i] = (np.prod(A[i, :])) ** (1 / n)
    w = w / np.sum(w)
    return w


# 基準の重要度ベクトル
v = geometric_mean_method(B)

# 代替案の重要度ベクトル
w1 = geometric_mean_method(A1)
w2 = geometric_mean_method(A2)
w3 = geometric_mean_method(A3)
print(f"基準の重要度ベクトル: {v}")
print(f"デザインの重要度ベクトル: {w1}")
print(f"性能の重要度ベクトル: {w2}")
print(f"メーカーの重要度ベクトル: {w3}")
# 最終的な重要度ベクトル
w = v[0] * w1 + v[1] * w2 + v[2] * w3
print(f"最終的な重要度ベクトル: {w}")
基準の重要度ベクトル: [0.19980996 0.11684958 0.68334046]
デザインの重要度ベクトル: [0.6069332  0.10749379 0.285573  ]
性能の重要度ベクトル: [0.28942849 0.37925861 0.33131291]
メーカーの重要度ベクトル: [0.25992105 0.32748    0.41259895]
最終的な重要度ベクトル: [0.33270547 0.28957487 0.37771966]

練習 21.2 ある会社が新しい工場の建設場所を選ぶために,3つの都市を代替案として検討している.

  • 都市Aは都市Bよりも2倍望ましい
  • 都市Aは都市Cよりも4倍望ましい
  • 都市Bは都市Cよりも2倍望ましい

このとき,一対比較行列を構築し,重要度ベクトルを計算せよ.

解答 21.2. 一対比較行列 \(\mathbf{A}\) は以下のようになる.

\[ \mathbf{A} = \begin{bmatrix} 1 & 2 & 4 \\ 1/2 & 1 & 2 \\ 1/4 & 1/2 & 1 \\ \end{bmatrix} \]

\(\mathbf{A}\) は整合性を持つため,\(\mathbf{A}\) の任意の列を正規化することで,重要度ベクトル \(\mathbf{w}\) を求めることができる.

\[ w = \begin{bmatrix} 4/7 \\ 2/7 \\ 1/7 \\ \end{bmatrix} \]

練習 21.3 ある学生が大学を選ぶために,3つの大学を代替案として検討している.

  • 大学Aは大学Bよりも3倍望ましい
  • 大学Aは大学Cよりも5倍望ましい
  • 大学Bは大学Cよりも2倍望ましい

このとき,一対比較行列を構築し,重要度ベクトルを計算せよ.

解答 21.3. 一対比較行列 \(\mathbf{A}\) は以下のようになる.

\[ \mathbf{A} = \begin{bmatrix} 1 & 3 & 5 \\ 1/3 & 1 & 2 \\ 1/5 & 1/2 & 1 \\ \end{bmatrix} \]

\(\mathbf{A}\) は整合性を持たないため,幾何平均法で重要度ベクトル \(\mathbf{w}\) を求める.

\[ w_1 = \frac{(1 \times 3 \times 5)^{1/3}}{(1 \times 3 \times 5)^{1/3} + (1/3 \times 1 \times 2)^{1/3} + (1/5 \times 1/2 \times 1)^{1/3}} \approx 0.65 \]

\[ w_2 = \frac{(1/3 \times 1 \times 2)^{1/3}}{(1 \times 3 \times 5)^{1/3} + (1/3 \times 1 \times 2)^{1/3} + (1/5 \times 1/2 \times 1)^{1/3}} \approx 0.23 \]

\[ w_3 = \frac{(1/5 \times 1/2 \times 1)^{1/3}}{(1 \times 3 \times 5)^{1/3} + (1/3 \times 1 \times 2)^{1/3} + (1/5 \times 1/2 \times 1)^{1/3}} \approx 0.12 \]

コード
import numpy as np

A = np.array([[1, 3, 5], [1/3, 1, 2], [1/5, 1/2, 1]])
w1 = (np.prod(A[0, :]))**(1/3)
w2 = (np.prod(A[1, :]))**(1/3)
w3 = (np.prod(A[2, :]))**(1/3)
w = np.array([w1, w2, w3])
w = w / np.sum(w)
w
array([0.64832901, 0.22965079, 0.12202019])

練習 21.4 ある学生が就職先を選ぶために,3つの企業を代替案として検討している.評価基準として,給与,勤務地,企業の評判を考える.

  • 給与に関しては,企業Aは企業Bよりも2倍望ましく,企業Aは企業Cよりも3倍望ましく,企業Bは企業Cよりも2倍望ましい.
  • 勤務地に関しては,企業Aは企業Bと同じくらい望ましく,企業Aは企業Cよりも4倍望ましく,企業Bは企業Cよりも4倍望ましい.
  • 企業の評判に関しては,企業Bは企業Aの2倍望ましく,企業Cは企業Bの4倍望ましく,企業Cは企業Aの8倍望ましい.

また,この学生は,評価基準として,給与は勤務地の2倍,勤務地は企業の評判の2倍重要,給与は企業の評判の4倍重要と考えている.

このとき,AHPを用いて重要度ベクトルを計算し,最も望ましい企業を選べ.

解答 21.4. 給与に関する一対比較行列 \(\mathbf{A}^{(1)}\) は以下のようになる.

\[ \mathbf{A}^{(1)} = \begin{bmatrix} 1 & 1 & 4 \\ 1 & 1 & 4 \\ 1/4 & 1/4 & 1 \\ \end{bmatrix} \]

勤務地に関する一対比較行列 \(\mathbf{A}^{(2)}\) は以下のようになる.

\[ \mathbf{A}^{(2)} = \begin{bmatrix} 1 & 2 & 6 \\ 1/2 & 1 & 3 \\ 1/6 & 1/3 & 1 \\ \end{bmatrix} \]

企業の評判に関する一対比較行列 \(\mathbf{A}^{(3)}\) は以下のようになる.

\[ \mathbf{A}^{(3)} = \begin{bmatrix} 1 & 1/2 & 1/8 \\ 2 & 1 & 1/4 \\ 8 & 4 & 1 \\ \end{bmatrix} \]

重要度ベクトル \(\mathbf{w}^{(k)}\) をそれぞれの一対比較行列 \(\mathbf{A}^{(k)}\) から計算する.

\[ \mathbf{w}^{(1)} = \begin{bmatrix} 4/9 \\ 4/9 \\ 1/9 \\ \end{bmatrix}, \quad \mathbf{w}^{(2)} = \begin{bmatrix} 6/10 \\ 3/10 \\ 1/10 \\ \end{bmatrix}, \quad \mathbf{w}^{(3)} = \begin{bmatrix} 1/11 \\ 2/11 \\ 8/11 \\ \end{bmatrix} \]

評価基準の一対比較行列 \(\mathbf{B}\) は以下のようになる.

\[ \mathbf{B} = \begin{bmatrix} 1 & 2 & 4 \\ 1/2 & 1 & 2 \\ 1/4 & 1/2 & 1 \\ \end{bmatrix} \]

重要度ベクトル \(\mathbf{v}\) を一対比較行列 \(\mathbf{B}\) から計算する.

\[ \mathbf{v} = \begin{bmatrix} 4/7 \\ 2/7 \\ 1/7 \\ \end{bmatrix} \]

最終的に,代替案の重要度ベクトル \(\mathbf{w}\) は以下のように計算される.

\[ \mathbf{w} = \sum_{k=1}^m v_k \mathbf{w}^{(k)} = \frac{4}{7} \begin{bmatrix} 4/9 \\ 4/9 \\ 1/9 \\ \end{bmatrix} + \frac{2}{7} \begin{bmatrix} 6/10 \\ 3/10 \\ 1/10 \\ \end{bmatrix} + \frac{1}{7} \begin{bmatrix} 1/11 \\ 2/11 \\ 8/11 \\ \end{bmatrix} \approx \begin{bmatrix} 0.44 \\ 0.37 \\ 0.20 \\ \end{bmatrix} \]

コード
import numpy as np

w1 = np.array([4/9, 4/9, 1/9])
w2 = np.array([6/10, 3/10, 1/10])
w3 = np.array([1/11, 2/11, 8/11])
v = np.array([4/7, 2/7, 1/7])
w = v[0] * w1 + v[1] * w2 + v[2] * w3
w
array([0.43838384, 0.36565657, 0.1959596 ])

このとき,重要度ベクトル \(\mathbf{w}\) から,望ましい代替案は企業Aであることがわかる.