한양과학기술고등학교

에듀테크 프로젝트 대시보드

마르코프 체인

마르코프 체인 (Markov Chain)

내일 날씨를 맞히는 데 지난 한 달의 날씨 기록이 전부 필요할까? 놀랍게도 오늘 날씨 하나만 알면 충분하다고 가정하는 모델이 있다. "미래는 오직 현재 상태에만 의존하고, 과거를 거쳐 온 경로와는 무관하다" — 이 성질을 마르코프 성질(memorylessness)이라 부르고, 이런 확률 모델을 마르코프 체인이라 한다.

정의 — 상태(state)들의 집합과, 한 상태에서 다른 상태로 넘어갈 전이 확률(transition probability)이 주어진 시스템. 다음 상태는 오직 현재 상태에만 의존해서 확률적으로 결정된다.

1. 날씨로 직접 체험하기

맑음·흐림·비 세 가지 날씨가 있고, 오늘 날씨에 따라 내일 날씨가 될 확률이 다르게 정해져 있다. "한 걸음"을 누르면 흰 점이 현재 상태에서 다음 상태로 확률적으로 이동한다. 여러 번 반복하면 방문 빈도가 특정 비율로 수렴하는 것을 볼 수 있다.

현재 상태
맑음
진행한 걸음 수
0
방문 빈도 (맑음/흐림/비)
1 / 0 / 0

색 칩 하나가 하루치 날씨다 — 최근 60걸음까지만 표시된다. 걸음 수가 늘어날수록 막대 그래프의 "시뮬레이션 빈도"가 아래 표에서 계산한 이론값에 가까워진다.

2. 전이 확률 행렬

이 시스템의 규칙은 3×3 행렬 하나로 완전히 표현된다. 행(From)은 오늘 날씨, 열(To)은 내일 날씨다. 각 행의 합은 항상 1이어야 한다 — 오늘이 맑음이면 내일은 반드시 맑음·흐림·비 중 하나이기 때문이다.

From \ To맑음흐림비
맑음0.60.30.1
흐림0.30.40.3
비0.20.30.5

3. 시간이 지나면 결국 한 지점으로 — 정상분포

걸음 수를 충분히 늘리면, 시작을 맑음에서 하든 비에서 하든 상관없이 각 날씨의 방문 비율은 같은 값으로 수렴한다. 이를 정상분포(stationary distribution) π라 하고, π = πP(분포에 전이 행렬을 곱해도 그대로 유지됨)를 만족한다. 위 행렬을 직접 풀면 다음과 같다.

맑음흐림비
7/18 ≈ 38.9%6/18 ≈ 33.3%5/18 ≈ 27.8%
직관 — π = πP를 만족하는 π는 전이 행렬 P를 계속 곱해 나가는 극한과 같다. 초기 분포가 무엇이든(맑음에서 시작하든 비에서 시작하든) π P^n은 n이 커질수록 같은 π로 수렴한다 — "어제 뭐였는지"가 아니라 "이 시스템 자체의 장기적 성질"만 남는 것이다.

4. 왜 "메모리 없음"이 중요한가

만약 내일 날씨가 오늘과 어제 둘 다에 의존한다면 이는 더 이상 (1차) 마르코프 체인이 아니다. 이런 경우엔 "지난 2일"을 하나의 상태로 묶어(예: "맑음→흐림") 상태 집합을 늘리면 다시 1차 마르코프 체인으로 표현할 수 있다 — 실제로 자연어 처리에서 "직전 n개 단어"를 상태로 삼는 n-gram 모델이 정확히 이 방식이다. 즉 "메모리가 없다"는 것은 한계가 아니라, 상태를 어떻게 정의하느냐에 따라 얼마든지 과거를 상태 안에 압축해 넣을 수 있다는 뜻이다.

5. 의사코드

# 한 걸음 시뮬레이션: 현재 상태의 확률 분포에서 다음 상태를 뽑는다
def step(P, state):
    r = random()  # 0 이상 1 미만 균등난수
    cumulative = 0
    for next_state, prob in enumerate(P[state]):
        cumulative += prob
        if r < cumulative:
            return next_state

# 정상분포: 분포 벡터에 P를 계속 곱해 수렴할 때까지 반복(거듭제곱법)
def stationary_distribution(P, iterations=200):
    n = len(P)
    pi = [1/n] * n
    for _ in range(iterations):
        pi = [sum(pi[i] * P[i][j] for i in range(n)) for j in range(n)]
    return pi

6. 어디에 쓰이나

페이지랭크 — 웹 페이지를 "상태", 링크 클릭을 "전이"로 보면 사용자가 무작위로 링크를 클릭하며 웹을 떠도는 것도 거대한 마르코프 체인이다. 페이지랭크가 계산하는 중요도 점수가 바로 이 체인의 정상분포다.

텍스트 자동완성 — 직전 단어(들)를 상태로 삼아 "다음에 올 단어"의 확률을 학습하면 간단한 문장 생성기를 만들 수 있다. 스마트폰 키보드의 다음 단어 추천이 이런 원리의 연장선에 있다.

은닉 마르코프 모델(HMM) — 상태 자체는 숨겨져 있고 관측값만 보일 때, 가장 그럴듯한 상태 경로를 찾는 문제로 확장된다. 비터비 알고리즘이 바로 이 확장판을 푸는 방법이다.

MCMC 샘플링 — 정상분포가 원하는 복잡한 확률분포가 되도록 전이 규칙을 거꾸로 설계하면, 몬테카를로 방식으로 그 분포에서 표본을 뽑아낼 수 있다 (Markov Chain Monte Carlo).

한 줄 요약 — 다음에 무슨 일이 벌어질지가 현재 상태 하나에만 달려 있다고 가정하면, 아무리 복잡한 과정도 상태 개수만큼의 전이 확률표로 압축된다. 그리고 그 과정을 오래 반복하면 시작점과 무관하게 하나의 안정된 분포로 수렴한다.