전체 처리시간이 17분에서 9분으로 줄었는데, 단순 업무도 복잡 업무도 각각 1분씩 더 걸렸다면 어떤 숫자를 보고해야 할까요? 세 숫자 모두 맞을 수 있어요. 전체 평균은 집단별 평균뿐 아니라 그 집단이 전체에서 차지하는 비중에도 영향을 받기 때문이에요.
첨부 링크는 이 글의 예제 ZIP으로 연결돼요. 압축을 푼 뒤 링크에 표시된 파일을 열면 입력·코드·완성 자료를 함께 사용할 수 있어요.
이번에는 접수 업무를 맡은 담당자가 두 기간의 처리시간을 비교한다고 가정해요. 자료는 설명용 합성 집계이고, 이전·이후 모두 완료 건이 100건이에요. 한 건의 시간은 접수부터 완료까지의 분 단위 시간이 아니라 실제 작업한 처리시간으로 정의해요. 미완료 건은 들어 있지 않아요. 이 글에서 만들 결과는 전체·업무 유형별·같은 구성비로 계산한 평균을 나란히 둔 비교표예요.

전체 합계부터 손으로 확인해요
입력 CSV (ZIP: input.csv)는 기간, 업무 유형, 완료 건수, 총 처리시간 네 열로 돼 있어요. 유형은 두 기간 모두 같은 분류 규칙을 사용했다고 가정해요.
| 기간 | 유형 | 건수 | 총 처리시간 | 유형 평균 |
|---|---|---|---|---|
| 이전 | 단순 | 20 | 100분 | 5분 |
| 이전 | 복잡 | 80 | 1,600분 | 20분 |
| 이후 | 단순 | 80 | 480분 | 6분 |
| 이후 | 복잡 | 20 | 420분 | 21분 |
이전 전체 평균은 (100+1,600)/(20+80)=17분이에요. 이후는 (480+420)/(80+20)=9분이고요. 두 유형 평균을 그냥 더해 2로 나누면 이전 12.5분, 이후 13.5분이지만, 이 값은 ‘모든 건의 평균’이 아니에요. 단순 20건과 복잡 80건을 같은 비중으로 취급했기 때문이에요.
올바른 전체 평균은 유형 평균×해당 유형 비중을 더한 값과 같아요. 이전은 5×0.2+20×0.8=17, 이후는 6×0.8+21×0.2=9로 다시 확인할 수 있어요. 전체 합계로 계산한 값과 가중 평균이 일치하지 않으면 건수나 단위, 누락 유형부터 살펴봐야 해요.

업무 구성비를 고정하면 무엇이 보일까요
두 유형 모두 1분씩 증가했는데 전체 평균이 내려간 이유는 짧은 업무가 많아졌기 때문이에요. 단순 업무 비중이 20%에서 80%로 늘었어요. 다만 이것만으로 ‘구성 효과가 정확히 몇 분’이라고 말하려면 어떤 기준으로 고정할지 정해야 해요.
이번에는 이전의 업무 구성비로 이후 평균을 계산해요. 이전 업무 구성을 계속 처리했다면 현재 유형별 평균으로 어느 정도의 시간이 필요한지 보고 싶기 때문이에요.
이전 구성비 고정 이후 평균 = 0.2×6 + 0.8×21 = 18분
| 비교값 | 평균 | 쓰임 |
|---|---|---|
| 이전 실제 구성 | 17분 | 이전에 완료한 업무의 평균 |
| 이후 실제 구성 | 9분 | 이후에 완료한 업무의 평균 |
| 이후 평균에 이전 구성비 적용 | 18분 | 같은 비중에서 유형별 값 비교 |
고정 구성비의 18분은 실제 관측한 전체 평균이 아니에요. 가중치를 바꿔 만든 비교값이에요. 따라서 이후 실적 9분을 18분으로 대체하지 않고, 두 값을 함께 보여줘요. 운영량 설명에는 9분이 필요하고, 구성 차이를 줄인 비교에는 18분이 필요해요.


변화의 합이 맞는지도 대조해요
이번 분해에서는 먼저 이전 비중을 유지한 채 유형 평균을 바꾸고, 그다음 이후 평균을 유지한 채 비중을 바꿔요.
- 유형 내 변화:
0.2×(6−5)+0.8×(21−20)=+1분 - 구성비 변화:
(0.8−0.2)×6+(0.2−0.8)×21=−9분 - 두 변화의 합:
+1−9=−8분, 실제 전체 변화9−17=−8분과 일치해요.
분해 순서를 바꾸면 다른 데이터에서는 각 구성요소의 값이 달라질 수 있어요. 그래서 ‘이전 비중, 이후 유형 평균을 기준으로 분해했다’고 적어야 해요. 여기서는 두 유형의 증가량이 같아 대체 순서에서도 같은 값이 나오지만, 이를 일반적인 성질로 생각하면 안 돼요.
보고서 문장은 이렇게 쓸 수 있어요.
완료 건당 전체 처리시간은 17분에서 9분으로 8분 감소했어요. 단순 업무 비중이 20%에서 80%로 늘었고, 유형별 평균은 각각 1분 증가했어요. 이전 구성비로 이후를 계산하면 18분이므로, 이번 자료는 같은 업무 구성을 가정한 처리속도 개선을 보여주지 않아요.
‘직원이 느려졌다’고 확정하지도 않아요. 같은 단순 유형 안에서도 세부 난도나 작업자 구성이 달랐을 수 있어요. 두 기간의 같은 사람을 추적한 자료도 아니에요. 이 계산은 관측된 집계값을 설명하는 산술 비교이며, 도구나 인력 변화의 인과 효과를 식별하지 않아요. 무엇을 결론 내릴 수 있는지와 비교의 제한을 수치 옆에 두라는 Government Analysis Function의 전달 지침을 이런 방식으로 적용했어요.
자기 자료에서는 네 가지를 먼저 맞춰요
검증 코드 (ZIP: verify.py)는 Python 3.12.3에서 실행했고, 추가 설치가 필요 없어요. python3 assets/verify.py를 실행하면 유형별 결과 (ZIP: group-results.csv), 분해표 (ZIP: decomposition.csv), 결과 기록 (ZIP: results.json)을 다시 만들어요. 코드에서는 전체 합계 방식과 가중 방식의 관계, 분해값의 합을 검사해요. 자기 자료에서는 기간별 총 건수로 각 유형의 비중을 다시 계산하고, 예제의 0.2·0.8과 기대값을 교체해야 해요.
먼저 같은 시간 단위를 쓰는지, 기간 길이가 같은지, 유형 정의가 유지됐는지, 완료 건만 포함하는지 확인해요. 이후에 완료가 쉬운 건만 빨리 끝내고 어려운 건이 대기 중이면 완료 자료의 평균만으로 전체 운영을 평가할 수 없어요. 미완료 건수와 대기시간을 별도 지표로 붙이는 편이 좋아요.
한 기간에만 존재하는 새 유형은 다른 기간의 평균이 없으므로 이 예제처럼 바로 고정 가중 비교를 할 수 없어요. 공통 유형 범위를 명시해 제한적으로 비교하거나, 새 유형은 별도로 보고해요. 유형 자체가 바뀌었다면 과거 자료를 새 규칙으로 재분류할 수 있는지 먼저 확인해야 해요. 구성 차이를 확인한 뒤 도입 효과까지 판단해야 한다면 전후 비교에서 더 확인할 것을 이어서 보세요. 합성 자료와 계산·원고는 2026년 10월 13일 Codex가 작성했어요.
예제 파일을 한 번에 받아 다시 확인해요
이 글의 입력·코드·완성 자료 ZIP을 새 폴더에 풀면 R10/README.txt, replay.py, assets 폴더가 함께 생겨요. 개별 코드 파일만 저장하면 보조 모듈이나 입력이 빠질 수 있으므로 처음에는 이 묶음을 사용하세요. R10 폴더에서 다음 명령을 실행하면 본문에 사용한 검사를 순서대로 수행해요.
python3 replay.py
확인할 결과는 관측17→9분, 구성 고정18분, 변화 +1−9=−8분예요. 명령이 성공해도 이 값과 본문의 적용 범위를 함께 대조하세요. 실행 안내 (ZIP: README.txt)에 필요한 파일과 개별 명령을 적었어요. 실행 코드는 verify.py (ZIP: verify.py)에서 직접 볼 수 있어요. Python3.12의 표준 라이브러리를 사용하며, 명령이 실패하면 ZIP의 폴더 구조와 오류에 나온 파일부터 확인해요. 실제 앱 실행에 필요한 프로그램은 원래 설명을 따르세요.
설명 삽화 2장은 GPT로 생성한 개념 설명이에요. 실제 예제의 작업 화면과 실행 결과는 기존 그림·첨부 자료에서 따로 확인할 수 있어요.