AI 투자 실험실, 복기 결과를 평균이 아니라 분포로 다시 봤다

지난번에는 관찰 후보의 이후 흐름을 KOSPI와 비교해봤다. 후보 평균 수익률만 보면 해석이 애매해서, 같은 기간 KOSPI가 얼마나 움직였는지도 같이 보자는 생각이었다.

그런데 KOSPI를 붙이고 나니 또 다른 고민이 생겼다. KOSPI가 시장 대표 지표이긴 하지만, 항상 내가 보고 있는 후보군과 같은 성격의 비교 대상은 아닐 수 있었다. 특히 삼성전자와 SK하이닉스처럼 KOSPI에 큰 영향을 주는 종목이 강하게 움직인 구간이라면, KOSPI 수익률 자체가 대형주 흐름을 크게 반영할 수 있다.

그래서 이번에는 KOSPI 비교에서 한 걸음 더 나아가기로 했다. 같은 기간의 전체 샘플 평균도 같이 보고, 평균값만으로 부족한 부분은 후보별 분포로 다시 확인해보기로 했다.

KOSPI만 비교 기준으로 두기엔 애매했다

처음에는 후보 평균 수익률과 KOSPI 수익률을 비교하면 충분할 줄 알았다.

예를 들어 후보 평균 수익률이 10%이고 KOSPI가 20% 올랐다면, 후보가 올랐더라도 시장 대비로는 약했다고 볼 수 있다. 반대로 후보 평균 수익률이 -10%이고 KOSPI가 -15%였다면, 후보가 빠졌더라도 시장보다 덜 약한 흐름일 수 있다.

이런 비교는 분명 필요했다.

하지만 막상 리포트를 보면서 생각해보니, KOSPI 하나만 기준으로 쓰는 것도 조심해야 했다. KOSPI는 시가총액 가중 지수라서 대형주의 영향이 크다. 특히 특정 기간에 삼성전자나 SK하이닉스 같은 대형 반도체주가 강하게 움직이면, KOSPI 수익률도 그 흐름에 크게 영향을 받을 수 있다.

반면 내가 만든 관찰 후보는 criteria와 top-N 정렬을 거쳐 나온 목록이다. 삼성전자나 SK하이닉스가 어떤 기간에는 조건을 통과하지 못할 수도 있고, 통과했더라도 top-N 정렬에서 뒤로 밀릴 수도 있다. 그러면 관찰 후보 평균과 KOSPI를 비교할 때, 후보군과 비교 기준의 성격이 달라질 수 있다.

그래서 KOSPI 대비 차이는 계속 보되, 그것 하나만으로 판단하지 않기로 했다.

전체 샘플 평균을 추가했다

다음 비교 기준으로 선택한 것은 전체 샘플 평균이었다.

현재 실험에서는 50개 샘플 종목을 사용하고 있다. 그렇다면 같은 이후 기간에 대해 이 50개 샘플 전체의 평균 수익률을 계산할 수 있다. 이 값은 KOSPI처럼 시장 전체를 대표하는 지표는 아니지만, 적어도 내가 실제로 비교하고 있는 샘플 우주 안에서의 평균 흐름을 보여준다.

그래서 review summary에 아래 값을 추가했다.

전체 샘플의 이후 수익률 평균
후보 평균 수익률 - 전체 샘플 평균 수익률

기존에는 후보 평균 수익률과 KOSPI 대비 차이만 봤다면, 이제는 세 가지를 같이 보게 됐다.

후보 평균 이후 수익률
KOSPI 대비 차이
전체 샘플 평균 대비 차이

이렇게 하면 해석이 조금 더 균형 잡힌다. KOSPI 대비로는 약해 보여도 전체 샘플 평균보다는 나을 수 있고, 반대로 KOSPI와 샘플 평균 모두보다 약할 수도 있다.

같은 결과도 비교 기준에 따라 다르게 보였다

전체 샘플 평균을 붙이니, 기존 복기 결과가 조금 다르게 보였다.

2026년 4월 관찰 후보를 2026년 5월~6월 데이터로 복기한 결과를 보면, KOSPI 대비로는 모두 마이너스였다.

2026-04 관찰 → 2026-05~06 이후

common: KOSPI 대비 -20.80%p
stability_first: KOSPI 대비 -21.71%p
volume_first: KOSPI 대비 -8.37%p

KOSPI만 보면 세 결과 모두 약해 보인다. 그런데 전체 샘플 평균과 비교하면 volume_first는 다르게 보였다.

common: 샘플 평균 대비 -2.99%p
stability_first: 샘플 평균 대비 -3.91%p
volume_first: 샘플 평균 대비 +9.43%p

이건 꽤 흥미로웠다. KOSPI 대비로는 약했지만, 전체 샘플 평균 대비로는 volume_first가 플러스였다. 즉 이 기간에는 KOSPI가 매우 강했거나, KOSPI를 끌어올린 일부 대형주 흐름이 후보군 전체와는 달랐을 가능성을 같이 봐야 했다.

2026년 1월 관찰 후보를 2026년 2월에 복기한 결과도 비슷한 고민을 줬다.

2026-01 관찰 → 2026-02 이후

common: 후보 평균 +13.15%, KOSPI 대비 -13.00%p, 샘플 평균 대비 -6.18%p
stability_first: 후보 평균 +12.14%, KOSPI 대비 -14.02%p, 샘플 평균 대비 -7.20%p
volume_first: 후보 평균 +15.06%, KOSPI 대비 -11.10%p, 샘플 평균 대비 -4.27%p

절대 수익률만 보면 전부 양수였다. 하지만 KOSPI와 전체 샘플 평균 모두 더 강했다. 그래서 이 결과는 “후보가 올랐다”보다는 “후보도 올랐지만, 비교 기준보다 약했다”에 가깝게 봐야 했다.

이런 차이를 보니, 복기에서는 비교 기준을 하나만 두면 위험하다는 생각이 들었다.

평균만 봐도 또 부족했다

전체 샘플 평균을 추가하고 나니 해석이 좋아졌지만, 여전히 평균 중심이라는 한계가 남았다.

평균은 편하다. 한 줄로 결과를 요약할 수 있다. 하지만 후보가 10개 있을 때, 그중 한두 개가 크게 움직이면 평균이 크게 달라질 수 있다. 반대로 대부분 후보가 비슷하게 움직였는지, 일부 후보만 결과를 끌어올렸는지는 평균만으로 알기 어렵다.

그래서 후보별 분포도 같이 보기로 했다.

이번에 추가한 값은 이런 것들이다.

KOSPI 대비 차이 플러스 후보 수
KOSPI 대비 차이 마이너스 후보 수
KOSPI 대비 차이 중앙값
KOSPI 대비 차이 최솟값
KOSPI 대비 차이 최댓값

전체 샘플 평균 대비 차이 플러스 후보 수
전체 샘플 평균 대비 차이 마이너스 후보 수
전체 샘플 평균 대비 차이 중앙값
전체 샘플 평균 대비 차이 최솟값
전체 샘플 평균 대비 차이 최댓값

이제 평균만 보는 게 아니라, 후보들이 어느 쪽으로 얼마나 퍼져 있는지도 볼 수 있다.

분포를 보니 해석이 더 조심스러워졌다

2026년 3월 관찰 후보를 2026년 4월에 복기한 결과는 평균 수익률만 보면 꽤 좋아 보였다.

후보 평균 이후 수익률은 28.81%였다. 같은 기간 KOSPI 수익률은 20.45%, 전체 샘플 평균은 12.44%였다. 평균만 보면 후보가 꽤 강하게 움직인 것처럼 보인다.

그런데 후보별 분포를 보면 조금 더 조심스럽다.

2026-03 관찰 → 2026-04 이후

KOSPI 대비:
플러스 2개 / 마이너스 3개
중앙값 -2.58%p

전체 샘플 평균 대비:
플러스 4개 / 마이너스 1개
중앙값 +5.43%p

KOSPI 대비로는 후보 5개 중 3개가 마이너스였고, 중앙값도 마이너스였다. 반면 전체 샘플 평균 대비로는 4개가 플러스였고 중앙값도 플러스였다.

같은 결과인데, 비교 기준에 따라 해석이 달라졌다. KOSPI 대비로는 애매하지만, 전체 샘플 평균 대비로는 상대적으로 나아 보인다.

이건 단순한 수익률 숫자보다 더 중요한 정보였다. 평균이 좋아 보인다고 해도, 후보 전체가 고르게 좋았는지, 일부 후보가 끌어올린 것인지, 비교 기준에 따라 어떤 차이가 생기는지 같이 봐야 했다.

리포트도 다시 고쳤다

이번 변경은 summary CSV에만 넣지 않았다. HTML 리포트에도 후보별 차이 분포 표를 추가했다.

이제 리포트에서는 기간별로 아래 내용을 같이 볼 수 있다.

후보 평균 이후 수익률
KOSPI 대비 차이
전체 샘플 평균 대비 차이
KOSPI 대비 플러스/마이너스 후보 수
전체 샘플 평균 대비 플러스/마이너스 후보 수
중앙값

LLM 검토용 Markdown 체크포인트에도 같은 내용을 추가했다. Codex나 다른 LLM에게 다시 읽힐 때도 평균만 보지 않고, 후보별 분포를 같이 보도록 하기 위해서다.

이전에는 Codex에게 복기 리포트를 읽히고 다음 확인 포인트를 정리하게 했다. 그때 나온 이야기 중 하나가 “평균만 보지 말고 후보별 분포를 보자”였다. 이번 작업은 그 체크포인트를 실제 리포트에 반영한 셈이다.

중요한 건, 이걸 보고 바로 criteria를 바꾸지는 않았다는 점이다. 아직 데이터가 많지 않기 때문이다. 지금은 기준을 바꾸기보다는 복기 결과를 자세하게 해석하기 위한 기능을 하나씩 붙여보는 단계다.

복기 기간도 하나 더 추가했다

기존에는 복기 기간이 많지 않았다. 그래서 이번에는 2026년 1월 데이터를 추가로 수집해, 2026년 1월 관찰 후보를 2026년 2월 데이터로 복기했다.

이제 현재까지 복기 흐름은 이렇게 됐다.

2026-01 관찰 → 2026-02 복기
2026-02 관찰 → 2026-03 복기
2026-03 관찰 → 2026-04 복기
2026-04 관찰 → 2026-05~06 복기

아직 많다고 할 수는 없지만, 적어도 한두 개 결과만 보고 판단하는 단계에서는 조금 벗어났다.

1월 관찰 → 2월 복기에서는 후보 평균 수익률이 모두 양수였지만, KOSPI와 전체 샘플 평균 대비로는 모두 마이너스였다. 3월 관찰 → 4월 복기에서는 평균은 좋았지만, KOSPI 대비 후보별 분포는 애매하게 나왔다. 4월 관찰 → 5월~6월 복기에서는 KOSPI 대비와 샘플 평균 대비 해석이 다르게 나타났다.

이렇게 여러 기간을 붙여보니, 하나의 숫자로 기준을 판단하기가 더 어렵다는 걸 느꼈다. 하지만 동시에, 어떤 항목을 더 봐야 하는지는 조금 더 선명해졌다.

아직 criteria는 바꾸지 않았다

이번 작업을 했다고 해서 criteria가 완성된 것은 아니다. v0.3을 만든 것도 아니고, volume_firststability_first 중 하나를 선택한 것도 아니다.

지금은 기준을 바꾸기 전 단계다. 후보를 뽑고, 저장하고, 다음 기간에 복기하고, KOSPI와 전체 샘플 평균을 붙이고, 후보별 분포를 확인하는 구조를 다듬는 중이다.

다음에 해야 할 일은 더 많은 기간을 추가하는 것이다. 그리고 여러 기간에서 반복적으로 나타나는 문제가 있는지 봐야 한다.

예를 들어 이런 질문을 더 확인해야 한다.

KOSPI 대비로는 약하지만 샘플 평균 대비로는 괜찮은 구간이 반복되는가?
volume_first는 상승 구간에서만 강하게 보이는가?
stability_first는 하락 구간에서 상대적으로 덜 약한가?
common 후보는 후보 수를 줄이는 데만 의미가 있는가, 아니면 복기 결과에서도 특징이 있는가?

이런 질문에 답하려면 아직 더 많은 기간이 필요하다. 그래서 이번에는 기준을 바꾸지 않고, 리포트를 더 정확하게 보는 쪽에 집중했다.

이번 작업에서 정리된 흐름

이번 작업까지 포함하면 복기 흐름은 이렇게 정리할 수 있다.

관찰 후보 생성
→ observation CSV 저장
→ 이후 기간 복기
→ review summary CSV 생성
→ KOSPI 대비 차이 계산
→ 전체 샘플 평균 대비 차이 계산
→ 후보별 차이 분포 확인
→ 사람용 HTML 리포트 생성
→ LLM용 Markdown 체크포인트 생성

처음에는 후보 평균 수익률만 봤다. 그런데 그것만으로는 부족했다. 그래서 KOSPI와 비교했다. KOSPI도 완전히 중립적인 기준은 아닐 수 있어서 전체 샘플 평균도 추가했다. 평균만으로는 일부 후보의 영향을 구분하기 어려워서 후보별 분포까지 추가했다.

이제 복기 리포트가 조금 더 조심스러워졌다. 어떤 결과를 단정하기보다는, 비교 기준을 나눠보고, 평균과 분포를 같이 확인하는 쪽으로 바뀌었다.

투자 유의사항

이 글은 개인적인 개발 실험 기록이며, 특정 종목이나 금융상품에 대한 매수·매도 추천이 아닙니다. 글에서 언급한 관찰 후보, 복기 결과, KOSPI 대비 차이, 전체 샘플 평균 대비 차이는 투자 판단 기준이 아니라 데이터 실험을 위한 참고 자료입니다. 실제 투자 판단은 개인의 상황, 자금 계획, 리스크 감내 수준 등을 종합적으로 고려해 신중하게 결정해야 합니다.

Scroll to Top