콘텐츠로 이동

블로그

수정주가와 원주가의 차이: 금융 데이터 분석과 백테스트의 필수 기초

수정주가와 원주가 개념 시각화

과거 주가 차트를 열어보았을 때, 2018년 이전 삼성전자의 주가가 5만 원대로 표시되어 의아했던 적이 있으신가요? 당시 신문 기사에서는 1주에 250만 원이 훌쩍 넘는 대표적인 ‘황제주’로 불렸는데 말입니다.

금융 데이터 분석이나 퀀트 백테스트를 처음 시작할 때 가장 흔하게 마주치는 혼란 중 하나가 바로 원주가(수정 전 주가, Unadjusted / Raw Price)와 수정주가(Adjusted Stock Price)의 구분입니다. 겉보기에는 단순한 가격 표기 방식의 차이처럼 보이지만, 이를 제대로 이해하지 못하고 백테스트나 분석 모델에 원주가를 그대로 넣으면 하루아침에 -80% 폭락이 발생한 것으로 인식되거나 모델의 가중치가 통째로 왜곡되는 치명적인 오류가 발생합니다.

이번 글에서는 원주가와 수정주가의 개념, 자본 변동 이벤트별 보정 메커니즘, 그리고 데이터 분석 및 백테스트 실무에서 반드시 확인해야 할 주의점을 정리합니다.


1. 원주가(Unadjusted Price)란 무엇인가?

섹션 제목: “1. 원주가(Unadjusted Price)란 무엇인가?”

원주가(수정 전 주가)는 해당 거래일 당시 한국거래소(KRX) 등 시장에서 실제로 체결되고 거래장에 공식 기록되었던 액면 그대로의 가격(Nominal / Raw Price)을 뜻합니다.

  • 실제 거래 체결 증명: 매매 당일 투자자가 지불한 실제 금액과 계좌 잔고 증명의 기준입니다.
  • 역사적 시가총액 계산: 과거 특정 시점의 기업 규모를 측정할 때 당시의 실제 상장주식수와 원주가를 곱해 계산합니다. 시가총액원주가실제발행주식수
  • 호가 단위(Tick Size) 및 최소 주문 금액 파악: 당시 시장 참여자가 직면했던 실제 호가 단위와 진입 장벽을 복원할 때 필요합니다.

원주가의 한계: 시계열의 인위적 단절

섹션 제목: “원주가의 한계: 시계열의 인위적 단절”

원주가만으로 장기 시계열을 분석하면 심각한 문제가 발생합니다. 기업이 액면분할, 액면병합, 무상증자, 유상증자, 감자 등 자본 변동을 단행할 때마다 주가 시계열에 급격한 갭(Gap)과 단절이 발생하기 때문입니다.

예를 들어 주가가 250만 원이던 주식이 50:1 액면분할을 하면 다음 날 아침 주가는 5만 원으로 시작합니다. 회사의 본질 가치나 주주의 자산 총액은 변함이 없는데, 원주가 시계열만 보면 하루 만에 주가가 98% 폭락한 것처럼 보이게 됩니다.


2. 수정주가(Adjusted Stock Price)란 무엇인가?

섹션 제목: “2. 수정주가(Adjusted Stock Price)란 무엇인가?”

수정주가는 액면분할, 증자, 배당 등 주주 가치의 실질적 변화가 없는 자본 변동 이벤트로 인해 발생하는 주가의 불연속성을 제거하기 위해, 과거 주가를 현재 가치 기준에 맞춰 소급 조정한 가격입니다.

수정주가가 반드시 필요한 이유

섹션 제목: “수정주가가 반드시 필요한 이유”
  1. 연속적인 수익률 계산: 주가 수익률은 연속된 두 거래일의 가격 비율로 정의됩니다. 수정주가를 사용해야 자본 변동 이벤트 발생일에도 왜곡 없는 정상적인 일일 수익률()을 얻을 수 있습니다.
  2. 기술적 지표의 유효성 유지: 20일 이동평균선, 볼린저 밴드, RSI, MACD 등 대부분의 기술적 분석 지표는 과거 가격 데이터의 연속성을 전제로 합니다. 원주가를 사용하면 50:1 액면분할이 발생한 날 이후 한 달 동안 이동평균선이 완전히 무너집니다.
  3. 머신러닝·통계 모델의 정상성(Stationarity): 시계열 예측 모델에 가격 데이터를 입력할 때 불필요한 충격(Outlier)을 배제하고 연속적인 패턴을 학습시킬 수 있습니다.

수정 방식의 표준: 후방 수정(Backward Adjustment)

섹션 제목: “수정 방식의 표준: 후방 수정(Backward Adjustment)”

금융 데이터 플랫폼(네이버 증권, Yahoo Finance, 인베스팅닷컴 등)과 증권사 HTS는 대부분 후방 수정(Backward Adjustment)을 표준으로 사용합니다. 즉, 현재 시점의 주가를 그대로 두고, 과거의 주가들을 분할·증자 비율에 맞춰 하향 조정(할인)하는 방식입니다.

과거 250만 원이던 삼성전자 주가가 오늘날 5만 원대로 표시되는 이유가 바로 현재 유통되는 1주 가치에 맞춰 과거 주가를 50분의 1로 환산했기 때문입니다.


3. 시각 자료로 보는 원주가와 수정주가의 차이

섹션 제목: “3. 시각 자료로 보는 원주가와 수정주가의 차이”

실제 주식 시장에서 액면분할이 발생했을 때 원주가와 수정주가가 어떻게 다르게 나타나는지 아래 차트를 통해 한눈에 비교할 수 있습니다.

원주가 vs 수정주가 시계열 및 수익률 비교

상단 그래프를 보면, 거래일 50일 차에 1:5 액면분할이 발생했을 때 원주가(붉은 점선)는 하루 만에 25만 원 수준에서 5만 원 수준으로 수직 낙하합니다. 반면 수정주가(하늘색 실선)는 분할 이전의 가격을 모두 1/5로 소급 적용하여 매끄럽고 연속적인 상승 흐름을 온전히 보존합니다.

하단 일일 수익률 그래프를 보면 차이는 더 극명합니다. 원주가로 계산한 일일 수익률은 분할 당일 -80% 폭락이라는 치명적인 아티팩트(Artifact)를 만들어내며, 이는 백테스트 알고리즘을 즉시 망가뜨리는 원인이 됩니다.


4. 자본 변동 이벤트별 수정 메커니즘

섹션 제목: “4. 자본 변동 이벤트별 수정 메커니즘”

수정주가가 계산되는 대표적인 이벤트와 보정 원리는 다음과 같습니다.

  • 액면분할 (1:N): 주식 액면가를 쪼개 유통 주식 수를 늘립니다. 분할 비율 만큼 과거 주가를 모두 로 나눕니다.
  • 액면병합 (N:1): 여러 주식을 하나로 합쳐 주가를 높입니다. 과거 주가를 모두 배로 곱합니다.

회사의 잉여금을 자본금으로 전입하여 주주들에게 대가 없이 신주를 발행합니다. 예를 들어 1주당 1주의 신주를 배정(100% 무상증자)하면 권리락일 주가는 50% 수준으로 조정되므로, 권리락 이전의 과거 주가를 0.5배로 보정합니다.

신주를 발행해 자금을 조달할 때 통상 기존 주가보다 할인된 가격(할인율 10~30%)으로 발행합니다. 이때 발생하는 권리락 기준가와 직전 종가의 비율을 바탕으로 수정계수(Adjustment Factor)를 산출하여 과거 주가에 곱해줍니다.

배당락일에는 배당금 지급 가치만큼 주가가 이론적으로 하락합니다.

  • 가격 수정주가 (Price Return Adjusted): 배당락은 보정하지 않고 분할/증자만 보정합니다. 일반적인 주가 차트에서 흔히 보는 형태입니다.
  • 총수익 수정주가 (Total Return Adjusted): 배당금을 당일 종가로 전액 재투자했다고 가정한 수정주가입니다. ETF의 분배금 재투자 성과나 장기 복리 백테스트에서 사용됩니다.

5. 원주가 vs 수정주가 핵심 비교

섹션 제목: “5. 원주가 vs 수정주가 핵심 비교”
비교 항목원주가 (Unadjusted Price)수정주가 (Adjusted Price)
정의거래 당일 시장에서 실제 체결된 명목 가격자본 변동 이벤트를 소급 보정한 연속 가격
시계열 연속성단절 발생 (분할·증자 시 급격한 갭)완벽한 연속성 유지
수익률 계산자본 변동일 왜곡 발생 (사용 부적합)장기 시계열 및 연속 수익률 계산에 필수
기술적 지표 산출이동평균선, RSI 등 지표 왜곡정상적인 지표 계산 가능
실제 체결가 일치 여부일치 (당시 거래 영수증과 동일)불일치 (소급 할인된 가상 가격)
주요 활용처체결 확인, 잔고 평가, 역사적 시가총액 산출백테스트, 퀀트 모델링, 차트 분석, 머신러닝

6. 실무 데이터 분석에서 흔히 저지르는 3대 함정

섹션 제목: “6. 실무 데이터 분석에서 흔히 저지르는 3대 함정”

데이터 파이프라인을 구축하거나 퀀트 백테스트 코드를 작성할 때 자주 마주치는 실무 함정들을 짚어보겠습니다.

함정 1: 주가는 수정주가를 쓰면서, 거래량(Volume)은 원데이터를 쓰는 경우

섹션 제목: “함정 1: 주가는 수정주가를 쓰면서, 거래량(Volume)은 원데이터를 쓰는 경우”

가장 흔하면서도 알아채기 힘든 실수입니다. 50:1 액면분할이 일어나면 주가는 50분의 1로 내려가지만, 시장에서 거래되는 주식 수(거래량)는 대략 50배로 늘어납니다.

주가만 수정주가로 바꾸고 거래량을 그대로 두면, 분할 이전의 거래량은 극도로 적고 분할 이후의 거래량만 폭증한 것처럼 왜곡됩니다. 이 상태로 거래량 이동평균이나 OBV(On Balance Volume), 유동성 필터를 계산하면 과거 구간의 거래량 신호가 전부 무용지물이 됩니다.

해결책:

  • 거래량도 주가와 반대 비율로 보정한 **수정거래량(Adjusted Volume = 원거래량 분할비율)**을 사용합니다.
  • 또는 주식 수의 영향을 받지 않는 **거래대금(원주가거래량수정주가수정거래량)**을 유동성 지표의 기준으로 사용합니다.

함정 2: 과거 특정 시점의 주문 수량 계산 오류

섹션 제목: “함정 2: 과거 특정 시점의 주문 수량 계산 오류”

백테스트 시뮬레이션에서 2017년 1월에 보유 자산 1,000만 원으로 삼성전자를 매수하는 로직을 짰다고 가정해 보겠습니다. 만약 수정주가(당시 기준 약 36,000원)로 매수 가능 주식 수를 계산하면 약 277주를 매수한 것으로 계산됩니다.

하지만 2017년 당시 실제 삼성전자 원주가는 약 180만 원이었습니다. 실제로는 5주밖에 살 수 없었고 나머지 현금은 잔액으로 남아 있었어야 합니다. 고가 대형주를 다룰 때 수정주가만으로 매수 수량을 계산하면 소수점 단위 매매나 최소 투자 단위 왜곡이 생길 수 있습니다.

함정 3: 미래 자본 변동으로 과거 데이터가 갱신되는 특성 (Data Versioning)

섹션 제목: “함정 3: 미래 자본 변동으로 과거 데이터가 갱신되는 특성 (Data Versioning)”

오늘 어떤 종목이 무상증자나 액면분할을 실시하면, 오늘 기준으로 과거 10년 치 수정주가 데이터 전체가 새롭게 다시 계산(Rewrite)됩니다.

데이터베이스에 과거 수정주가를 한 번 적재해 두고 고정해 버리면(Frozen), 새로 들어오는 주가와 과거 주가 사이의 수정 비율이 어긋나게 됩니다. 반대로 데이터베이스를 관리할 때는 원주가 테이블과 자본변동(수정계수) 테이블을 분리하여 관리하는 것이 안전합니다.


7. Python 코드로 확인하는 수정주가 계산 예시

섹션 제목: “7. Python 코드로 확인하는 수정주가 계산 예시”

간단한 Pandas 코드로 액면분할 시 원주가와 수정주가의 수익률 차이를 확인할 수 있습니다.

import pandas as pd
import numpy as np
# 가상의 주가 데이터 생성 (5일 차에 1:2 액면분할 발생)
df = pd.DataFrame({
"date": pd.date_range("2026-10-01", periods=6),
"raw_close": [100000, 102000, 101000, 104000, 53000, 54000], # 5일차에 1:2 분할
"split_ratio": [1.0, 1.0, 1.0, 1.0, 2.0, 1.0] # 5일차에 2배 분할
})
# 1. 후방 수정계수(Cumulative Adjustment Factor) 계산
# 미래부터 역순으로 누적 곱을 계산
df["adj_factor"] = df["split_ratio"].iloc[::-1].cumprod().iloc[::-1]
# 2. 수정주가 계산: 원주가 / 수정계수 (최신 기준 통일)
# (5일차 이전 과거 주가를 2로 나누어 현재 수준으로 맞춤)
df["adj_close"] = df["raw_close"] / (df["adj_factor"] / df["adj_factor"].iloc[-1])
# 3. 일일 수익률 계산 비교
df["raw_return"] = df["raw_close"].pct_change()
df["adj_return"] = df["adj_close"].pct_change()
print(df[["date", "raw_close", "adj_close", "raw_return", "adj_return"]])
date raw_close adj_close raw_return adj_return
0 2026-10-01 100000 50000.0 NaN NaN
1 2026-10-02 102000 51000.0 0.020000 0.020000
2 2026-10-03 101000 50500.0 -0.009804 -0.009804
3 2026-10-04 104000 52000.0 0.029703 0.029703
4 2026-10-05 53000 53000.0 -0.490385 0.019231 <-- 원주가 -49%, 수정주가 +1.92%
5 2026-10-06 54000 54000.0 0.018868 0.018868

4일 차에서 5일 차로 넘어갈 때, 원주가는 -49% 손실로 기록되지만 수정주가는 정상적인 +1.92% 상승으로 올바르게 반영됩니다.


8. 독자를 위한 실전 체크포인트

섹션 제목: “8. 독자를 위한 실전 체크포인트”

금융 데이터 분석이나 백테스트 파이프라인을 운영할 때 아래 항목들을 반드시 체크해 보세요.

  • 전략 시뮬레이션 및 백테스트: 가격 지표와 수익률 계산에 수정주가를 사용하고 있는가?
  • 거래량 지표 계산: OBV, MFI 등 거래량 기반 지표 계산 시 수정거래량 또는 거래대금을 적용했는가?
  • 실제 포트폴리오 회계 및 주문 집행: 과거 체결 금액, 잔고 증명, 세금 계산 시 원주가와 실제 유통 주식수를 기준으로 검증했는가?
  • 데이터베이스 보관 구조: 원주가(Raw Price)와 자본변동 수정계수(Adjustment Factor)를 분리 보관하여 과거 데이터의 재계산 유연성을 확보했는가?

데이터의 기본이 되는 가격 체계를 정확히 이해하고 정제하는 것이야말로 신뢰할 수 있는 퀀트 전략의 가장 첫 번째 출발점입니다.

기본적 분석 10장: 종목 스크리닝은 추천이 아니라 검토 목록이다

재무지표로 후보 종목을 좁히는 장면

스크리너의 역할은 “무엇을 살까?”에 답하는 것이 아니라, 수백 개 종목을 사람이 검토할 수 있는 목록으로 줄이는 것입니다. 스크리닝 결과에는 좋은 기업도, 가치 함정도, 데이터 오류도 함께 들어갑니다.

이번 스냅샷은 2026년 9월 4일 기준 데이터에서 7개 팩터를 순위화했습니다. 낮은 PER·PBR, 높은 ROE·ROA·배당수익률·매출성장률·영업현금흐름을 선호하고 순위를 합산했습니다.

factors = {
"per": "low",
"pbr": "low",
"roe": "high",
"roa": "high",
"div_yield": "high",
"revenue_growth": "high",
"cash_flow": "high",
}
# 핵심: 기준일 이전에 관측 가능한 값만 사용하고, 결측은 별도 상태로 남긴다.
latest = df.loc[df["date"] == "20260904"].copy()

결측치를 중앙값으로 채운 뒤 상위 종목에 포함시키면, 정보가 없는 기업이 평균적인 기업처럼 보이는 문제가 생깁니다. 실전용 스크리너에서는 결측 여부를 감점하거나 제외하는 규칙을 사전에 정해야 합니다.

현재 원자료의 상위 후보에는 한국타이어앤테크놀로지, 기아, 한국전력, 에스엠, KCC 등이 포함되어 있습니다. 이 표는 매수 목록이 아니라 후속 검토 목록입니다. 예를 들어 한국전력은 낮은 PER·PBR과 높은 ROE가 동시에 보이지만 부채비율도 매우 높습니다. 낮은 밸류에이션이 기회인지 위험의 가격인지 추가 확인이 필요합니다.

확인 항목질문
이익최근 이익이 정상 수준인가?
현금영업현금흐름과 FCF가 양호한가?
부채만기·이자비용·산업 특성을 감안했는가?
성장매출 성장에 마진이 따라오는가?
가격복합 점수와 별개로 최근 주가가 이미 급등했는가?
집중도후보가 특정 산업에 몰려 있지 않은가?
  • 기준일 이후의 재무 공시를 섞지 않습니다.
  • 점수 상위 종목을 “추천”이라고 부르지 않습니다.
  • 업종이 다른 기업의 지표를 단순 비교하지 않습니다.
  • 한 번의 스냅샷으로 장기 전략을 판단하지 않습니다.

스크리닝은 분석의 끝이 아니라 기업의 사업, 공시, 현금흐름을 읽기 시작하는 지점입니다. 다음 장에서는 이 규칙을 시간에 따라 반복했을 때의 성과를 백테스트하되, 먼저 백테스트가 믿을 만한지 감사하는 방법부터 설명합니다.

후보 원본은 스크리닝 CSV에서 확인할 수 있습니다.


이 글은 교육 및 연구 목적의 자료이며 특정 종목의 매수·매도를 권유하지 않습니다.

기본적 분석 11장: 백테스트 결과보다 먼저 검증할 것

기본적 분석 전략의 백테스트를 검증하는 장면

백테스트 표에서 누적수익률이 가장 큰 전략을 찾는 일은 쉽습니다. 어려운 일은 그 수익률이 미래 정보를 사용하지 않았고, 실제로 거래 가능한 방식으로 계산되었는지 확인하는 것입니다.

이번 결과는 탐색용 기준선이다

섹션 제목: “이번 결과는 탐색용 기준선이다”

현재 공개된 기준선은 거래대금 상위 300종목, 2026-01-01~2026-09-04 166거래일, 월별 리밸런싱, 동일가중 상위 25%입니다.

전략누적수익률Sharpe최대낙폭
Value+35.39%1.44-25.52%
Quality+58.26%1.56-34.12%
Composite+48.80%1.63-19.00%

이 수치는 벤치마크와 함께 봐야 하며, 166거래일에 연환산수익률을 크게 표시하면 오해가 커집니다. 짧은 기간의 누적수익률을 1년 성과처럼 받아들이지 않는 것이 중요합니다.

Value 전략 누적수익률

Quality 전략 누적수익률

Composite 전략 누적수익률

2025년 연간 재무지표를 2026년 초부터 사용했다면, 실제 공시일 이전 정보를 사용한 것입니다. 이 시리즈의 현재 데이터에는 기준일과 발표일이 분리되어 있지 않으므로, 위 결과를 실거래 성과로 해석할 수 없습니다.

현재 표본은 분석 시점의 거래대금 상위 300종목입니다. 과거에도 같은 종목만 사용했다면 현재 살아 있는 종목만 남는 생존자 편향이 생길 수 있습니다. 과거 각 리밸런싱 시점의 유니버스를 복원해야 합니다.

신호를 월초 종가로 만들고 같은 종가에 체결하면 안 됩니다. 다음 거래일 시가 또는 현실적인 지정가로 체결하고, 수수료·세금·슬리피지·거래량 제한·상하한가를 반영해야 합니다.

동일한 유니버스·리밸런싱·체결 규칙으로 벤치마크와 전략을 계산해야 합니다. 전략만 거래비용을 부담하고 벤치마크는 비용을 부담하지 않으면 비교가 공정하지 않습니다.

  1. 재무지표에 발표일을 추가합니다.
  2. 월별 시점에서 그날 이용 가능한 값만 사용합니다.
  3. 2024~2025년을 학습 구간, 2026년을 완전히 잠근 테스트 구간으로 둡니다.
  4. 산업 중립 버전과 비중 제한 버전을 함께 실행합니다.
  5. 다른 기간과 비용 가정에서 결과가 유지되는지 확인합니다.

따라서 현재 결과의 정직한 결론은 “이 기간에 Composite의 변동성이 상대적으로 낮았다” 정도입니다. “Quality가 미래에도 가장 좋은 전략”이라는 결론은 아직 뒷받침되지 않습니다.

원자료는 전략 결과 CSV에서 확인할 수 있습니다.


이 글은 교육 및 연구 목적의 자료이며 특정 종목의 매수·매도를 권유하지 않습니다. 과거의 백테스트 결과는 미래 수익을 보장하지 않습니다.

기본적 분석 12장: 기본적 분석과 기술적 분석을 공정하게 결합하는 법

재무 데이터와 가격 신호를 결합하는 장면

기본적 분석은 무엇을 살지 좁히는 데 강하고, 기술적 분석은 언제 위험을 감수할지 판단하는 데 도움을 줄 수 있습니다. 그러나 이 문장은 좋은 가설이지 자동으로 검증된 법칙은 아닙니다.

설계 항목예시
재무 신호산업 내 저PER·저PBR 또는 고ROE
가격 신호MA20 > MA60, 돌파, 모멘텀
결합 방식교집합, 점수 합산, 순차 필터
리밸런싱월 1회, 신호 확인 다음 거래일
포트폴리오동일가중, 종목·산업 비중 제한

교집합은 후보를 줄여 신호를 선명하게 만들 수 있지만, 표본과 분산도 함께 줄입니다. 반대로 점수 합산은 더 많은 종목을 담을 수 있지만 한 신호가 다른 신호를 희석할 수 있습니다.

“통합 전략이 항상 더 좋다”는 결론을 피해야 하는 이유

섹션 제목: ““통합 전략이 항상 더 좋다”는 결론을 피해야 하는 이유”

기술적 신호와 재무 신호를 여러 조합으로 시험한 뒤 가장 좋은 조합만 보여주면 과최적화가 발생합니다. 두 시리즈의 결과를 결합할 때는 다음 조건이 같아야 합니다.

  • 같은 종목 유니버스
  • 같은 가격·재무 데이터의 기준일
  • 같은 미래 정보 차단 규칙
  • 같은 체결 시점과 비용
  • 같은 리밸런싱 주기와 평가 기간

이 중 하나라도 다르면 “기본적 분석으로 후보를 고르고 기술적으로 진입하면 우월하다”는 비교는 성립하지 않습니다. 현재 공개된 기본적 분석 결과에는 발표일 기반의 완전한 point-in-time 처리가 확인되지 않으므로, 통합 성과도 확정 결론으로 제시하지 않습니다.

universe["fundamental_rank"] = (
universe.groupby("industry")["composite_score"]
.rank(pct=True)
)
universe["trend_ok"] = universe["ma20"] > universe["ma60"]
eligible = universe[
(universe["fundamental_rank"] <= 0.25)
& universe["trend_ok"]
]

이 규칙을 과거에 반복 적용할 때는 매월 기준일에 계산하고 다음 거래일에 체결해야 합니다. 결합 전후의 종목 수, 산업 노출, turnover, 최대낙폭을 함께 기록해야 “수익률이 좋아졌다” 이상의 설명이 가능합니다.

이번 탐색에서 저PER·저PBR·복합 점수는 고평가 그룹과 다른 결과를 보였지만, 그 차이는 기간·업종·데이터 시점에 의존합니다. ROE·성장·배당은 기업의 질을 이해하는 데 도움이 되지만 가격과 현금흐름을 대체하지 않습니다. 백테스트는 유용하지만, 발표일과 체결을 통제하지 않으면 과거에만 존재하는 전략이 됩니다.

기본적 분석을 실제 의사결정에 사용할 때의 순서는 다음과 같습니다.

  1. 공시 시점이 확인된 재무 데이터를 사용합니다.
  2. 같은 산업 안에서 가치·퀄리티·성장을 비교합니다.
  3. 현금흐름과 부채로 가치 함정을 걸러냅니다.
  4. 스크리닝 결과를 검토 목록으로만 사용합니다.
  5. 비용·낙폭·실패 구간까지 포함한 out-of-sample 테스트를 합니다.

결국 기본적 분석의 목표는 “좋은 종목 하나를 맞히는 것”이 아니라, 어떤 정보로 어떤 위험을 감수하는지 설명 가능한 규칙을 만드는 것입니다.


이 글은 교육 및 연구 목적의 자료이며 특정 종목의 매수·매도를 권유하지 않습니다. 과거의 백테스트 결과는 미래 수익을 보장하지 않습니다.

기본적 분석 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이 왜곡되는 경우부터 분리해 보겠습니다.

  1. 이 숫자는 시장이 언제 알 수 있었는가?
  2. 미래 수익률의 시작 가격과 체결 시점은 일관적인가?
  3. 표본에서 빠진 종목은 없는가?
  4. 평균과 중앙값이 같은 방향인가?
  5. 다른 기간·섹터에서도 같은 결과가 나오는가?

이 다섯 질문에 답하지 못한 백테스트는 정교한 표보다 먼저 데이터 설계를 다시 봐야 합니다.


이 글은 교육 및 연구 목적의 자료이며 특정 종목의 매수·매도를 권유하지 않습니다. 과거의 분석 결과는 미래 수익을 보장하지 않습니다.

기본적 분석 2장: PER은 낮을수록 좋은가?

PER과 밸류에이션을 비교하는 장면

PER은 주가를 주당순이익으로 나눈 값입니다.

주가주당순이익

직관적으로는 “현재 이익이 계속된다고 가정할 때 몇 년 치 이익을 주가로 지불하는가”를 보여줍니다. 그러나 낮은 PER은 저평가일 수도 있고, 이익이 곧 줄어들 것이라는 시장의 경고일 수도 있습니다.

2024-01-02~2026-09-04 표본에서 PER을 종목·거래일 단위로 4분위로 나누고 이후 수익률을 계산했습니다.

PER 분위20일 평균20일 중앙값60일 평균60일 중앙값
Q1 낮은 PER+9.01%+3.52%+13.69%+2.92%
Q2+7.13%+4.04%+15.49%-0.62%
Q3+5.29%0.00%+5.83%-8.58%
Q4 높은 PER+0.49%-3.07%-10.45%-20.16%

낮은 PER 그룹이 높은 PER 그룹보다 좋았다는 방향성은 보입니다. 하지만 Q2의 60일 평균이 Q1보다 높고, 평균과 중앙값의 차이도 큽니다. 따라서 “PER이 낮을수록 수익률이 직선처럼 좋아진다”고 표현하면 결과를 과장하게 됩니다.

PER 분위수별 선행수익률

PER만으로 비교하면 안 되는 이유

섹션 제목: “PER만으로 비교하면 안 되는 이유”

PER의 분모인 이익은 과거 실적일 수 있고, 일회성 이익이나 경기 고점의 이익일 수 있습니다. 특히 다음 경우에는 낮은 PER을 할인 신호로 해석하기 어렵습니다.

  • 적자 전환 직전이라 과거 EPS가 높게 보이는 경우
  • 자산 매각·환율·세금 효과로 이익이 일시적으로 증가한 경우
  • 금융·지주·원자재 업종처럼 정상 이익의 정의가 다른 경우
  • 부채와 이자비용이 늘어 미래 이익이 줄어들 가능성이 있는 경우

PER을 단일 임계값으로 자르기보다 같은 산업 안에서 비교하고, 다음 질문을 함께 확인하는 편이 낫습니다.

  1. 최근 3년 이익이 안정적인가?
  2. 영업현금흐름이 순이익을 따라오는가?
  3. 이익 성장률과 영업이익률이 악화되고 있지 않은가?
  4. 저PER의 원인이 주가 하락인가, 이익의 일시적 고점인가?
  5. 낮은 PER이 PBR·부채비율·현금흐름과도 일관되는가?

이 결과는 저PER 전략의 가능성을 보여주지만, 저PER 종목을 곧바로 매수 후보로 확정하지는 않습니다. 다음 장에서는 장부가치와 부채를 함께 보면서 PER이 놓치는 자본구조 위험을 확인합니다.

결과 원본은 PER 분위수 수익률 CSV에서 확인할 수 있습니다.


이 글은 교육 및 연구 목적의 자료이며 특정 종목의 매수·매도를 권유하지 않습니다.

기본적 분석 3장: PBR과 부채로 가치 함정을 피하는 법

PBR과 부채 구조를 비교하는 장면

PBR은 주가를 주당순자산으로 나눈 값입니다.

시가총액자본총계

PBR이 1보다 낮다는 것은 장부상 순자산보다 낮은 가격에 거래된다는 뜻입니다. 그러나 장부가치가 곧 청산가치는 아닙니다. 자산의 실제 회수 가능성, 수익성, 부채 만기, 산업의 무형자산 비중을 함께 봐야 합니다.

PBR 분위20일 평균20일 중앙값60일 평균60일 중앙값
Q1 낮은 PBR+8.39%+3.15%+15.35%+1.20%
Q2+6.43%+2.22%+7.67%-4.95%
Q3+7.56%+3.20%+9.99%-8.03%
Q4 높은 PBR-0.79%-4.92%-12.42%-22.20%

저PBR 그룹의 평균 수익률이 높았지만, 60일 중앙값은 +1.20%에 그칩니다. 평균을 끌어올린 일부 큰 수익 사례가 있었을 가능성이 있으므로, 결과를 “저PBR이면 대부분 수익”으로 읽으면 안 됩니다.

PBR 분위수별 선행수익률

부채비율부채총계자본총계

업종마다 정상 수준이 크게 다릅니다. 은행·보험·유틸리티의 부채비율을 제조업과 같은 기준으로 비교하면 안 됩니다. 부채가 많아도 안정적인 현금흐름과 규제자본을 가진 기업이 있고, 부채비율이 낮아도 현금이 부족한 기업이 있습니다.

이번 결과에서도 부채비율 단독 분위수는 수익률을 안정적으로 나누지 못했습니다. 이는 부채비율이 쓸모없다는 뜻이 아니라, 단독 랭킹보다 이자보상능력·현금흐름·산업 기준과 함께 사용해야 한다는 뜻입니다.

  1. 같은 산업 안에서 PBR을 비교합니다.
  2. 최근 영업현금흐름이 양수인지 확인합니다.
  3. 순차입금과 이자비용이 증가하고 있는지 봅니다.
  4. ROE가 낮은 이유가 일시적인지 구조적인지 구분합니다.
  5. 저PBR이 장부가치 훼손을 반영한 것인지 검토합니다.

저PBR은 가치 신호가 될 수 있지만, 낮은 가격에는 이유가 있을 수 있습니다. 다음 장에서는 가격이 아니라 자본을 얼마나 효율적으로 사용했는지를 보여주는 ROE와 ROA를 비교합니다.

결과 원본은 PBR 분위수 수익률 CSV에서 확인할 수 있습니다.


이 글은 교육 및 연구 목적의 자료이며 특정 종목의 매수·매도를 권유하지 않습니다.

기본적 분석 4장: ROE가 높으면 좋은 주식인가?

ROE와 기업의 수익성을 표현한 장면

ROE는 주주가 맡긴 자본으로 얼마나 많은 순이익을 냈는지를 보여줍니다.

순이익평균자본

ROA는 부채와 자본을 합한 자산 전체의 수익성을 봅니다.

순이익평균자산

따라서 부채를 많이 사용한 기업은 ROE가 높아도 ROA가 낮을 수 있습니다. ROE 하나만 보면 레버리지 효과를 기업의 경쟁력으로 착각할 수 있습니다.

표본 결과는 단순한 고ROE 우위가 아니었다

섹션 제목: “표본 결과는 단순한 고ROE 우위가 아니었다”
ROE 분위20일 평균20일 중앙값60일 평균60일 중앙값
Q1 낮은 ROE+4.85%-2.31%+7.78%-13.17%
Q2+4.87%+1.15%+8.49%-3.53%
Q3+5.88%+1.72%+14.76%+1.36%
Q4 높은 ROE+5.32%+0.96%+11.02%-1.47%

고ROE가 저ROE보다 나았지만 Q3가 Q4보다 좋았습니다. 높은 ROE가 언제나 가장 좋은 수익률을 만들지는 않았다는 뜻입니다. 이미 높은 기대가 가격에 반영되었거나, 높은 ROE가 일회성 이익·과도한 자사주 소각·높은 레버리지에서 나온 경우일 수 있습니다.

ROE 분위수별 선행수익률

듀퐁 분석은 ROE를 다음처럼 나눕니다.

순이익률총자산회전율재무레버리지

같은 20% ROE라도 높은 마진으로 만든 기업과 부채를 크게 늘려 만든 기업은 위험이 다릅니다. 분석할 때는 ROE 옆에 순이익률, 자산회전율, 부채비율을 놓아야 합니다.

  • ROE가 3년 이상 유지되었는가?
  • ROA도 같은 방향으로 움직이는가?
  • 영업현금흐름이 순이익보다 지나치게 낮지 않은가?
  • 이익률이 업종 평균보다 높은가?
  • 높은 수익성이 이미 비싼 밸류에이션으로 반영되었는가?

ROE와 ROA는 “좋은 기업”을 찾는 데 유용하지만 “좋은 주식”을 보장하지 않습니다. 기업의 질과 가격을 분리해서 확인해야 합니다. 다음 장에서는 이익의 수준이 아니라 이익이 늘어나는 속도와 질을 살펴봅니다.

결과 원본은 ROE 분위수 수익률 CSV에서 확인할 수 있습니다.


이 글은 교육 및 연구 목적의 자료이며 특정 종목의 매수·매도를 권유하지 않습니다.

기본적 분석 5장: 이익 성장은 매출 성장과 다르다

영업이익 성장과 주가 흐름을 표현한 장면

매출이 늘었다는 소식은 쉽게 눈에 띄지만, 주주에게 남는 것은 매출이 아니라 이익과 현금입니다. 그래서 성장 분석은 “얼마나 많이 팔았는가”에서 멈추지 않고 매출이 영업이익과 현금흐름으로 전환되었는가까지 확인해야 합니다.

성장률의 방향을 먼저 구분하기

섹션 제목: “성장률의 방향을 먼저 구분하기”

영업이익 성장률은 다음처럼 계산할 수 있습니다.

영업이익성장률이번기간영업이익비교기간영업이익

비교 기간의 영업이익이 0에 가깝거나 적자라면 성장률은 폭발적으로 보이거나 계산 불능이 됩니다. 이런 관측치는 숫자 크기만으로 분위수를 만들기 전에 별도 처리해야 합니다.

기준 팩터20일 평균60일 평균
매출성장률 Q1+4.51%+6.31%
매출성장률 Q3+5.90%+14.01%
매출성장률 Q4+5.93%+12.32%
영업이익성장률 Q1+3.83%+2.15%
영업이익성장률 Q3+6.21%+8.77%
영업이익성장률 Q4+4.97%+3.52%

매출과 영업이익 모두 극단적으로 높은 Q4보다 Q3가 더 좋았습니다. 고성장 자체보다 지속 가능하고 기대치와의 차이가 남아 있는 성장이 중요할 수 있다는 신호입니다. 다만 이 표는 발표일·기대이익·업종 효과를 완전히 통제한 결과가 아니므로 인과관계로 읽을 수 없습니다.

영업이익 성장과 선행수익률

성장의 질을 확인하는 네 가지 숫자

섹션 제목: “성장의 질을 확인하는 네 가지 숫자”
  1. 매출총이익률 또는 영업이익률이 함께 개선되는가?
  2. 영업현금흐름이 이익과 같은 방향인가?
  3. 매출채권이 매출보다 빠르게 늘지 않는가?
  4. 성장이 신규 차입이나 일회성 비용 절감에 의존하지 않는가?

성장률이 높지만 마진이 하락하면 “성장”이 아니라 가격 경쟁일 수 있습니다. 반대로 매출은 정체되어도 마진과 현금흐름이 개선되면 기업가치가 좋아질 수 있습니다.

다음 장에서는 이익 성장과 다른 성격을 가진 배당을 보면서, 배당수익률을 현금흐름·배당성향과 함께 읽는 방법을 정리합니다.


이 글은 교육 및 연구 목적의 자료이며 특정 종목의 매수·매도를 권유하지 않습니다.

기본적 분석 6장: 배당수익률보다 배당의 질을 보자

배당과 재투자 효과를 표현한 장면

배당수익률은 주당 배당금을 현재 주가로 나눈 값입니다.

배당수익률주당배당금주가

주가가 급락해도 배당금이 그대로라면 배당수익률은 올라갑니다. 따라서 높은 배당수익률은 현금수익의 기회일 수도 있지만, 시장이 배당 삭감이나 사업 악화를 예상하는 신호일 수도 있습니다.

배당수익률 분위20일 평균20일 중앙값60일 평균60일 중앙값
Q1 낮은 배당+2.40%-4.28%-0.62%-18.84%
Q2+6.69%+3.16%-3.52%-13.30%
Q3+5.80%+1.30%+11.02%-5.94%
Q4 높은 배당+7.24%+3.46%+11.63%+1.52%

고배당 그룹의 결과가 상대적으로 좋았지만, 이 표만으로 “고배당주가 항상 우월하다”고 결론 내릴 수는 없습니다. 업종 구성, 주가 하락으로 인한 기계적 수익률 상승, 배당락 효과가 섞일 수 있기 때문입니다.

배당수익률 분위수별 선행수익률

  • 배당성향이 순이익을 지나치게 초과하지 않는가?
  • 영업현금흐름과 잉여현금흐름으로 배당을 감당하는가?
  • 최근 3~5년 배당이 유지·증가·감소 중 어느 방향인가?
  • 배당 지급을 위해 부채를 늘리고 있지 않은가?
  • 배당락 후 가격 회복과 총수익률을 함께 계산했는가?

배당 재투자는 장기 복리의 중요한 요소지만, 60거래일처럼 짧은 구간에서 연환산 배당수익률을 그대로 더하면 안 됩니다. 배당금 지급일, 재투자 가격, 세금을 반영한 총수익률이 별도로 필요합니다.

배당은 “얼마나 많이 주는가”보다 “사업이 벌어들이는 현금으로 지속 가능한가”가 핵심입니다. 다음 장에서는 매출 성장률을 다시 살펴보되, 업종별 성장의 의미가 왜 다른지 비교합니다.

결과 원본은 배당수익률 분위수 수익률 CSV에서 확인할 수 있습니다.


이 글은 교육 및 연구 목적의 자료이며 특정 종목의 매수·매도를 권유하지 않습니다.