시간 초과로 멈춘 AI 작업을 완료 시간 평균에서 빼면, 느리거나 끝나지 않은 작업이 평가에서 사라집니다. 반대로 제한 시간인 10초를 실제 완료 시간으로 넣어도 안 됩니다. 기록해야 할 것은 ‘10초까지 완료되지 않았다’는 사실입니다. 시간과 완료 여부를 함께 저장하고, 완료율과 관측 범위 안의 시간을 나란히 비교하세요.
앞선 글은 기준을 넘은 빈도와 초과량을 구분했습니다. 이번 질문은 그보다 앞에 있습니다. 관측이 끊긴 실행에서 초과량 자체를 알고 있는가? 아래는 실제 AI 서비스 시험이 아니라, 같은 업무를 두 경로로 처리한다고 가정한 합성 교육 예제입니다.
1. 완료한 작업만 남기면 빠른 경로처럼 보입니다
각 경로를 다섯 번 실행하고, 모든 실행을 시작 후 10초까지 관측합니다. 완료는 답변의 첫 표시가 아니라 미리 정한 결과 검증까지 끝난 시점입니다. A는 네 번을 각각 2초에 완료했고, 마지막 한 번은 10초까지 완료되지 않았습니다. B는 다섯 번 모두 4초에 완료했습니다.
| 같은 10초 관측 창 | A | B |
|---|---|---|
| 관측된 완료 시간 | 2, 2, 2, 2초 | 4초씩 5건 |
| 10초까지 미완료 | 1건 | 0건 |
| 완료 건만의 평균 | 2초 | 4초 |
| 10초 이내 완료율 | 80% | 100% |
| 10초 제한 평균 시간 | 3.6초 | 4초 |

‘A는 평균 2초, B는 평균 4초’라는 보고는 완료한 실행 안에서는 맞습니다. 하지만 A의 미완료 한 건을 빼고 경로 전체의 속도라고 부르면 비교 대상이 바뀝니다. 완료율 80%와 100%를 숨긴 채 ‘A가 두 배 빠르다’고 결론 내릴 수 없습니다.
2. 오른쪽 중도절단은 10초 완료와 다릅니다
사건 발생 시각을 끝까지 관측하지 못하고, 어떤 시각을 넘었다는 것만 아는 자료를 오른쪽 중도절단(right censoring) 자료라고 합니다. NIST의 신뢰성 교재는 정해진 시험 종료 시각까지 고장 나지 않은 장비를 예로 설명합니다. 여기서는 ‘고장’을 ‘검증된 완료’로 바꿔 시간 관측 구조만 적용합니다.
A의 마지막 기록은 ‘완료 10초’가 아니라 ‘관측 10초, 완료 확인 안 됨’입니다. 실제로 10초에 실행을 강제 종료했다면, 이후 완료 시간은 계속 실행했을 경우의 잠재적인 값입니다. 실제 종료까지 걸린 시간은 10초로 알지만, 계속 실행했을 때의 완료 시간은 모릅니다. 두 질문을 구분해야 합니다.
가령 계속 실행했다면 11초에 끝났다고 가정할 때 A의 다섯 건 평균은 3.8초입니다. 100초에 끝났다고 가정하면 21.6초입니다. 두 가정은 모두 ‘10초까지 미완료’라는 관측과 맞습니다. 이 관측만으로 제한 없는 평균 완료 시간을 하나로 정할 수 없다는 뜻이지, 11초나 100초를 실제로 측정했다는 뜻은 아닙니다.
3. 알 수 있는 범위를 10초까지로 제한합니다
완료 시간을 T, 사전에 정한 관측 한계를 τ라고 쓰면 min(T, τ)는 완료했으면 그 시간, τ까지 완료하지 못했으면 τ입니다. 그 평균 E[min(T, τ)]가 제한 평균 시간의 수학적 형태입니다. 생존분석에서는 restricted mean survival time, RMST로 부릅니다. 이 글에서는 완료가 사건이므로 ‘10초까지 누적된 미완료 시간’으로 읽으면 됩니다. 임상적 생존의 좋고 나쁨을 AI 완료에 그대로 옮기지 않습니다.
이 예제는 모든 실행을 같은 10초까지 빠짐없이 관측했으므로 A는 (2+2+2+2+10)/5=3.6초, B는 (4+4+4+4+4)/5=4초로 직접 계산할 수 있습니다. 3.6초는 실제 평균 완료 시간이 아닙니다. 10초 뒤의 시간을 지표 정의에서 잘랐기 때문에 얻는 숫자입니다. 미완료 한 건을 완료했다고 바꾼 것도 아닙니다.
완료율에서는 B가 높고, 제한 평균에서는 A가 작습니다. 어느 경로를 선택할지는 기한 내 완료가 필수인지, 빠른 일부 완료에도 가치가 있는지에 달려 있습니다. 예를 들어 기한 내 완료율을 필수 조건으로 정했다면 제한 평균 하나로 그 조건을 덮어쓰면 안 됩니다. 다섯 건의 경험적 요약은 모집단 성능 우위를 입증하지도 않습니다.
4. 이 단순 계산을 쓰면 안 되는 경우
일부 실행의 로그가 3초에 끊겼다면, 그 실행의 min(T,10)은 아직 모릅니다. 3초를 완료 시간처럼 평균내거나, 모르는 구간을 임의로 10초로 채우지 마세요. 관측 종료 시각이 제각각이면 Kaplan–Meier 같은 중도절단 처리 방법과 그 가정을 별도로 검토해야 합니다. 단순히 기법 이름을 붙인다고 누락 원인이 해결되지는 않습니다.
특히 느린 실행만 사용자가 중단하거나, 오류로 더 이상 완료할 수 없게 된 실행을 ‘계속 기다리면 끝날 작업’처럼 취급하면 위험합니다. 중단 이유가 완료 시간과 연관돼 있을 수 있고, 최종 실패는 사건 자체가 다를 수 있습니다. 시간 초과·사용자 취소·최종 실패·로그 유실을 구분하고 분석 목표부터 정하세요. 이 글의 단순 계산은 그런 상황을 자동으로 해결하지 않습니다.
10초에서 완료가 확인된 건과 10초에서 관측만 종료된 건도 구분합니다. 전자는 이번 정의의 ‘10초 이내 완료’에 포함하고, 후자는 포함하지 않습니다. 시계 해상도와 이벤트 기록 순서 때문에 구분할 수 없다면 확인 불가로 표시하고, 경계 판정 규칙을 사전에 정해야 합니다.
5. 평가 로그와 보고서를 이렇게 바꾸세요
각 실행에 시작 시각, 관측 종료까지의 경과 시간, 완료 확인 여부, 완료 판정 기준, 종료 이유, 관측 한계를 남깁니다. 개인정보나 원문 입력을 모두 저장할 필요는 없습니다. 경로 비교에는 같은 시간 기준과 같은 업무 집단을 사용하고, 재시도를 별도 실행으로 볼지 사용자 요청 하나로 묶을지도 먼저 정합니다.
보고 문장도 바꿉니다. ‘A의 평균 완료 시간은 3.6초’ 대신 ‘같은 10초 관측 창에서 A의 완료율은 80%, 제한 평균 시간은 3.6초였다. 10초 뒤 완료 시간은 확인하지 않았다’라고 씁니다. 짧아도 무엇을 알며 무엇을 모르는지가 드러납니다.
계산 확인용 Python
from fractions import Fraction as F
# Synthetic data. Every run observed until completion or 10 s.
# Each pair is (observed seconds, completion confirmed).
a = [(2, True)] * 4 + [(10, False)]
b = [(4, True)] * 5
def summarize(rows):
completed = [t for t, done in rows if done]
rate = F(len(completed), len(rows))
capped_mean = F(sum(t for t, _ in rows), len(rows))
completed_mean = (F(sum(completed), len(completed))
if completed else None)
return rate, capped_mean, completed_mean
print(summarize(a)) # 4/5, 18/5, 2
print(summarize(b)) # 1, 4, 4
출력은 위 값에 해당하는 Fraction 객체입니다. 이 코드는 고정된 합성 배열을 설명하기 위한 예제이며, 입력 검증이나 서로 다른 관측 한계의 처리를 구현한 운영용 함수가 아닙니다. 관측 종료가 모두 완료 또는 같은 10초라는 전제가 깨지면 그대로 사용하지 마세요.
발표 전에 확인할 네 가지
1. 미완료 실행이 분모에서 사라지지 않았는가?
2. 완료 시각과 관측 종료 시각을 구분했는가?
3. 제한 평균 옆에 같은 기한의 완료율을 표시했는가?
4. 관측하지 못한 이후 시간과 최종 실패를 추측으로 채우지 않았는가?
이어서 읽기
초과율과 평균 초과량 구분하기: 초과 크기를 관측했을 때 빈도와 부담을 나눠 계산합니다.
평가 결과가 빠졌을 때의 분모: 일반적인 결과 누락과 민감도 분석을 다룹니다. 이번 글의 중도절단은 ‘적어도 이 시간까지 완료되지 않았다’는 정보가 남는다는 점에서 구분됩니다.
출처와 실제 확인 범위
NIST/SEMATECH e-Handbook 8.1.3.1, Censoring에서 고정 관측 종료와 오른쪽 중도절단의 뜻을 확인했습니다. Merck simtrial 개발팀의 RMST 설명에서 E[min(T,τ)]와 생존함수 적분의 정의를 대조했습니다. 원문 확인일은 2026년 10월 22일입니다. AI 완료에 적용한 예제와 기록 방식은 이 글의 교육용 구성입니다.
실행 확인: 2026년 10월 22일, Python 3.12.14 표준 라이브러리 fractions로 합성 예제의 제한 평균·완료율·잠재 완료 시간 반례 등에 관한 8개 assertion을 실행해 통과했습니다. 실제 AI 서비스 성능 시험, 생존모형 적합, 모집단 평균 추정은 수행하지 않았습니다. 특정 AI 모델이나 SDK 버전에 의존하는 설명이 아닙니다.