Skill Intelligence — 스킬·이탈 리스크 분석
기존 사내 문서만으로 전 직원의 스킬을 추출·매칭하고, "이 사람이 나가면 무엇이 멈추는가"를 추적. 자체 감사로 초기 보고서의 재현 불가 수치를 발견해 정정. 수치는 전량 가상 데이터 기준.
사내 문서에서 전 직원의 보유 스킬을 AI로 추출·매칭하고, “이 사람이 나가면 무엇이 멈추는가”를 스킬 온톨로지로 추적하는 인력 리스크 분석 파이프라인. PoC를 완료하고 경영진 Go/No-Go 결정 자료까지 냈다.
1. 한눈에
| 역할 | 기획 · 방법론 설계 · 구현 · 자체 감사 · 경영진 보고 (1인) |
| 기간 | 2026-04 ~ 2026-07 (PoC 2단계 완료) |
| 상태 | Phase 2 완료 · 조건부 Go 권고로 경영진 결정 대기 |
| 대상 | 전 직원 77명 / 20개 팀 · 사내 문서 29건(팀 미션·JD·OKR) |
| 스택 | TypeScript(strict) · PostgreSQL · Drizzle ORM · Claude Code CLI · Vitest |
| 규모 | 소스 3,200줄 · CLI 커맨드 10개 · 커밋 45 · 분석 문서 12건 |
| 데이터 | 현재 전량 가상(익명화 완료) — 실데이터 파일럿은 경영진 승인 사항 |
2. 배경 — 무엇이 문제였나
인력 리스크를 이야기할 때 회사가 실제로 쥐고 있는 정보는 직급·연차·소속뿐이다. 그런데 정작 알고 싶은 건 다른 것이다.
이 사람이 내일 그만두면, 무엇이 멈추는가?
이 질문에 답하려면 “누가 무엇을 할 줄 아는가”가 데이터로 있어야 한다. 하지만 그건 어디에도 정리되어 있지 않았고, 전 직원에게 스킬을 직접 적어내라고 하는 방식은 응답률과 기준 편차 때문에 시작부터 무너진다.
한편 회사에는 이미 팀 미션, JD, OKR 같은 문서가 있었다. 사람이 자기 스킬을 적은 것은 아니지만, 팀이 무엇을 책임지는지는 적혀 있었다.
3. 무엇을 만들었나
“기존 문서 → 스킬 → 사람 → 리스크”로 내려오는 CLI 파이프라인. 새로 작성해야 하는 문서는 없다.
import-csv → extract → match → import-results → risk → dashboard
HR 명부 문서에서 사람과 DB 적재 이탈 리포트
적재 스킬 추출 스킬 매칭 리스크 산출
↑
verify-sheet / member-verify-sheet
import-verifications (사람의 확인을 되먹임)
| 단계 | 하는 일 |
|---|---|
| 추출 | 팀 미션·JD·OKR 29건에서 스킬과 스킬 간 관계를 뽑는다 |
| 매칭 | 사람 ↔ 스킬을 숙련도 1~4로 연결한다 |
| 리스크 | 희소 스킬 보유 여부 + 연쇄 영향으로 이탈 리스크를 산출한다 |
| 검증 | AI가 뽑은 결과를 본인·팀리드가 확인하고, 그 결과를 다시 넣는다 |
차별점 — 스킬을 목록이 아니라 그래프로 봤다
스킬 사이에 prerequisite(선행) · specialization(전문화) · complementary(보완) · enables(가능하게 함) 관계를 부여했다. 그래서 리스크를 이렇게 말할 수 있다.
단순 분석: “A 스킬 보유자가 1명이다.” 온톨로지 분석: “A 공백 → A가 가능하게 하던 심사 업무 중단 → 그에 의존하던 규제 보고 불가.”
관계를 3단계까지 추적해, 단순 분석 대비 2~3배의 의사결정 정보를 냈다.
4. 아키텍처
[사내 문서 29건] [HR 시스템 CSV]
팀미션·JD·OKR 구성원 명부
│ │
▼ ▼
┌─────────────────────────────────┐
│ CLI 파이프라인 (TypeScript) │
│ │
│ extract ──► LLM Runner ────────┼──► Claude Code CLI
│ match ──► (로컬 CLI 호출) │ (HTTP API 미사용 — 의도적)
└──────────────┬──────────────────┘
│
▼
┌──────────────────┐ ┌────────────────────┐
│ PostgreSQL │◄───────┤ 검증 루프 │
│ members │ │ verify-sheet 발행 │
│ skills │ │ → 본인/팀리드 확인 │
│ skill_relations │ │ → import 되먹임 │
│ member_skills │ └────────────────────┘
│ risk_snapshots │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ 리스크 산출 │ 희소 스킬 + 온톨로지 연쇄
│ + 스냅샷 저장 │ ← 재현성의 핵심
└────────┬─────────┘
▼
HTML 리포트 · 경영진 의사결정 자료
설계상 두 가지가 의도적이다.
- LLM을 HTTP API가 아니라 로컬 CLI로 호출한다. 직원 정보를 다루는 파이프라인이라, 외부 API 키로 데이터를 흘려보내는 경로를 처음부터 만들지 않았다.
- 리스크 산출 결과를 멤버당 1행 스냅샷으로 저장한다. 이유는 §5에 있다.
5. 이 프로젝트에서 가장 값어치 있는 부분 — 내 결과를 내가 무너뜨렸다
2026-04에 PoC 보고서를 냈다. 2026-07에 그 보고서를 감사하고 정정본을 발행했다.
무엇이 틀렸나
보고서에 쓴 수치가 DB의 저장 상태에서 재현되지 않았다.
| 항목 | 최초 보고 (2026-04) | 정정 후 (2026-07) |
|---|---|---|
| 스킬 카탈로그 | 560개 | 494개 (근-중복 병합) |
| 단독 보유 스킬 | 101개 | 83개 (가짜 단독 18개 제거) |
| 리스크 분포 | C14 · H11 · M23 · L29 | C12 · H19 · M6 · L40 |
원인은 세 가지였다.
- 정규화되지 않은 스킬 카탈로그. 사실상 같은 스킬이 다른 이름으로 여러 개 존재했고, 그래서 “보유자 1명뿐인 희소 스킬”이 실제보다 부풀려졌다. 리스크 산출의 입력이 오염돼 있었던 것이다.
- 재현 불가능한 수치. 보고서의 숫자는 특정 시점 실행 결과였고, 이후 DB가 드리프트하면서 같은 숫자를 다시 만들 수 없게 됐다.
- 미보정 임계값. 검증되지 않은 AI 추출 결과가 연쇄 분석을 타고 Critical까지 올라갔다.
무엇을 고쳤나
- 스킬 정규화 패스를 읽기 전용 탐지 → 적용 도구(롤백 가능한 dry-run 포함) 순으로 도입해 근-중복을 병합했다.
- 멤버당 재현 가능한 리스크 스냅샷 1행을 저장하도록 바꿨다. 이제 보고서 수치는 저장 상태에서 그대로 다시 나온다.
- 검증 상태를 산출물 전면에 노출하고, 검증되지 않은 연쇄는 Critical로 올라가지 못하도록 High에서 상한을 뒀다. AI가 추출한 것과 사람이 확인한 것을 리스크 등급이 구분한다.
- 개인 단위 검증 루프(
member-verify-sheet→ 확인 →import-verifications)를 만들되, 기본을 dry-run으로 뒀다.
왜 이게 중요한가
이 프로젝트는 “AI가 인사 데이터를 분석했다”가 아니다. AI 분석 결과를 경영진 의사결정에 쓰기 전에, 그 결과가 재현되는지·검증됐는지를 스스로 감사하고, 틀린 숫자를 자기 손으로 정정한 기록이다.
정정하지 않았다면 경영진은 부풀려진 희소 스킬 101개와 재현되지 않는 리스크 분포를 근거로 인력 의사결정을 했을 것이다.
6. 경영진에게 무엇을 권고했나
“조건부 Go.” 전면 도입이 아니라, 스킬 정의가 명확한 2~3개 팀에 한정한 실데이터 파일럿을 승인해 달라고 요청했다.
논리는 이렇다.
- 기술 파이프라인 · 방법론 · 보안 거버넌스는 준비됐다.
- 남은 미지수는 딱 하나 — 실데이터에서의 추출 정확도. 현재 데이터는 전량 가상이라 이 수치를 만들 수 없다.
- 그리고 그 실측은 경영진 승인 없이 진행할 수 없다.
그래서 요청을 “도입해 주십시오”가 아니라 “정확도를 측정할 수 있게 해 주십시오“로 좁혔다. 확장 판단은 그 결과를 보고 다음 체크포인트에서.
검증되지 않은 것을 검증된 것처럼 포장해 승인을 받는 대신, 아직 모르는 것을 모른다고 적고 그것을 알아낼 권한을 요청했다.
7. 숫자로 본 결과
| 항목 | 수치 |
|---|---|
| 커버리지 | 77명 / 20팀 (100%) |
| 입력 문서 | 29건 — 전부 기존 문서, 신규 작성 0건 |
| 스킬 카탈로그 | 494개 (정규화 후) · 관계 642개 |
| 스킬 매칭 | 2,096건 · 1인 평균 약 27개 |
| 파이프라인 소요 | 문서 수집 제외 약 3시간 (반복 실행 자동화) |
| 자체 감사로 정정한 지표 | 3종 (스킬 수 · 단독 스킬 수 · 리스크 분포) |
| 산출 문서 | PoC 보고서 · 감사 · 방법론 리뷰 · 임계값 캘리브레이션 · Go/No-Go 자료 |
리스크 분포 등 분석 수치는 전량 가상 데이터 기준이다. 이 문서와 원 보고서 모두 그 사실을 첫 페이지에 명시하고 있다.