채널코퍼레이션
경력근거: AI를 통한 반복 문의를 빠르게 처리해 CS 효율화
채널톡은 AI 상담 자동화 알프(ALF)를 엔터프라이즈 고객사의 복잡한 워크플로에 녹여 내고, 그 결과를 비용 절감과 효율 개선 같은 실제 성과로 전환하는 FDE 를 찾고 있습니다. 어느 문의부터 레시피를 만들지는 킥오프 첫 주에 답해야 하는 질문이고, 이 계산기는 고객사가 이미 가진 상담 이력만으로 그 답에 수식을 붙여 내놓습니다. 이 포트폴리오가 보여주는 것은 지저분한 엑셀을 규칙으로 정규화하고 결정론 산식으로 판단을 내리는 기술이며, 컨택센터 운영과 CS 조직 관리 도메인 전문성은 주장하지 않습니다.
AI 기술을 고객사 프로젝트와 운영 자동화에 적용해 '실제 성과(Revenue impact, 비용 절감, 효율 개선)'로 전환하는 일이 주요 업무로 적혀 있습니다. 절감폭을 수치로 답하는 계산이 그 시작입니다.
AI 상담 자동화 기능 '알프(ALF)'를 고객 현장의 문제에 맞춰 'ALF 레시피'로 스케일러블하게 풀어낸다고 적혀 있습니다. 어느 문의부터 레시피를 만들지 고르는 판단이 그 앞단입니다.
'고객사 현장(데이터, 프로세스, 조직 구조 등)을 깊이 이해하고, 실제 문제를 정확히 진단'하는 일이 업무 첫 줄입니다. 진단의 재료가 CS팀이 내려받아 보내주는 상담 이력 엑셀과 근무표입니다.
고객사 CS팀에게서 받은 상담 이력 엑셀과 상담원 근무·단가 표를 규칙으로 계산해, 자동 응대를 먼저 켤 문의 유형의 순위와 월 절감 시간, 레시피 공수 회수 기간을 리포트로 내는 1주 FDE PoC 입니다.
엔터프라이즈 고객사에 파견된 채널코퍼레이션 FDE 입니다. 킥오프 때마다 '어느 문의부터 자동화하면 얼마나 줄어드느냐'는 질문을 받는데, CS팀이 보내준 상담 이력 엑셀을 피벗해 손으로 계산하느라 답변 한 장을 만드는 데 이틀씩 씁니다.
상담 이력 엑셀과 근무·단가 표를 규칙으로 계산하면, (a) 자동 응대를 걸어도 되는 문의를 사람 판단 없이 세어 유형별 월 절감 시간을 내고 (b) 레시피 제작 공수 대비 회수 기간을 수치로 답할 수 있습니다.
상담 이력 엑셀과 근무·단가 표를 받아 유형별 월 절감 시간과 회수 주수를 계산하고 수식을 적어 마크다운 리포트로 내는 CLI입니다.
자동화 커버율과 오응대 재작업률 가정을 위아래로 흔들어 순위가 뒤집히는 지점을 표로 정리한 민감도 리포트입니다.
근무 교대와 단가 체계가 다른 고객사 자료에 요금표와 규칙 파일만 바꿔 그대로 도는지 확인한 이식 기록입니다.
FDE 가 상담 이력 엑셀과 근무·단가 표를 한 줄 명령으로 넣으면 유형별 월 절감 시간과 회수 주수 순위표가 수식을 달고 마크다운으로 나옵니다
일부러 섞은 처리 시간 결측·음수·중복 티켓·기간 밖 날짜 30종을 넣어도 계산이 멈추지 않고 제외 사유를 리포트에 적어 냅니다
손으로 계산한 정답 대비 절감 시간 오차 1% 이내이고 상위 5개 유형의 순위가 그대로입니다
측정: 규칙 계산과 수기 산출 비교, 표본: 티켓 3000건, 2주차
진짜 성능 검증은 여기서 멈춥니다. 위 수치는 제가 만든 더미 상담 이력을 제가 채점한 결과이고, 실제 절감폭은 채널톡 고객사의 실제 상담 로그와 ALF 를 켠 뒤의 처리 시간이 있어야 측정됩니다. 이 포트폴리오는 그 비교를 바로 돌릴 수 있는 상태로 만듭니다.
이 포트폴리오가 보여주는 것은 지저분한 엑셀 파싱과 규칙 기반 자격 판정, 결정론 계산으로 답을 내는 설계이며, 컨택센터 운영과 CS 조직 관리 도메인 전문성은 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
고객사도 실데이터도 없이 혼자 만든 포트폴리오라 모든 수치는 합성 상담 이력을 제가 채점한 결과입니다. 면접에서는 '계산은 돌고 실검증은 대기 중'이라고 그대로 말하는 편이 신뢰를 얻습니다.
정답을 제가 만들었으니 잘 맞는 것이 당연합니다. 처리 시간 결측·음수·중복 티켓·표기 흔들림을 더미에 일부러 섞어 쉬운 문제만 푸는 것이 아님을 보입니다.
LLM이 절감액을 만들지 않습니다. 자동 응대 자격과 산술은 전부 규칙이 내리고 LLM은 카테고리 표기를 표준 유형에 붙이는 일만 맡아, 환각이 순위에 끼어들지 못하게 막습니다.
실제 도입 시 달라지는 것: 커버율과 오응대 재작업률은 제가 정한 가정값이라 고객사에서 ALF 를 실제로 켠 뒤의 실측치로 바꿔야 하고, 그때 순위가 뒤집힐 수 있어 2주차 민감도 표를 함께 제출합니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
고객사 CS팀이 헬프데스크에서 내려받아 보내준 한 달치 상담 이력 엑셀의 원본 행입니다
| ticket_id | opened_at_raw | category_raw | first_msg | handle_min_raw | reopened_raw | needs_lookup_raw | personal_data_raw | agent_id_raw | is_subtotal_row |
|---|---|---|---|---|---|---|---|---|---|
| T1001 | 2026-07-02 10:14 | 배송조회 | 주문한 거 언제 도착하나요? | 3.2 | N | N | N | A01 | false |
| T1002 | 2026/07/02 22:41 | 배송 조회 | 배송 언제 오나요 | 2.8 | N | Y | N | A03 | false |
| T1003 | 26.7.3 09:05 | 환불/취소 | 어제 결제한 거 취소하고 환불해 주세요 | 11.5 | Y | Y | Y | A01 | false |
| T1004 | 2026-07-03 13:20 | — | 그거요 | 1.1 | N | — | — | A02 | false |
| T1005 | 2026-07-05 02:37 | 교환문의 | 사이즈 교환 되나요? | — | N | N | N | A05 | false |
{"type":"object","properties":{"ticket_id":{"type":"string"},"opened_at_raw":{"type":["string","null"]},"category_raw":{"type":["string","null"]},"first_msg":{"type":["string","null"]},"handle_min_raw":{"type":["string","null"]},"reopened_raw":{"type":["string","null"]},"needs_lookup_raw":{"type":["string","null"]},"personal_data_raw":{"type":["string","null"]},"agent_id_raw":{"type":["string","null"]},"is_subtotal_row":{"type":"boolean"}},"required":["ticket_id","opened_at_raw","category_raw","first_msg","handle_min_raw","reopened_raw","needs_lookup_raw","personal_data_raw","agent_id_raw","is_subtotal_row"]}. 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: handle_min_raw 가 null·음수·'3분 20초' 같은 문자 표기인 행, 같은 ticket_id 가 값만 다르게 두 번 들어온 중복 행, 접수일시 표기 흔들림(2026-07-02 10:14 · 2026/07/02 · 26.7.3)과 존재하지 않는 날짜, 시트 중간에 다시 나오는 머리글 행과 is_subtotal_row true 인 소계 행, category_raw 의 공백·띄어쓰기 흔들림('배송조회'·'배송 조회 ')과 null·'기타', personal_data_raw 는 N 인데 first_msg 본문에 계좌·주민번호 조각이 드러난 행, 야간(22시~06시) 접수 행. 형식을 깨뜨리는 행 3건도 별도로 넣어라.{"type":"object","properties":{"ticket_id":{"type":"string"},"opened_at_raw":{"type":["string","null"]},"category_raw":{"type":["string","null"]},"first_msg":{"type":["string","null"]},"handle_min_raw":{"type":["string","null"]},"reopened_raw":{"type":["string","null"]},"needs_lookup_raw":{"type":["string","null"]},"personal_data_raw":{"type":["string","null"]},"agent_id_raw":{"type":["string","null"]},"is_subtotal_row":{"type":"boolean"}},"required":["ticket_id","opened_at_raw","category_raw","first_msg","handle_min_raw","reopened_raw","needs_lookup_raw","personal_data_raw","agent_id_raw","is_subtotal_row"]}같은 달 상담원 근무 교대와 시간당 단가 표이며 절감 시간을 금액과 회수 기간으로 바꾸는 데 씁니다
| agent_id | team_raw | shift_raw | monthly_hours_raw | hourly_cost_raw | employment_raw | joined_at_raw |
|---|---|---|---|---|---|---|
| A01 | CS 1팀 | 주간 | 160 | 22000 | 정규 | 2024-03-11 |
| A02 | CS 1팀 | 주간 | 160 | 22,000원 | 정규 | 2025-01-06 |
| A03 | CS 2팀 | 야간 | 144 | 27500 | 정규 | 2023-08-21 |
| A04 | — | 야간 | — | 27500 | 파견 | 2026-07-14 |
| A05 | CS 2팀 | 교대 | 152 | 24000 | 계약 | 2025-11-02 |
{"type":"object","properties":{"agent_id":{"type":"string"},"team_raw":{"type":["string","null"]},"shift_raw":{"type":["string","null"]},"monthly_hours_raw":{"type":["string","null"]},"hourly_cost_raw":{"type":["string","null"]},"employment_raw":{"type":["string","null"]},"joined_at_raw":{"type":["string","null"]}},"required":["agent_id","team_raw","shift_raw","monthly_hours_raw","hourly_cost_raw","employment_raw","joined_at_raw"]}. 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: hourly_cost_raw 에 섞인 천 단위 쉼표·'원'·엔화 표기와 0원인 인턴, monthly_hours_raw 가 null 이거나 근무일수만 적힌 행, shift_raw 가 null 이거나 '교대'라 야간 비중을 특정할 수 없는 행, joined_at_raw 가 대상 월보다 늦어 그달 근무가 없는 행, 상담 이력에는 있는데 이 표에 없는 agent_id 와 그 반대. 형식을 깨뜨리는 행 3건도 별도로 넣어라.{"type":"object","properties":{"agent_id":{"type":"string"},"team_raw":{"type":["string","null"]},"shift_raw":{"type":["string","null"]},"monthly_hours_raw":{"type":["string","null"]},"hourly_cost_raw":{"type":["string","null"]},"employment_raw":{"type":["string","null"]},"joined_at_raw":{"type":["string","null"]}},"required":["agent_id","team_raw","shift_raw","monthly_hours_raw","hourly_cost_raw","employment_raw","joined_at_raw"]}| Python | 엑셀 파싱과 자동화 자격 판정 규칙, 절감 시간·회수 기간 계산을 전부 맡습니다 |
| LLM | 상담원이 손으로 적은 카테고리 칸과 첫 문의 문장을 표준 문의 유형 후보로 맞춥니다 |
| Agentic Workflow | 파싱·정규화·자격 판정·계산·리포트 렌더 단계를 차례로 돌리고 실패한 단계만 다시 실행합니다 |
✓ pass → 그대로 멈춰도 완성품입니다. 더 키우려면 2주차(가정 흔들기)로 갑니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우려면 3주차(다른 고객사 체계 적용)로 갑니다.
문의 유형 한 줄과 그 유형을 먼저 자동화했을 때의 월 절감 시간·회수 주수, 그리고 그 숫자가 나온 수식입니다
{"type":"object","properties":{"rank":{"type":"number"},"category":{"type":"string"},"tickets_month":{"type":"number"},"auto_eligible":{"type":"number"},"blocked_reason_top":{"type":["string","null"]},"saved_min_month":{"type":"number"},"saved_cost_month":{"type":"number"},"recipe_days":{"type":"number"},"payback_weeks":{"type":["number","null"]},"formula":{"type":"string"}},"required":["rank","category","tickets_month","auto_eligible","blocked_reason_top","saved_min_month","saved_cost_month","recipe_days","payback_weeks","formula"]}[
{
"rank": 1,
"category": "배송 조회",
"tickets_month": 1240,
"auto_eligible": 1032,
"blocked_reason_top": "송장 조회가 필요해 외부 시스템을 거치는 208건은 제외했습니다",
"saved_min_month": 3044,
"saved_cost_month": 1116133,
"recipe_days": 2,
"payback_weeks": 2.5,
"formula": "1032건 × 3.1분 × (1 − 재작업 보정 0.05) = 3044분, 3044분 ÷ 60 × 22,000원 = 1,116,133원, 레시피 2인일 × 8시간 × 40,000원 ÷ (1,116,133원 ÷ 4.33주) = 2.5주",
"hedge": "재작업 보정 0.05 는 제가 정한 가정값이며 ALF 를 켠 뒤 실측치로 바꿔야 합니다"
},
{
"rank": 2,
"category": "교환 문의",
"tickets_month": 486,
"auto_eligible": 351,
"blocked_reason_top": "파손 사진 확인이 필요한 135건은 제외했습니다",
"saved_min_month": 2298,
"saved_cost_month": 842600,
"recipe_days": 3,
"payback_weeks": 4.9,
"formula": "351건 × 6.9분 × (1 − 재작업 보정 0.05) = 2298분, 2298분 ÷ 60 × 22,000원 = 842,600원, 레시피 3인일 × 8시간 × 40,000원 ÷ (842,600원 ÷ 4.33주) = 4.9주",
"hedge": "처리 시간 6.9분은 결측·음수 27건을 뺀 나머지의 중앙값입니다"
},
{
"rank": 3,
"category": "환불·취소",
"tickets_month": 322,
"auto_eligible": 0,
"blocked_reason_top": "결제 취소와 개인정보 확인이 걸려 전 건 상담원 처리로 남겼습니다",
"saved_min_month": 0,
"saved_cost_month": 0,
"recipe_days": 0,
"payback_weeks": null,
"formula": "자격 규칙 R-SENS-01(personal_data 또는 결제 취소 키워드) 적용으로 322건 전부 제외, 절감 0",
"hedge": "건수는 많지만 자동화 대상이 아니라는 결론도 리포트에 그대로 싣습니다"
}
]tickets_month·auto_eligible·saved_min_month·saved_cost_month·payback_weeks 는 규칙과 산식이 결정론으로 계산하므로 원본 행을 다시 세어 자동 검증되고, blocked_reason_top 문장이 고객사 CS팀장에게 그대로 읽힐 만한지만 사람이 봅니다.