지표를 예쁘게 만드는 다섯 가지 방법, 그리고 그걸 피하려고 한 일

2026-07-30

지표를 만들어 놓고 "과거에 잘 맞았다"고 말하는 것은 생각보다 쉽습니다. 어렵게 만드는 쪽이 오히려 품이 듭니다. 이 글은 성적을 예쁘게 만드는 방법 다섯 가지를 먼저 늘어놓고, 이 사이트가 각각에 대해 무엇을 했는지를 적습니다.

읽고 나서 다른 지표를 볼 때도 같은 질문을 던져 보시면 좋겠습니다. 대개 다섯 개 중 하나는 걸립니다.

하나, 미래를 참조하기

가장 흔하고 가장 치명적입니다. 2월의 점수를 계산하면서 4월에 발표된 숫자를 쓰는 것입니다. 일부러 하는 경우는 드뭅니다. 대부분은 데이터를 기준일 기준으로 저장해 놓고 그걸 그대로 쓰면서 생깁니다.

수출 통계를 예로 들면, 6월 수출 실적은 6월치이지만 실제로 공표되는 건 7월입니다. 6월 1일 점수를 계산하면서 6월 수출 실적을 넣으면, 그날 세상에 없던 정보를 쓴 것입니다. 이렇게 만든 지표는 과거에 놀랍도록 잘 맞습니다. 당연합니다. 답을 보고 푼 것이니까요.

막는 방법. 지표마다 기준일과 공표일을 따로 저장하고, 점수를 계산할 때는 공표일 기준으로만 값을 가져옵니다. 그날 실제로 알 수 있었던 것만 씁니다. 이 둘의 간격을 실제로 재 봤더니 최근 180일간 관측 122건에서 중앙값 79일, 최대 170일이었습니다. 같은 날 나온 경우는 2.5%뿐이었습니다. 이 간격을 무시하면 평균 두 달 반 앞을 미리 본 셈이 됩니다.

둘, 표본이 여덟 개인데 결정계수를 자랑하기

점 여덟 개에 직선을 그으면 결정계수는 웬만해선 높게 나옵니다. 점이 적을수록 우연히 잘 맞을 확률이 높기 때문입니다. 그래서 상관계수나 결정계수를 자랑하는 지표를 볼 때는 먼저 표본 수를 찾아봐야 합니다. 안 적혀 있으면 대개 이유가 있습니다.

막는 방법. 검증 목표마다 최소 표본 수를 미리 정하고, 그 수에 도달하기 전에는 성적 자체를 계산하지 않습니다. 최소 표본은 250으로 잡았습니다. 그리고 표본이 몇 개인지를 화면에 그대로 적습니다.

현재 상태는 이렇습니다.

검증 목표표본상태
종합 지수 대 사이클 국면365건 (실현 305건)하한 도달, 그러나 대부분이 복원 구간
종목 점수 대 이후 수익률9건미달, 충족 예상 2027-09-24

두 번째 줄이 정직한 상태입니다. 표본이 9개니까 성적을 낼 수 없고, 지금 속도로 모으면 2027년 9월은 되어야 250개가 찹니다. 그때까지는 "모르겠다"가 맞는 답입니다.

셋, 없는 값을 채워 놓고 실측인 척하기

과거 곡선을 그리려면 과거의 모든 지표 값이 있어야 하는데, 실제로는 구멍이 숭숭 납니다. 그 구멍을 그럴듯한 기본값으로 메우면 곡선은 매끈해집니다. 문제는 그 곡선을 본 사람이 매끈한 부분과 실제로 잰 부분을 구별할 수 없다는 것입니다.

막는 방법. 복원한 과거 구간에 대해 실측 비중을 계산해서 공개합니다. 현재 기준으로 68.33%가 실측, 31.67%가 기본값입니다. 기본값 비중이 큰 순서대로 미래 주당순이익 추정(0.1667), 마이크론·TSMC 발언 톤(0.10), 미래 주가수익비율(0.05)입니다.

31.67%는 작은 숫자가 아닙니다. 이 값을 적어 두는 이유는 자랑하려는 게 아니라, 과거 곡선의 3분의 1이 추정이라는 사실을 보는 사람이 알아야 하기 때문입니다.

넷, 정답을 재료에 섞기

이게 가장 알아채기 어렵습니다. 맞히려는 대상과 재료가 몰래 겹치는 경우입니다. 예를 들어 "사이클 국면"을 맞히려는데, 그 국면을 정의할 때 쓴 것과 같은 계열의 지표가 점수 재료에도 들어가 있으면, 지수는 자기가 답의 일부를 미리 들고 있는 셈입니다. 성적은 좋게 나오고, 그 성적은 아무 의미가 없습니다.

막는 방법 — 그리고 아직 못 막은 것. 이건 솔직히 말하는 편이 낫습니다. 이 문제는 현재 미해결로 남아 있습니다. 검증 목표 중 하나에서 정답 정의와 재료 사이에 겹침이 남아 있다는 걸 알고 있고, 알려진 문제 목록에 1번으로 올려 두었습니다. 검증표에도 그대로 적어 두었습니다.

고치는 방법은 알고 있습니다. 정답 쪽 정의에서 겹치는 계열을 빼거나, 그 계열을 지수 재료에서 빼는 것입니다. 어느 쪽이든 지수의 값이 바뀌므로 사양 개정 절차를 밟아야 하고, 그래서 아직 못 했습니다. 다만 모르는 채로 있는 것과 알면서 적어 두는 것은 다르다고 생각합니다.

다섯, 차트의 왼쪽 끝을 늘리기

시각적인 방법입니다. 차트가 시작하는 지점을 저점 직전으로 옮기면 같은 데이터가 훨씬 극적으로 보입니다. 지표를 만든 사람이 아니라 차트를 그린 사람이 저지르는 종류의 왜곡입니다.

막는 방법. 곡선의 시작점을 손으로 고르지 않고, 복원이 신뢰할 만한 구간의 경계로 고정합니다. 현재 차트의 왼쪽 끝은 2025-02-05입니다. 원래는 2026-01-29였는데, 복원 자료를 더 확보하면서 11개월을 내렸습니다. 늘린 이유는 그림이 예뻐서가 아니라 그 구간의 실측 비중이 기준을 넘겼기 때문이고, 그 사실을 여기 적는 이유는 다음에 또 옮기면 또 적기 위해서입니다.

그래서 지금 성적이 어떤가

아직 없습니다. 이게 이 글의 결론입니다.

검증 지평은 60거래일로 잡았습니다. 점수가 나온 뒤 60거래일이 지나야 그 점수가 맞았는지 셀 수 있습니다. 최소 표본은 250이고, 위 표에서 보셨듯 하나는 겨우 하한에 닿았지만 대부분이 복원 구간이라 실질적으로는 아직 미측정이고, 다른 하나는 9건입니다.

이걸 그대로 /verify에 공개하고 있습니다. 알려진 문제도 네 건을 목록으로 적어 두었고, 1번이 위에서 말한 미해결 항목입니다.

지표를 소개하는 글이 "아직 맞았는지 모릅니다"로 끝나는 게 이상해 보일 수 있습니다. 그런데 표본 9개로 성적을 발표하는 것보다는 이쪽이 낫다고 생각합니다. 2027년 9월에 표본이 차면 그때 결과를 그대로 적겠습니다. 나쁘게 나와도 적겠습니다. 그러려고 미리 목표와 기준을 못 박아 둔 것입니다.

지수의 구조 자체는 업황을 매일 0~100점으로 재는 방법에, 계산식을 어디에 두었는지는 계산식을 코드가 아니라 JSON에 둔 이유에 적었습니다.

#검증 #백테스트 #방법론
이전 글베타와 결정계수로 메모리 종목 네 개의 흔들림을 비교해 봤습니다다음 글지표는 늦게 옵니다 — 기준일과 공표일 사이 중앙값 79일목록글 전체 보기
이 글의 숫자는 공개 API 실측값이거나 회사가 직접 낸 발표문에서 가져온 것입니다. 지수와 점수는 제가 만든 계산의 결과이지 사실이 아니며, 계산식은 검증 페이지에 전부 공개돼 있습니다. 투자 자문이 아니고 매매 권유도 아닙니다.