PageRank Algorithm
λ¨Έλ¦Ώλ§
νμ΄μ§λν¬(PageRank) μκ³ λ¦¬μ¦μ ꡬκΈμ μ΄κΈ° κ²μ μμ§μ μ¬μ©λ μκ³ λ¦¬μ¦μ΄λ€. ꡬκΈμ μ°½μ μ μΈλ₯΄κ²μ΄ λΈλ¦°(Sergey Brin)κ³Ό λ리 νμ΄μ§(Larry Page)μ λ Όλ¬Έμ΄κΈ°μ ꡬκΈμ΄λ νμ¬κ° μμλλ μκ³ λ¦¬μ¦μΈ μ μ΄λ€.
νμ΄μ§λν¬ μκ³ λ¦¬μ¦μ λ Όλ¬Έμ μΈμ©(citation) λ°©μμ μΉ νμ΄μ§μ μ μ©ν μκ³ λ¦¬μ¦μΌλ‘, νΉμ νμ΄μ§κ° μΌλ§λ μ€μνμ§λ₯Ό μ μ μλ€.
PageRank Formula
PageRank μκ³ λ¦¬μ¦μ λ Όλ¬Έ "The PageRank Citation Ranking: Bringing Order to the Web"μ Reference λ¬Έλ¨
λ Όλ¬Έμμ νΌμΈμ©μκ° κ·Έ λ Όλ¬Έμ μν₯λ ₯μ΄λ€. μΉνμ΄μ§λ κ°μ λ°©μμΌλ‘ μ€μλλ₯Ό μΈ‘μ ν μ μμ§ μμκΉ? μ΄λ€ νμ΄μ§λ₯Ό μΈμ©νλ λ€λ₯Έ νμ΄μ§κ° λ§λ€λ©΄, κ·Έ νμ΄μ§λ μ€μν νμ΄μ§ μΌ κ²μ΄λ€!
κ·Έλ¬λ λνμμμ΄ κ³ μν΄μ μΆννλ λ Όλ¬Έκ³Ό λ¬λ¦¬ μΉνμ΄μ§λ μμ£Ό μ½κ² λ§λ€μ΄μ§λ€. λꡬλ μΉνμ΄μ§λ₯Ό λ§λ€ μ μκ³ , λ€λ₯Έ μΉνμ΄μ§μ λ§ν¬λ₯Ό κ±Έ μ μλ€. μ΄λ° μ΄μ λ‘ νμ΄μ§λν¬ μκ³ λ¦¬μ¦μ λ€λ₯Έ νμ΄μ§μ μ€λ λ§ν¬λ₯Ό λͺ¨λ κ°μ λΉμ€μΌλ‘ μΈλ κ²μ΄ μλλΌ ν΄λΉ νμ΄μ§μ κ±Έλ¦° λ§ν¬ μ«μλ₯Ό μ κ·ν(normalize)ν΄ μ¬μ©νλ€.
$A$ νμ΄μ§μ νμ΄μ§λν¬ $\text{PR}(A)$μ 곡μμ μ΄ν΄λ³΄μ. $T_1, T_2, β¦, T_n$μ $A$ νμ΄μ§λ₯Ό μΈμ©νλ λ€λ₯Έ νμ΄μ§λ€μ μλ―Ένλ©°, $C(T_i)$λ $T_i$ νμ΄μ§μ μ‘΄μ¬νλ λ§ν¬μ μ΄ κ°―μμ΄λ€.
\[\text{PR}(A) = \sum^N_{i=1} \frac{\text{PR}(T_i)}{C(T_i)}\]μ¦, μ΄λ€ νμ΄μ§μ νμ΄μ§λν¬λ βκ·Έ νμ΄μ§λ₯Ό μΈμ©νλ λ€λ₯Έ νμ΄μ§μ μ κ·νλ νμ΄μ§λν¬μ μ΄ν©βμ΄λ€!
μ μ κ·νλ νμ΄μ§λν¬λ₯Ό μ°λκ°?
νμ΄μ§λν¬λ μΈμ© νμ΄μ§ $T_i$μ νμ΄μ§λν¬ $\text{PR}(T_i)$λ₯Ό κ·Έλλ‘ μ°λκ² μλλΌ μ κ·νλ $\text{PR}(T_i) / C(T_i)$λ₯Ό μ¬μ©νλ€. κ·Έ μ΄μ λ₯Ό μ΄ν΄λ³΄μ.
μΈμ© νμ΄μ§μ νμ΄μ§λν¬λ₯Ό μ κ·ννμ§ μλλ€λ©΄,
λ§ν¬ μμ²κ°λ₯Ό λ¬μ νΌμΈμ© νμ΄μ§μ νμ΄μ§λν¬λ₯Ό κ³ μλ‘ λμΌ μ μλ€.
ν΄μ»€κ° νμ΄μ§λν¬ μκ³ λ¦¬μ¦μ κ΅λνκΈ° μν μμ² κ°μ μΈλΆ λ§ν¬κ° μλ λλ―Έ νμ΄μ§λ₯Ό λ§λ€μλ€κ³ μμν΄λ³΄μ. κ·Έλ λ€λ©΄ λλ―Έ νμ΄μ§κ° μΈμ©ν νμ΄μ§μ νμ΄μ§λν¬λ κ½€ λμμ§κ³ λ§ κ²μ΄λ€. μ΄λ° λλ―Έ νμ΄μ§μ ν¨κ³Όλ₯Ό μννκΈ° μν΄ μΈμ© νμ΄μ§μ μ‘΄μ¬νλ λ§ν¬ μ $C(T_i)$λ₯Ό μ¬μ©ν΄ νμ΄μ§λν¬ κ°μ μ κ·ννλ€.
μΈμ© νμ΄μ§μ νμ΄μ§λν¬λ₯Ό μ΄λ»κ² ꡬνλκ°?
κ°λ¨νλ€. νμ΄μ§λν¬μ 곡μμ μΈμ© νμ΄μ§ $T_i$μ μ μ©νλ©΄ λλ€. κ·Έλ¬λ €λ©΄ $T_i$ νμ΄μ§λ₯Ό μΈμ©νλ λ€λ₯Έ νμ΄μ§λ€μ νμ΄μ§λν¬λ₯Ό ꡬνκ³ β¦ μ΄λ κ² μ΄λ€ νμ΄μ§μ PRμ ꡬνλ €λ©΄ μΈμ© νμ΄μ§μ PRμ ꡬν΄μΌ νλ€. μ¬κ·μ μΌλ‘ λ§μ΄λ€!
def PageRank(A):
pageRank = 0
for page in A.inbounds:
link_cnt = len(page.links)
pageRank += (PageRank(page) / link_cnt)
return pageRank
PageRank()
λΌλ ν¨μλ₯Ό PageRank()
ν¨μ λ΄λΆμμ λ νΈμΆνλ μ¬κ·μ ꡬ쑰λ₯Ό κ°μ§κ³ μλ€. κ·Έλ¬λ μ¬κ· μ°μ°μ λκΉμ§ νλ λΉμ©μ΄ μκΉκΈ° λλ¬Έμ 보ν΅μ μ΄λ κΉμ΄κΉμ§ μ¬κ· μ°μ°μ ν κ²μΈμ§ μ νμ λκ³ μΈμ© νμ΄μ§μ PRμ ꡬνλ€.
Damping Factor
νμ΄μ§λν¬ μκ³ λ¦¬μ¦μ damping factor $d$λ₯Ό $[0, 1]$μ κ°μ κ°λλ€. damping factorλ₯Ό ν¬ν¨ν΄ μμ λ€μ μ¨λ³΄λ©΄ μλμ κ°λ€.
\[\text{PR}(A) = (1-d) + d \cdot \sum^N_{i=1} \frac{\text{PR}(T_i)}{C(T_i)}\]damping factor $d$μ μ κ·Ήλ¨μΈ $0$μ $1$μ μ΄ν΄λ³΄μ.
- $d=0$μ΄λΌλ©΄, λͺ¨λ νμ΄μ§μ PRμ΄ $1$μ΄ λλ€.
- $d=1$μ΄λΌλ©΄, μ¬κ·μ μΌλ‘ λμνλ PRμ κ·Έλλ μ¬μ©νλ€.
κ·Έλ°λ° μ μ΄λ° damping factor $d$λ₯Ό λμ ν κ²μΌκΉ? μΉμνμ νλλ° $p = 0.8$μ νλ₯ λ‘ λ€λ₯Έ νμ΄μ§λ‘ μ΄λνλ μ¬λμ΄ μλ€κ³ μκ°ν΄λ³΄μ. κ·Έ μ¬λμ νμ¬μ νμ΄μ§μμ λ©μΆκ±°λ μ΄λνλ€. λ§μ½ κ·Έ νλ₯ μ΄ $p = 1$μ΄λΌλ©΄, νμ΄μ§μ μ‘΄μ¬νλ λͺ¨λ νμ΄μ§λ₯Ό λμμ΄ ν΄λ¦ν΄ μΉμνμ μ΄μ΄κ°λ κ²μ΄κ³ , νλ₯ μ΄ $p = 0$μ΄λΌλ©΄ μ²μ λ°©λ¬Έν νμ΄μ§μμ 무쑰건 λ©μΆκ³ λ μ΄λνμ§ μλλ€.
damping factor $d$κ° κ³§ μμμ λ¬μ¬ν βλ€λ₯Έ νμ΄μ§λ‘ μ΄λν νλ₯ $p$βμ΄λ€. κ·Έλ¦¬κ³ PageRank $\text{PR}(A)$λ μ΄ νλ₯ μ νκ· μ λΈ κ²μ΄λ€. μ§κ·Ήν νλ₯ λ‘ μ !
μ μ μΈλ₯΄κ²μ΄μ λ§μ λ°λ₯΄λ©΄ λͺ¨λ μΉνμ΄μ§μ νμ΄μ§λν¬ κ°μ λν μ΄ν©μ $1$μ΄ λλ€κ³ νλ€.
\[\sum_A \text{PR}(A) = 1\]κ·Έλ°λ° μμ μμμμ $d=0$μΈ κ²½μ°, λͺ¨λ νμ΄μ§μ PRμ΄ $1$μ΄ λκΈ° λλ¬Έμ, μ΄ν©μ ꡬνλ©΄ $\sum \text{PR}(A) = N$μ΄ λλ€. κ·Έλμ μμμ μ½κ° μμ ν μ΅μ’ μ μΈ ννλ μλμ κ°λ€.
\[\text{PR}(A) = \frac{(1-d)}{N} + d \cdot \sum^N_{i=1} \frac{\text{PR}(T_i)}{C(T_i)}\]λ§Ίμλ§
νμ΄μ§λν¬ μκ³ λ¦¬μ¦μ ꡬκΈμ μ΅κ³ μ κ²μμμ§μ μ리μ μ¬λ €λμ μκ³ λ¦¬μ¦μ΄λ€. 1995λ λνμμμ΄λ κ·Έλ€μ΄ μΈν°λ·κ³Ό μΈμμ ν¬κ² λ°κΎΈμλ€. λλ μ΄λ€ μλΉμ€, νλ‘λμΌλ‘ μΈμμ λ°κΏ μ μμκΉ? κ·Έλ€μ μκ³ λ¦¬μ¦μ λ³Ό λλ§λ€ μλ‘μ΄ μκ·Ήμ μ£Όλ κ² κ°λ€ π