에듀테크 프로젝트 대시보드
마르코프 체인
내일 날씨를 맞히는 데 지난 한 달의 날씨 기록이 전부 필요할까? 놀랍게도 오늘 날씨 하나만 알면 충분하다고 가정하는 모델이 있다. "미래는 오직 현재 상태에만 의존하고, 과거를 거쳐 온 경로와는 무관하다" — 이 성질을 마르코프 성질(memorylessness)이라 부르고, 이런 확률 모델을 마르코프 체인이라 한다.
맑음·흐림·비 세 가지 날씨가 있고, 오늘 날씨에 따라 내일 날씨가 될 확률이 다르게 정해져 있다. "한 걸음"을 누르면 흰 점이 현재 상태에서 다음 상태로 확률적으로 이동한다. 여러 번 반복하면 방문 빈도가 특정 비율로 수렴하는 것을 볼 수 있다.
색 칩 하나가 하루치 날씨다 — 최근 60걸음까지만 표시된다. 걸음 수가 늘어날수록 막대 그래프의 "시뮬레이션 빈도"가 아래 표에서 계산한 이론값에 가까워진다.
이 시스템의 규칙은 3×3 행렬 하나로 완전히 표현된다. 행(From)은 오늘 날씨, 열(To)은 내일 날씨다. 각 행의 합은 항상 1이어야 한다 — 오늘이 맑음이면 내일은 반드시 맑음·흐림·비 중 하나이기 때문이다.
| From \ To | 맑음 | 흐림 | 비 |
|---|---|---|---|
| 맑음 | 0.6 | 0.3 | 0.1 |
| 흐림 | 0.3 | 0.4 | 0.3 |
| 비 | 0.2 | 0.3 | 0.5 |
걸음 수를 충분히 늘리면, 시작을 맑음에서 하든 비에서 하든 상관없이 각 날씨의 방문 비율은 같은 값으로 수렴한다. 이를 정상분포(stationary distribution) π라 하고, π = πP(분포에 전이 행렬을 곱해도 그대로 유지됨)를 만족한다. 위 행렬을 직접 풀면 다음과 같다.
| 맑음 | 흐림 | 비 |
|---|---|---|
| 7/18 ≈ 38.9% | 6/18 ≈ 33.3% | 5/18 ≈ 27.8% |
π = πP를 만족하는 π는 전이 행렬 P를 계속 곱해 나가는 극한과 같다. 초기 분포가 무엇이든(맑음에서 시작하든 비에서 시작하든) π P^n은 n이 커질수록 같은 π로 수렴한다 — "어제 뭐였는지"가 아니라 "이 시스템 자체의 장기적 성질"만 남는 것이다.
만약 내일 날씨가 오늘과 어제 둘 다에 의존한다면 이는 더 이상 (1차) 마르코프 체인이 아니다. 이런 경우엔 "지난 2일"을 하나의 상태로 묶어(예: "맑음→흐림") 상태 집합을 늘리면 다시 1차 마르코프 체인으로 표현할 수 있다 — 실제로 자연어 처리에서 "직전 n개 단어"를 상태로 삼는 n-gram 모델이 정확히 이 방식이다. 즉 "메모리가 없다"는 것은 한계가 아니라, 상태를 어떻게 정의하느냐에 따라 얼마든지 과거를 상태 안에 압축해 넣을 수 있다는 뜻이다.
# 한 걸음 시뮬레이션: 현재 상태의 확률 분포에서 다음 상태를 뽑는다 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
페이지랭크 — 웹 페이지를 "상태", 링크 클릭을 "전이"로 보면 사용자가 무작위로 링크를 클릭하며 웹을 떠도는 것도 거대한 마르코프 체인이다. 페이지랭크가 계산하는 중요도 점수가 바로 이 체인의 정상분포다.
텍스트 자동완성 — 직전 단어(들)를 상태로 삼아 "다음에 올 단어"의 확률을 학습하면 간단한 문장 생성기를 만들 수 있다. 스마트폰 키보드의 다음 단어 추천이 이런 원리의 연장선에 있다.
은닉 마르코프 모델(HMM) — 상태 자체는 숨겨져 있고 관측값만 보일 때, 가장 그럴듯한 상태 경로를 찾는 문제로 확장된다. 비터비 알고리즘이 바로 이 확장판을 푸는 방법이다.
MCMC 샘플링 — 정상분포가 원하는 복잡한 확률분포가 되도록 전이 규칙을 거꾸로 설계하면, 몬테카를로 방식으로 그 분포에서 표본을 뽑아낼 수 있다 (Markov Chain Monte Carlo).