AI 업무 활용

AI가 표와 차트를 설명할 때 숫자를 다시 계산해 검증하기

AI가 표를 자연스럽게 설명해도 합계, 비율, 평균, 증감률 계산은 틀릴 수 있습니다. 이 글에서는 작은 합성 매출표를 사용해 AI의 각 수치 주장을 직접 다시 계산하고 확인하는 방법을 설명합니다.

목차 보기

이런 분께AI 채팅 도우미로 표, 차트, 보고서, 스프레드시트 결과를 요약하고 그 안의 수치 주장을 검증해야 하는 사람을 위한 글입니다.

준비사항
  • Python 3.12
  • 합계, 평균, 증감률에 대한 기본적인 이해

01AI의 수치 주장을 왜 다시 계산해야 할까

차트에 대한 설명이 그럴듯하게 들려도 일부 숫자는 틀릴 수 있습니다. 합계, 평균, 전체 대비 비중, 절대 차이, 증감률, "가장 큰 증가" 같은 계산이 한 답변에 섞이면 오류 가능성이 더 커집니다. 실용적인 검증 방법은 AI 답변에 나온 각 숫자를 서로 독립적인 주장으로 보고 원본 데이터에서 다시 계산하는 것입니다.

최종 결론만 확인해서는 안 됩니다. 예를 들어 "Q4가 가장 높았으며 연간 매출의 32.6%를 차지했고 Q1보다 50% 증가했다"라는 문장에는 여러 독립적인 주장이 들어 있습니다. 순위, 비중, 증가율을 각각 따로 확인해야 합니다.

02작은 합성 데이터로 시작하기

이 예제는 합성 데이터입니다. 분기별 매출표에 네 개의 값이 있다고 가정합니다. 예제를 작게 유지하면 코드에 의존하기 전에 모든 결과를 손으로 확인할 수 있습니다.

분기매출
Q1100
Q2120
Q3120
Q4150

네 값의 연간 합계는 100 + 120 + 120 + 150 = 490입니다. 평균은 490 / 4 = 122.5입니다. Q4의 비중은 150 / 490 × 100 = 약 30.61%입니다. Q1에서 Q4까지의 차이는 150 - 100 = 50이고, 증감률은 50 / 100 × 100 = 50%입니다.

03검증 가능한 형태로 AI에게 요청하기

막연한 해석만 요청하지 말고 계산 결과를 명시하도록 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%도 맞습니다.

04Python으로 각 주장 다시 계산하기

다음 스크립트는 같은 합성 데이터를 저장하고 필요한 지표를 다시 계산한 뒤 예시 AI 답변의 수치 주장과 비교합니다. Python 표준 라이브러리만 사용합니다. 결과 보고서는 outputs 폴더에 저장하며 같은 파일이 이미 존재하면 덮어쓰지 않고 중단합니다.

python
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}")

05PASS와 FAIL 결과 해석하기

이 예제에서는 합계, Q1 대비 Q4 증감률, 가장 큰 전분기 대비 절대 증가량, 가장 큰 전분기 대비 상대 증가율이 PASS가 되어야 합니다. 평균과 Q4 비중은 FAIL이 되어야 합니다. 화면에 표시되는 비율이 반올림될 수 있으므로 허용 오차를 사용할 수 있지만, 실제로 의미 있는 차이를 단순히 반올림 문제로 처리해서는 안 됩니다.

주장AI 값재계산 값결과
연간 합계490490PASS
분기 평균120122.5FAIL
Q4 비중32.6%30.61%FAIL
Q1 대비 Q4 변화50%50%PASS
가장 큰 전분기 대비 절대 증가3030PASS
가장 큰 전분기 대비 증가율25%25%PASS

숫자뿐 아니라 그 숫자를 설명하는 표현도 확인해야 합니다. "25%만큼 증가했다"와 "25%가 되었다"는 의미가 다르고, 증감률과 퍼센트포인트 변화도 서로 다릅니다. 계산 결과 자체가 맞더라도 분모, 비교 기간, 단위를 잘못 사용하면 문장 전체는 틀릴 수 있습니다.

06AI 요약을 재사용하기 전에 확인할 항목

  • AI가 제시한 모든 숫자를 계산에 사용된 정확한 원본 행이나 차트 값과 연결합니다.
  • 합계와 평균이 서로 일관되어 보이더라도 직접 다시 계산합니다.
  • 비중을 계산할 때 분자와 전체 합계인 분모를 모두 확인합니다.
  • 증감률은 앞 시점의 값을 분모로 사용했는지 확인합니다: (새 값 - 이전 값) / 이전 값 × 100.
  • "가장 크다"가 절대 변화량, 상대 변화율, 최종 값 중 무엇을 의미하는지 확인합니다.
  • 개수, 통화, 비율, 천 단위, 백만 단위 등 서로 다른 단위를 섞지 않습니다.
  • 원본 값으로 계산을 끝낸 뒤 마지막 단계에서 반올림합니다.
  • "빠른 성장", "안정적인 성과" 같은 정성적 표현은 산술 계산 주장과 별도로 검토합니다.

07흔한 실수와 한계

흔한 실수 중 하나는 AI 답변이 그럴듯한지만 확인하고 실제 계산 과정을 다시 만들지 않는 것입니다. 또 다른 실수는 대표 숫자 하나만 검증하고 그 주변의 비율이나 증감률을 그대로 두는 것입니다. 파생 지표는 가중평균 여부, 결측 기간 제외 여부, 직전 기간과 비교하는지 첫 기간과 비교하는지 등 숨겨진 기준에 따라 달라질 수도 있습니다.

이 Python 스크립트는 명시적으로 정의된 계산만 검증하며 원본 비즈니스 데이터의 의미 자체를 검증하지는 않습니다. 원본 표가 정확한지, 차트에서 일부 데이터가 빠졌는지, 선택한 지표가 적절한지는 판단할 수 없습니다. 이런 문제는 원본 자료와 분석 맥락을 별도로 확인해야 합니다.

더 큰 표에서도 원리는 같습니다. AI의 각 문장을 검증 가능한 계산식으로 바꾸고, 원본 데이터에서 다시 계산하고, 적절한 반올림 허용 범위 내에서 비교한 뒤, 일치하지 않는 항목은 보고서나 메시지에 사용하기 전에 원인을 확인합니다.

실행·검증 기록

2026-09-21 · hand-checked example · Python 3.12

  • 합성 데이터 값 100, 120, 120, 150을 손으로 확인했습니다.
  • 연간 합계를 확인했습니다: 100 + 120 + 120 + 150 = 490.
  • 분기 평균을 확인했습니다: 490 / 4 = 122.5.
  • Q4 비중을 확인했습니다: 150 / 490 × 100 = 30.612244...%로, 약 30.61%입니다.
  • Q1 대비 Q4 증감률을 확인했습니다: (150 - 100) / 100 × 100 = 50%.
  • 전분기 대비 변화를 확인했습니다: Q1→Q2 = +20 또는 20%, Q2→Q3 = 0 또는 0%, Q3→Q4 = +30 또는 25%.
  • 이 예제에서는 Q3→Q4가 절대 증가량과 증가율 모두에서 가장 큰 양의 전분기 대비 변화임을 확인했습니다.
  • 예시 AI 답변의 평균 120과 Q4 비중 32.6%가 재계산 결과와 의도적으로 일치하지 않도록 구성되었음을 확인했습니다.
검증 범위의 한계
  • Python 코드는 직접 실행하지 않았으며, 작은 합성 예제와 예상 결과는 손으로 확인했습니다.
  • 스크립트는 ai_claims에 입력된 주장만 확인하며 임의의 AI 문장에서 숫자 주장을 자동으로 추출하지는 않습니다.
  • 0.05의 비교 허용 오차는 예시이며 실제 데이터의 정밀도와 반올림 규칙에 맞게 조정해야 합니다.
  • 계산 결과가 맞더라도 원본 표나 차트 자체가 정확하다는 것을 의미하지는 않습니다.

사이트 전체의 작성·검증 원칙

참고 출처

설명과 예제는 직접 작성했습니다. 관련 동작과 개념은 아래 공식 자료에서 확인할 수 있습니다.