AI 장기 실패율이 20%라면 다음도 20%일까: 정상분포와 현재 상태

AI Agent Fast Learning · 전이 모형 읽기

장기 실패 비중이 20%인 모형에서도, 방금 실패한 뒤 다음 요청의 실패확률은 60%일 수 있다. 장기 비중은 특정 시점의 상태를 알았을 때의 다음 결과와 다르다. 정상분포를 구했다고 장애가 곧 회복되거나 재시도가 안전하다는 뜻도 아니다.

앞선 글에서는 합성 배열에서 이웃한 결과의 전이 횟수를 셌다. 이번에는 한 걸음 더 나아가, 전이확률을 가정했을 때 여러 단계 뒤의 분포를 계산한다. 아래 숫자는 실제 AI 로그에서 추정한 값이 아니라 설명을 위해 정한 가상 모형이다. 분수와 가중평균을 알면 계산을 따라갈 수 있다.

가상 모형에서 현재 실패로 출발하면 1단계 뒤 실패 확률 60%, 2단계 40%, 5단계 22.5%, 장기 극한 20%다. 실제 AI 예측 검증이 아니다.
고정 전이확률을 가정한 계산. 현재 상태의 다음 결과와 장기 분포를 구분한다.

먼저 확률표의 조건부터 고정한다

S는 검증된 성공, F는 종료 실패라고 하자. 한 단계는 순서대로 실행한 사용자 요청 한 건이다. F에서 S로 옮겨간다는 말은 다음 요청이 성공했다는 뜻이지, 앞선 실패 요청을 복구했다는 뜻이 아니다. 진행 중·미확인 결과는 이 두 상태에 포함하지 않는다.

현재 상태다음 S다음 F
S90%10%
F40%60%
가상 전이확률. 각 행의 합은 100%이며 실제 서비스 측정값이 아니다.

이 계산에서는 현재 S·F를 알고 나면 그보다 오래된 이력이 다음 결과에 추가 정보를 주지 않는다고 가정한다. 또한 같은 전이확률표가 모든 단계에 적용된다고 가정한다. 전자가 마르코프 성질, 후자가 시간에 따라 전이확률이 바뀌지 않는 조건이다. 실제 AI의 작업 난이도·모델 버전·부하가 바뀌면 둘 다 성립하지 않을 수 있다.

다음 요청과 두 단계 뒤를 직접 계산하기

현재 F라면 바로 다음 F 확률은 표에서 60%다. 두 단계 뒤 F가 되는 길은 F→S→F와 F→F→F 두 가지다. 각각 0.4×0.1과 0.6×0.6이므로 합은 0.40, 즉 40%다. 이는 두 번 모두 실패할 확률 36%와도 다르다. 두 단계 뒤 F인 사건에는 중간에 성공한 경로도 포함된다.

n단계 뒤 F일 확률을 q라고 쓰면 다음 단계는 0.1 × (1 − q) + 0.6 × q = 0.1 + 0.5 × q다. 현재 F에서 시작하면 q는 1이다. 이 식을 반복하면 60%, 40%, 30%, 25%, 22.5%가 된다. 단계 수는 요청 수이며 초나 분으로 바꾸지 않는다.

현재 상태/시점F일 확률무엇을 뜻하는가
현재 F100%출발 상태를 알고 있다
1단계 뒤60%바로 다음 요청의 결과
2단계 뒤40%중간 경로를 합친 두 번째 결과
5단계 뒤22.5%다섯 번째 결과
단계 수가 커질 때20%로 수렴이 가상 모형의 분포 극한
모두 동일한 가상 모형의 계산값이며 실제 예측 정확도를 측정한 표가 아니다.

정상분포는 움직임이 멈춘 상태가 아니다

정상분포는 한 번 전이시켜도 그대로 유지되는 상태들의 확률분포다. F 비중을 q라고 하면 S에서 F로 들어오는 양은 0.1×(1−q), F에서 S로 나가는 양은 0.4×q다. 둘을 같게 놓으면 q=0.2다. 따라서 S 80%·F 20%의 분포가 유지된다. 각각의 실행 결과가 바뀌지 않는다는 뜻은 아니다.

이 예제에서는 S에서 시작해도 F에서 시작해도 단계가 늘수록 F 확률이 20%로 간다. 두 상태 사이를 오갈 수 있고 각 상태에 머무를 확률도 있어, 유한·기약·비주기 마르코프 연쇄의 수렴 조건을 만족한다. 기약은 모든 상태 사이에 갈 수 있음을, 비주기는 정해진 주기에만 갇혀 돌아오지 않음을 뜻한다.

단, 5단계 뒤 22.5%를 곧바로 “충분히 20%에 가까워졌다”고 판정하지 않는다. 허용 오차와 판단 목적이 먼저 필요하다. 여기서 계산한 것은 각 단계의 F 확률이지, 앞으로 5건 중 실패할 개수의 전체 분포나 연속 장애 길이가 아니다.

정상분포가 있다고 항상 그쪽으로 수렴하지는 않는다

반례로 S 다음에는 반드시 F, F 다음에는 반드시 S가 되는 모형을 생각하자. S·F 각각 50%는 정상분포다. 그러나 현재 F에서 시작하면 다음 F 확률은 0%, 그다음은 100%로 계속 번갈아 간다. 특정 출발 상태에서의 분포가 50%로 수렴하지 않는다. 정상분포의 존재와 분포 수렴은 다른 질문이다.

또 S는 계속 S, F는 계속 F인 모형에서는 모든 출발 분포가 그대로 유지된다. 정상분포가 하나로 정해지지 않는다. 표의 행 합이 1이라는 확인만으로 “장기 실패율 하나”를 제시할 수 없는 이유다.

복사해서 실행하는 두 상태 계산

아래 코드를 markov.py로 저장하고 python markov.py로 실행한다. 상태 순서는 항상 S, F다. 분수로 계산하므로 예제의 소수 반올림 누적을 피한다. 입력은 길이 2인 확률분포와 2×2 확률표이며, 이 예제처럼 Fraction 값으로 전달한다. 파일·네트워크·유료 API를 호출하지 않는다.

from fractions import Fraction as Q

# State order: S (success), F (terminal failure).
P = ((Q(9, 10), Q(1, 10)), (Q(2, 5), Q(3, 5)))

def step(v, p):
    if len(v) != 2 or len(p) != 2 or any(len(r) != 2 for r in p):
        raise ValueError('Expected two states')
    if any(x < 0 for x in v) or sum(v) != 1:
        raise ValueError('Invalid initial distribution')
    if any(any(x < 0 for x in r) or sum(r) != 1 for r in p):
        raise ValueError('Invalid transition matrix')
    return tuple(sum(v[i] * p[i][j] for i in range(2)) for j in range(2))

if __name__ == '__main__':
    v = (Q(0), Q(1))  # Currently failed.
    for n in range(1, 6):
        v = step(v, P)
        print(n, str(v[1]), float(v[1]))
    pi = (Q(4, 5), Q(1, 5))
    assert step((Q(0), Q(1)), P)[1] == Q(3, 5)
    assert step(step((Q(0), Q(1)), P), P)[1] == Q(2, 5)
    assert v[1] == Q(9, 40)
    assert step(pi, P) == pi
    assert step((Q(1), Q(0)), P)[1] == Q(1, 10)
    flip = ((Q(0), Q(1)), (Q(1), Q(0)))
    assert step((Q(1, 2), Q(1, 2)), flip) == (Q(1, 2), Q(1, 2))
    assert step(step((Q(0), Q(1)), flip), flip) == (Q(0), Q(1))
    identity = ((Q(1), Q(0)), (Q(0), Q(1)))
    assert step(pi, identity) == pi
    for bad_v, bad_p in [((Q(1), Q(1)), P), ((Q(-1), Q(2)), P),
                         ((Q(1), Q(0)), ((Q(1), Q(1)), P[1])),
                         ((Q(1),), P)]:
        try:
            step(bad_v, bad_p)
        except ValueError:
            pass
        else:
            raise AssertionError('Invalid input accepted')
    print('12 checks passed')

2026-10-24 Python 3.12.14에서 위 코드를 실행해 계산·정상분포·반례 8개와 잘못된 분포·크기 4개, 총 12개 검사를 통과했다. 출력의 F 확률은 차례로 3/5, 2/5, 3/10, 1/4, 9/40이다. 이는 합성 확률 모형의 코드 시험이지 실제 AI 성능·재시도 성공률 검증이 아니다. 외부 패키지나 에이전트 SDK는 사용하지 않는다.

실제 운영에 옮기기 전에 확인할 것

관측과 가정을 분리한다. 전이표가 실측 횟수에서 나온 것인지 임의 설정인지 기록한다. 실측 비율을 쓴다면 행별 관측 수와 추정 불확실성을 남긴다. 작은 표의 0을 불가능한 전이라고 단정하지 않는다. 이 글의 코드는 확률 추정이나 신뢰구간 계산을 하지 않는다.

상태가 충분한지 확인한다. 동일한 F라도 오류 종류·작업 유형·최근 연속 실패 길이에 따라 다음 결과가 달라질 수 있다. S·F만으로 요약한 모형과 더 세분한 모형을 새 자료에서 비교할 수 있지만, 상태를 늘리면 각 칸의 자료가 줄어든다. 복잡한 모형이 자동으로 더 정확해지는 것은 아니다.

행동을 바꾸면 표도 다시 검토한다. 대기 시간·재시도 정책·요청 배치를 바꾸면 관측 환경 자체가 달라진다. 기존 표를 고정한 장기 계산을 정책 효과의 증거로 쓰지 않는다. 특히 중복 실행이 위험한 쓰기 작업은 확률표와 무관하게 실제 처리 결과를 먼저 확인해야 한다.

복사 양식: 요청 단위 / 상태 정의 / 전이표의 출처·기간 / 현재 상태 또는 출발 분포 / 예측 단계 수 / 오래된 이력의 영향 / 시간별 전이 변화 / 추정 불확실성 / 별도 자료 검증 / 정책 변경 여부. 고객 원문이나 인증값은 넣지 않는다.

출처와 적용 범위

Prob 140, Long Run Behavior의 정상분포·균형식과 유한 기약 비주기 연쇄의 수렴 조건을 직접 확인했다. 확인일은 2026-10-24다. 교재의 일반 정리와 이 글에서 정한 두 상태 수치 예제를 구분한다. 실제 서비스의 마르코프 성질, 미래 정확도, 자동 복구 효과는 확인하지 않았다.

장기 20%라는 숫자를 보고 다음 요청도 20%라고 쓰기 전에, 현재 상태와 몇 단계 뒤를 묻는지 다시 적는다. 같은 확률표에서도 그 두 조건이 답을 60%, 40%, 20%로 바꾼다.

이어 읽기

전이 횟수와 조건부 비율: 관측 자료에서 표 만들기
런 수의 정확 계산과 비교 가정
연속 실패와 실행 순서 읽기


다른 글 보기 · 주제 탐색 · 작성자와 편집 기준 · 문의·정정 요청

RUDA DIRECTOR에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기