쏘카
경력근거: 예약·결제·차량 제어·위치 데이터가 실시간으로 맞물리는 모빌리티 플랫폼
쏘카는 예약·결제·차량 제어·위치가 실시간으로 맞물리는 모빌리티 플랫폼이라, 운영 예외를 분류하고 대응 우선순위를 매기는 이 도구는 쏘카의 실시간 예외 로그가 있어야 우선순위를 검증합니다.
'실시간으로 발생하는 수많은 예외 상황을 처리하는 시스템'이 제품. 예외를 빨리 분류·우선순위화하는 게 직접적 운영 가치.
'기획서를 그대로 구현하는 사람이 아니라 이면의 진짜 문제를 짚어내는' 직무. 예외 더미 속 우선순위를 판단하는 게 그 능력의 증거.
예약·결제·차량 제어·위치가 실시간으로 얽힘. 예외 분류엔 이 컨텍스트 조인이 필요해 데이터 결합 역량이 핵심.
차량 운영 중 들어오는 예외 이벤트 로그에 예약·차량 컨텍스트를 붙여, 예외를 유형별로 분류하고 대응 우선순위와 추천 액션을 근거와 함께 제시하는 1주 포트폴리오입니다.
쏘카 PE. 쏟아지는 예외 알림을 매번 사람이 눈으로 분류·우선순위화하던 상황을 끝내고, 그 판단을 자동 도구로 옮기고 싶은 사람입니다.
예외 이벤트에 예약·차량 상태 컨텍스트를 조인하면, LLM/규칙이 (a) 예외를 유형별로 분류하고 (b) 안전·매출 영향 기준으로 대응 우선순위와 추천 액션을 근거와 함께 줄 수 있습니다.
차량 운영 예외 이벤트를 받아 유형 분류·대응 우선순위·추천 액션을 근거와 함께 제시하는 동작하는 도구입니다.
실제 처리 결과로 우선순위 적중률과 추천 액션 채택률을 재고, 분류 오탐을 보여주는 대시보드입니다.
저위험 예외를 자동 처리·라우팅하고 대응 SLA를 추적해, 운영팀이 고위험에만 집중하는 단계입니다.
결측·이상·미등록 예외 30종(GPS 유실·중복 이벤트·알 수 없는 코드 포함)을 넣어도 분류가 멈추지 않고 '검토 필요'로라도 처리하는 걸 시연합니다.
예외 이벤트 묶음을 넣으면 우선순위 정렬된 대응 큐와 추천 액션이 몇 초 안에 나오는 걸 시연합니다.
모든 분류·우선순위 출력이 형식 검증(Zod)을 통과
측정: 자동 parse, 표본: 이벤트 100건
예외 유형 라벨 30개 중 24개가 내가 만든 정답과 일치합니다. 단, 정답·데이터를 작성자가 만든 합성 기준이라 '성능 검증'이 아니라 '데모 조건 동작'
위 수치는 더미데이터 자가채점이며, 실제 분류·우선순위 정확도는 쏘카 실제 운영 이벤트 + 운영팀 검수가 있어야 측정 가능합니다. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다.
수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모 동작과 실검증 준비 상태로 솔직히 설명합니다.
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. GPS 유실·중복·미등록 코드·동시다발 예외 같은 헷갈리는 케이스를 더미에 일부러 섞어 쉬운 문제만 푸는 게 아님을 보여줍니다.
우선순위 기준(안전 vs 매출)은 회사 정책이라 임의 단정 금지합니다. 가중치를 설정으로 외부화하고 애매하면 '검토 필요'로 표시합니다.
실제 도입 시 달라지는 것: 실 이벤트 빈도·유형 분포가 더미와 다르므로 예외 사전과 우선순위 가중치를 실데이터로 다시 맞춰야 한다(도입 단계 과제)
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
차량 운영 중 발생한 예외 이벤트 로그. 분류·우선순위 LLM 이 가장 먼저 보는 표. 결측·이상·미등록·중복을 일부러 섞었다.
| event_id | booking_id | vehicle_id | kind_raw | gps | severity_hint |
|---|---|---|---|---|---|
| e_001 | b_1001 | v_seoul_01 | 결제 실패 | 37.50,127.03 | mid |
| e_002 | b_1002 | v_seoul_02 | 도어 열림 오류 | 37.48,127.01 | high |
| e_003 | — | v_busan_07 | GPS 신호 없음 | — | — |
| e_004 | b_1004 | v_seoul_05 | 반납 위치 이탈 | 37.55,126.97 | mid |
| e_005 | b_1005 | v_seoul_05 | 반납 위치 이탈 | 37.55,126.97 | mid |
아래 Zod 스키마에 맞는 차량 운영 예외 이벤트 80행 JSON 배열로 생성.
{"type":"object","properties":{"event_id":{"type":"string"},"booking_id":{"type":["string","null"]},"vehicle_id":{"type":"string"},"kind_raw":{"type":"string"},"gps":{"type":["string","null"]},"severity_hint":{"type":["string","null"],"enum":["low","mid","high"]}},"required":["event_id","booking_id","vehicle_id","kind_raw","gps","severity_hint"]}
쉬운 데이터만 만들지 말 것. 하드 케이스 의도적 혼입: (1) gps/booking_id/severity_hint=null 결측 각 1~2건, (2) 같은 이벤트 중복 행 1건, (3) kind_raw 표기 흔들림('결제 실패' vs '결제실패') 1쌍과 빈 문자열 1건, (4) 정의되지 않은 kind_raw('??정의안됨??') 1건, (5) 미등록 vehicle_id(orphan) 1건, (6) 사고 감지 같은 high severity 경계 케이스 1~2건. JSON 배열만.{"type":"object","properties":{"event_id":{"type":"string"},"booking_id":{"type":["string","null"]},"vehicle_id":{"type":"string"},"kind_raw":{"type":"string"},"gps":{"type":["string","null"]},"severity_hint":{"type":["string","null"],"enum":["low","mid","high"]}},"required":["event_id","booking_id","vehicle_id","kind_raw","gps","severity_hint"]}| Python | 이벤트 ingest + 분류 규칙 + 우선순위 점수 + LLM 추천 액션 호출 |
| TypeScript | 예외 대응 큐 UI + Zod 런타임 검증 |
| LLM | Claude 로 예외 유형 분류·추천 액션 생성 및 근거 인용 |
✓ pass → 그대로 멈춰도 완성품입니다. 더 키우려면 2주차(우선순위·추천이 실제 대응과 맞는지 검증)로 갑니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우려면 3주차(저위험 예외 자동 대응)로 갑니다.
예외 이벤트 단위 분류 + 우선순위 + 추천 액션 출력. 근거 인용 포함.
{"type":"object","properties":{"event_id":{"type":"string"},"category":{"type":"string","enum":["payment","vehicle_control","location","safety","app","unknown"]},"priority":{"type":"integer","minimum":1,"maximum":5},"recommended_action":{"type":"string","minLength":10},"evidence":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"quote":{"type":"string"}},"required":["field","quote"]},"minItems":1},"hedge":{"type":["string","null"],"minLength":8}},"required":["event_id","category","priority","recommended_action","evidence","hedge"]}[
{
"event_id": "e_008",
"category": "safety",
"priority": 5,
"recommended_action": "즉시 차량 원격 점검 + 고객 안전 확인 연락",
"evidence": [
{
"field": "kind_raw",
"quote": "사고 감지(급감속)"
}
],
"hedge": null
},
{
"event_id": "e_003",
"category": "location",
"priority": 3,
"recommended_action": "최근 위치 캐시로 추정 후 GPS 재연결 시도",
"evidence": [
{
"field": "gps",
"quote": "null"
}
],
"hedge": "GPS 결측이라 위치 추정 신뢰도 낮음"
},
{
"event_id": "e_006",
"category": "unknown",
"priority": 2,
"recommended_action": "운영자 검토 큐로 이관. 정의되지 않은 이벤트",
"evidence": [
{
"field": "kind_raw",
"quote": "??정의안됨??"
}
],
"hedge": "유형 불명확, 단정하지 않음"
}
]자동: (1) Zod parse, (2) evidence.field 가 입력 스키마 실제 필드명인지, (3) category=unknown 이면 priority≤3 + hedge 존재 규칙 체크. 수동/judge: 우선순위 적정성은 정책 기준으로 사람 5% 확인.