23  階層分析法

23.1 学習目標

  • 一対比較と一対比較行列の考え方を理解する.
  • 整合性の性質を理解し,導出できる.
  • 階層構造を用いて,評価基準と代替案を評価できる.
  • 幾何平均法により重要度ベクトルを求めることができる.
  • *固有ベクトル法と整合性の指標を理解する.

23.2 前提知識

23.3 階層分析法とは

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

23.4 代替案

代替案の集合 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 と表す.

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

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

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

23.5 記号

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

23.6 一対比較

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

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

例えば,a_{ij} = 3 ならば,x_ix_j より3倍望ましいことを表す.例 23.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

23.7 一対比較行列

すべての代替案の組み合わせについて一対比較を行い,その結果を一対比較行列 (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}

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

例 23.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}

23.8 重要度ベクトル

一対比較行列 \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} の任意の列を正規化することで求められる.

例 23.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

23.9 階層

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

ノートなぜ評価基準を用いるのか

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

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

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

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

例えば,旅行先の代替案を X = \{\text{北海道}, \text{沖縄}, \text{九州}\} とし,評価基準 C = \{\text{気候}, \text{食事}, \text{費用}\} とする.このとき,図 23.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
図 23.1: 階層構造

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

例えば,A^{(1)}A^{(2)}A^{(3)} をそれぞれ評価基準 c_1c_2c_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層の階層を考えたが,評価基準の下にさらに評価基準を追加するなど,より複雑な階層を考えることもできる.

23.10 重要度ベクトルの推定

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

ノート幾何平均法と固有ベクトル法

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

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

23.10.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} を求めている.

例 23.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} は理論から計算した重要度ベクトルと一致する.興味があれば,証明してみよう.

Python では,次のように geometric_mean_method(A) 関数を定義し,重要度ベクトルを計算できる.

import numpy as np


def geometric_mean_method(A):
    """
    Estimate the priority vector by the geometric mean method.

    Parameters:
    A (np.ndarray): Pairwise comparison matrix

    Returns:
    np.ndarray: Priority vector w
    """
    n = A.shape[0]
    w = np.zeros(n)
    for i in range(n):
        w[i] = np.prod(A[i, :]) ** (1 / n)
    return w / np.sum(w)


if __name__ == "__main__":
    A = np.array([[1, 3, 6], [1 / 3, 1, 2], [1 / 6, 1 / 2, 1]])

    w = geometric_mean_method(A)
    print(f"Priority vector (w): {w.round(2)}")
Priority vector (w): [0.67 0.22 0.11]

23.10.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}

例 23.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 が成り立つ.これは特別な例ではなく,一般に 命題 23.1 が成り立つ.

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

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

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

23.11 整合性*

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

23.11.1 CI

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

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

23.11.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

23.12 まとめ

  • AHPでは,代替案を直接順位づけする代わりに,2つずつ比較する一対比較を用いる.一対比較値 a_{ij} は,x_ix_j より a_{ij} 倍望ましいことを表す.
  • 一対比較の結果をまとめた行列 \mathbf{A} = [a_{ij}]_{n \times n} を一対比較行列と呼ぶ.
  • 意思決定者が完全に合理的ならば a_{ij} = w_i/w_j が成り立ち,a_{ii} = 1a_{ij} = 1/a_{ji}a_{ik} = a_{ij} a_{jk} が導かれる.このとき \mathbf{A} は完全に整合性をもち,重要度ベクトル \mathbf{w}\mathbf{A} の任意の列を正規化することで求められる.
  • 評価基準を導入した階層では,基準の重要度ベクトルと,各基準における代替案の重要度ベクトルを求め,前者を重みとして後者を足し合わせることで,最終的な重要度ベクトルが得られる.
  • 実際の一対比較行列は完全な整合性をもたないため,幾何平均法などで \mathbf{w} を推定する.
  • *固有ベクトル法でも \mathbf{w} を推定でき,整合性の程度は CI や GCI で評価する.

23.13 用語集

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

23.14 文献案内

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

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

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

23.15 練習問題

練習 23.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を用いて,相馬さんに最も適したパソコンを選定せよ.

解答 23.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]

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

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

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

解答 23.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}

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

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

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

解答 23.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])

練習 23.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を用いて重要度ベクトルを計算し,最も望ましい企業を選べ.

解答 23.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であることがわかる.