이 페이지는 데이터룸의 자료를 어떻게 만드는지 적어 둔 문서입니다. 숫자가 어디서 오는지, 어떤 규칙이 공시 한 줄을 표의 한 칸으로 바꾸는지, 그리고 공시에 스키마가 요구하는 항목이 없을 때 파이프라인이 무엇을 하는지를 다룹니다. 같은 공시를 가진 사람이라면 여기 실린 어떤 수치든 그대로 다시 만들어 낼 수 있도록 쓰는 것이 목표입니다.
1. 유니버스
유니버스는 시가총액 기준 KOSPI 보통주 상위 200종목에, 이 사이트에서 이미 다루고 있는 소형주 10종목을 더한 범위이며, 금융업은 제외합니다. 순위를 매기기 전에 우선주·리츠·스팩을 먼저 걸러 냅니다. 아래에서 설명하는 금융업 제외까지 적용하고 나면 183개사가 남습니다.
이 범위는 기준일 현재 KOSPI 보통주 시가총액의 97.1%를 덮습니다. 넓은 그물이지만, 무엇이 아닌지를 분명히 해 두는 편이 낫겠습니다. 이것은 거래소 공식 대표지수가 아니고, 어떤 지수도 추종하지 않습니다. 공식 지수는 유동비율·거래대금·섹터 균형 같은 편입 규칙을 적용하는데, 단순 시가총액 순위에는 그런 규칙이 없으므로 구성 종목이 다릅니다. 공식 지수의 구성 종목 명단은 이 파이프라인이 쓰는 데이터 소스로는 얻을 수 없습니다. 그래서 근사치를 만들어 놓고 지수 이름을 붙이는 대신, 공개된 상장 종목 스냅숏만 있으면 누구나 그대로 재현할 수 있는 규칙으로 유니버스를 정의했습니다.
2. 금융업을 제외하는 이유
은행·보험사·증권사·금융지주회사는 유니버스에서 뺍니다. 이들 회사에 대한 평가가 아니라, 이 페이지의 스키마가 그들을 설명하지 못하기 때문입니다.
제조업 회사가 매출채권과 재고자산을 싣는 자리에 은행은 대출채권과 예수부채를 싣습니다. 「총차입금」을 영업부채와 분리할 수가 없으니 순현금 컬럼은 의미를 잃습니다. 손익계산서도 영업수익·영업비용 구조라서 영업이익 한 줄이 표의 다른 회사들에서 뜻하는 것과 다른 것을 뜻합니다. 무엇보다 이 사업들을 평가하는 1차 재료는 자기자본비율 같은 규제 자본 지표인데, 이 스키마에는 그것을 담을 자리가 없습니다.
제외는 표준산업분류(KSIC) 코드로 집행합니다. 64121(은행), 64201(신탁·집합투자), 64913(여신전문금융), 65(보험), 66(금융·보험 관련 서비스)은 전면 제외합니다. 손을 대야 하는 코드가 하나 있는데 64992 「지주회사」입니다. 이 코드에는 금융지주회사와 일반 사업지주회사가 섞여 있어서, 코드째로 지우면 이 표가 보여 주려는 회사들이 바로 사라집니다. 그래서 64992 안에서는 금융지주회사법상 금융지주 8개사 — 신한·하나·KB·우리·BNK·iM·JB·한국투자금융지주 — 만 이름으로 지정해 제외하고, 일반 지주회사는 그대로 둡니다.
3. 지배주주 몫으로 나누기
플래그십 표가 존재하는 이유가 이것입니다. 연결재무제표는 모회사와 모회사가 지배하는 것 전부를 합산하는데, 여기에는 지분을 100% 갖고 있지 않은 종속회사도 들어갑니다. 그 다른 주주들에게 귀속되는 몫이 비지배지분이고, 이것은 모회사 주주의 돈이 아닙니다.
시가총액을 자본총계로 나누는 스크리너는 그래서 한 회사의 가격을, 일부가 남의 것인 자산과 견주게 됩니다. 이 표는 두 값을 나란히 싣습니다.
- P/B 자본총계 — 시가총액 ÷ 자본총계
- P/B 지배주주 — 시가총액 ÷ 지배기업 소유주 귀속 자본
- 괴리 — 뒤의 값이 앞의 값보다 몇 % 높은지
같은 구분을 이익에도 적용합니다. P/E는 연결당기순이익이 아니라 지배주주순이익으로 계산합니다. 시가총액은 기준일 종가에 발행 보통주식수를 곱한 값이며 우선주는 제외하는데, 우선주가 있는 몇몇 회사에서는 이 차이가 작지 않습니다.
4. 항등식 규칙 두 가지
어떤 회사들은 지배주주 귀속 행을 아예 인쇄하지 않습니다. 나눌 비지배지분이 없기 때문입니다. 이 칸들을 비워 두면 표기 관례 하나 때문에 멀쩡한 회사가 비교에서 빠져 버립니다. 두 가지 규칙으로 이 칸을 채우는데, 둘 다 같은 재무제표 안에서 반드시 성립하는 산술 항등식이지 추정이 아닙니다.
- 지배주주지분이 없고 자본총계와 비지배지분이 둘 다 공시에 있으면, 지배주주지분 = 자본총계 − 비지배지분.
- 지배주주순이익이 없고, 재무상태표가 비지배지분을 0으로 적었거나 그런 행 자체를 싣지 않았으면, 지배주주순이익 = 당기순이익 전액.
- 비지배지분 행이 인쇄되어 있는데 값만 읽히지 않은 경우에는 두 규칙 모두 발동하지 않습니다. 읽기 실패를 항등식으로 덮지 않기 위한 안전장치입니다.
이렇게 채운 칸에는 전부 표에 「항등」 표식이 붙고, JSON과 CSV에도 대응하는 필드가 들어갑니다. 원하지 않는 독자는 그 행들을 골라 낼 수 있습니다. 현재 데이터셋에서는 9개사가 해당합니다. 그 밖의 결측은 채우지 않습니다. 표준 계정코드로도 계정명으로도 값이 잡히지 않고 항등식도 적용되지 않으면 칸은 비운 채로 두고 그 사례를 예외 사전에 기록합니다.
5. 총차입금과 순현금
순현금은 현금및현금성자산에 단기금융상품을 더하고 총차입금을 뺀 값입니다. 어려운 항목은 마지막 하나이고, 이 데이터셋에 앞서 돌린 파일럿은 사실상 그 이유를 알아내려고 만든 것이었습니다.
단기차입금·유동성장기부채·장기차입금·사채, 이렇게 네 개 구성 계정을 매핑하는 방식은 실제 공시에서 최소 여섯 가지 방식으로 깨집니다. 어떤 회사는 「차입금」 한 줄로 합쳐 싣고 끝까지 쪼개지 않습니다. 어떤 회사는 그 줄에 표준 계정코드를 아예 붙이지 않아 계정명으로만 잡힙니다. 어떤 회사는 전환사채·교환사채·신주인수권부사채를 별도 계정으로 답니다. 어떤 회사는 계정명에 괄호 주석을 달아서 정확히 일치시키는 방식으로는 놓칩니다. 어떤 회사는 차입금이 정말로 없는데, 이건 결측이 아니라 진성 0입니다. 깨끗하게 분해되는 쪽이 오히려 소수입니다.
그래서 여기서 쓰는 정의는 분해에 의존하지 않습니다.
총차입금 = 재무상태표의 말단(leaf) 행 가운데 계정명에 「차입」 또는 「사채」가 들어가는 모든 행의 합계. 리스부채는 제외.
소계 행은 자기가 닫는 구획의 이름을 답니다 — 「유동부채」, 「부채총계」 — 그래서 이 패턴에 걸리지 않고, 이중계상될 수 없습니다. 안전장치로 모든 회사·연도 레코드에 대해 총차입금이 부채총계를 넘지 않는다는 조건을 걸어 두는데, 전체 데이터셋에서 위반은 0건입니다. 회사마다 실제로 합산한 개별 행들은 워크북에 그대로 보존해 두어 합계를 되짚어 볼 수 있습니다.
숨기지 않고 명시해 두는 처리가 두 가지 있습니다. IFRS 16 리스부채는 총차입금에서 빼고 별도 컬럼에 보존합니다. 계약상 의무이긴 하지만 위 정의의 차입금은 아닙니다. 메자닌 — 전환사채·교환사채·신주인수권부사채 — 는 포함하고 역시 따로 보존합니다. 전환되기 전까지는 계약상 부채이기 때문입니다. 두 처리 중 어느 쪽에든 동의하지 않는 독자는 보존된 컬럼으로 직접 다시 계산할 수 있습니다.
이 정의에는 한 가지 사각이 있습니다. 재무상태표를 「금융부채 / 비금융부채」로만 나누어 제출하는 회사가 있습니다. 그 경우 차입금은 「단기금융부채」·「비유동금융부채」 같은 집계 계정 안에 들어가 있고, 계정명에 「차입」도 「사채」도 없습니다. 위 규칙은 그것을 읽지 못하고 차입금 0으로 처리합니다.
그 집계 계정을 차입금에 더하지는 않습니다. 안에는 리스부채·보증금·파생상품부채가 섞여 있어서, 더하면 위 정의(리스 제외)를 스스로 깨고 부채를 과대계상하게 됩니다. 무엇이 얼마나 들었는지는 공시가 말하지 않으므로, 나누어 쓰는 것도 추정입니다.
대신 상한을 잽니다. 재무상태표에 실린 금융부채 계열 계정을 전수로 모읍니다 — 파생상품·기타 캡션까지 포함해서, 계정의 성격을 해석하지 않고 전부. 그리고 묻습니다: 이것이 전부 차입금이라면 우리가 게시하는 숫자가 얼마나 움직이는가.
집계형 금융부채 전액을 차입금으로 가정했을 때 순현금/시가총액이 1%p 이상 움직일 수 있으면 순현금을 공란으로 두고 표에
NC?를 답니다. 1%p 미만이면 공표합니다.
이것은 추정이 아니라 상한 검사입니다. 집계 계정이 실제로 무엇인지 판단하지 않고, 가장 불리한 해석에서도 결론이 흔들리지 않는 경우에만 숫자를 냅니다. 그래서 다음 문장을 조건 없이 적을 수 있습니다 — 이 데이터셋이 게시하는 순현금/시가총액은, 집계 계정을 최악으로 읽어도 ±1%p 이내입니다.
기준을 부채총계 대비가 아니라 순현금/시가총액 대비로 건 이유는, 문제의 본질이 「집계 계정이 부채에서 얼마나 큰가」가 아니라 「우리가 공표하는 숫자를 얼마나 움직일 수 있는가」이기 때문입니다. 기준은 공표 지표와 같은 단위로 겁니다.
기준일 데이터셋에서 순현금을 공표한 회사는 183곳 중 97곳입니다. 그 97곳의 상한은 최대 0.951%p, 중앙값 0.004%p입니다. 나머지 86곳은 순현금 열이 비어 있고, 이유가 종목 페이지에 그대로 적혀 있습니다 — 85곳은 이 상한을 넘겨서, 1곳은 재무제표 표시통화가 원화가 아니어서입니다. 각 회사의 집계형 금융부채 합계와 상한값은 CSV의 agg_fin_liab_eok·agg_fin_bound_pp 컬럼에, 개별 계정은 agg_fin_lines 에 그대로 있습니다.
「진성 무차입」 라벨도 여기에 맞춰 조건이 강해졌습니다. 차입·사채 계정이 없다는 것만으로는 부족하고, 집계형 금융부채도 상한 아래일 때만 무차입으로 적습니다. 기준일 데이터셋에서 그 조건을 모두 만족하는 회사는 15곳입니다.
6. 잠정치와 확정 공시
한국 상장사는 실적을 두 번 냅니다. 결산기 종료 몇 주 뒤의 공정공시 잠정 실적, 그리고 다시 몇 주 뒤의 정식 보고서. 둘은 대개 가깝고 가끔 그렇지 않습니다. 그래서 데이터셋의 중간 기간 행에는 표식이 붙습니다. 확정 보고서면 F, 잠정 발표면 P입니다.
차이는 작지만 실재합니다. 2025사업연도에 둘 다 존재하는 회사를 전부 대조해 보니 대부분의 수치가 정확히 일치했고, 어긋난 것은 두 부류였습니다. 하나는 잠정 발표가 쓴 단위 때문입니다. 조 단위로 발표하는 회사는 소수점 두 자리까지만 내놓기 때문에, 원 단위로 적힌 공시와 견주면 정밀도가 깎입니다. 나머지는 잠정 발표와 감사받은 확정 공시 사이의 진짜 수정이었습니다. KT&G는 1월 잠정 발표와 3월 사업보고서 사이에 지배주주순이익이 −0.754%, 영업이익이 +0.438% 움직였습니다. 반올림으로는 설명되지 않는 폭입니다. 이 한 사례가 P 표식이 존재하는 이유입니다.
확정 보고서 안에도 관련된 함정이 하나 있습니다. 중간 기간 보고서의 손익계산서 대표 컬럼에는 3개월치가 들어 있고, 반기 누계는 다른 필드에 따로 있습니다. 잘못 읽으면 결과가 반토막 납니다. 이 데이터셋의 모든 유량(flow) 항목은 누계 필드에서 가져옵니다.
7. 연결재무제표와 별도재무제표
연결재무제표가 있으면 언제나 연결을 씁니다. 종속회사가 없는 회사는 연결을 작성하지 않는데, 이런 회사에는 파이프라인이 별도재무제표로 넘어가고 그 행에 「별도」 표식을 답니다. 별도 기준 회사는 지배·비지배로 나눌 몫 자체가 없으므로 두 P/B 값이 정의상 같고 괴리는 0입니다. 비지배지분이 없어서가 아니라 그 개념이 적용되지 않기 때문입니다. 현재 데이터셋에서는 3개사가 이 기준입니다.
8. 주주환원
주당배당금은 사업보고서의 배당 항목에서 최근 5개년을 가져옵니다. 자기주식 보유율은 같은 보고서의 자기주식 항목에서, 기말 보통주 기준으로 세되 이중으로 더해질 소계 행은 건너뜁니다.
소각 이력은 별도의 경로가 필요했습니다. 자기주식 취득·처분이 올라오는 주요사항보고 채널에는 「자기주식소각결정」이라는 공시 유형이 존재하지 않습니다. 소각은 거래소 공시 채널에 「주식소각결정」으로 접수되고, 감자결정은 그 둘과 혼동하면 안 되는 세 번째 별개의 공시입니다. 주요사항보고 채널만 긁으면, 분명히 소각을 해 온 회사에서도 소각 이력이 0건으로 나옵니다. 이 구멍은 그렇게 발견됐습니다. 데이터셋은 두 채널을 따로 수집해 취득·처분·소각·감자를 네 개의 독립된 건수로 싣습니다.
9. 업종
업종 라벨은 회사의 KSIC 코드에서 뽑은 거친 대분류이며, 그 정도로만 읽어야 합니다. KSIC는 회사마다 대표 코드를 하나만 부여하는데, 자회사가 여러 산업에 걸친 대기업집단에서는 이 방식이 회사를 잘못 설명합니다. 그룹 지주회사가 전자부품이나 화학으로 잡히는 식입니다. 짧은 수동 보정 목록으로 그런 회사들을 「지주회사」로 옮겼고, 그 목록은 파이프라인 소스와 예외 사전에 공개해 두었습니다. 업종을 무언가 중요한 판단의 근거로 쓰려는 분은 목적에 맞게 만든 분류 체계로 갈아 끼우는 편이 좋습니다.
10. 추적 가능성
모든 수치 계열은 그 값이 나온 공시의 DART 접수번호를 함께 싣습니다. 표에서는 자본·손익 접수번호가 링크라서 누르면 DART 뷰어에서 원 문서가 열리고, CSV에서는 컬럼으로 들어 있습니다. 규칙은 한 칸이 한 공시로 이어진다는 것입니다. 이 데이터셋에는 문서를 가리킬 수 없는 수치가 없습니다.
이 약속은 믿는 대신 매번 되짚습니다. 실행할 때마다 회사와 수치를 무작위로 골라 원 공시에서 다시 읽고 게시된 값과 맞춰 보는데, 현재 데이터셋은 20건 중 20건을 통과했습니다. 여기에 더해 지배주주 괴리가 가장 큰 20개사 — 오류가 났을 때 피해가 가장 큰 구간입니다 — 에 대해서는 자본총계가 지배주주지분과 비지배지분의 합과 같은지를 따로 맞춰 보았고, 20개사 전부 성립했습니다.
11. 갱신 정책
데이터셋은 값을 바꾸는 공시가 접수된 뒤 영업일 5일 이내에 갱신합니다. 3월 사업보고서, 8월 반기보고서, 그 사이의 분기보고서가 그 시점입니다. 갱신할 때마다 시장 수치는 새 기준일로 다시 잡고, 기준일은 페이지와 JSON·CSV에 함께 싣습니다. 잠정치 행은 정식 보고서가 나온 뒤 첫 갱신에서 확정 수치로 교체되고 표식이 P에서 F로 바뀝니다.
12. 이 숫자들이 아닌 것
이 숫자들은 공시에 대한 기술이지 회사에 대한 의견이 아닙니다. 두 P/B 값의 괴리가 크다는 것은 그 회사에 비지배지분이 크다는 뜻이지, 주가가 싸다거나 비싸다는 뜻이 아닙니다. 순현금이 시가총액을 넘는다는 것은 재무상태표에 무엇이 들어 있는지를 말할 뿐, 그 현금이 주주에게 간다는 말이 아닙니다. 이 페이지의 어떤 내용도 특정 증권의 매수·매도 권유가 아니며, 목표주가나 매매 시점을 담지 않습니다. 전체 조건은 면책고지를 참고해 주세요.
13. 데이터셋 변경 기록
공개한 데이터셋을 고칠 때마다 날짜와 사유, 몇 개 종목이 움직였는지를 여기에 적습니다. 고친 수치는 조용히 바뀌는 대신 고친 기록으로 되짚을 수 있어야 합니다.
v1.3 — 2026-08-15
순현금은 상한 검사를 통과할 때만 공표합니다. 총차입금은 계정명에 「차입」·「사채」가 들어간 행의 합으로 정의돼 있습니다. 그런데 재무상태표를 「금융부채 / 비금융부채」로만 나누어 제출하는 회사에서는 차입금이 집계 계정 안에 들어가 이 이름으로 잡히지 않습니다. v1.3부터는 재무상태표의 금융부채 계열 계정을 전수로 모아, 그것이 전부 차입금이라고 가정했을 때 순현금/시가총액이 얼마나 움직일 수 있는지를 잽니다. 1%p 이상 움직일 수 있으면 순현금을 공란으로 두고 NC? 를 답니다. 자세한 규칙은 §5에 있습니다.
공표 건수가 줄었습니다. 순현금을 싣는 회사가 182곳에서 97곳으로, 순현금이 양수인 회사가 80곳에서 51곳으로 줄었습니다. 순현금/시가총액 30% 이상은 17곳에서 9곳, 「차입금 없음」으로 적던 회사는 32곳에서 15곳이 됐습니다. 공란으로 바뀐 85곳 가운데 29곳은 v1.1·v1.2에서 실제보다 큰 순현금을 보이고 있었습니다. 줄어든 것은 회사의 현금이 아니라 우리가 공시에서 닫을 수 있다고 말할 수 있는 범위입니다.
대신 남은 숫자에는 보증이 붙습니다. 공표한 97곳의 상한은 최대 0.951%p, 중앙값 0.004%p입니다. 게시된 순현금/시가총액은 집계 계정을 최악으로 읽어도 ±1%p 이내입니다.
「진성 무차입」 조건이 강해졌습니다. 차입·사채 계정이 없다는 것만으로는 부족하고, 집계형 금융부채도 상한 아래일 때만 무차입으로 적습니다.
워크북의 비율 셀을 정리했습니다. 손실난 해의 P/E와 자본잠식 상태의 P/B가 워크북에서만 음수로 찍혀 표·종목 페이지의 공란과 어긋났습니다. 이제 세 곳 모두 공란입니다. 억 단위 반올림 값끼리 나누던 계산도 원 단위로 되돌려, 순이익이 작은 회사에서 워크북의 P/E가 표와 달라지던 문제를 없앴습니다.
구 파일은 그대로 살아 있습니다. v1.1·v1.2 CSV는 원래 주소에서 계속 내려받을 수 있고, 표 페이지의 내려받기만 v1.3 파일로 바꿨습니다. 1호 분석 글은 PBR 격차만 다루고 순현금을 쓰지 않아 정정할 내용이 없습니다.
v1.2 — 2026-08-15
주식수를 기준일 시점으로 읽습니다. 시가총액·PBR·PER은 기준일 종가를 그날 상장돼 있던 주식수로 나눕니다. 주식수는 유니버스를 뽑을 때 쓴 것과 같은 거래소 스냅샷에서 가져옵니다. v1.2 전에는 FY2025 사업보고서에 인쇄된 발행주식총수를 썼는데, 그 값은 사업연도말 기준이라 그 뒤에 일어난 액면분할·병합, 무상·유상증자, 소각, 합병을 반영하지 못합니다. 공시된 주식수는 shares_filing 열에 접수번호와 함께 그대로 보존했고, 두 값이 5% 넘게 다르면 shares_note 열에 그 사이에 접수된 관련 공시를 적었습니다.
영향. 183개사 중 64개사의 비율 값이 하나 이상 바뀌었습니다. 주식수가 5% 넘게 달라진 회사는 18개사이고, 그중 15개사는 공시에서 사유가 확인됐으며 3개사는 사유를 찾지 못해 「괴리 — 공시 확인 요망」으로만 적었습니다. 변동이 가장 큰 곳은 LS일렉트릭(시가총액 +400%, 1:5 액면분할), HD현대건설기계(+176%), 오성첨단소재(−90%, 10:1 병합), 가온전선(+80%, 무상증자)입니다.
고치는 대신 비운 값 둘. LS에코에너지의 FY2025 사업보고서 「주식의 총수」 표(접수번호 20260316001365)는 상장주식수의 100만 배에 해당하는 숫자를 싣고 있습니다. 공시 자체의 단위 오류입니다. v1.2 전에는 그 오류가 표에 그대로 흘러들어 PBR이 6,551,758배로 나갔습니다. 이제 그 공시값은 임의로 나누어 고치지 않고 비운 뒤, 비율은 상장주식수로 계산합니다. 그 결과 6.55배가 됩니다. 두산밥캣은 재무제표를 미국 달러로 작성합니다. 원화 시가총액을 달러 재무제표로 나누는 비율은 하나의 기준일 환율로 환산하는 대신 비워 두었습니다. 두 회사 모두 QUEUE로 표시했습니다.
바뀐 헤드라인 수치. PBR 1배 미만 종목 수가 자본총계 기준 69 → 70개사, 지배주주 기준 65 → 66개사로 각각 하나씩 늘었습니다. 한 회사가 선을 넘었기 때문입니다. 격차 중앙값은 +2.40% → +2.41%, 평균은 +21.64% → +21.76%입니다. 지주회사 격차 중앙값(+28.90%), 격차 50% 이상 20개사·100% 이상 10개사, 비지배지분을 빼면 1배를 넘어서는 4개사는 모두 그대로입니다. 두 PBR의 비율에서는 주식수가 약분되기 때문에 격차 자체는 움직이지 않았습니다.
v1.1 CSV는 원래 주소에서 계속 내려받을 수 있습니다. 이미 링크를 받아 가신 분들의 주소는 그대로 살아 있고, 표 페이지의 내려받기만 v1.2 파일로 바꿨습니다.
v1.1 — 2026-08-14
최초 공개판. 183개사, 기준일 2026-08-14, 위의 규칙으로 DART 공시에서 만들었습니다.
