링크알파의 이 애널리스트 포지션은 자본시장 전문성에 기반한 평가 루브릭과 프롬프트를 저작하고, disclosures·financial statements를 오가는 풀사이클 리서치를 QA해 팀이 쓸 인사이트로 바꿉니다. AI 메모 주장을 원문 공시 수치와 대조해 근거 없는 주장을 짚는 이 콘솔은 그 루브릭 저작과 리서치 QA를 정면으로 입증합니다. 링크알파는 buy-side가 신뢰하는 decision-grade 출력을 지향하고 금융 답변에서 출처 귀속이 품질의 필수 요건이라, 주장을 공시 근거에 묶는 이 사슬은 단순한 문서 요약 맥락으로는 그대로 만들 수 없습니다. 다만 자본시장 판단 자체의 전문성은 포트폴리오로 증명되지 않으므로 주장하지 않습니다.
최종 사용자 관점에서 제품 워크플로우를 훑어 가장 효과가 큰 개선 지점을 찾는 일이 이 포지션의 핵심입니다. 검수 콘솔은 리서치 산출물의 약한 고리를 정량으로 드러내 그 개선 지점을 짚습니다.
자본시장 전문성에 기반한 도메인 콘텐츠·프롬프트·평가 루브릭을 직접 만들고 다듬습니다. 이 콘솔의 근거 판정 규칙과 채점 축이 곧 그 평가 루브릭의 실행 형태입니다.
클라이언트 리서치·인터뷰·QA에서 정성·정량 피드백을 모아 팀이 바로 움직일 수 있는 인사이트로 바꾸는 일입니다. 콘솔은 검수 결과를 모아 어떤 주장 유형이 반복해서 틀리는지 인사이트로 정리합니다.
AI가 초안을 쓴 투자 리서치 메모에서 뽑은 각 주장(발행사·지표·기간·주장 수치·인용 출처)을 받아, 규칙(원문 공시 수치와의 대조·인용 누락·기간 어긋남·미매핑·결측)으로 근거 여부를 판정하고 어디가 왜 어긋났는지 근거와 함께 검수 카드로 정리합니다. 근거 판정은 공시 사실 테이블과의 대조 규칙이, 설명과 검수 카드 문구는 LLM이 맡습니다. 지표·발행사 표기를 마스터로 정규화합니다. 투자 판단의 옳고 그름이 아니라 메모 주장이 원문 공시에 실제로 근거하는지를 봅니다.
링크알파 리서치 메모를 buy-side 고객에게 보내기 전 검수하는 애널리스트입니다. AI 초안의 매출성장률·영업이익률을 공시 원문과 스프레드시트로 하나씩 대조하며 인용이 맞는지 확인하던 일을, 한 콘솔에서 근거가 어긋난 주장과 그 근거를 함께 보고 싶은 사람입니다.
메모 주장과 공시 사실을 한 스키마로 묶고 지표·발행사 마스터를 붙이면, (a) 숫자 불일치·인용 누락·기간 어긋남을 규칙으로 잡고, (b) 어느 주장이 왜 근거가 없는지 LLM이 원문 수치를 들어 설명하며, (c) 많은 메모의 주장을 끊김 없이 검수 카드로 정리합니다.
AI 메모 주장 세트와 공시 사실 테이블을 받아 근거 없는 주장을 규칙으로 잡고 근거 카드로 보여주는 동작하는 콘솔입니다. 데이터는 메모 주장과 공시를 가정한 더미로 시작합니다.
판정을 심은 정답과 검토자 2명 라벨에 비교해 정밀도·재현율과 일치도를 보여주는 화면입니다.
여러 메모의 판정을 모아 어떤 주장 유형(인용 누락·기간 재활용 등)이 반복해서 틀리는지 집계해 개선 우선순위로 보여주는 리포트입니다.
메모 주장 세트 15종을 넣으면, 각 주장의 판정(근거일치·숫자불일치·인용누락·기간재활용·미매핑·대조불가)과 근거 카드가 몇 초 안에 나오는 걸 시연합니다
일부러 만든 악성·결측 입력 30종(주장 수치 null·미등록 지표·지표 표기 흔들림·인용 출처 null·기간 어긋남)을 넣어도 출력 형식(스키마)이 한 번도 안 깨집니다
더미에 심은 정답 60건 중 판정이 일치한 게 54건(약 90%)입니다. 단, 정답·데이터를 모두 작성자가 만든 합성 기준이라 '성능 검증'이 아니라 '데모 조건에서의 동작'임을 명시합니다
진짜 성능 검증은 여기서 멈춥니다. 위 수치는 전부 작성자가 만든 더미데이터 자가채점이며, 실제 정밀도·재현율은 링크알파의 실 리서치 메모와 실 공시, 실 검토자가 있어야 측정 가능합니다. 이 콘솔은 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다
이건 고객·실데이터 없이 혼자 만든 포트폴리오입니다. 모든 수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모 동작과 실검증 준비 상태로 솔직히 설명하는 게 오히려 신뢰를 줍니다
정답을 작성자가 만들었으니 잘 맞는 게 당연합니다. 그래서 인용 출처 누락·미등록 지표·기간 어긋남·경계값 같은 결측·경계 케이스를 더미에 일부러 섞어, 쉬운 대조만 잡는 게 아님을 보여줍니다
이 콘솔이 보는 것은 주장이 원문 공시 수치에 근거하는지이지 그 투자 논리가 옳은지가 아닙니다. 숫자가 맞아도 결론이 타당하다는 뜻은 아니므로 '근거 대조'와 '투자 판단'을 카드에서 분리해 표시하고, 자본시장 판단 전문성은 포트폴리오로 증명되지 않으므로 주장하지 않습니다
지표·발행사 표기가 제각각입니다(영업이익률·OPM 등). 정규화로 같은 지표로 묶고, 못 묶은 건 추측하지 말고 '미매핑'으로 알립니다
실제 도입 시 공시 원문은 표가 아니라 비정형 문서라 주장 추출·기간 매칭이 더미보다 어렵습니다. 규칙 임계와 인용 파싱을 실공시·실검토자에 다시 맞춰야 하므로 도입 단계 과제로 분리합니다
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
AI 초안 메모에서 뽑은 개별 주장 로그. 대조 규칙·검수 카드가 가장 먼저 질의하는 테이블입니다. 주장 수치 결측·미등록 지표·지표 표기 흔들림·인용 출처 null·기간 어긋남을 일부러 섞고, label로 정답 판정을 심어 자가채점합니다.
| claim_id | memo_id | issuer | metric_raw | metric_id | period | claimed_value | unit | cited_source | label |
|---|---|---|---|---|---|---|---|---|---|
| mc_001 | memo_A | 삼성전자 | 매출성장률 | rev_yoy | 2025Q4 | 12 | pct | 삼성전자 사업보고서 2025Q4 | supported |
| mc_002 | memo_A | 삼성전자 | 영업이익률 | op_margin | 2025Q4 | 17 | pct | 삼성전자 사업보고서 2025Q4 | number_mismatch |
| mc_003 | memo_A | SK하이닉스 | OPM | op_margin | 2025Q4 | 41.2 | pct | SK하이닉스 분기보고서 2025Q4 | supported |
| mc_004 | memo_B | 네이버 | 매출성장 | rev_yoy | 2025Q4 | 8 | pct | — | no_citation |
| mc_005 | memo_B | 삼성전자 | 영업이익 | op_income | 2025Q4 | 9,800 | krw_bn | 삼성전자 사업보고서 2025Q4 | supported |
아래 JSON Schema에 맞는 AI 메모 주장 60행 JSON 배열로 생성합니다. 발행사 4~6개, 지표(rev_yoy/op_margin/op_income/per)·기간(2025Q4/2026Q1/2026Q2) 분포, 근거일치 위주에 오류를 섞습니다. label은 disclosure_facts와의 대조로 정합니다. 규칙: cited_source가 null이면 no_citation, metric_id가 null이거나 마스터에 없으면 unmapped_source, claimed_value가 null이면 unverifiable, 주장 기간에 해당 사실이 없고 이전 기간 사실을 인용했으면 stale_period, 주장 수치가 사실 수치와 허용오차(pct는 0.2p, 그 외 1% 이내) 밖이면 number_mismatch, 나머지는 supported.
{"type":"object","properties":{"claim_id":{"type":"string"},"memo_id":{"type":"string"},"issuer":{"type":"string"},"metric_raw":{"type":"string"},"metric_id":{"type":["string","null"]},"period":{"type":"string"},"claimed_value":{"type":["number","null"]},"unit":{"type":"string","enum":["pct","krw_bn","usd_mn","x","none"]},"cited_source":{"type":["string","null"]},"label":{"type":"string","enum":["supported","number_mismatch","stale_period","no_citation","unmapped_source","unverifiable"]}},"required":["claim_id","memo_id","issuer","metric_raw","period","unit","label"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라(쉬운 대조만 잡는 함정 회피): (1) 같은 지표의 표기 별칭('영업이익률'/'OPM', '매출성장률'/'매출성장'처럼 metric_id로 정규화돼야 함) 4건 이상, (2) 미등록 지표(metric_id=null) 2건, (3) 결측: claimed_value 또는 cited_source가 null인 행 각 2~3건, (4) 경계값 0.0%·음수 영업이익 각 1~2건, (5) 옛 분기 숫자를 이번 분기 주장으로 재활용한 stale_period 2~3건. label은 위 규칙대로 정직하게. JSON 배열만.{"type":"object","properties":{"claim_id":{"type":"string"},"memo_id":{"type":"string"},"issuer":{"type":"string"},"metric_raw":{"type":"string"},"metric_id":{"type":["string","null"]},"period":{"type":"string"},"claimed_value":{"type":["number","null"]},"unit":{"type":"string","enum":["pct","krw_bn","usd_mn","x","none"]},"cited_source":{"type":["string","null"]},"label":{"type":"string","enum":["supported","number_mismatch","stale_period","no_citation","unmapped_source","unverifiable"]}},"required":["claim_id","memo_id","issuer","metric_raw","period","unit","label"]}주장을 대조할 원문 공시 사실(진실원). 발행사·기간·지표 키로 memo_claims와 조인되며, 여기 없는 지표를 주장이 참조하면 미매핑으로 알립니다. 표기 정규화된 metric_id를 진실 키로 둡니다.
| fact_id | issuer | period | metric_id | value | unit | source_doc |
|---|---|---|---|---|---|---|
| df_001 | 삼성전자 | 2025Q4 | rev_yoy | 12 | pct | 사업보고서 |
| df_002 | 삼성전자 | 2025Q4 | op_margin | 15.5 | pct | 사업보고서 |
| df_003 | 삼성전자 | 2025Q4 | op_income | 9,800 | krw_bn | 사업보고서 |
| df_004 | SK하이닉스 | 2025Q4 | rev_yoy | 34 | pct | 분기보고서 |
| df_005 | SK하이닉스 | 2025Q4 | op_margin | 41.2 | pct | 분기보고서 |
아래 JSON Schema에 맞는 원문 공시 사실 40행 JSON 배열로 생성합니다. memo_claims의 발행사·기간·지표와 조인되도록 같은 키 공간을 씁니다. metric_id는 정규화된 표준 키(rev_yoy·op_margin·op_income·per 등)만 씁니다.
{"type":"object","properties":{"fact_id":{"type":"string"},"issuer":{"type":"string"},"period":{"type":"string"},"metric_id":{"type":"string"},"value":{"type":"number"},"unit":{"type":"string","enum":["pct","krw_bn","usd_mn","x"]},"source_doc":{"type":"string"}},"required":["fact_id","issuer","period","metric_id","value","unit","source_doc"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: (1) 0.0% 성장·음수 영업이익 같은 경계값 각 1~2건, (2) 특정 발행사·기간에는 일부 지표 사실이 아예 없어(memo_claims가 참조하면 미매핑이 되게) 빈 조합을 남길 것, (3) 같은 발행사의 인접 분기(2025Q4/2026Q1) 사실을 함께 두어 stale_period 대조가 가능하게 할 것. JSON 배열만.{"type":"object","properties":{"fact_id":{"type":"string"},"issuer":{"type":"string"},"period":{"type":"string"},"metric_id":{"type":"string"},"value":{"type":"number"},"unit":{"type":"string","enum":["pct","krw_bn","usd_mn","x"]},"source_doc":{"type":"string"}},"required":["fact_id","issuer","period","metric_id","value","unit","source_doc"]}| Python | 주장 파서·공시 대조 규칙 엔진·루브릭 채점·검수 카드 생성의 구현 언어입니다 |
| Go | 여러 메모의 주장 수천 건을 공시 사실과 동시에 대조하는 배치 검증 워커를 구현합니다 |
| SQL | 발행사·기간·지표로 공시 사실 테이블을 질의해 주장 수치와 조인하는 대조의 뼈대입니다 |
| LLM | 판정 결과를 원문 수치를 인용한 검수 카드 문구로 풀어 쓰는 설명 계층입니다 |
| Claude | 주장 설명 생성과 과장 표현 검출 judge에 쓰는 모델입니다 |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차(판정이 맞았는지 확인)로 진행합니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(메모 전반의 약한 고리 리포트)로 진행합니다.
메모 주장 1건의 근거 검수 카드. 판정·매칭 사실·루브릭 점수·근거를 한 스키마로 담아 콘솔 카드에 씁니다. 투자 판단의 옳고 그름이 아니라 원문 공시 근거 여부를 봅니다.
{"type":"object","properties":{"claim_id":{"type":"string"},"verdict":{"type":"string","enum":["supported","number_mismatch","stale_period","no_citation","unmapped_source","unverifiable"]},"matched_fact_id":{"type":["string","null"]},"rubric":{"type":"object","properties":{"grounding":{"type":"integer","minimum":0,"maximum":3},"accuracy":{"type":"integer","minimum":0,"maximum":3},"specificity":{"type":"integer","minimum":0,"maximum":3}},"required":["grounding","accuracy","specificity"]},"reason":{"type":"string","minLength":20},"evidence":{"type":"string","minLength":8},"hedge":{"type":["string","null"]}},"required":["claim_id","verdict","matched_fact_id","rubric","reason","evidence"]}[
{
"input_ref": "mc_002 (삼성전자 영업이익률 주장 수치 불일치)",
"output": {
"claim_id": "mc_002",
"verdict": "number_mismatch",
"matched_fact_id": "df_002",
"rubric": {
"grounding": 3,
"accuracy": 1,
"specificity": 2
},
"reason": "메모가 삼성전자 2025Q4 영업이익률을 17.0%로 적었으나 사업보고서 사실은 15.5%라 1.5%p 어긋납니다. 인용 출처는 맞지만 수치가 원문과 달라 고객 전달 전 수정이 필요합니다.",
"evidence": "claimed_value=17.0, df_002.value=15.5, period=2025Q4",
"hedge": null
}
},
{
"input_ref": "mc_004 (네이버 매출성장 인용 누락)",
"output": {
"claim_id": "mc_004",
"verdict": "no_citation",
"matched_fact_id": "df_006",
"rubric": {
"grounding": 0,
"accuracy": 3,
"specificity": 2
},
"reason": "메모의 네이버 2025Q4 매출성장 8.0%는 공시 사실과 값은 같으나 인용 출처가 비어 있습니다. 값이 맞아도 근거가 없으면 buy-side 검수를 통과하지 못하므로 출처를 달아야 합니다.",
"evidence": "cited_source=null, df_006.value=8.0",
"hedge": "값은 일치하나 인용 누락이라 supported로 올리지 않습니다"
}
},
{
"input_ref": "mc_007 (삼성전자 옛 분기 숫자 재활용)",
"output": {
"claim_id": "mc_007",
"verdict": "stale_period",
"matched_fact_id": "df_010",
"rubric": {
"grounding": 2,
"accuracy": 1,
"specificity": 1
},
"reason": "메모가 2026Q2 매출성장률을 5.0%로 적었지만 이는 2026Q1 사실을 그대로 옮긴 값이고 2026Q2 공시 사실은 없습니다. 옛 분기 숫자 재활용으로 보이므로 최신 분기 확인이 필요합니다.",
"evidence": "claim.period=2026Q2, cited=2026Q1, df_010.value=5.0",
"hedge": "2026Q2 사실이 없어 최신 수치는 단정하지 않습니다"
}
},
{
"input_ref": "mc_006 (미등록 지표 참조)",
"output": {
"claim_id": "mc_006",
"verdict": "unmapped_source",
"matched_fact_id": null,
"rubric": {
"grounding": 0,
"accuracy": 0,
"specificity": 1
},
"reason": "메모가 든 '혁신지수'는 공시 사실 마스터에 없는 지표라 원문 대조가 불가능합니다. 근거를 단정하지 않고 지표 등록 또는 출처 교체를 요청해야 합니다.",
"evidence": "metric_id=null, cited_source=내부 추정",
"hedge": "마스터 미등록 지표라 판정 등급은 추정하지 않습니다"
}
}
][자동 검증] 1. JSON Schema parse로 출력 형식(필드·enum·정수 범위)이 스키마를 통과하는지 확인합니다. 2. verdict가 대조 규칙(수치 허용오차·인용 null·기간 매칭·마스터 조인·값 결측)과 일치하는지 봅니다. 3. verdict를 심은 정답 label과 비교해 정밀도·재현율을 계산합니다. 4. matched_fact_id가 null인데 verdict가 supported로 나오면 차단하고, 투자 판단 단정 표현을 거릅니다. [수동 검증] 1. 검토자 2명이 비동기로 판정을 라벨링해 정밀도·재현율과 bootstrap Cohen's κ(두 사람 일치가 우연 이상인 정도, 0~1) 하한 0.6 이상을 봅니다. 2. 전체의 5%를 사람이 직접 원문 공시와 대조해 점검합니다.