이 스킬
회사 종합 분석 (매크로 → 산업 → 회사 → 분해 → quality → valuation)
단일 회사의 깊이 있는 분석을 매크로 환경, 산업 위치, 회사 본질, ROE 분해, 회계 quality, 가치평가 6 단으로 엮는 절차. 마지막 valuation 단계 누락 시 종합 분석 미완료. 트리거 — '기업 깊이 분석', '6 막 종합', '단일 종목 deep dive'.
연계 절차
이 절차의 단계
- 1 거시 시장 환경 점검
engines.macro.marketReview매크로 환경 (금리·환율·경기 사이클)
- 2 Scan - 수익성
engines.scan.profitabilitypeer 후보 5~10 (수익성 축)
- 3 기업 분석 시작 라우터
engines.company.researchStarter회사 진입 + show("BS") + show("IS")
- 4 수익성 분석
engines.analysis.profitabilityROE DuPont 분해 (마진 × 회전 × 레버리지)
- 5 Analysis - 이익품질
engines.analysis.earningsQuality일회성·발생주의 점검
- 6 Analysis - 가치평가
engines.analysis.valuationPER/PBR/EV-EBITDA + peer 비교 (가치평가 axis)
절차
실행 순서
- 1
`tableRef` 5 개 (macro snapshot, peer scan, BS, IS, valuation peer multiple)
- 2
`valueRef` 9+ 개 (ROE, 마진, 회전, 레버리지, 현금흐름 quality, 일회성 비중, PER, PBR, EV/EBITDA)
- 3
`dateRef` 1 개 (분기 기준일)
- 4
답변에 숫자가 들어가면 valueRef 또는 tableRef 묶음 필수.
- 5
분기 기준은 dateRef 명시.
- 6
peer 비교는 tableRef + 답변 본문에 evidence table 동시 노출.
- 7
"12 조" 같은 절대값 단독 노출 금지 — peer median / 5 년 평균과 함께.
예시
이런 질문이 들어오면 이 skill 을 쓴다
- 삼성전자 6 단 종합 분석
- 신한지주 매크로 → 산업 → 회사 → quality → valuation
- 대형 종목 deep dive
- 6 막 인과 narrative 조립
공개 호출 방식
import dartlab
import polars as pl
target = "005930"
c = dartlab.Company(target)
def latest_period(df):
if hasattr(df, "columns"):
for col in df.columns:
if str(col)[:4].isdigit():
return str(col)
return "latest"
def compact(obj):
if isinstance(obj, pl.DataFrame):
return {"type": "DataFrame", "rows": obj.height, "columns": obj.width}
if isinstance(obj, dict):
return {"type": "dict", "keys": list(obj.keys())[:8]}
return {"type": type(obj).__name__}
bs = c.show("BS", freq="Y")
is_df = c.show("IS", freq="Y")
ratios = c.show("ratios")
profitability = c.analysis("profitability")
quality = c.analysis("earningsQuality")
valuation = c.analysis("valuation")
emit_result(
table=[
{"step": "macro", "skill": "engines.macro.marketReview", "result": "read before company conclusion"},
{"step": "company", "skill": "engines.company.researchStarter", "result": compact(bs)},
{"step": "profitability", "skill": "engines.analysis.profitability", "result": compact(profitability)},
{"step": "quality", "skill": "engines.analysis.earningsQuality", "result": compact(quality)},
{"step": "valuation", "skill": "engines.analysis.valuation", "result": compact(valuation)},
],
values={"target": target, "bsRows": bs.height, "isRows": is_df.height, "ratioRows": ratios.height},
date=latest_period(bs),
) 호출 동작
각 step 은 독립 capability 호출이며 실패해도 다음 step 은 진행한다. 단계마다 ref 가 누적된다.
dartlab.macro()— 금리·환율·경기 사이클 한 시점 (datasetRef + tableRef)dartlab.scan("profitability")— peer 5~10 후보 (tableRef)Company(code).show("BS")/show("IS")— 재무제표 시계열 (tableRef + dateRef)Company.analysis("financial", "수익성")— ROE DuPont 분해 (valueRef × N)Company.analysis("financial", "이익품질")— 회계 quality (valueRef × N)Company.analysis("가치평가", "가치평가")— PER·PBR·EV/EBITDA peer 비교 (valueRef × N + tableRef). 종합 분석에서 가치평가 단계 누락 = 미완료. peer 비교 없는 절대값 단독 노출 금지.
대표 반환 형태
총 ref:
tableRef5 개 (macro snapshot, peer scan, BS, IS, valuation peer multiple)valueRef9+ 개 (ROE, 마진, 회전, 레버리지, 현금흐름 quality, 일회성 비중, PER, PBR, EV/EBITDA)dateRef1 개 (분기 기준일)
연계 절차
- engines.macro.marketReview — 매크로 환경 (금리·환율·경기 사이클)
- engines.scan.profitability — peer 후보 5~10 (수익성 축)
- engines.company.researchStarter — 회사 진입 + show(“BS”) + show(“IS”)
- engines.analysis.profitability — ROE DuPont 분해 (마진 × 회전 × 레버리지)
- engines.analysis.earningsQuality — 일회성·발생주의 점검
- engines.analysis.valuation — PER/PBR/EV-EBITDA + peer 비교 (가치평가 axis)
기본 검증
- 답변에 숫자가 들어가면 valueRef 또는 tableRef 묶음 필수.
- 분기 기준은 dateRef 명시.
- peer 비교는 tableRef + 답변 본문에 evidence table 동시 노출.
- “12 조” 같은 절대값 단독 노출 금지 — peer median / 5 년 평균과 함께.
AI 직접 사용 방식
ReadSkill에서 사용자 질문과whenToUse를 맞춰 이 recipe를 고른다.GetSkillBody로 본문 전체를 읽고linkedSkills순서대로 먼저 필요한 엔진 skill을 확인한다.## 공개 호출 방식의 첫 Python 블록을 target만 바꿔ValidateRecipe(..., capture=False)로 smoke 실행한다.- 실행 결과의
skillRef,tableRef,valueRef,dateRef,executionRef중 누락된 근거가 있으면 답변을 작성하지 말고 호출 또는 근거 요구를 보강한다. - 답변은 결론, 핵심 근거, 메커니즘, 반례·한계, 후속 모니터링 순서로 작성하고
falsifier.description이 있으면 반례 단락에서 반드시 확인한다.
런타임
실행 환경별 호환성
| 환경 | 상태 | 비고 / 제한 |
|---|---|---|
| Local Python | supported | — |
| Server | supported | — |
| MCP | unknown | — |
| Web AI | unknown | — |
| Pyodide | limited |
|
실패 회피
흔한 실패 · 절대 금지
- 6 단 중 일부 step 실패 시 다음 step 으로 silent skip
- peer scan 결과 5 미만일 때 통계 의미 부족 무시
- ROE DuPont 분해의 분모 (평균자본 vs 기말자본) 명시 누락
- 회계 quality 점검을 단일 지표 (accruals 만) 로 단정
- valuation peer 의 산업 동질성 검증 부족
- 6 단 절차 중 valuation 단계 (Step 6) 누락 시 종합 분석 미완료 — 절대 단정 금지.
- peer 없는 절대값 (예 — 매출 12 조) 단독 노출 금지 — peer median / 5 년 평균 동반.
- 단일 분기 결과를 영구 추세로 단정 금지 — 시계열 (5Y / 8Q) 동반.
- 매크로 / 산업 / 회사 결과 연결 없이 단편적 언급 금지.