# 004_costByNature 실험 현황

## 주제
DART 공시 주석에서 "비용의 성격별 분류" 테이블 추출, 시계열 구성, 계정명 정규화

## 최종 결과

| 지표 | 수치 |
|------|------|
| 파싱 성공률 (비용의 성격 존재 기준) | **100%** (171/171) |
| 시계열 구성 성공 | **173개 종목** |
| 교차검증 일치율 (당기 vs 전년 전기) | **87.8%** (3,539/4,030) |
| null 비율 | **17.5%** (1,330/7,615) |
| 최장 시계열 | **11년** (2015~2025) |
| 정규화 후 계정 수 | 평균 13.5개 (최소 2, 최대 45) |

## 실험 파일

| 파일 | 설명 | 상태 |
|------|------|------|
| 001_explore.py | 삼성전자 데이터 탐색 — 위치, 형식 확인 | 완료 |
| 002_multiCompany.py | 10개 종목 패턴 비교 | 완료 |
| 003_parseTable.py | extractAccounts 기반 파싱 시도 — 10% 성공 | 완료 |
| 004_debugFail.py | 파싱 실패 원인 분석 — 3가지 유형 분류 | 완료 |
| 005_improvedParser.py | 개선 파서 (inline + split) — 88% 성공 | 완료 |
| 006_fullTest.py | 267개 종목 첫 테스트 — 94.7% 성공 (9개 실패) | 완료 |
| 007_finalParser.py | 최종 파서 — 100% 성공 (171/171) | 완료 |
| 008_timeSeries.py | 시계열 구성 + 교차검증 | 완료 |
| 009_normalize.py | 계정명 빈도 분석 + 유사 계정 그룹핑 | 완료 |
| 010_fullPipeline.py | 최종 파이프라인 (정규화 + 시계열 + 전체 테스트) | 완료 |

## 발견 사항

### 데이터 존재 현황 (267개 종목)
- 173개: 시계열 구성 성공
- 58개: 비용의 성격 미공시 (금융업, 리츠, 지주회사)
- 38개: 보고서 자체 없음 (스팩, 신규상장)

### 테이블 유형 (2가지)
1. **inline (49%)**: `| 구분 | 당기 | 전기 |` — 한 테이블에 당기/전기 병렬
2. **split (51%)**: 기간별 별도 블록 — DART 공시 스타일

### 기간 표기 형식 (5가지)
- "당기"/"전기", "당 기"/"전 기", "제 N(당) 기", "(당기)", "① 당기"

### 계정명 정규화
- 원본 고유 계정명: 487개
- 30개 정규화 매핑으로 핵심 그룹 커버
- 주요 그룹: 원재료사용(71변형), 종업원급여(33변형), 감가상각비(31변형)

### 합계행 패턴
- "합계(*)", "매출원가및판매비와관리비합계", "성격별비용합계" 등 22가지 변형
- `isTotalRow()` 함수로 완전 필터링

### 교차검증 불일치 원인 (12.2%)
- 기업의 소급 재작성/재분류 (파서 오류 아님)
- 계정 항목 추가/삭제/통합
- 확인: SK하이닉스 2021년 — "기술료" 항목 삭제, 감가상각 금액 소급 변경

### 파싱 핵심 로직
1. **섹션 탐색**: 번호 패턴 `N.` + `(N)` + 키워드 폴백
2. **기간 판별**: `_isDanggi`/`_isJeongi` — "제N(당)기" 등 모든 표기 통합
3. **파싱 순서**: inline → split → multiCol
4. **정규화**: 키워드 기반 30개 매핑 → 표준 계정명
5. **합계 필터**: 22가지 패턴 자동 제거
6. **교차검증**: 당기 값과 이전 연도 전기 값 비교

## 시계열 기간 분포

| 기간 | 종목 수 |
|------|--------|
| 10~11년 | 8개 |
| 7~8년 | 21개 |
| 5~6년 | 19개 |
| 3~4년 | 24개 |
| 1~2년 | 101개 |

## 완료
- [x] 패키지 모듈화 — `src/dartlab/finance/costByNature/` 이관 완료
- [x] 분기/반기 시계열 — period="y"|"q"|"h" 지원
- [x] 비용 구성비 분석 — ratios DataFrame (year, account, amount, ratio)
