업무용 스크립트 요청문에 입력·출력·오류 원칙 담기
“자동화해 줘”를 실행 가능한 작업 설명으로 바꿉니다. 민감정보 없는 합성 샘플과 손으로 확인한 기대 결과를 붙여, 팀별 작업 기록 집계 스크립트를 요청하는 문장을 완성합니다.
AI가 표를 자연스럽게 설명해도 합계, 비율, 평균, 증감률 계산은 틀릴 수 있습니다. 이 글에서는 작은 합성 매출표를 사용해 AI의 각 수치 주장을 직접 다시 계산하고 확인하는 방법을 설명합니다.
이런 분께AI 채팅 도우미로 표, 차트, 보고서, 스프레드시트 결과를 요약하고 그 안의 수치 주장을 검증해야 하는 사람을 위한 글입니다.
차트에 대한 설명이 그럴듯하게 들려도 일부 숫자는 틀릴 수 있습니다. 합계, 평균, 전체 대비 비중, 절대 차이, 증감률, "가장 큰 증가" 같은 계산이 한 답변에 섞이면 오류 가능성이 더 커집니다. 실용적인 검증 방법은 AI 답변에 나온 각 숫자를 서로 독립적인 주장으로 보고 원본 데이터에서 다시 계산하는 것입니다.
최종 결론만 확인해서는 안 됩니다. 예를 들어 "Q4가 가장 높았으며 연간 매출의 32.6%를 차지했고 Q1보다 50% 증가했다"라는 문장에는 여러 독립적인 주장이 들어 있습니다. 순위, 비중, 증가율을 각각 따로 확인해야 합니다.
이 예제는 합성 데이터입니다. 분기별 매출표에 네 개의 값이 있다고 가정합니다. 예제를 작게 유지하면 코드에 의존하기 전에 모든 결과를 손으로 확인할 수 있습니다.
| 분기 | 매출 |
|---|---|
| Q1 | 100 |
| Q2 | 120 |
| Q3 | 120 |
| Q4 | 150 |
네 값의 연간 합계는 100 + 120 + 120 + 150 = 490입니다. 평균은 490 / 4 = 122.5입니다. Q4의 비중은 150 / 490 × 100 = 약 30.61%입니다. Q1에서 Q4까지의 차이는 150 - 100 = 50이고, 증감률은 50 / 100 × 100 = 50%입니다.
막연한 해석만 요청하지 말고 계산 결과를 명시하도록 AI에게 요청합니다. 예를 들면 다음과 같이 질문할 수 있습니다. "이 분기별 매출표를 요약해 주세요. 총합, 평균, 연간 합계에서 Q4가 차지하는 비중, Q1 대비 Q4의 증감률, 가장 큰 전분기 대비 증가를 제시하고 각 주장에 사용한 숫자를 보여 주세요."
AI의 전형적인 답변은 다음과 같을 수 있습니다. "연간 매출은 490이고 분기 평균은 120입니다. Q4는 연간 매출의 32.6%를 차지했습니다. Q1에서 Q4까지 매출은 50% 증가했습니다. 가장 큰 전분기 대비 증가는 Q3에서 Q4로, 30 또는 25% 증가했습니다."
이 답변에는 의도적으로 맞는 주장과 틀린 주장이 섞여 있습니다. 합계 490은 맞습니다. 평균 120은 틀렸으며 정확한 평균은 122.5입니다. Q4 비중 32.6%도 틀렸고 실제 값은 약 30.61%입니다. Q1에서 Q4까지 50% 증가는 맞고, Q3에서 Q4까지 절대 증가량 30과 상대 증가율 25%도 맞습니다.
다음 스크립트는 같은 합성 데이터를 저장하고 필요한 지표를 다시 계산한 뒤 예시 AI 답변의 수치 주장과 비교합니다. Python 표준 라이브러리만 사용합니다. 결과 보고서는 outputs 폴더에 저장하며 같은 파일이 이미 존재하면 덮어쓰지 않고 중단합니다.
from pathlib import Path
sales = {
"Q1": 100,
"Q2": 120,
"Q3": 120,
"Q4": 150,
}
ai_claims = {
"annual_total": 490,
"quarterly_average": 120,
"q4_share_percent": 32.6,
"q1_to_q4_change_percent": 50.0,
"largest_qoq_absolute_change": 30,
"largest_qoq_percent_change": 25.0,
}
values = list(sales.values())
quarters = list(sales.keys())
total = sum(values)
average = total / len(values)
q4_share = sales["Q4"] / total * 100
q1_to_q4_change = (sales["Q4"] - sales["Q1"]) / sales["Q1"] * 100
qoq_changes = []
for previous, current in zip(quarters, quarters[1:]):
old_value = sales[previous]
new_value = sales[current]
absolute_change = new_value - old_value
percent_change = absolute_change / old_value * 100
qoq_changes.append(
(previous, current, absolute_change, percent_change)
)
largest_qoq = max(qoq_changes, key=lambda item: item[2])
recomputed = {
"annual_total": total,
"quarterly_average": average,
"q4_share_percent": q4_share,
"q1_to_q4_change_percent": q1_to_q4_change,
"largest_qoq_absolute_change": largest_qoq[2],
"largest_qoq_percent_change": largest_qoq[3],
}
def close_enough(claim, actual, tolerance=0.05):
return abs(claim - actual) <= tolerance
lines = []
for name, claim in ai_claims.items():
actual = recomputed[name]
status = "PASS" if close_enough(claim, actual) else "FAIL"
lines.append(
f"{status}: {name}: AI={claim}, recomputed={actual:.2f}"
)
lines.append(
"Largest QoQ interval: "
f"{largest_qoq[0]} to {largest_qoq[1]}"
)
output_dir = Path("outputs")
output_dir.mkdir(exist_ok=True)
output_file = output_dir / "claims_check.txt"
if output_file.exists():
raise SystemExit(f"Stop: {output_file} already exists.")
output_file.write_text("\n".join(lines) + "\n", encoding="utf-8")
print(f"Wrote {output_file}")
이 예제에서는 합계, Q1 대비 Q4 증감률, 가장 큰 전분기 대비 절대 증가량, 가장 큰 전분기 대비 상대 증가율이 PASS가 되어야 합니다. 평균과 Q4 비중은 FAIL이 되어야 합니다. 화면에 표시되는 비율이 반올림될 수 있으므로 허용 오차를 사용할 수 있지만, 실제로 의미 있는 차이를 단순히 반올림 문제로 처리해서는 안 됩니다.
| 주장 | AI 값 | 재계산 값 | 결과 |
|---|---|---|---|
| 연간 합계 | 490 | 490 | PASS |
| 분기 평균 | 120 | 122.5 | FAIL |
| Q4 비중 | 32.6% | 30.61% | FAIL |
| Q1 대비 Q4 변화 | 50% | 50% | PASS |
| 가장 큰 전분기 대비 절대 증가 | 30 | 30 | PASS |
| 가장 큰 전분기 대비 증가율 | 25% | 25% | PASS |
숫자뿐 아니라 그 숫자를 설명하는 표현도 확인해야 합니다. "25%만큼 증가했다"와 "25%가 되었다"는 의미가 다르고, 증감률과 퍼센트포인트 변화도 서로 다릅니다. 계산 결과 자체가 맞더라도 분모, 비교 기간, 단위를 잘못 사용하면 문장 전체는 틀릴 수 있습니다.
흔한 실수 중 하나는 AI 답변이 그럴듯한지만 확인하고 실제 계산 과정을 다시 만들지 않는 것입니다. 또 다른 실수는 대표 숫자 하나만 검증하고 그 주변의 비율이나 증감률을 그대로 두는 것입니다. 파생 지표는 가중평균 여부, 결측 기간 제외 여부, 직전 기간과 비교하는지 첫 기간과 비교하는지 등 숨겨진 기준에 따라 달라질 수도 있습니다.
이 Python 스크립트는 명시적으로 정의된 계산만 검증하며 원본 비즈니스 데이터의 의미 자체를 검증하지는 않습니다. 원본 표가 정확한지, 차트에서 일부 데이터가 빠졌는지, 선택한 지표가 적절한지는 판단할 수 없습니다. 이런 문제는 원본 자료와 분석 맥락을 별도로 확인해야 합니다.
더 큰 표에서도 원리는 같습니다. AI의 각 문장을 검증 가능한 계산식으로 바꾸고, 원본 데이터에서 다시 계산하고, 적절한 반올림 허용 범위 내에서 비교한 뒤, 일치하지 않는 항목은 보고서나 메시지에 사용하기 전에 원인을 확인합니다.
2026-09-21 · hand-checked example · Python 3.12
설명과 예제는 직접 작성했습니다. 관련 동작과 개념은 아래 공식 자료에서 확인할 수 있습니다.