이득:
- 데이터 파이프라인(수집, 유효성 검사, 정리, 변환, 분할, 버전 관리)을 설정하고 파이프라인 시작 부분에 스키마 유효성 검사를 배치하는 기능
- 데이터 유출을 방지하기 위해 필드 의미 및 구분을 기반으로 결측값 및 라벨링 결정을 내리는 기능(그룹 및 시간)
- 데이터 버전 및 무작위성 시드를 고정하여 재현 가능한 데이터베이스를 생성하는 기능
모든 머신러닝 시스템의 진정한 힘은 모델이 아닌 데이터에 있습니다. 숙련된 엔지니어는 "쓰레기가 들어오면 쓰레기가 나온다"는 사실을 알고 있습니다. 심지어 잘못된 데이터를 입력한 가장 발전된 모델이라도 나쁜 결과를 낳게 됩니다. 이 단원에서는 데이터 파이프라인(데이터 파이프라인: 모델 훈련을 위해 원시 데이터를 준비하는 단계 체인)을 엔드 투 엔드로 설정하고 이 라인의 어느 단계에서 인공 지능을 안전하게 사용할 수 있는지 알아봅니다.
데이터 라인의 단계
데이터 라인은 일반적으로 다음 정류장을 통과합니다.
- 수집(수집): 소스(데이터베이스, API, 로그 파일, 이벤트 스트림)에서 데이터를 가져옵니다.
- 유효성 검사: 데이터가 예상 스키마, 유형 및 범위를 준수하는지 확인합니다.
- 정리: 누락된 값, 중복 레코드, 이상값 및 불일치를 처리합니다.
- 변환: 원시 데이터를 속성으로 변환합니다. 예를 들어 범주형 변수를 숫자로 변환하고 날짜에서 "요일"을 생성합니다.
- 분할: 훈련 세트, 검증 세트, 테스트 세트로 분리합니다.
- 버전 관리: 어떤 모델이 어떤 데이터로 훈련되었는지 기록합니다.
인공 지능은 특히 2, 3, 4단계에서 코드 초안과 아이디어를 생성하여 시간을 절약합니다. 그러나 어떤 레코드를 버릴지, 어떤 누락 값을 채울지, 어떻게 채울지와 같은 결정은 데이터를 아는 엔지니어의 몫입니다. 부적절한 청소로 인해 모델에 숨겨진 편견이 주입될 수 있기 때문입니다.
데이터 검증: 라인의 조기 방어
가장 비용이 많이 드는 오류는 생산 단계가 아닌 검증 단계를 건너뛰는 단계에서 시작됩니다. 스키마 유효성 검사는 들어오는 각 데이터 배치가 예상 구조를 준수하는지 자동으로 확인합니다. 예를 들어 연령 열이 0-120 사이인지, 이메일 필드가 비어 있는지, 열 수가 변경되었는지 등입니다.
팁: 줄 시작 부분에 확인을 입력하세요. 손상된 데이터를 빨리 발견할수록 수정 비용이 저렴해집니다. 프로덕션 단계에서 발견된 스키마 오류는 훈련 단계에서 발견된 오류보다 비용이 몇 배 더 높습니다.
다음 데이터 스키마에 대해 pandera(또는 Great Expectations)를 사용하여 유효성 검사 체계를 작성하세요. 열 및 규칙:- user_id: 정수, null일 수 없음, 고유- 연령: 정수, 0-120일 수 없음- signup_date: 날짜, 미래일 수 없음- 국가: 범주형, 세트 {TR, DE, US, UK}- 잔액: 소수, 음수일 수 없음 각 규칙 위반에 대해 의미 있는 오류 메시지를 생성합니다. 코드 끝에 점선 예제를 사용하여 테스트를 표시합니다.
청소: 결정하는 것은 사람이다
누락된 값은 모든 데이터 세트의 현실입니다. 처리 방법:
- 삭제: 누락률이 매우 높은 행/열을 삭제합니다. 그러나 정보 손실과 편견의 위험이 있습니다.
- 대치: 평균, 중앙값, 가장 빈번한 값 또는 모델 기반 예측을 사용한 대치입니다.
- 플래그: "누락" 정보를 별도의 플래그 열에 저장합니다. 때로는 누락 자체가 신호가 됩니다.
어느 것이 맞는지는 문제에 따라 다릅니다. 의료 데이터 세트에서 "측정되지 않은 혈액값" 정보는 삭제되지 않고 보존되어야 합니다. 의사가 측정을 거부하는 것조차도 신호이기 때문입니다. AI는 옵션과 코드를 제공할 수 있습니다. 현장의 현실에 맞는 것을 선택하세요.
약한 프롬프트 / 강한 프롬프트
약한 프롬프트: "누락된 값을 입력하세요."
강력한 프롬프트: "다음 열에 누락된 값이 있습니다: 소득(12% 누락, 오른쪽으로 치우친 분포), last_login(30% 누락). 소득을 중앙값으로 채울 것을 제안하지만 중앙값이 아닌 이유를 설명하십시오. last_login의 경우 누락된 값이 중요할 수 있다고 가정합니다(사용자가 로그인한 적이 없을 수 있음). 삭제 대신 never_logged_in 플래그 생성을 고려하십시오. 두 가지 접근 방식 모두 모델에 추가할 편향을 적어 두십시오."
차이점: 강력한 프롬프트는 유통 정보와 지역 의미를 제공합니다. 인공지능은 기계적 채우기 대신 의사결정 지원을 생성합니다.
라벨링: 품질이 측정됩니다
지도 학습(정답과 함께 예시를 제공하는 학습)에서 모델이 학습하는 것은 라벨(라벨: 각 예시의 정답)입니다. 라벨 품질은 상한선을 설정합니다. 사람들이 일관되지 않게 라벨을 지정하면 모델이 일관되지 않게 학습합니다.
주석자 간 일치는 서로 다른 사람들이 동일한 샘플에 동일한 레이블을 부여하는 비율을 측정합니다. Cohen's Kappa와 같은 계수로 표현됩니다. 낮은 순응도는 과제가 불분명하거나 지시가 약하다는 것을 나타냅니다.
인공 지능은 (1) 주석 지침 초안 작성, (2) 사전 라벨링 및 사람이 수정하도록 하는 두 가지 방법으로 라벨링을 돕습니다. 그러나 LLM을 사용한 사전 라벨링에는 함정이 있습니다. 모델의 체계적인 오류가 전체 라벨 세트에 누출될 수 있습니다. 그렇기 때문에 인간은 항상 LLM 라벨 중 일부를 확인합니다.
주의: LLM이 생성한 라벨을 "사실"로 간주하지 마십시오. 인간과 함께 샘플을 확인하고 LLM-인간 적합도를 측정합니다. 준수율이 낮은 경우 사전 라벨링은 득보다 해를 끼칠 것입니다.
데이터 파티션: 유출 방지
데이터를 학습/검증/테스트로 분할할 때 가장 위험한 실수는 데이터 유출입니다. 즉, 테스트 정보를 학습에 혼합하는 것입니다. 예:
- 동일한 사용자의 기록이 훈련과 테스트에 모두 속합니다(그룹 유출).
- 훈련에서는 미래를 사용하고 시계열 테스트에서는 과거를 사용합니다(시간적 누출).
- 모든 데이터에서 스케일링(정규화) 매개변수를 계산한 후 나눕니다.
시간과 관련된 문제에는 시간 분할이 필수적입니다. 즉, 과거로 훈련하고 미래로 테스트합니다. 무작위 분할은 프로덕션에서는 결코 발생하지 않는 "미래" 이점을 제공하고 측정항목을 부풀립니다.
데이터 버전 관리 및 재현성
"이 모델을 어떤 데이터로 훈련했나요?" 몇 달 후에 질문에 답할 수 있다는 것은 진지한 ML 엔지니어링의 특징입니다. 데이터 버전 관리는 각 데이터 스냅샷을 ID(해시 또는 버전 태그)와 함께 저장합니다. DVC(Data Version Control) 버전 데이터와 같은 도구는 코드와 같습니다.
모델의 결과를 재현하려면 데이터 버전, 코드 버전, 랜덤 시드의 세 가지 사항을 수정해야 합니다. 이 트리오 없이는 "같은 결과를 얻었습니다"라고 말할 수 없습니다. 11단원에서는 재현성을 심화할 것입니다. 하지만 데이터 파이프라인의 시드 수정은 여기서부터 시작됩니다.
세 개의 미니 케이스
사례 1 - 해당 날짜의 스키마 유효성 검사가 저장되었습니다. 팀이 업스트림 시스템 가격 필드를 페니에서 리라로 전환했을 때 모든 가격이 100배나 떨어졌습니다. 스키마 검증은 "가격이 범위를 벗어났습니다"라는 이유로 배치를 거부했으며 모델은 손상된 데이터로 훈련되지 않았습니다. 검증이 없으면 오류는 잘못된 예측과 함께 프로덕션에서만 발견됩니다.
사례 2 - 잘못된 채우기의 편향. 신용 모델에서는 누락된 소득 값을 평균으로 채웠습니다. 그러나 누락된 소득은 주로 저소득층에서 나타났습니다. 평균화는 이 그룹을 인위적으로 "풍부하게" 했으며, 모델은 그들에게 불공평하게 높은 한계를 제공했습니다. 중앙값 + 누락 플래그 문제가 해결되었습니다.
사례 3 - 일시적인 누출. 수요 예측 모델은 테스트 세트에서는 훌륭해 보였지만(정확도 95%) 프로덕션에서는 충돌이 발생했습니다. 이유: 무작위 분할로 인해 모델이 미래를 보았습니다. 임시 비닝으로 전환하면 테스트 정확도가 78%로 떨어졌지만 이는 실제 성능이었고 프로덕션 환경에서는 그대로 유지되었습니다.
복사 가능한 템플릿
다음 데이터 세트를 훈련/검증/테스트의 세 세트로 나눕니다. 제약 조건: 이것은 시계열입니다. TEMPORAL 분할을 사용합니다(과거에는 학습하고 미래에는 테스트). 일괄 유출 방지: 하나의 클러스터에만 동일한 `customer_id`를 갖습니다. 트레이닝 세트에서만 스케일링 매개변수를 계산한 다음 모두에 적용합니다. 각 단계에서 코드에 몇 줄이 남아 있는지 인쇄하고 누출이 없는지 확인하는 어설션을 추가하세요.
이 라벨링 작업에 대한 초안 주석 지침을 작성합니다.작업: [예: 고객 리뷰에 긍정적/부정적/중립 라벨 지정]경계 사례를 명확히 합니다: 풍자, 혼합된 감정, 제품과 관련 없는 리뷰에 라벨을 지정하는 방법? 태깅자 전반에 걸쳐 일관성을 높일 수 있는 5가지 예와 3가지 어려운 극단적 사례를 제시하세요.
이 데이터 파이프라인에 대한 재현성 체크리스트를 생성합니다. - 데이터 버전을 어떻게 수정해야 합니까? - 어떤 임의성 시드를 어디에 설정해야 합니까? - 어떤 메타데이터(데이터 해시, 행 수, 날짜)를 기록해야 합니까? 내 코드베이스: [언어/라이브러리]
데이터 유출에 대한 정리 코드를 확인하세요. 구체적으로 다음을 살펴보십시오. 분할 전에 스케일링/인코딩 매개변수가 계산됩니까? 모든 데이터에서 통계가 계산됩니까, 아니면 훈련만 계산됩니까? 코드: [코드]
결정 테이블: 결측값 전략
상태
권장 접근 방식
왜?
수치적이고 편향된 분포
중앙값으로 채우기
평균은 특이치의 영향을 받습니다.
수치적, 대칭적
평균으로 채우다
정보를 보호합니다
결핍이 심각할 수 있음
플래그 열 + 채우기
부족함은 신호이다
누락률 > 60%
열 평가/삭제
소음이 너무 심해요
범주형
'알 수 없음' 카테고리
인위적인 다수를 만들지 않음
일반적인 실수
- 확인을 건너뛰는 중입니다. 스키마 제어가 없으면 손상된 데이터가 조용히 들어옵니다.
- 분할 전 크기 조정. 시험통계를 교육계에 유출하는 것입니다.
- 시계열에서 무작위 분할을 사용합니다. 가짜 높은 지표를 생성합니다.
- LLM 레이블을 맹목적으로 신뢰합니다. 체계적인 오류는 데이터 전체에 퍼집니다.
- 데이터 버전을 저장하지 않습니다. 결과를 재현할 수 없습니다.
- 평균으로 기계적 충전. 필드 의미를 무시하고 편견을 추가합니다.
요약하면
데이터 파이프라인은 ML 시스템의 기초이며 모델보다 더 많은 노력을 기울일 가치가 있습니다. 상단에 확인을 넣으세요. 도메인 지식을 바탕으로 청소 및 라벨링 결정을 내립니다. 구획 내 누출(그룹 및 임시)을 방지합니다. 데이터 버전과 시드를 수정하세요. AI는 이 라인에서 코드와 아이디어를 생성하지만 어떤 데이터를 어떻게 처리할지 결정하는 것은 사용자의 몫입니다. 여기서 모든 잘못된 결정은 숨겨진 결함으로 모델에 전달되기 때문입니다.
응용과제
자신의 데이터 세트에 유효성 검사 체계(pandera/Great Expectations)를 작성하고 의도적으로 잘못된 행을 추가하고 그것이 포착되었음을 보여줍니다. 그런 다음 데이터를 일시적으로 또는 일괄적으로 분할하고, 훈련에서만 스케일링 매개변수를 계산하고, 어설션을 통해 누출이 없는지 확인합니다. 데이터 버전과 행 수를 메타데이터 파일에 씁니다.
체크리스트
- [ ] 스키마 유효성 검사는 줄 맨 위에서 실행됩니다.
- [ ] 현장 의미를 바탕으로 결측값 전략을 선택했으며, 기계적으로 채우지는 않았습니다.
- [ ] 라벨 품질(규정 준수)을 측정했습니다. LLM 태그를 사람이 확인했습니다.
- [ ] 페인 내 그룹 및 임시 누수를 방지했습니다.
- [ ] 훈련 세트에서만 계산된 스케일링/인코딩.
- [ ] 데이터 버전, 행 수 및 기록된 시드.