현대카드
경력근거: 파트너사의 데이터가 AI 플랫폼에 정상적으로 연동 및 적용될 수 있도록 데이터 파이프라인 연결 지원
※ 실제 산출물이 아닌 AI 예측 시안입니다.
현대카드 FDE 는 국내외 파트너사에 AI 플랫폼을 도입하며 ‘파트너 데이터가 플랫폼에 정상 연동되도록 파이프라인을 연결’ 하고 ‘파트너가 정의한 KPI 로 성능을 검증’ 하는 역할입니다. 파트너마다 다른 원천 스키마를 플랫폼 온톨로지에 매핑하고 PoC 성공기준 대비로 검증하는 이 사슬은, 파트너 데이터 사전과 KPI 정의가 함께 있어야만 만들어져 다른 회사 데이터로는 그대로 재현되지 않습니다.
FDE 주요업무가 ‘파트너사 데이터가 AI 플랫폼에 정상 연동·적용되도록 파이프라인 연결 지원’ 입니다. 파트너 스키마를 플랫폼 온톨로지로 매핑하고 미매핑을 알려주는 일이 핵심입니다.
‘성공 기준(KPI)에 따른 AI 플랫폼 성능 검증 및 결과 도출’ 이 명시돼, PoC 성공기준 대비 점수와 검증 결과를 산출하는 닫힌 루프가 최소 단위입니다.
파트너사 현장에서 발생하는 비즈니스/기술 문제를 정의하고 해결 방안을 조율하는 client-facing 역할이라, 연동 위험을 사람이 읽을 리포트로 전달해야 합니다.
파트너사의 원천 데이터 사전(테이블·컬럼)과 비즈니스 KPI 정의를 한곳에 모아, LLM 이 AI 플랫폼 온톨로지로의 매핑안, 미매핑·품질 결손 플래그, PoC 성공기준 스코어카드를 근거와 함께 냅니다. 매일 연동 진단 리포트를 보냅니다. 근거는 채용공고 정렬이고, 데이터는 작성자가 만든 더미데이터입니다.
현대카드 Forward Deployed Engineer 입니다. 새 파트너사를 온보딩할 때마다 데이터 사전을 손으로 읽고 플랫폼 온톨로지에 맞춰보던 일을 줄이고, 매핑이 실제로 맞았는지와 PoC 성공기준을 채웠는지까지 한 화면에서 확인하고 싶은 사람입니다.
파트너 데이터 사전·KPI·플랫폼 온톨로지를 한 스키마로 묶으면, LLM 이 (a) 컬럼 단위 매핑안과 미매핑·품질 결손 Top3, (b) PoC 성공기준 스코어카드를 근거와 함께 몇 초 안에 내고, (c) 샘플 조인 실측으로 그 매핑이 맞았는지 확인합니다.
파트너 데이터 사전과 KPI 를 받아 온톨로지 매핑안·미매핑 플래그·PoC 스코어카드를 LLM 이 만들고 매일 연동 진단 리포트를 보내는 동작하는 도구입니다. 실제 파트너망 접속은 W2·W3 로 미루고, W1 은 메타데이터(데이터 사전·샘플 행)만으로 시작합니다.
제안한 매핑으로 샘플 행을 실제 조인해 값이 통하는지 검증하고, 데이터 엔지니어 검토자 2명이 매핑 타당성을 라벨링해 신뢰도를 보여주는 대시보드입니다.
확인된 매핑 위에서 파트너가 정의한 KPI 달성도를 사이클별로 추적해, 어느 연동 항목이 KPI 를 끌어올렸는지 보여주는 단계입니다.
파트너 데이터 사전 한 건을 넣으면, 컬럼 매핑안과 미매핑 Top3·PoC 스코어카드가 몇 초 안에 나오는 걸 시연합니다
일부러 만든 악성·결측 입력 30종(타입 불일치·표기 흔들린 컬럼명·온톨로지에 없는 필드)을 넣어도 출력 형식(Zod 스키마)이 한 번도 안 깨지는 걸 보여줍니다
매일 연동 진단 리포트가 자동 발송되는 걸 14일치 시연으로 보여줍니다
내가 만든 정답 매핑 30개 중 컬럼 매핑이 일치한 게 24개(80%)입니다. 단, 정답과 데이터를 모두 작성자가 만든 합성 기준이라 ‘성능 검증’ 이 아니라 ‘데모 조건에서의 동작’ 임을 밝힙니다
진짜 성능 검증은 여기서 멈춥니다. 위 수치는 전부 작성자가 만든 더미데이터 자가채점이며, 실제 매핑 정확도·KPI 달성은 현대카드 파트너사 실제 데이터와 실 데이터 엔지니어 검수자가 있어야 측정됩니다. 이 도구는 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다
이건 고객·실데이터 없이 혼자 만든 포트폴리오입니다. 모든 수치는 합성 데이터 자가채점이라 ‘성능 증명’ 이 아니며, 면접에서 ‘데모 동작 + 실검증 준비 상태’ 로 솔직히 설명합니다
정답 매핑을 작성자가 만들었으니 잘 맞는 게 당연합니다. 일부러 헷갈리는 결측·타입 불일치·중복키·미매핑 케이스를 더미에 섞어, 쉬운 문제만 푸는 게 아님을 보여줍니다
‘이 컬럼이 곧 저 온톨로지 필드다’ 는 이름 유사일 뿐 의미가 다를 수 있습니다. 단정 표현을 누그러뜨리고 타입·값 분포 매칭과 별도 LLM 검사로 우회 단정까지 거릅니다
같은 의미 컬럼의 표기가 파트너마다 제각각입니다. 이름·타입 유사도로 묶고, 못 묶은 건 추측하지 않고 ‘미매핑’ 으로 알립니다
실제 도입 시 달라지는 것을 명시합니다. 실 파트너 데이터 분포는 더미와 다르므로 기준폭·보정값을 다시 맞춰야 하고, 매핑 검수도 실제 데이터 엔지니어로 교체해야 합니다(도입 단계 과제로 분리)
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
파트너사 원천 데이터 사전(테이블·컬럼·타입·샘플값). 매핑 LLM 이 가장 먼저 질의하는 테이블입니다. 표기 흔들린 컬럼명·결측 설명·타입 불일치·온톨로지에 없는 컬럼을 일부러 섞어, 쉬운 데이터만 푸는 게 아님을 보여줍니다.
| col_id | table_raw | column_raw | dtype | sample_value | description | mapped_ontology_id |
|---|---|---|---|---|---|---|
| p_001 | CUST | cust_no | string | C-100231 | 고객 번호 | ont_customer_id |
| p_002 | CUST | reg_dt | date | 2026-01-12 | 가입일 | ont_signup_date |
| p_003 | TRX | amt | float | 15000.0 | — | ont_amount |
| p_004 | TRX | cust_no | string | C-100231 | 고객번호(거래) | ont_customer_id |
| p_005 | TRX | txn_amt | string | 15,000 | 거래금액(문자열) | — |
아래 Zod 스키마에 맞는 파트너사 데이터 사전 40행 JSON 배열로 생성. 테이블 4~6개(CUST/TRX/PROD/CAMP 등)에 걸쳐 컬럼 분포.
{"type":"object","properties":{"col_id":{"type":"string"},"table_raw":{"type":"string"},"column_raw":{"type":"string"},"dtype":{"type":"string","enum":["string","int","float","date","bool"]},"sample_value":{"type":["string","null"]},"description":{"type":["string","null"]},"mapped_ontology_id":{"type":["string","null"]}},"required":["col_id","table_raw","column_raw","dtype","sample_value","description","mapped_ontology_id"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라(쉬운 문제만 푸는 함정 회피): (1) 같은 의미 컬럼의 표기 흔들림(cust_no/custno/customer_id → 같은 ont_customer_id 로 정규화돼야 함), (2) 온톨로지에 없는 컬럼(mapped_ontology_id=null) 3~4건(미매핑), (3) 타입 불일치(금액이 float 인데 다른 테이블에선 string '15,000') 1~2건, (4) description=null·sample_value=null 결측 각 1~2건, (5) 경계값 resp_rate '1.0'·'0.0' 각 1건. JSON 배열만.{"type":"object","properties":{"col_id":{"type":"string"},"table_raw":{"type":"string"},"column_raw":{"type":"string"},"dtype":{"type":"string","enum":["string","int","float","date","bool"]},"sample_value":{"type":["string","null"]},"description":{"type":["string","null"]},"mapped_ontology_id":{"type":["string","null"]}},"required":["col_id","table_raw","column_raw","dtype","sample_value","description","mapped_ontology_id"]}AI 플랫폼 표준 온톨로지(필드 ID·타입·별칭). 매핑의 정답 측 기준입니다. 같은 개념의 별칭과 파트너에 없을 수 있는 필수 필드를 둬, 매핑 LLM 이 표기 흔들림과 누락을 다루는지 보여줍니다.
| ontology_id | canonical_field | dtype | aliases | required |
|---|---|---|---|---|
| ont_customer_id | customer_id | string | ["cust_no","custno","고객번호"] | true |
| ont_signup_date | signup_date | date | ["reg_dt","가입일"] | true |
| ont_amount | amount | float | ["amt","txn_amt","거래금액"] | true |
| ont_product_id | product_id | string | ["prod_cd","상품코드"] | true |
| ont_grade | customer_grade | int | ["grade","등급"] | false |
아래 Zod 스키마에 맞는 platform_ontology 20행 JSON 배열로 생성. 각 필드가 별칭 1~3개를 가지도록.
{"type":"object","properties":{"ontology_id":{"type":"string"},"canonical_field":{"type":"string"},"dtype":{"type":"string","enum":["string","int","float","date","bool"]},"aliases":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"}},"required":["ontology_id","canonical_field","dtype","aliases","required"]}
조건: required=true 인 필수 필드 절반 내외, aliases 에 영문·한글 표기 혼합, partner_data_dict 에 대응되지 않는 required 필드(누락 탐지용) 1~2건 포함. JSON 배열만.{"type":"object","properties":{"ontology_id":{"type":"string"},"canonical_field":{"type":"string"},"dtype":{"type":"string","enum":["string","int","float","date","bool"]},"aliases":{"type":"array","items":{"type":"string"}},"required":{"type":"boolean"}},"required":["ontology_id","canonical_field","dtype","aliases","required"]}| Python | ingest 파이프라인(데이터 사전·샘플 행 → PostgreSQL upsert) + 매핑 검증·KPI 계산 스크립트 |
| SQL | 샘플 조인 검증 쿼리 + 온톨로지 매핑 뷰(`v_mapping_health`) |
| TypeScript | 프런트·API 공통 타입 + Zod 런타임 스키마로 LLM 출력 형식 강제 |
| Next.js | 온보딩 대시보드(매핑 카드 + 미매핑 플래그 + PoC 스코어카드) + 매핑 API(`POST /map`) 라우트 |
| LLM | 온톨로지 매핑안·미매핑 진단·스코어카드 생성(few-shot + 스키마 강제) |
| Docker | 파트너별 격리 실행 환경 + 재현 가능한 검증 파이프라인 패키징 |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차(매핑이 실제로 맞았는지 샘플 조인 확인)로 진행합니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(PoC 성공기준 KPI 달성 추적)로 진행합니다.
1) 컬럼 단위 매핑안(근거·confidence), 2) 미매핑·품질 결손 Top3, 3) PoC 성공기준 스코어카드, 4) 샘플 조인 실측으로 매핑 적중 검증. 매핑→진단→검증 한 주기를 한 스키마에 담습니다.
{"type":"object","properties":{"partner":{"type":"string"},"mappings":{"type":"array","items":{"type":"object","properties":{"col_id":{"type":"string"},"ontology_id":{"type":["string","null"]},"reason":{"type":"string","minLength":20},"evidence_metrics":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"anyOf":[{"type":"number"},{"type":"string"}]}},"required":["name","value"]},"minimum":1},"confidence":{"type":"string","enum":["low","mid","high"]},"confidence_prob":{"type":"number"}},"required":["col_id","ontology_id","reason","evidence_metrics","confidence","confidence_prob"]},"minimum":3},"gaps":{"type":"array","items":{"type":"object","properties":{"gap_id":{"type":"string"},"gap_type":{"type":"string","enum":["unmapped","type_mismatch","missing_required","duplicate_key"]},"detail":{"type":"string","minLength":15},"hedge":{"type":["string","null"],"minLength":8}},"required":["gap_id","gap_type","detail","hedge"]},"minimum":1,"maximum":5},"poc_scorecard":{"type":"array","items":{"type":"object","properties":{"kpi":{"type":"string"},"target":{"type":"string"},"status":{"type":"string","enum":["ready","blocked","partial"]}},"required":["kpi","target","status"]},"minimum":1},"verification":{"type":["object","null"],"properties":{"prior_cycle":{"type":"string"},"join_hit_rate":{"type":"number"},"brier_score":{"type":"number"},"hits":{"type":"array","items":{"type":"object","properties":{"col_id":{"type":"string"},"predicted_ontology_id":{"type":"string"},"actual_join_ok":{"type":"boolean"},"confidence_prob":{"type":"number"}},"required":["col_id","predicted_ontology_id","actual_join_ok","confidence_prob"]}}},"required":["prior_cycle","join_hit_rate","brier_score","hits"]}},"required":["partner","mappings","gaps","poc_scorecard","verification"]}[
{
"input_ref": "파트너 A 데이터 사전 (2주차 시작일. verification 은 1주차 매핑 결과)",
"output": {
"partner": "partner_A",
"mappings": [
{
"col_id": "p_001",
"ontology_id": "ont_customer_id",
"reason": "CUST.cust_no 는 온톨로지 customer_id 의 별칭 cust_no 와 일치하고 샘플값 'C-100231' 형식도 string 으로 부합합니다.",
"evidence_metrics": [
{
"name": "alias_match",
"value": "cust_no"
},
{
"name": "dtype_match",
"value": "string"
}
],
"confidence": "high",
"confidence_prob": 0.9
},
{
"col_id": "p_005",
"ontology_id": "ont_amount",
"reason": "TRX.txn_amt 는 amount 후보지만 샘플값 '15,000' 이 콤마 포함 string 이라 float 변환이 필요합니다.",
"evidence_metrics": [
{
"name": "alias_match",
"value": "txn_amt"
},
{
"name": "dtype_partner",
"value": "string"
}
],
"confidence": "mid",
"confidence_prob": 0.6
},
{
"col_id": "p_008",
"ontology_id": "ont_grade",
"reason": "CUST.grade 는 선택 필드 customer_grade 와 int 타입까지 일치합니다.",
"evidence_metrics": [
{
"name": "dtype_match",
"value": "int"
}
],
"confidence": "high",
"confidence_prob": 0.85
}
],
"gaps": [
{
"gap_id": "gap_A_01",
"gap_type": "type_mismatch",
"detail": "p_005 txn_amt 가 string('15,000') 이라 ont_amount(float) 적재 전 정규화 파이프라인이 필요합니다.",
"hedge": "샘플 1건만으로 전수 포맷을 단정하기 어렵습니다."
},
{
"gap_id": "gap_A_02",
"gap_type": "missing_required",
"detail": "필수 필드 ont_channel(acquisition_channel) 에 대응하는 파트너 컬럼이 데이터 사전에 없습니다.",
"hedge": "별칭 미수집 가능성이 있어 파트너 확인이 필요합니다."
},
{
"gap_id": "gap_A_03",
"gap_type": "unmapped",
"detail": "MEMO.free_text(비정형 상담 메모)는 대응 온톨로지가 없어 별도 처리 대상입니다.",
"hedge": null
}
],
"poc_scorecard": [
{
"kpi": "고객 식별 연동률",
"target": "필수 식별 필드 100% 매핑",
"status": "partial"
},
{
"kpi": "거래 금액 정합",
"target": "amount 정규화 후 합계 오차 1% 이내",
"status": "blocked"
}
],
"verification": {
"prior_cycle": "1주차 매핑(파트너 A 1차)",
"join_hit_rate": 0.78,
"brier_score": 0.17,
"hits": [
{
"col_id": "p_001",
"predicted_ontology_id": "ont_customer_id",
"actual_join_ok": true,
"confidence_prob": 0.9
},
{
"col_id": "p_006",
"predicted_ontology_id": "ont_product_id",
"actual_join_ok": true,
"confidence_prob": 0.85
},
{
"col_id": "p_005",
"predicted_ontology_id": "ont_amount",
"actual_join_ok": false,
"confidence_prob": 0.6
}
]
}
}
},
{
"input_ref": "파트너 B 데이터 사전 (1차 온보딩)",
"output": {
"partner": "partner_B",
"mappings": [
{
"col_id": "b_002",
"ontology_id": "ont_signup_date",
"reason": "reg_dt 는 signup_date 별칭 reg_dt 와 일치하고 date 타입도 부합합니다.",
"evidence_metrics": [
{
"name": "alias_match",
"value": "reg_dt"
}
],
"confidence": "high",
"confidence_prob": 0.88
},
{
"col_id": "b_003",
"ontology_id": null,
"reason": "resp_rate 후보가 있으나 값 분포가 0~100 로 보여 0~1 정의와 스케일이 달라 매핑을 보류합니다.",
"evidence_metrics": [
{
"name": "scale_mismatch",
"value": "0~100 vs 0~1"
}
],
"confidence": "low",
"confidence_prob": 0.35
},
{
"col_id": "b_004",
"ontology_id": "ont_product_id",
"reason": "prod_cd 는 product_id 별칭과 일치합니다.",
"evidence_metrics": [
{
"name": "alias_match",
"value": "prod_cd"
}
],
"confidence": "high",
"confidence_prob": 0.86
}
],
"gaps": [
{
"gap_id": "gap_B_01",
"gap_type": "type_mismatch",
"detail": "응답률 스케일이 0~100 으로 보여 ont_response_rate(0~1) 와 정규화 기준이 다릅니다.",
"hedge": "샘플 표본이 적어 스케일 단정은 추가 확인이 필요합니다."
}
],
"poc_scorecard": [
{
"kpi": "캠페인 응답 연동",
"target": "response_rate 스케일 정합 후 매핑",
"status": "blocked"
}
],
"verification": null
}
}
]자동: (1) Zod parse, (2) mappings.ontology_id 가 platform_ontology 실재 ID 인지 확인, (3) 단정 표현 토큰 검출 + LLM-as-judge 매핑 근거 의미 평가, (4) 샘플 조인 실행으로 join_hit_rate·Brier score 자동 계산(사이클 1 reporting / 사이클 2+ KPI). 수동: 데이터 엔지니어 2명 비동기 라벨 → bootstrap Cohen’s κ CI 하한 ≥ 0.6, judge 사람 spot check 5%. confidence_prob 는 합성 기준 추정치라 검증된 수치가 아닙니다. verification 은 다음 사이클 실 조인 결과를 자동 조인합니다.
근거: 파트너사의 데이터가 AI 플랫폼에 정상적으로 연동 및 적용될 수 있도록 데이터 파이프라인 연결 지원