PageRankの数学(固有値問題としてのウェブ検索)
リンク構造を確率行列とみなし、繰り返し掛け算するだけでページの重要度が浮かび上がる仕組み
- 1
- PageRankは、ウェブページ間のリンク構造を「遷移確率行列」とみなし、ランダムにリンクをたどり続けるユーザーが各ページに滞在する確率をページの重要度スコアとする
- 2
- 遷移行列を初期のランクベクトルに繰り返し掛け続ける「べき乗法(power iteration)」を行うと、ベクトルは行列の最大固有値(=1)に対応する固有ベクトル(定常分布)へ収束していく
- 3
- リンクを多く集めたページほど、また重要なページからリンクされたページほど高いランクを得る、という再帰的な定義が固有値問題として厳密に解ける
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
PageRankは、ウェブページ間のリンク構造を「遷移確率行列」とみなし、ランダムにリンクをたどり続けるユーザーが各ページに滞在する確率をページの重要度スコアとする
身につく武器・思考力
遷移行列を初期のランクベクトルに繰り返し掛け続ける「べき乗法(power iteration)」を行うと、ベクトルは行列の最大固有値(=1)に対応する固有ベクトル(定常分布)へ収束していく
実社会・ITでの活躍現場
- •検索エンジンにおけるPageRankのべき乗法(Power Iteration)実装
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
5つのウェブページ(ノード)とそれらを結ぶリンク(矢印)から成る小さなネットワークが表示されている。各ページのランクは最初すべて均等(0.2)から始まる。「1ステップ反復」ボタンを押すたびに遷移行列がランクベクトルに掛けられ、下の棒グラフが変化していく。「収束するまで実行」ボタンで、ランクが安定するまで自動的に反復計算が繰り返される様子を観察しよう。
↑ 遷移行列 M をランクベクトルに繰り返し掛ける「べき乗法」により、ベクトルは M の最大固有値(=1)に対応する固有ベクトル(定常分布)へ収束します。多くのページからリンクされ、かつリンク元も重要なページ(C)のランクが高くなる様子が確認できます。
べき乗法によってPageRankベクトルを繰り返し計算していくと、最終的にベクトルはどうなるか?
Layer 2 — 定義・受験・証明
定義
個のページから成るウェブを考える。ページ から出ているリンクの数を とし、ページ から へのリンクが存在するとき遷移確率を とする「遷移行列(列確率行列)」 を定義する。ダンピングファクター (通常 )を用いたPageRankは、次の連立方程式(固有値問題)の解として定義される。
ここで は各ページのランクを成分に持つベクトルであり、 を満たす確率分布である。ダンピング項がない単純な形では、この式は「」、すなわち が行列 の固有値 に対応する固有ベクトルであることを意味する。
公式・数理モデル
証明・導出
べき乗法(power iteration)が固有ベクトルへ収束することの証明: を対角化可能な 行列とし、固有値を大きさの順に 、対応する固有ベクトルを とする(ペロン・フロベニウスの定理より、列和が1の非負行列 の最大固有値は である)。 初期ベクトル を固有ベクトルの線形結合として と表すと( と仮定)、
両辺を で割ると、
であるため、 のとき第2項以降はすべて に収束し、 となる。すなわちべき乗法の反復は最大固有値に対応する固有ベクトル(定常分布)へ指数関数的に収束する。ダンピングファクター を導入すると が既約かつ非周期的になり、収束がさらに保証される。
押さえておきたいポイント
- PageRankの本質は「重要なページからリンクされたページは重要」という再帰的な定義を、固有値問題として厳密に解く点にある
- ダンピングファクター (Googleの原論文では0.85)は、ランダムサーファーが一定確率でリンクをたどらず全く別のページへ「テレポート」する挙動をモデル化し、行き止まりページ(out-linkが無いページ)での収束の不安定性を解消する
- 収束速度は固有値の比 に依存し、この比が小さいほど少ない反復回数で収束する
- 同様の「べき乗法による固有ベクトル収束」の考え方は、推薦システムの行列分解や画像圧縮の特異値分解(SVD)にも応用されている
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
検索エンジンにおけるPageRankのべき乗法(Power Iteration)実装
小さなウェブリンクグラフから遷移確率行列を構築し、ダンピングファクターを考慮したべき乗法でPageRankベクトルが収束するまで反復計算する、Googleの検索エンジンの基礎アルゴリズムを模したTypeScript実装。
1// リンクグラフ: キーがページ、値がリンク先ページの配列2const links: Record<string, string[]> = {3 A: ["B", "C"],4 B: ["C"],5 C: ["A"],6 D: ["C"],7};89const pages = Object.keys(links);10const N = pages.length;11const damping = 0.85;1213// 遷移行列 M を構築(列 j から行 i への確率 = 1 / L(j))14function buildTransitionMatrix(): number[][] {15 const M: number[][] = Array.from({ length: N }, () => new Array(N).fill(0));16 pages.forEach((page, j) => {17 const outLinks = links[page];18 if (outLinks.length === 0) return;19 outLinks.forEach((target) => {20 const i = pages.indexOf(target);21 M[i][j] = 1 / outLinks.length;22 });23 });24 return M;25}2627// べき乗法によるPageRank計算28function computePageRank(iterations = 50): number[] {29 const M = buildTransitionMatrix();30 let rank = new Array(N).fill(1 / N); // 初期値: 均等な確率分布3132 for (let t = 0; t < iterations; t++) {33 const next = new Array(N).fill((1 - damping) / N);34 for (let i = 0; i < N; i++) {35 for (let j = 0; j < N; j++) {36 next[i] += damping * M[i][j] * rank[j];37 }38 }39 rank = next;40 }41 return rank;42}4344const ranks = computePageRank();45pages.forEach((page, i) => console.log(`${page}: ${ranks[i].toFixed(4)}`));46// 出力例: C が最も多くリンクを集め、最上位のランクに収束する
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元