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/통계

최적의 선택을 찾아라: 마르코프 의사결정 과정 (MDP)

2025. 12. 19. 13:20

마르코프 연쇄가 "시간의 흐름에 따라 상태가 어떻게 변하는지(관찰)"에 대한 것이었다면, MDP는 여기에 '우리의 선택(Action)'과 그에 따른 '보상(Reward)'을 추가한 개념입니다.

즉, "어떤 행동을 해야 미래에 가장 큰 보상을 받을 수 있을까?"를 수학적으로 풀어내는 과정입니다.

 

1. MDP의 5가지 핵심 요소 $(S, A, P, R, \gamma)$

MDP는 다음 5가지 요소로 정의됩니다.

  1. 상태 (State, $S$): 현재의 상황. (예: 환자의 현재 건강 상태, 게임판의 위치)
  2. 행동 (Action, $A$): 에이전트가 선택할 수 있는 행동. (예: 약물 투여, 수술, 대기)
  3. 전이 확률 (Transition Probability, $P$): 행동 $a$를 했을 때, 상태가 $s \to s'$로 바뀔 확률.
    • $P^a_{ss'} = P(S_{t+1}=s' | S_t=s, A_t=a)$
    • (주의: 약을 쓴다고 100% 낫는 건 아닙니다. 확률적으로 변합니다.)
  4. 보상 (Reward, $R$): 행동의 대가로 받는 점수. (예: 완치=+100, 부작용=-10)
  5. 감가율 (Discount Factor, $\gamma$): 미래의 보상을 현재 가치로 환산하는 비율 ($0 \le \gamma \le 1$).
    • 당장 받는 100원이 1년 뒤의 100원보다 소중하듯이, 미래의 보상은 할인해서 계산합니다.

2. 반환값 (Return, $G$)

우리의 목표는 단순히 당장의 보상 하나($R_{t+1}$)를 챙기는 게 아니라, 미래에 받을 모든 보상의 합(반환값)을 최대화하는 것입니다.

$$G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1}$$
  • $\gamma$가 0에 가까우면: "오늘만 산다" (근시안적)
  • $\gamma$가 1에 가까우면: "미래를 위해 참는다" (원시안적)

3. 격자 세상 (Grid World) 예제

강의 자료에 나온 Grid World는 MDP를 이해하는 가장 고전적인 예제입니다.

시나리오

  • 목표: 출발점($S_1$)에서 시작해 함정(Trap)을 피해 목적지(Goal, +1)에 도달하기.
  • 행동: 상, 하, 좌, 우
  • 보상:
    • 목적지 도착: +1
    • 함정 빠짐: -1
    • 이동할 때마다(Step): -0.02 (빨리 가는 게 이득이라는 뜻)

4. [실습] Python 코드 (Grid World & 반환값 계산)

에이전트가 이동 경로를 선택했을 때 총 반환값($G$)이 어떻게 계산되는지 확인해 보겠습니다.

import numpy as np

# 1. 환경 설정 (Grid World)
# 0: 길, -1: 함정, 1: 목적지
# 3x3 맵 구성 (S1~S9)
grid = np.array([
    [0, 0, 0],      # S1, S2, S3
    [0, -1, -1],    # S4, S5(함정), S6(함정)
    [0, -1, 1]      # S7, S8(함정), S9(목적지)
])

# 보상 설정 (이동 비용 -0.02)
step_reward = -0.02
gamma = 0.9  # 감가율

# 2. 에이전트의 경로 시나리오 (Trajectory)
# 시나리오 A: S1 -> S2 -> S3 -> S6(함정) (실패)
path_A_rewards = [step_reward, step_reward, -1.0] 

# 시나리오 B: S1 -> S4 -> S7 -> S8(함정) (실패)
path_B_rewards = [step_reward, step_reward, -1.0]

# 시나리오 C: S1 -> S4 -> S7 (이동 후 대기?) -> S9(목적지) 
# 최적 경로 가정: S1(0,0) -> S4(1,0) -> S7(2,0) -> S8(함정 피해서 우회 필요하지만 여기선 단순화)
# 예시: S5(함정)에 빠진 경우를 계산해봅시다.
# S1 -> S2 -> S5(함정)
path_C_rewards = [step_reward, -1.0] 

# 3. 반환값(Return) 계산 함수
def calculate_return(rewards, gamma):
    G = 0
    # 역순으로 계산하면 편함: G_t = R_t+1 + gamma * G_t+1
    for r in reversed(rewards):
        G = r + gamma * G
    return G

# 4. 결과 출력
print(f"감가율(gamma): {gamma}")

# Case 1: 두 번 이동해서 함정에 빠짐 (강의 자료 예시: -0.02, -1)
# 경로: 출발 -> 이동(-0.02) -> 함정(-1)
rewards_1 = [-0.02, -1]
G_1 = calculate_return(rewards_1, gamma)
print(f"\n[Case 1] 2번 만에 함정 (보상: -0.02, -1)")
print(f"계산: -0.02 + 0.9 * (-1)")
print(f"반환값(G): {G_1:.4f}")

# Case 2: 3번 이동해서 목적지 도착 (보상: -0.02, -0.02, +1)
rewards_2 = [-0.02, -0.02, 1]
G_2 = calculate_return(rewards_2, gamma)
print(f"\n[Case 2] 3번 만에 목적지 도착 (보상: -0.02, -0.02, +1)")
print(f"계산: -0.02 + 0.9*(-0.02) + 0.9^2*(1)")
print(f"반환값(G): {G_2:.4f}")

 

[코드 실행 결과 해석]

1. Case 1 (함정에 빠짐):

  • 보상: -0.02, -1
  • 반환값: $-0.02 + 0.9 \times (-1) = \mathbf{-0.92}$
  • $\rightarrow$ 매우 나쁜 결과입니다.

2. Case 2 (목적지 도착):

  • 보상: -0.02, -0.02, +1
  • 반환값: $-0.02 + 0.9(-0.02) + 0.81(1) = -0.02 - 0.018 + 0.81 = \mathbf{0.772}$
  • $\rightarrow$ 긍정적인 반환값을 얻었습니다. 에이전트는 이 경로를 선택하도록 학습됩니다.

 분석가의 Insight

MDP는 의사가 환자를 치료하는 과정과 매우 흡사합니다.

  • 에이전트: 의사 (AI 모델)
  • 환경: 환자의 신체
  • 상태($S$): 혈압, 염증 수치, 체온 등
  • 행동($A$): 항생제 투여, 수술, 경과 관찰
  • 보상($R$):
    • 생존/퇴원: +100
    • 재입원/합병증: -50
    • 치료 비용/부작용: -1 (Step Reward)

결론:

MDP를 통해 우리는 "장기적으로 환자의 생존율을 최대화(반환값 최대화)하는 최적의 치료 순서(정책, Policy)"를 찾아낼 수 있습니다. 이것이 바로 의료 AI의 핵심 목표 중 하나인 '개인 맞춤형 정밀 의료(Precision Medicine)'의 수학적 모델입니다.

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

어려운 적분은 가라, 뽑아서 푼다! MCMC와 메트로폴리스-헤이스팅스  (0) 2025.12.19
확률은 변한다? 베이즈 통계와 켤레 사전 확률  (1) 2025.12.19
어제는 잊어라, 오직 오늘만 본다: 마르코프 연쇄 (Markov Chain)  (0) 2025.12.19
PCA와 비슷하지만 다른, 요인분석(Factor Analysis)의 모든 것  (0) 2025.12.19
PCA 활용: 복잡한 데이터를 한눈에 보는 법 (차원 축소 & 시각화)  (0) 2025.12.18
    'Study Note/통계' 카테고리의 다른 글
    • 어려운 적분은 가라, 뽑아서 푼다! MCMC와 메트로폴리스-헤이스팅스
    • 확률은 변한다? 베이즈 통계와 켤레 사전 확률
    • 어제는 잊어라, 오직 오늘만 본다: 마르코프 연쇄 (Markov Chain)
    • PCA와 비슷하지만 다른, 요인분석(Factor Analysis)의 모든 것
    RyanNerd
    RyanNerd
    라이언 덕후의 일상 스토리~

    티스토리툴바