RyanNerd
라덕'Story
RyanNerd
  • 분류 전체보기 (70) N
    • Study Note (35) N
      • Python (3)
      • R (1)
      • Airflow (7)
      • 통계 (22) N
      • 머신러닝 (2) N
    • 빅데이터분석기사 (1)
      • 필기 (1)
    • Programmers (28)
      • Python (13)
      • SQL (15)
    • Project (3)
      • Django (3)
    • Mac (2)

블로그 메뉴

  • NaverBlog
  • 홈

최근 글

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
RyanNerd

라덕'Story

Study Note/통계

어제는 잊어라, 오직 오늘만 본다: 마르코프 연쇄 (Markov Chain)

2025. 12. 19. 12:55

우리는 미래를 예측하고 싶어 합니다. 보통 미래를 예측하려면 과거의 모든 데이터가 필요하다고 생각하지만, 통계학에는 "바로 직전의 상태만 알면 미래를 예측할 수 있다"고 가정하는 쿨한 모델이 있습니다.

 

바로 마르코프 연쇄(Markov Chain)입니다. 오늘은 확률 과정의 기초인 마르코프 연쇄의 정의와 전이행렬, 그리고 시간이 흐른 뒤 도달하게 되는 안정 상태(Steady State)에 대해 알아보겠습니다.

 

1. 확률 과정(Stochastic Process)이란?

시간이 지남에 따라 변하는 확률 변수들의 집합입니다.

쉽게 말해, "시간의 흐름에 따라 상태가 확률적으로 변하는 과정"을 기록한 것입니다.

$$X_0, X_1, X_2, \dots, X_t$$
  • 예시: 매일 변하는 주가, 매시간 변하는 환자의 바이탈 사인, 매달 변하는 병상 가동률 등.

2. 마르코프 연쇄의 핵심: "기억 상실성"

마르코프 연쇄는 이산적인 시간(Discrete Time)에서의 확률 과정입니다. 가장 중요한 특징은 마르코프 성질(Markov Property)입니다.

 

"미래의 상태($X_{t+1}$)는 오직 현재의 상태($X_t$)에 의해서만 결정된다."

 

수식으로 표현하면 다음과 같습니다.

$$P(X_{t+1} | X_t, X_{t-1}, \dots, X_0) = P(X_{t+1} | X_t)$$

즉, 과거의 구구절절한 역사($X_0 \dots X_{t-1}$)는 필요 없고, 지금 현재($X_t$)가 무엇이냐가 다음 스텝을 결정한다는 뜻입니다.

 

3. 전이행렬 (Transition Matrix)

상태와 상태 사이를 이동할 확률을 행렬로 정리한 것입니다.

시나리오 (주가 예측)

  • 오늘 주가가 상승(Up)했다면, 내일도 상승할 확률 95%, 하락할 확률 5%.
  • 오늘 주가가 하락(Down)했다면, 내일 상승할 확률 20%, 하락할 확률 80%.

이를 행렬 $T$로 나타내면:

$$T = \begin{pmatrix} 0.95 & 0.05 \\ 0.20 & 0.80 \end{pmatrix}$$

(행: 현재 상태 / 열: 미래 상태)

  • 특징: 각 행(Row)의 합은 반드시 1이어야 합니다. (확률의 총합은 1이니까요)

4. 미래 예측과 안정 상태 (Steady State)

1) $n$일 뒤의 상태 예측

현재 상태 행렬을 $x_t$라고 할 때, 다음 날의 상태는 행렬 곱으로 계산됩니다.

$$x_{t+1} = x_t T$$
$$x_{t+2} = x_{t+1} T = x_t T^2$$

2) 안정 상태 (Steady State)

재미있는 점은, 이 전이행렬 $T$를 계속해서 곱하다 보면($T^n, n \to \infty$), 어느 순간 확률이 더 이상 변하지 않고 고정되는 상태가 옵니다.

이를 안정 상태(Steady State)라고 합니다. 초기 상태가 무엇이었든, 결국 시스템은 이 균형점으로 수렴하게 됩니다.

 

5. [실습] Python & R 코드 구현

주가 예시를 코드로 구현하여, 시간이 지남에 따라 확률이 어떻게 변하고 안정 상태에 도달하는지 확인해 보겠습니다.

R Code

# 1. 전이행렬 정의
# R에서는 matrix를 열(column) 우선으로 채우므로 byrow=TRUE 옵션 필요
T <- matrix(c(0.95, 0.05, 
              0.20, 0.80), 
            nrow = 2, byrow = TRUE)

# 2. 초기 상태 정의 (상승: 1, 0)
current_state <- c(1, 0)

cat("초기 상태:", current_state, "\n")

# 3. 시간 경과에 따른 변화
# %*% 는 행렬 곱셈 연산자입니다.
for (day in 1:20) {
  current_state <- current_state %*% T
  cat(sprintf("Day %d: 상승=%.4f, 하락=%.4f\n", day, current_state[1], current_state[2]))
}

# 4. 안정 상태 확인 (라이브러리 없이 거듭제곱 함수 구현)
matrix_power <- function(mat, n) {
  res <- mat
  for (i in 1:(n-1)) res <- res %*% mat
  return(res)
}

steady_matrix <- matrix_power(T, 100)
cat("\n=== 안정 상태 행렬 (T^100) ===\n")
print(steady_matrix)

Python Code (numpy)

import numpy as np
import pandas as pd

# 1. 전이행렬 정의 (Transition Matrix)
# 행: 현재 [상승, 하락], 열: 미래 [상승, 하락]
T = np.array([[0.95, 0.05], 
              [0.20, 0.80]])

# 2. 초기 상태 정의 (오늘 주가가 '상승'했다고 가정: [1, 0])
current_state = np.array([1, 0])

print(f"초기 상태 (Day 0): {current_state}")

# 3. 시간 경과에 따른 변화 (100일 동안 시뮬레이션)
# 안정 상태를 찾기 위해 반복문을 돌립니다.
history = []
for day in range(1, 21): # 20일만 봐도 충분히 수렴함
    current_state = np.dot(current_state, T)
    history.append(current_state)
    print(f"Day {day}: 상승확률={current_state[0]:.4f}, 하락확률={current_state[1]:.4f}")

# 4. 안정 상태 확인 (행렬의 거듭제곱)
# T를 아주 많이 곱하면(예: 100승) 모든 행이 안정 상태 확률로 같아집니다.
steady_matrix = np.linalg.matrix_power(T, 100)
print("\n=== 안정 상태 행렬 (T^100) ===")
print(steady_matrix)

 

[결과 해석] 시뮬레이션이 보여주는 마르코프 연쇄의 핵심: "안정 상태(Steady State)"

위 코드를 실행한 결과는 마르코프 연쇄의 가장 중요한 성질인 수렴성을 명확하게 보여줍니다.

1. 시간이 지날수록 확률은 특정 값으로 수렴한다.

  • Day 0: 상승 확률 100% (초기 상태)에서 시작했습니다.
  • Day 1~19: 시간이 지날수록 상승 확률은 점점 줄어들고(0.95 → 0.80), 하락 확률은 늘어납니다(0.05 → 0.20).
  • Day 20: 상승 확률이 약 80.06%에 도달하며 더 이상 크게 변하지 않는 모습을 보입니다.

2. 초기 상태는 잊혀진다 (Memoryless).

  • T^100 (100일 후의 전이행렬) 결과를 보면, 두 행이 모두 [0.8, 0.2]로 동일합니다.
  • 이는 오늘 주가가 올랐든(첫 번째 행), 내렸든(두 번째 행) 상관없이, 먼 미래의 주가가 상승할 확률은 80%, 하락할 확률은 20%로 고정된다는 것을 의미합니다.

결론 (Analyst's Note): 마르코프 연쇄 모델에서 시스템은 시간이 흐름에 따라 초기 상태의 영향력에서 벗어나 고유한 균형점(안정 상태, Steady State)에 도달하게 됩니다.

이를 의료 데이터에 적용한다면, "현재 특정 병동에 입원한 환자가 장기적으로 퇴원할 확률과 사망할 확률은 결국 어디로 수렴하는가?"를 예측하여 병원의 장기적인 자원 계획을 수립하는 데 활용할 수 있습니다.

 

의료 데이터 분석가의 Insight: 어디에 쓸까?

이 마르코프 연쇄는 주식뿐만 아니라 환자 경로(Patient Pathway) 분석에 강력합니다.

  • 상태 정의: $S_1$(일반 병동), $S_2$(중환자실), $S_3$(퇴원), $S_4$(사망)
  • 전이 행렬: 병원 데이터를 통해 오늘 일반 병동에 있던 환자가 내일 중환자실로 갈 확률, 퇴원할 확률 등을 계산합니다.
  • 활용:
    1. 병상 가동률 예측: 안정 상태를 계산하여 우리 병원의 병상이 장기적으로 얼마나 찰지 예측 가능.
    2. 재원 일수 예측: 퇴원($S_3$) 상태에 도달할 때까지 평균 몇 스텝(일)이 걸리는지 계산.

간단한 원리지만, 복잡한 현실을 모델링하는 강력한 도구입니다!

 

'Study Note > 통계' 카테고리의 다른 글

확률은 변한다? 베이즈 통계와 켤레 사전 확률  (1) 2025.12.19
최적의 선택을 찾아라: 마르코프 의사결정 과정 (MDP)  (0) 2025.12.19
PCA와 비슷하지만 다른, 요인분석(Factor Analysis)의 모든 것  (0) 2025.12.19
PCA 활용: 복잡한 데이터를 한눈에 보는 법 (차원 축소 & 시각화)  (0) 2025.12.18
차원 축소의 핵심, 주성분분석(PCA) 완벽 가이드  (0) 2025.12.18
    'Study Note/통계' 카테고리의 다른 글
    • 확률은 변한다? 베이즈 통계와 켤레 사전 확률
    • 최적의 선택을 찾아라: 마르코프 의사결정 과정 (MDP)
    • PCA와 비슷하지만 다른, 요인분석(Factor Analysis)의 모든 것
    • PCA 활용: 복잡한 데이터를 한눈에 보는 법 (차원 축소 & 시각화)
    RyanNerd
    RyanNerd
    라이언 덕후의 일상 스토리~

    티스토리툴바