이 스킬
SEC 10-K Item 1A 위험 요인 변화 (YoY 신규/삭제 항목 수)
미국 10-K Item 1A "Risk Factors" 의 직전 연도 대비 *신규 추가* / *삭제* 항목 수. 신규 risk factor ≥ 3 = 경영진의 위험 인식 전환 신호. EDGAR provider raw. 트리거 — 'SEC 10-K Item 1A 위험 요인 변화 (YoY 신규/삭제 항목 수)', 'sec 10 k risk factors', 'sec10kRiskFactors'.
연계 절차
이 절차의 단계
- 1 recipes.fundamental.disclosure.filingTextSignal
recipes.fundamental.disclosure.filingTextSignal위험 키워드 frequency 결합.
- 2 공시 타이밍 이상 — 늑장·집중·호재 부풀리기 진단
recipes.fundamental.quality.forensics.disclosureTimingAnomaly위험 추가 시점과 가격 변동 비교.
절차
실행 순서
- 1
EDGAR provider fetch10kFilings(ticker, limit=2) — 최근 + 직전 10-K
- 2
각 filing 의 Item 1A "Risk Factors" 본문 text
- 3
paragraph 단위 분할 (6 어 이상) → risk item set
- 4
set diff: added = current - previous, removed = previous - current
- 5
직전 연도 10-K 없음 → 결론 X.
- 6
단순 wording 변경 (의미 동일) 을 신규로 카운트 시 false positive.
- 7
paragraph 분할 heuristic — bullet vs paragraph 회사별 format 다름.
- 8
removed 가 *공시 회피* 인지 *실제 해소* 인지 구분 어려움.
- 9
added ≥ 3 → `recipes.fundamental.disclosure.sec8kMaterialEvents` 로 8-K 사후 이벤트 확인.
- 10
regulatory 신규 risk → `recipes.fundamental.quality.forensics.disclosureTimingAnomaly` 로 공시 timing 점검.
- 11
removed ≥ 3 + 가격 하락 → forensic risk 가중 (`recipes.fundamental.quality.forensics.fairDisclosureBreach`).
- 12
10-K raw 누락 또는 직전 연도 없음 → 결론 X.
예시
이런 질문이 들어오면 이 skill 을 쓴다
- AAPL 10-K 위험 요인 작년 대비 신규 / 삭제
- SEC Item 1A risk factor YoY 변화
- 미국 종목 경영진 위험 인식 전환 신호
출력
기대 결과
- 신규 추가 risk factor list + count
- 삭제 risk factor list + count
- 라벨 (신규 ≥ 3 = 전환 신호 / 미만 = 평상)
공개 호출 방식
import dartlab
import polars as pl
import re
ticker = "AAPL"
try:
filings = dartlab.Company(ticker).filings()
except Exception:
filings = []
def extract_risk_items(text):
"""Item 1A 안 bullet 또는 paragraph 단위 항목 추출."""
# heuristic: 6 어 이상 새 paragraph 시작
return [re.sub(r"s+", " ", p)[:120] for p in re.split(r"
s*
", text) if len(p.split()) >= 6][:50]
if len(filings) < 2:
table = pl.DataFrame(schema={"current": pl.Int64, "previous": pl.Int64, "added": pl.Int64, "removed": pl.Int64})
emit_result(table=table, values={"insufficient": True}, date=None, sources=["dartlab://edgar/10k"])
else:
cur_items = set(extract_risk_items(filings[0].get("item1aText", "")))
prev_items = set(extract_risk_items(filings[1].get("item1aText", "")))
added = len(cur_items - prev_items)
removed = len(prev_items - cur_items)
table = pl.DataFrame([{
"current": len(cur_items),
"previous": len(prev_items),
"added": added,
"removed": removed,
"filingDate": filings[0].get("filingDate"),
}])
emit_result(
table=table,
values={"added": added, "removed": removed, "current": len(cur_items)},
date=filings[0].get("filingDate"),
sources=["dartlab://edgar/10k"],
) 호출 동작
1. 결론 도출
added + removed risk factor 단정. 예: “AAPL 10-K FY2024 vs FY2023: current=42 / previous=39 항목 / added=5 (AI 규제·반독점·중국 의존·data privacy 신규·기후) / removed=2 → 신규 ≥ 3 임계 통과 — 경영진 위험 인식 transition phase (regulatory + AI 신규 인식).”
2. 핵심 근거 수집
- EDGAR provider fetch10kFilings(ticker, limit=2) — 최근 + 직전 10-K
- 각 filing 의 Item 1A “Risk Factors” 본문 text
- paragraph 단위 분할 (6 어 이상) → risk item set
- set diff: added = current - previous, removed = previous - current
3. 메커니즘 분석
2 개 10-K Item 1A → risk item set diff
set(current) - set(previous) = added
set(previous) - set(current) = removed
↓
임계 판정:
added ≥ 3 또는 removed ≥ 3 → transition 후보 (위험 인식 전환)
added < 3 + removed < 3 → 평상 (위험 인식 유지)
↓
added 의 의미 해석:
regulatory / litigation 신규 → 법적 risk 가중
technology / cyber 신규 → tech disruption 인식
geopolitical 신규 → 외부 환경 변화
removed 의 의미:
risk 해소 (긍정) 또는 *공시 회피* (부정 — forensic risk) 10-K Risk Factors 는 경영진 자기 인식 — 객관 risk 아님. 신규 추가 ≥ 3 = 인식 전환 신호. 단순 wording 변경 (의미 동일) 은 paragraph 매칭으로 분리 필수.
4. 반례·한계
- 직전 연도 10-K 없음 → 결론 X.
- 단순 wording 변경 (의미 동일) 을 신규로 카운트 시 false positive.
- paragraph 분할 heuristic — bullet vs paragraph 회사별 format 다름.
- removed 가 공시 회피 인지 실제 해소 인지 구분 어려움.
5. 후속 모니터링
- added ≥ 3 →
recipes.fundamental.disclosure.sec8kMaterialEvents로 8-K 사후 이벤트 확인. - regulatory 신규 risk →
recipes.fundamental.quality.forensics.disclosureTimingAnomaly로 공시 timing 점검. - removed ≥ 3 + 가격 하락 → forensic risk 가중 (
recipes.fundamental.quality.forensics.fairDisclosureBreach).
대표 반환 형태
| column | 의미 |
|---|---|
current | 최근 10-K 항목 수 |
previous | 직전 10-K 항목 수 |
added | 신규 추가 |
removed | 삭제 |
연계 절차
- recipes.fundamental.disclosure.filingTextSignal - 위험 키워드 frequency 결합.
- recipes.fundamental.quality.forensics.disclosureTimingAnomaly - 위험 추가 시점과 가격 변동 비교.
기본 검증
- 10-K raw 누락 또는 직전 연도 없음 → 결론 X.
- wording 변경 (의미 동일, 표현만 변경) 을 신규로 카운트하지 않도록 paragraph 매칭 임계 적절히.
- innovation lead 결론은 R&D 강도만으로 단정 X.
런타임
실행 환경별 호환성
| 환경 | 상태 | 비고 / 제한 |
|---|---|---|
| Local Python | supported | · |
| Server | supported | · |
| MCP | supported | · |
| Web AI | limited | · |
| Pyodide | limited | · |