이 스킬
Distress Early Warning — Altman Z″<1.8 ∧ Beneish M>-1.78
부실 가능성 조기 경보 스크린 — Altman Z″ (manufacturing free) < 1.8 (distress zone) 동시 Beneish M-score > -1.78 (manipulation 의심) 두 강건 신호 동시 충족 종목. Altman 1968 + Beneish 1999 정통 결합. 트리거 — '부실 경보', 'distress', 'Altman Beneish', '회계 조작 의심', '신용 위험 스크린'.
이어 가기
절차
실행 순서
- 1
`dartlab.quant("altman")` — 5 비율 가중 Z″ (manufacturing free 변형)
- 2
`dartlab.quant("beneish")` — 8 비율 가중 M-score (1999 정통)
- 3
Altman zone 진입 ≠ 부도 확정 (정확도 80% 1 년 전).
- 4
Beneish 는 manipulation *의심* 이지 확정 X — manipulator-likely 가 실제 manipulator 비율 ~60-80%.
- 5
산업 base 차이 (heavy capex 산업 Z 낮음, asset-light 산업 Z 높음).
- 6
금융주 별 모델 필요 (CAMELS 또는 Mohanram G-score).
- 7
distress universe → `recipes.fundamental.quality.forensics.deepDive` forensics 27 종 deep dive.
- 8
accruals 추가 → `recipes.fundamental.quality.forensics.accountingPolicyChange` 결합.
- 9
credit 측 검증 → `engines.credit` dCR rating + `recipes.fundamental.credit.distressCandidateScreen` triple.
- 10
`stockCode : str` · `corpName : str`
- 11
`zScore : float` — Altman Z″
- 12
`zone : str` — distress / grey / safe
예시
이런 질문이 들어오면 이 skill 을 쓴다
- KOSPI200 distress 의심 universe (분기 1 회)
- Altman Z″ < 1.8 + Beneish M > -1.78 + Piotroski F ≤ 3 triple 강화
공개 호출 방식
import dartlab
import polars as pl
# 1. Altman Z″ (전 종목)
altman = dartlab.quant("altman", market="KR")
# → DataFrame: stockCode · zScore · zone (distress/grey/safe)
# 2. Beneish M-score
beneish = dartlab.quant("beneish", market="KR")
# → DataFrame: stockCode · mScore · manipulator (likely/unlikely)
# 3. 동시 충족 join
df = (
altman.join(beneish, on="stockCode", how="inner")
.filter((pl.col("zScore") < 1.8) & (pl.col("mScore") > -1.78))
.sort("zScore")
)
emit_result(
table=df,
values={"n_distress": len(df)},
date="2026-05-28",
sources=["dartlab://quant/altman", "dartlab://quant/beneish"],
) 호출 동작
1. 결론 도출
부실 + 회계 조작 의심 동시 충족 universe — 위험 신호 priority 정렬용. 부도 예측 아닌 주의 priority.
2. 핵심 근거 수집
dartlab.quant("altman")— 5 비율 가중 Z″ (manufacturing free 변형)dartlab.quant("beneish")— 8 비율 가중 M-score (1999 정통)
3. 메커니즘 분석
2 강건 신호 동시 충족
Altman Z″ < 1.8 (distress zone, 1~2 년 부도 ~80% precision)
Beneish M > -1.78 (manipulator 의심, 0.6~0.8 precision)
↓
inner join → red zone universe
↓
zScore 오름차순 정렬 (가장 위험 먼저)
↓
운영자 review → forensics deep dive 종목 선정 4. 반례·한계
- Altman zone 진입 ≠ 부도 확정 (정확도 80% 1 년 전).
- Beneish 는 manipulation 의심 이지 확정 X — manipulator-likely 가 실제 manipulator 비율 ~60-80%.
- 산업 base 차이 (heavy capex 산업 Z 낮음, asset-light 산업 Z 높음).
- 금융주 별 모델 필요 (CAMELS 또는 Mohanram G-score).
5. 후속 모니터링
- distress universe →
recipes.fundamental.quality.forensics.deepDiveforensics 27 종 deep dive. - accruals 추가 →
recipes.fundamental.quality.forensics.accountingPolicyChange결합. - credit 측 검증 →
engines.creditdCR rating +recipes.fundamental.credit.distressCandidateScreentriple.
대표 반환 형태
pl.DataFrame — 컬럼:
stockCode : str·corpName : strzScore : float— Altman Z″zone : str— distress / grey / safemScore : float— Beneish Mmanipulator : str— likely / unlikelysector : str(선택)
연계 절차
- 본 recipe → distress + manipulation 의심 universe.
- 통과 종목 →
recipes.fundamental.quality.forensics.deepDive또는recipes.fundamental.credit.distressCandidateScreentriple. - 회계 forensics 추가 →
recipes.fundamental.quality.forensics.accountingPolicyChange/bigBathDetection/revenueToCashBridge. - credit 측 dCR rating 결합 →
recipes.fundamental.credit.creditQuantConsensus4-source 합의. - 분기 재실행 → universe 변동 trace (악화 진행 종목 priority 상향).
런타임
실행 환경별 호환성
| 환경 | 상태 | 비고 / 제한 |
|---|---|---|
| Local Python | supported | · |
| Server | supported | · |
| MCP | supported | · |
| Web AI | limited | · |
| Pyodide | limited | · |
실패 회피
흔한 실패 · 절대 금지
- 신규 상장 종목 (3 년 미만) Beneish lookback 부족.
- 한국 산업 base rate 보정 미적용 (US 기반 모델 그대로 사용 시 industry false-positive).
- 분기 보고서 reporting lag (Q4 결산 발표 ~3 월) 동안 stale.
- distress zone 진입 = 부도 예측 X (Altman 정확도 ~80% 1 년 전, 95% 2 년 전). 결과는 priority 정렬용 universe.
- Beneish M > -1.78 = 회계 조작 *의심* 이지 확정 X — 추가 forensics 분석 강행.
- 금융주 Altman 정의 차이 — 산업 분리 (Altman Z″ 가 manufacturing free, 그래도 금융주는 별 모델 필요).