본문 바로가기
스터디 열기

예측 검증, 백테스트

1. 예측 검증, 백테스트

6장 2절에서 2025년 1월부터 3월까지의 매출을 예측했습니다. 단순 추세선은 1월을 약 2,126만원으로 내다봤는데, 작년 1월 실제 매출은 941만원으로 한 해 중 가장 낮았습니다. 이 예측을 믿고 재고를 준비해도 될까요? 문제는 미래가 아직 오지 않았다는 데 있습니다. 2025년 1월이 되어야 정답을 알 수 있다면, 예측은 그때까지 그냥 추측일 뿐입니다.

다행히 방법이 있습니다. 과거를 미래처럼 쓰는 것입니다. 이 방법으로 그 예측이 얼마나 믿을 만한지 숫자로 확인합니다.

1.1 백테스트, 예측의 모의고사

백테스트(backtesting)는 과거 데이터의 일부를 '아직 모르는 척' 가리고 예측한 뒤, 가렸던 실제값과 비교해 정확도를 재는 기법입니다. 미래는 아직 오지 않았으니, 이미 답을 아는 과거의 한 구간을 미래 자리에 놓고 예측 방법을 미리 시험해 보는 것입니다.

수험생이 모의고사를 치르는 이유와 같습니다. 실제 시험은 한 번뿐이고 결과가 나온 뒤에는 되돌릴 수 없습니다. 그래서 답이 이미 있는 문제로 미리 시험을 치르고, 몇 점이 나오는지 확인한 뒤 부족한 부분을 보완합니다. 백테스트는 예측의 모의고사입니다. 실전에 쓰기 전에 "이 예측 방법이 얼마나 믿을 만한지"를 숫자로 확인해 줍니다.

1.2 백테스트 3단계

백테스트는 세 단계로 진행합니다.

우리 데이터는 2024년 1월부터 12월까지 열두 달입니다. 이 가운데 1월부터 9월까지 아홉 달을 학습용으로 쓰고, 10월부터 12월까지 석 달을 검증용으로 가립니다. 학습용 아홉 달만 보고 추세를 뽑아 10월, 11월, 12월을 예측한 뒤, 가려 두었던 실제 매출과 비교하는 것입니다.

구분월역할
학습용1월 ~ 9월추세를 만드는 데 쓰는 데이터
검증용10월 ~ 12월정답 확인용으로 가려 두는 데이터

검증용 석 달의 정답은 이미 알고 있습니다. 10월 1,795만원, 11월 2,072만원, 12월 2,240만원입니다. 예측이 이 숫자에 얼마나 가까운지가 곧 예측 방법의 성적표가 됩니다.

1.3 Gemini로 직접 해보기

6장 2절에서 쓰던 노트북에서 이어서 진행합니다. orders.csv를 불러와 월별 매출을 집계해 둔 상태에서 Gemini에게 아래처럼 요청합니다.

1~9월 데이터로만 추세를 학습해서 10~12월 매출을 예측하고,
실제 10~12월과 비교해 오차를 알려줘

Gemini는 1월부터 9월까지의 월별 매출에 직선을 맞춰 추세선을 만들고, 그 직선을 10월, 11월, 12월로 연장해 예측값을 구한 뒤 실제값과 비교한 표를 내놓습니다. 결과는 아래와 비슷하게 나옵니다.

월실제 (만원)예측 (만원)오차율
10월1,7951,6637.3%
11월2,0721,72216.9%
12월2,2401,78120.5%
평균약 15%

이때 학습된 추세선은 대략 '1,073 + 59 × 월' 꼴입니다. 앞에서 열두 달 전체로 만든 추세선은 매월 약 91만원씩 오르는 기울기였는데, 1월부터 9월까지만 보면 매월 약 59만원씩 오르는 완만한 기울기가 나옵니다. 연말의 급격한 상승을 못 봤기 때문입니다.

결과 표를 받았으면 3장에서 배운 검증 3질문을 그대로 적용하세요. 오차율이 어떤 기준으로 계산되었는지(실제값 대비인지 예측값 대비인지), 학습에 정말 1월부터 9월까지만 썼는지 Gemini에게 물어 확인합니다. 백테스트도 AI가 하는 계산이므로 검증 대상입니다.

1.4 결과 읽기, 숫자 말고 패턴을

표에서 오차율 숫자만 보고 끝내면 절반만 읽은 것입니다. 세 달의 결과를 나란히 놓고 보면 두 가지 패턴이 보입니다.

  • 예측이 실제보다 계속 낮습니다: 세 달 모두 예측값이 실제값 아래에 있습니다. 이렇게 예측이 실제보다 낮게 나오는 것을 과소예측이라고 합니다. 한두 달이 아니라 석 달 내내 같은 방향으로 틀렸다면 우연이 아니라 방법의 문제입니다.
  • 연말로 갈수록 오차가 커집니다: 7.3%, 16.9%, 20.5%로 오차가 점점 벌어집니다. 예측 시점에서 멀어질수록 틀리는 것은 자연스럽지만, 여기서는 그보다 분명한 이유가 있습니다.

이유는 5장에서 본 계절성입니다. 1월부터 9월까지의 추세는 연말 성수기가 얼마나 가파르게 오르는지 알지 못합니다. 그래서 완만한 기울기로 연장했고, 실제로는 11월과 12월에 매출이 가속하면서 예측과 실제의 간격이 벌어진 것입니다. 6장 2절에서 "단순 추세는 계절성을 무시한다"고 말로 지적했던 문제가, 백테스트를 거치자 숫자로 증명되었습니다.

1.5 오차율의 기준

평균 오차율은 예측이 실제와 평균 몇 퍼센트 차이 나는지를 나타내는 숫자로, MAPE(Mean Absolute Percentage Error, 평균 절대 백분율 오차)라고 부릅니다. 이름은 길지만 뜻은 단순합니다. "평균적으로 몇 퍼센트 빗나갔나"입니다. 실무에서는 대략 아래 기준으로 읽습니다.

평균 오차율 (MAPE)해석
10% 미만꽤 정확한 편
10% ~ 20%대략적인 계획용으로는 쓸 만함
20% 초과주의, 개선 필요

우리 예측은 평균 약 15%로 두 번째 구간에 들어갑니다. 매출이 오른다는 큰 방향은 맞지만, 정밀한 재고 수량을 계산하기에는 부족하다는 뜻입니다. 6장 1절에서 이야기한 "충분히 좋은 예측"인지 아닌지를 여기서 판단합니다. 연말 인력 배치의 대략적인 규모를 잡는 용도라면 지금도 쓸 수 있고, 상품별 발주량을 정하는 용도라면 계절성을 반영해 오차를 줄여야 합니다.

이 기준은 절대적인 것이 아닙니다. 업종과 용도에 따라 5% 오차도 크다고 볼 수 있고 25% 오차도 감수할 수 있습니다. 오차를 숫자로 알고 그 예측을 어디까지 믿을지 스스로 정하면 됩니다.

1.6 작년 데이터로 계절 반영하기

오차의 원인이 계절성이라면 해결책도 분명합니다. 작년 같은 달이 어땠는지를 예측에 넣으면 됩니다. 그런데 orders.csv는 2024년 한 해뿐이라 작년이 없습니다. 실무에서 흔한 상황입니다. 주문 원장은 올해 것만 정리되어 있어도, 지난 몇 해의 월별 매출은 회계 자료나 결산 보고서에 남아 있습니다. 실습 데이터 폴더의 monthly_sales_2022_2024.csv가 그 자료입니다. 연월과 매출 두 열에 2022년 1월부터 2024년 12월까지 36행이 들어 있고, 2024년 열두 값은 우리가 집계한 월별 매출과 같습니다.

Colab 파일 패널에 이 파일을 추가로 올리고 Gemini에게 요청합니다. 이번에는 2022년과 2023년 두 해를 학습용으로, 2024년 열두 달을 검증용으로 씁니다.

monthly_sales_2022_2024.csv는 같은 쇼핑몰의 3년치 월별 매출이야. 연월, 매출 열이 있어.
2022~2023년 데이터로만 2024년 12개월을 두 가지 방법으로 예측하고,
실제 2024년과 비교해 월별 오차율과 평균 오차율을 표로 보여줘. 단위는 만원.
1. 단순 추세: 24개월에 직선을 맞춰 연장
2. 계절 반영: 2023년 같은 달 매출 × (2023년 총매출 ÷ 2022년 총매출)

결과는 아래와 비슷하게 나옵니다.

월실제단순 추세오차계절 반영오차
1월9411,51861.3%9814.2%
2월1,1001,55241.1%1,1958.7%
3월1,3961,58613.6%1,4795.9%
4월1,5841,6202.3%1,5900.4%
5월1,6131,6552.6%1,7015.4%
6월1,1161,68951.3%1,1160.0%
7월1,5061,72314.4%1,6207.6%
8월1,3881,75726.6%1,4403.7%
9월1,6721,7917.1%1,7253.2%
10월1,7951,8251.7%1,8151.1%
11월2,0721,85910.3%2,2599.0%
12월2,2401,89315.5%2,3143.3%
평균 오차율20.6%4.4%

단순 추세는 2024년 1월을 1,518만원으로 봤습니다. 실제는 941만원이니 61% 빗나갔습니다. 두 해치 데이터에 직선을 맞춰도 1월이 비수기라는 사실은 직선에 담기지 않기 때문입니다. 계절 반영은 "작년 1월이 755만원이었고 매출이 해마다 약 30% 성장했으니 올해 1월은 981만원쯤"이라고 봅니다. 평균 오차는 4.4%로 1.5의 기준표에서 첫 번째 구간입니다. 방법은 곱셈 한 번인데 오차가 5분의 1로 줄었습니다.

2022~2023년으로 배운 '작년 같은 달 × 성장률'이 2024년 열두 달을 평균 4.4% 오차로 맞혔다.

표의 세 열을 한 그래프에 그렸습니다. 검은 실선이 2024년 실제, 회색 점선이 단순 추세, 파란 점선이 계절 반영입니다. 회색 점선은 1월부터 12월까지 거의 평평하게 조금씩 오를 뿐이라, 실제선이 푹 꺼지는 1월·2월·6월에는 한참 위에, 치솟는 11월·12월에는 아래에 있습니다. 파란 점선은 실제선과 같은 자리에서 꺾이고 같은 자리에서 오릅니다. 작년의 모양을 그대로 빌려 왔기 때문입니다. 남는 차이는 대부분 높이입니다. 11월처럼 파란 점선이 실제보다 높은 달은 2023년 같은 달의 성장이 2024년에는 조금 덜했다는 뜻입니다. 이 그림을 Gemini에게도 그려 달라고 해서 숫자 표와 같은 모양인지 확인해 보세요.

같은 방법으로 2025년 1분기를 다시 예측합니다. 2024년 총매출은 2023년의 약 1.24배이므로, 2024년 1월 941만원에 1.24를 곱한 약 1,171만원이 2025년 1월 예측입니다.

같은 방법(2024년 같은 달 × 2024년 총매출 ÷ 2023년 총매출)으로 2025년 1~3월을 예측하고,
백테스트 평균 오차율만큼 위아래 범위도 같이 보여줘
월단순 추세 (6장 2절)계절 반영범위 (±4.4%)
2025년 1월약 2,126만원약 1,171만원약 1,120만원 ~ 1,222만원
2025년 2월약 2,217만원약 1,369만원약 1,309만원 ~ 1,429만원
2025년 3월약 2,308만원약 1,737만원약 1,661만원 ~ 1,813만원

6장 2절에서 이상하다고 느꼈던 "1월 2,126만원"이 1,171만원으로 내려왔습니다. 작년 1월보다는 24% 높고 12월보다는 한참 낮은, 상식에 맞는 숫자입니다. 이 표를 저장해 두세요. 6장 4절에서 그래프로 옮깁니다.

계절 반영 결과도 검증 3질문을 거칩니다. "다른 방법으로도 같은가"는 여기서 계산기로 확인할 수 있습니다. 2023년 1월 755만원에 성장률 1.30을 곱하면 약 981만원이 나오는지, 2024년 총매출(약 1.84억)을 2023년 총매출(약 1.48억)으로 나누면 약 1.24가 나오는지 봅니다. 이 3년치 파일 역시 위니브가 만든 연습 데이터라 세 해가 같은 모양으로 움직이지만, 실제 회사에서는 그것부터 확인해야 합니다.

1.7 백테스트가 바꾸는 것

검증 없는 예측은 추측일 뿐입니다. 아무리 그럴듯한 그래프를 그려도, 그 방법이 과거에 얼마나 맞았는지 확인하지 않았다면 그 예측을 근거로 결정을 내릴 수 없습니다. 백테스트는 예측을 "믿어도 되는 숫자"로 바꿔 줍니다. 오차가 15%인지 4%인지 알고 나면, 그 예측을 어디에 쓸 수 있고 어디에 쓰면 안 되는지가 분명해집니다. 그리고 오차의 원인을 알면 무엇을 고쳐야 할지도 보입니다. 작년 데이터 한 장이 그 답이었습니다.

1.8 직접 해보기

  1. 계절을 반영하는 다른 방법을 시험해 봅니다. 2022~2023년 각 달이 그 해 평균의 몇 배인지 계절 비율을 구하고, 24개월 추세선 예측에 그 비율을 곱하는 방식으로 2024년을 예측해 백테스트합니다. 전년 동월 × 성장률 방식과 평균 오차율을 비교합니다.
2022~2023년 데이터로 월별 계절 비율(그 달 매출 ÷ 그 해 평균 매출)을 구하고,
24개월 추세선 예측에 그 비율을 곱하는 방식으로 2024년을 예측해서 백테스트해줘.
전년 동월 × 성장률 방식과 평균 오차율을 비교해줘
  1. 학습용과 검증용을 다르게 나눠 봅니다. 1월부터 6월까지로 학습해 7월부터 12월까지 여섯 달을 예측하면 오차가 어떻게 달라지는지 비교합니다.
  2. 백테스트 결과에 검증 3질문을 적용해 봅니다. 오차율의 계산 기준이 무엇인지, 학습에 검증용 데이터가 섞이지 않았는지 Gemini에게 직접 물어 확인합니다.
  3. 예측이 세 달 내내 실제보다 낮았고 연말로 갈수록 오차가 커진 이유를 계절성이라는 말을 써서 한 문장으로 설명해 봅니다.
  4. 평균 오차율 15%인 단순 추세 예측과 4.4%인 계절 반영 예측을 우리 쇼핑몰의 어떤 결정에 각각 쓸 수 있는지 하나씩 적어 봅니다.

마지막 수정