기본적 분석 1장: 재무지표를 주가 데이터와 연결하는 법

기본적 분석은 “좋은 기업을 찾는 방법”으로 설명되지만, 데이터 분석에서는 질문을 더 정확하게 써야 합니다.
특정 시점에 관측할 수 있었던 재무지표가 이후 수익률과 관련이 있었는가?
이 질문을 바꾸지 않으면 결과가 좋아 보여도 실제 투자 시점에는 사용할 수 없는 정보가 섞일 수 있습니다. 이 시리즈는 2024년 1월 2일부터 2026년 9월 4일까지의 가격·재무 데이터와 거래대금 상위 300개 종목을 사용한 탐색 분석입니다. 표본은 KOSPI 170개, KOSDAQ 130개이며 2025년 연간 재무 데이터를 보유한 종목은 294개입니다.
먼저 고정해야 할 네 가지
섹션 제목: “먼저 고정해야 할 네 가지”| 항목 | 이번 시리즈의 기준 |
|---|---|
| 분석 단위 | 종목-거래일 관측치 |
| 설명 변수 | PER, PBR, ROE, ROA, 부채비율, 마진, 성장률, 배당수익률 등 |
| 결과 변수 | 관측일 종가 이후 5·20·60거래일 수익률 |
| 검증 구간 | 2026-01-01 ~ 2026-09-04 |
단, 연간 재무지표가 실제 시장에 발표된 날짜까지 완전히 반영된 데이터인지 확인되지 않는다면 이 결과는 시점 누수 가능성이 있는 탐색 결과로 봐야 합니다. 연간 결산 숫자를 1월 1일부터 사용한 것처럼 처리하면 미래 정보를 과거에 미리 알고 투자한 셈이 될 수 있습니다.
수익률을 먼저 정의하기
섹션 제목: “수익률을 먼저 정의하기”import pandas as pd
prices = pd.read_csv("ohlcv.csv", dtype={"code": str})prices = prices.sort_values(["code", "date"])
for horizon in [5, 20, 60]: prices[f"forward_{horizon}d"] = ( prices.groupby("code")["close"].shift(-horizon) / prices["close"] - 1 )이 수익률은 수수료, 세금, 슬리피지, 배당을 반영하지 않은 가격 수익률입니다. 신호를 종가 기준으로 계산했다면 체결은 다음 거래일로 미뤄야 하며, 그렇지 않으면 당일 종가를 알고 같은 가격에 매수한 것처럼 계산될 수 있습니다.
재무지표를 붙일 때 생기는 함정
섹션 제목: “재무지표를 붙일 때 생기는 함정”재무지표를 거래일마다 반복해서 붙이는 것 자체는 편리하지만, 다음 조건이 지켜져야 합니다.
- 재무지표의 기준일이 아니라 공시·발표일 이후에만 사용합니다.
- 결측치를 전체 표본 중앙값으로 채우면 종목·섹터별 결측 패턴이 사라지므로 별도 표시합니다.
- 현재 살아 있는 종목만 모으면 상장폐지·거래정지 종목이 빠지는 생존자 편향이 생깁니다.
- 같은 기업의 연속된 거래일은 독립 표본이 아니므로 유의확률보다 기간별·종목별 재현성을 봅니다.
이번 시리즈에서 말할 수 있는 것과 없는 것
섹션 제목: “이번 시리즈에서 말할 수 있는 것과 없는 것”현재 결과는 “어떤 지표가 반드시 주가를 예측한다”는 증명이 아닙니다. 동일한 표본과 제한된 기간에서 분위수별 미래 수익률이 어떻게 달랐는지 보여주는 가설 탐색입니다. 평균수익률 하나만으로 결론을 내리지 않고 중앙값, 양수 비율, 최대낙폭, 섹터별 결과를 함께 보겠습니다.
다음 장에서는 가장 널리 쓰이는 가치 지표인 PER을 보되, 금융업·적자 기업·일회성 이익처럼 PER이 왜곡되는 경우부터 분리해 보겠습니다.
분석 체크리스트
섹션 제목: “분석 체크리스트”- 이 숫자는 시장이 언제 알 수 있었는가?
- 미래 수익률의 시작 가격과 체결 시점은 일관적인가?
- 표본에서 빠진 종목은 없는가?
- 평균과 중앙값이 같은 방향인가?
- 다른 기간·섹터에서도 같은 결과가 나오는가?
이 다섯 질문에 답하지 못한 백테스트는 정교한 표보다 먼저 데이터 설계를 다시 봐야 합니다.
이 글은 교육 및 연구 목적의 자료이며 특정 종목의 매수·매도를 권유하지 않습니다. 과거의 분석 결과는 미래 수익을 보장하지 않습니다.



