마르코프 연쇄로 상태 전이와 흡수 과정을 분석하는 방법

DTMC와 CTMC의 전이행렬·생성자행렬, 흡수상태 해석을 통해 확률적 상태 전이를 모델링하는 방법을 정리한다.

2026-08-14 · 최초 발행 2024-04-29

현재 상태에서 다음 상태를 읽는 확률 모형

마르코프 연쇄는 시간에 따라 바뀌는 상태열 또는 상태함수를 확률적으로 표현하는 스토캐스틱 프로세스다. 현재 상태가 미래를 결정하는 충분통계 역할을 한다는 마르코프 성질을 만족하면 Markov Process로 분류한다.

실무에서는 고객 여정, 신용등급 변화, 장애 처리처럼 상태와 전이 기록이 남는 흐름을 구조화하는 데 쓴다. 상태를 정의하고 전이를 추정한 뒤, 흡수상태에 도달할 확률과 그때까지 걸리는 시간 또는 스텝을 해석하는 방식이다.

시간 축에 따라 달라지는 DTMC와 CTMC

이산시간 마르코프 연쇄(DTMC)는 일정한 시간 간격마다 상태가 바뀌는 모형이다. 전이행렬 (P)의 i행 j열 원소 (p_{ij})는 한 스텝에서의 전이확률을 뜻한다. 시간균질성을 가정하면 Chapman–Kolmogorov 방정식 (P^{(n+m)} = P^n P^m)가 성립한다.

연속시간 마르코프 연쇄(CTMC)는 연속된 시간축에서 포아송성 점프를 갖는 모형이다. 생성자행렬 (Q)의 i행 j열 원소 (q_{ij})는 단위시간 전이율이며, 대각성분은 (q_{ii} = -\sum_{j≠i} q_{ij}) 조건을 만족한다. 시간 (t)에서의 전이확률행렬은 (P(t) = \exp(tQ))로 정의한다.

항목 DTMC CTMC
성능(계산) 희소 P로 고속 거듭제곱 계산 용이 expm/균등화 필요, 대규모 시 근사기법 요구
확장성 상태 수 10^5 수준까지 가능(희소 연산 전제) 동일 규모 가능하나 시간해석 비용 증가
일관성 고정 간격 데이터에 적합 이벤트 구동, 불규칙 간격 데이터에 적합
안정성 스텝 크기 선택 불필요 수치안정성은 균등화 파라미터에 민감
운영 편의 카운트 기반 단순 추정 체류시간 추정과 검열 처리 필요

흡수상태에서 얻는 확률과 기대시간

흡수상태는 한 번 진입하면 이탈하지 않는 상태다. 구매와 이탈, 부도와 상환 완료, 복구와 교체처럼 프로세스의 종료 지점을 표현할 때 유용하다.

DTMC에서는 전이행렬을 (P = [Q\ R; 0\ I]) 형태로 분할한다. 여기서 (Q)는 일시상태 전이블록, (R)은 흡수상태로 향하는 전이블록, (I)는 흡수블록이다. 기저행렬 (N = (I-Q)^{-1})를 이용하면 기대 방문횟수와 함께 흡수확률 (B = NR), 기대흡수스텝 (t = N1)을 구할 수 있다.

CTMC도 생성자행렬을 (Q = [T\ R; 0\ 0])으로 나눈다. (T)는 일시상태 블록이며, 흡수확률은 (B = (-T)^{-1}R), 기대흡수시간은 (\tau = (-T)^{-1}1)로 계산한다.

비흡수·비주기적·강연결 조건에서는 유일한 정상분포 (\pi)가 존재한다. DTMC는 (\pi P = \pi), CTMC는 (\pi Q = 0)을 만족하며, 장기 점유율과 평균 체류 비율을 평가하는 기준이 된다.

로그에서 분석 결과까지 이어지는 흐름

분석의 입력은 상태공간 정의와 이벤트 로그, 세션 데이터, 장애 티켓 같은 원천데이터다. 시간 스탬프, 상태 라벨, 전이 이벤트, 체류시간을 함께 확보해야 한다.

처리 과정에서는 상태를 추출하고 라벨링한 뒤 희귀상태를 병합하며 흡수 후보를 지정한다. 전이 카운트 또는 체류시간으로 (P)나 (Q)를 추정하고, 스무딩과 정규화를 적용한다. 이어 블록 분할로 (Q, R) 또는 (T, R)을 구성하고 (N) 또는 ((-T)^{-1})를 계산한다. 이 단계에서 흡수확률 (B), 기대흡수스텝 또는 시간, 정상분포, 최초도달시간 분포 근사를 산출한다.

결과물은 전이맵, 흡수경로별 전환확률, SLA 위반까지의 기대시간, 민감도 분석과 비정상 루프·병목 상태 탐지 리포트가 된다.

비가역 상태가 나타나면 상태 병합 또는 정칙화를 검토한다. ((I-Q))나 ((-T))의 반전이 특이행렬로 실패할 때는 작은 (\epsilon I)를 추가하거나 SVD 기반 의사역행렬을 적용한다. 데이터 검열이나 누락은 생존분석 보정 대상이다.

서로 다른 운영 데이터를 읽는 방식

고객 퍼널에서는 방문→회원가입→장바구니→구매를 상태로 두고 구매와 이탈을 흡수상태로 둔다. 채널별 구매 흡수확률, 기대 스텝, 병목 상태를 산출할 수 있으며, UI 단계 병합과 전이 스무딩, A/B 조건별 (P) 비교가 뒤따른다.

신용 리스크는 정상→연체→부도 상태를 두고 부도와 상환 완료를 흡수상태로 볼 수 있다. 12개월 부도 확률과 기대 부도까지 시간을 구하며, 체류시간을 반영하는 CTMC와 포트폴리오 스트레스 시나리오를 활용한다.

인프라 장애 수명주기에서는 정상→경고→부분장애→완전장애를 상태로, 복구와 교체를 흡수상태로 둔다. 티켓 로그에서 (Q)를 추정하고 균등화 기반 (P(t))로 예측해 SLA 위반까지 기대시간과 경고 상태의 개입 우선순위를 판단한다.

행렬 조건을 직접 확인하는 코드

전제조건은 Python 3.10+, numpy >= 1.24, scipy >= 1.10이며, 상태 인덱스는 일시상태 0..t-1, 흡수상태 t..n-1로 둔다.

DTMC에서 흡수확률과 기대흡수스텝을 계산하는 예시는 다음과 같다.

import numpy as np

# 전이행렬 P 구성 예시 (일시상태 0,1; 흡수상태 2,3)
P = np.array([
    [0.6, 0.2, 0.2, 0.0],
    [0.1, 0.6, 0.2, 0.1],
    [0.0, 0.0, 1.0, 0.0],  # absorbing
    [0.0, 0.0, 0.0, 1.0],  # absorbing
], dtype=float)

t = 2  # transient count
Q = P[:t, :t]
R = P[:t, t:]

I = np.eye(t)
# 수치 안정화(필요 시): I - Q + 1e-12 * I
N = np.linalg.inv(I - Q)
B = N @ R                 # 흡수확률 행렬 (일시상태 x 흡수상태)
expected_steps = N @ np.ones((t, 1))  # 기대 흡수 스텝

print("Absorption probabilities:\n", B)
print("Expected steps to absorption:\n", expected_steps)

CTMC에서는 생성자행렬의 일시상태 블록을 분리해 흡수확률과 기대흡수시간을 구한다.

import numpy as np
from scipy.linalg import expm

# 생성자행렬 Q (일시상태 0,1; 흡수상태 2,3). 각 행합 0 조건
Q = np.array([
    [-1.0,  0.6, 0.4, 0.0],
    [ 0.2, -0.8, 0.5, 0.1],
    [ 0.0,  0.0, 0.0, 0.0],  # absorbing
    [ 0.0,  0.0, 0.0, 0.0],  # absorbing
], dtype=float)

t = 2
T = Q[:t, :t]
R = Q[:t, t:]

# (−T)^{-1} 기반 해석
Minv = np.linalg.inv(-T)
B = Minv @ R                    # 흡수확률(일시 x 흡수)
expected_time = Minv @ np.ones((t, 1))  # 기대 흡수 시간

# 특정 시간 t0의 전이확률행렬도 계산 가능
t0 = 3.0
P_t0 = expm(Q * t0)

print("Absorption probabilities:\n", B)
print("Expected time to absorption:\n", expected_time)
print("P(t0):\n", P_t0)

계산 전에 DTMC는 각 행의 합이 1인지, 고립상태가 없는지 확인한다. CTMC는 각 행합이 0이고 대각성분은 음수, 비대각성분은 비음수인지 검증한다. 흡수행은 DTMC에서 단위벡터, CTMC에서 영벡터 행으로 구성한다.

상태 전이와 흡수 경로

0.6 / λ=0.60.4 / λ=0.40.5 / λ=0.50.1 / λ=0.10.0S0S1A1: AbsorbingA2: Absorbing

라벨에는 DTMC 전이확률과 CTMC 전이율을 함께 표시했다. A1과 A2는 유출 간선이 없는 흡수상태다.

상태 설계와 계산 안정성을 함께 관리하기

상태공간은 관측 가능하고 상호배타적이며 집합적으로 완비해야 한다. 희귀상태를 병합하면 분산을 줄일 수 있고, 흡수상태를 명시하면 프로세스의 종료 해석이 선명해진다.

DTMC는 라플라스 스무딩(α≈1e−2~1e−1)으로 zero-prob를 피한다. CTMC는 체류시간 검열 보정과 최대우도 추정이 필요하며, 비정상적인 음수 전이율을 막는 제약을 적용한다. DTMC는 상태전이 카운트의 다항/베타-다항 추정을, CTMC는 체류시간의 지수 분포 기반 최대우도 추정을 사용한다. 적합도 검정과 교차검증은 과적합을 막는 절차다.

대규모 희소행렬에서는 Krylov와 Uniformization을 사용하고 expm의 직접계산을 피한다. 목표 시간대의 (P(t))만 선택해 계산하며, ((I-Q)), ((-T))의 조건수를 모니터링하고 정칙화를 적용한다. expm, Krylov 서브스페이스, Uniformization으로 (P(t))를 근사할 수 있고, 몬테카를로 시뮬레이션은 KPI 신뢰구간 산출에 쓸 수 있다.

out-of-time 샘플로 검증하고 장기 점유율이 관측 빈도와 맞는지 점검한다. 정책 변경의 영향은 민감도 분석으로 평가한다.

전이 구조가 만드는 운영상의 변화

퍼널 최적화에서는 구매 흡수확률 +25%p 개선 가능성이 제시된다. 장애 예측에서는 사전 개입 기준으로 SLA 위반 기대시간 +1020% 연장이 가능하며, 신용 포트폴리오 부도예측에서는 Brier score 5~10% 상대 개선 가능성이 있다. 조직과 데이터 조건에 따른 변동성은 존재한다.

상태 기반으로 흐름을 해석하면 개입 우선순위가 분명해지고 설명가능성이 높아진다. 시스템의 병목과 루프를 찾아 운영 리스크를 낮추는 데도 활용할 수 있다.

마르코프 연쇄확률 과정전이행렬흡수상태CTMC