TL;DR
- 우리는 매일 자기 예측을 "계절 나이브(seasonal-naive)"라는 단순 기준선과 나란히 채점합니다.
- 2026-07-17 기준, 7일(주간) 예측의 평균 오차(MAPE)는 모델 10.56% vs 계절 나이브 19.89% 입니다. 즉 우리 모델이 기준선보다 9.33%p 낮은 오차를 냈습니다(표본 19건).
- 다만 이 비교는 오늘부터 쌓기 시작한 단일 시점 수치이고, 7일 단기 실적에 한정됩니다. 표본 19건은 작습니다. 추세라고 부를 단계가 아닙니다.
- 우리는 이 수치를 /track-record에 그대로 공개하며, 모델이 기준선에 지는 구간이 나오면 그것도 자동으로 같은 페이지에 드러납니다.
이 노트는 "우리 예측이 정확하다"는 주장이 아니라, "우리가 정확도를 어떻게 재고, 그 수치를 어디까지 믿어야 하는가"에 대한 것입니다.
왜 "계절 나이브"와 비교하나 — 방법
예측 모델의 오차율 하나만 던지면 그 숫자가 좋은지 나쁜지 알 수 없습니다. 농산물 가격은 계절을 크게 타기 때문에, "아무 모델 없이 작년 이맘때 값을 그대로 쓰면 얼마나 맞나"를 먼저 알아야 우리 모델이 그 위에 무엇을 보탰는지 판단할 수 있습니다. 그 최소 기준선이 계절 나이브입니다.
계절 나이브 벤치마크 정의
- 어떤 품목의 어떤 날짜를 예측할 때, 작년 같은 달의 대표타입 실측 도매가 중앙값을 그대로 예측치로 사용합니다.
- 예: 2026년 7월 배추 가격을 맞힐 때 → 2025년 7월 배추 실측 도매가의 중앙값을 예측치로 놓습니다.
- 미래 정보를 전혀 쓰지 않습니다(작년 같은 달은 구조적으로 과거이므로 미래 누설 0).
- 이 기준선은 계절성만 반영합니다. 기상 이변, 최근 물동량, 규제 충격 같은 것은 담지 못합니다 — 그게 바로 우리 모델이 더 해야 하는 몫입니다.
채점 방식
- 매일 새벽 자동 백테스트(compute-accuracy 배치)가 돕니다.
- 과거에 실제로 내놓았던 예측치와, 그 예측이 겨냥한 날짜의 실제 도매가를 짝지어(target_date 매칭) 오차를 계산합니다. 같은 짝에 대해 계절 나이브 예측치의 오차도 병렬로 계산합니다.
- 지표는 MAPE(평균 절대 백분율 오차) — 낮을수록 정확. 방향이 아니라 값의 벗어남 정도입니다.
- 결과는 /track-record 페이지에 매일 갱신됩니다.
발견 (2026-07-17 기준)
| 구분 | 7일(주간) 예측 평균 오차(MAPE) |
|---|---|
| EcoChain 모델 | 10.56% |
| 계절 나이브 기준선 | 19.89% |
| 차이 | 9.33%p (모델이 낮음) |
| 표본 | 19건 |
읽는 법:
- 이 시점의 7일 예측에서, 우리 모델은 "작년 같은 달 값을 그대로 쓰는 것"보다 오차를 약 절반 수준으로 줄였습니다. 계절성 위에 기상 외생변수·최근 레벨·계절성 블렌딩이 실제로 무언가를 더하고 있다는 신호로 해석합니다.
- 단, "9.33%p 앞선다"는 것은 이 시점, 이 표본, 이 horizon에 한한 사실입니다. 아래 Caveats를 반드시 함께 읽어 주십시오.
Caveats — 우리가 먼저 자백하는 것
이 섹션이 이 노트에서 가장 중요합니다.
- 이 벤치마크 비교는 오늘부터 쌓기 시작했습니다. 계절 나이브 병렬 채점은 최근 도입한 것으로, 2026-07-17은 사실상 첫 축적 시점입니다. 단일 날짜의 스냅샷이며, 아직 추세가 아닙니다. 며칠·몇 주가 쌓여야 "꾸준히 앞선다/뒤진다"를 말할 수 있습니다.
- 실데이터는 7일 단기 예측뿐입니다. 우리가 자신 있게 채점 가능한 건 현재 7일 horizon입니다. 30일·90일 예측은 아직 실측과 대조할 표본을 축적 중이라 검증 전입니다. 정작 구매·계약 판단에 필요한 건 30일 이상인데, 그 구간은 아직 "검증됐다"고 말할 수 없습니다. 이 미스매치를 우리는 숨기지 않습니다.
- 표본 19건은 통계적으로 작습니다. 19건으로는 "유의미하게 우수하다"고 단정할 수 없습니다. 우리는 이 수치에 통계적 유의성 배지("Significant" 같은)를 붙이지 않습니다 — 표본이 작고 시계열은 서로 얽혀 있어(자기상관), 그런 배지는 착시를 줄 뿐입니다. 숫자는 있는 그대로 표본 수와 함께 노출합니다.
- 우리는 "안 되는 것도 끈" 기록이 있습니다. 정확도를 올리려고 시도했다가 백테스트가 반증해서 꺼버린 장치들이 있습니다.
- 신뢰구간 conformal 보정 (2026-06-27, OFF) — 예측 밴드 커버리지를 높이려 split-conformal 보정을 붙였지만, 백테스트 결과 밴드만 넓어지고 커버리지 개선이 없어(순손해) 껐습니다. 진짜 원인은 밴드 폭이 아니라 장기 점예측의 정확도 자체였습니다.
- 경제지표(ECOS) regressor (OFF) — 거시 경제 변수를 외생변수로 넣어봤지만 예측 성능이 오히려 나빠져 제외했습니다.
- 모델이 기준선에 지는 날이 오면, 그것도 공개됩니다. /track-record의 신호별·추이 차트는 실측 표본이 있는 지점만 그리며 보간하지 않습니다. 특정 품목·구간에서 모델이 계절 나이브보다 못한 결과가 나오면, 구조상 그 페이지에 그대로 드러납니다. 좋은 수치만 골라 보여주는(cherry-pick) 장치를 두지 않았습니다. 실제로 엽채류처럼 변동이 큰 품목은 단기 오차가 크게 나옵니다 — 이 역시 페이지에서 확인됩니다.
재현법
- 직접 확인: https://ecochn.org/track-record — 전체 요약(평균·중앙값 오차), 품목별 오차, 신호별 결과, 시간에 따른 추이 차트를 공개하고 있습니다. 표본 수와 기준일을 함께 표기합니다.
- 방법 재현: 위 "방법" 섹션의 정의대로 — 과거 예측치와 target_date 실측을 짝지어 MAPE를 계산하고, 같은 짝에 대해 "작년 같은 달 대표타입 실측 중앙값"을 기준선 예측치로 놓아 병렬 채점하면 동일한 프레임을 재현할 수 있습니다.
- 데이터 출처: 도매가는 공공데이터포털 aT(B552845) 및 도매시장 경락(at.go.kr), 기상 외생변수는 기상청 ASOS. 전부 공개 정부 데이터입니다.
맺음 — 왜 이런 노트를 쓰나
농산물 가격 예측은 확률적입니다. 우리는 "맞힙니다"라고 말하지 않고, "이만큼 벗어났고, 기준선 대비 이 정도였으며, 이 부분은 아직 검증 전"이라고 말합니다. 결재 서류에 붙일 근거가 필요한 쪽(법인 구매팀·다품목 벤더·무역상)에게, 틀린 수치까지 공개된 실적표는 오히려 방어 논리가 됩니다. 정직한 수치가 과장된 수치보다 실무에서 더 오래 쓰입니다.
다음 노트에서는 30일·90일 표본이 쌓이는 대로 장기 horizon의 실적을 같은 포맷으로 공개할 예정입니다. (발행 캘린더는 약속하지 않습니다 — 쓸 내용이 쌓였을 때만 냅니다.)
고지
이 노트는 투자·매매 조언이 아닙니다. EcoChain은 공개 데이터 기반의 가격 참고 정보를 제공하며, 구매·계약 의사결정의 책임은 이용자에게 있습니다.