2026. 8. 27. 19:27ㆍ재테크/퀀트
이전 글
https://cascade.tistory.com/188
방구석 퀀트일기 3편 : 시그널 만들기 (규칙 기반)
cascade.tistory.com
RSI, 거래량, MACD, MA 기반으로 "X=-15% 손절규칙 하 수익을 내는 에피소드"를 찾는 시도는 유의미한 결과를 내지 못했다.
슬슬 머신러닝을 쓸 때가 온 것 같다.
우리는 현재 에피소드 약 십만 개 가지고 있다.
pykrx에서 가져온 데이터는 각종 기관과 외국인으로부터의 수급과 olhcv 데이터가 모두 있고, 마음 같아서는 이들을 모두 때려넣고 돌리고 싶지만, 그러면 무조건 과적합이 나온다.
유의미한 feature들만 선별해서 넣고 모델을 만든 뒤, test는 반드시 데이터 오염이 없는 완전히 별개의 연도 구간에서 진행해야 한다.
종가, 거래대금, 거래량 세 종류의 데이터를 진입일 전날부터 60일 전날까지 해서 총 180개의 피쳐를 만들고, 이것으로 lightGBM을 학습시켰다.

왜 close, volume, amount 세 가지를 선택했느냐.... 다양한 피쳐 종류를 조합해 봤지만 과적합이 안 나오면서 0.5% 리프트가 가장 유의미하게 개선되는 조합이다.
20개의 시드로 학습 결과, 약 12%정도였던 베이스 확률을 2.64배 개선하여 33% 정도의 확률로 ret>0짜리 에피소드를 구별해 낼 수 있었다.
또한 GBM 학습 시 리프트가 2~3 사이에서 신뢰구간이 꽤 넓었는데, 20개 시드로 학습한 결과를 앙상블하여 15회 이상 선택된 에피소드만 선택하기로 하였다.

서로 다른 시드로 학습한 20개의 GBM이 true라고 찍은 에피소드들 간에 겹침이 얼마나 발생하는지를 분석해 보았다. 총 20개의 시드 중 15개 이상에서 true로 찍은 에피소드들을 선택하는 것으로 했다.

왜 하필 15개냐, cutoff 17 이상에서는 신뢰구간이 급격하게 벌어지면서 모델 성능이 매우 떨어질수도 있는 것을 확인하였다.

GBM 들은 어떤 피처로 상승 종목을 잡은 것일까?

선택된 에피소드들의 이전 60일 가격을 확인하니, 진입일은 "눌림목"에 해당하는 시점이었다. SHAP으로 검증했을 때에도, 진입일 대강 20일 정도 전에 하락 패턴을 중요하게 보는 것 같았다. 예시로 두 가지 종목의 SHAP 히트맵을 가져왔다.


GBM들은 진짜 눌림목을 보고 있는 걸까? 모델이 true로 채택한 에피소드들과 나머지 전체 후보군의 거래일 기준 60일 가격을 비교해 보았다. 전체 후보군은 진입 전 60일간 평평(±3%)인데 GBM 고빈도 선택군만 -31% 하락 후 진입하는 것을 알 수 있었다.

눌림목 패턴을 검증하다가 재밌는 이상치를 하나 발견했는데, 진입 전 60일 하락폭 상위권을 눈으로 검수하던 중, 어떤 종목 하나가 -66%라는 말도 안 되는 낙폭을 찍고 있었다. 확인해보니 블루산업개발(006740)로, 2023년 11월에 7거래일 연속 하한가를 기록한 종목이었다. (이 종목이 "눌림목 매수 후 반등"이라는 우리 모델의 논리를 오염시키고 있는 건 아닌지 걱정했는데, 확인해보니 다행히 이 종목 하나를 빼도 core 그룹의 하락 패턴(평균 -31% 후 진입)은 그대로 유지됐다. 즉 진짜 눌림목 패턴이지, 극단적 이상치 하나가 평균을 끌고 간 착시는 아니었다는 뜻이다.
그래도 실전에서 이런 종목을 모델이 "저점 매수 기회"로 착각해서 물리면 곤란하니, 이런 케이스는 다음 단계에서 별도 필터링이 필요해 보인다.
'재테크 > 퀀트' 카테고리의 다른 글
| 방구석 퀀트일기 3편 : 시그널 만들기 (규칙 기반) (0) | 2026.08.26 |
|---|---|
| 방구석 퀀트일기 2편 : 랠리 정의하기 + 기술적 지표는 의미가 있을까? (0) | 2026.08.17 |
| 방구석 퀀트일기 1편 : 알고리즘 매매를 시작하다 (0) | 2026.08.17 |