단위 3 / 11

데이터 정리 및 전처리: 누락된 값, 이상치 및 유형 변환

이득:

  • 학습만으로 누락된 값(무작위, 체계적, 의미 있음)의 원인을 식별하고 적절한 전략을 선택하고 채우기 값을 계산하는 능력
  • 이상치를 삭제하기 전에 검사하고 데이터 오류와 실제 희귀 사건을 구별하는 기능
  • 유형 및 형식 불일치를 표준에 적용하는 동시에 각 단계가 행/공백 수에 미치는 영향을 모니터링하여 조용한 손실을 방지하는 기능

데이터 과학자의 시간 중 약 60~80%가 정리에 사용됩니다. 업계에서는 이를 농담 반으로 '데이터 랭글링'(데이터 랭글링 또는 데이터 클리닝)이라고 부릅니다. 실제 데이터는 분석할 준비가 거의 되어 있지 않기 때문에 날짜가 혼합된 형식이고, 숫자가 텍스트로 저장되고, 일부 셀이 비어 있고, 고객이 동일한 테이블에 두 가지 다른 철자로 세 번 표시됩니다. 이 단원에서는 정리의 세 가지 기본 측면, 즉 결측값, 이상치, 유형/형식 변환을 다룰 것입니다. 인공 지능은 이 작업에서 매우 빠른 조력자입니다. 그러나 무엇을 어떻게 청소할지 결정하는 것은 사용자입니다. 각각의 청소 선택이 분석을 변경하기 때문입니다.

청소의 황금률: 모든 변화는 결정이다

셀 삭제, 누락된 값을 평균으로 채우기, 이상값 제거 등은 모두 "중립" 작업이 아닙니다. 각각은 데이터를 변경하고 결과에 영향을 미칩니다. 따라서 정리의 황금률은 모든 변경 사항을 코드에 기록하고, 근거를 기록하고, 원본 데이터를 절대 덮어쓰지 않는다는 것입니다. AI는 빠른 정리 코드를 제공하지만 해당 코드의 기능을 이해하는 것은 귀하의 책임입니다. "빈 줄 삭제"라고 말할 때 몇 줄이 없어졌는지 확인하지 않고 실행하지 마세요.

주의: 원본 원시 데이터를 절대로 수정하지 마십시오. 정리된 버전을 별도의 파일/테이블에 씁니다. 이렇게 하면 오류를 발견한 경우 원점으로 돌아가 재현성을 유지할 수 있습니다.

누락된 값: 비어 있는 이유, 수행할 작업

누락된 값(일반적으로 팬더에서 NaN — "숫자가 아님"으로 표시됨)은 셀이 비어 있는 경우입니다. 그러나 격차의 원인에 따라 해결책이 결정됩니다. 세 가지 전형적인 상황이 있습니다. 무작위 누락: 센서가 잠시 동안 작동하지 않았습니다. 채우는 것이 합리적일 수 있습니다. 체계적 누락: 양식 필드는 특정 고객에게만 요청됩니다. 여기서의 격차는 실제로 정보입니다. 중요한 누락: '반품 날짜'가 비어 있으면 고객이 반품하지 않은 것입니다. 이 공간은 0 또는 "없음"을 의미하며 채워지지 않습니다.

주요 전략:

전략

언제가 적절한가요?

위험

행 삭제

누락률은 매우 낮고(<5%) 무작위입니다.

데이터 및 표현의 손실

열 삭제

열의 대부분이 비어 있습니다(>60%).

정보의 손실

평균/중간 채우기

숫자, 무작위로 누락됨

분산을 줄이고 분포를 왜곡합니다.

카테고리 "알 수 없음"

범주형, 체계적 결측

추가 카테고리를 생성합니다.

모델을 이용한 예측

복잡하고 귀중한 컬럼

누출 위험, 복잡성

중요한 점: 전가 값은 훈련 데이터에서만 계산되어야 하며, 테스트 데이터에도 동일한 값이 적용되어야 합니다. 테스트 데이터의 평균을 포함하면 누출이 발생합니다(단위 10). 중앙값(순서 데이터의 중간 값)은 평균보다 이상값에 더 강력하기 때문에 평균보다 선호되는 경우가 많습니다.

이상치: 오류인가 아니면 실제인가?

이상값은 데이터 오류(연령 열의 999) 또는 실제이지만 드문 이벤트(고객의 200만 달러 주문)의 두 가지 중 하나일 수 있습니다. 둘을 혼동하는 것은 재앙입니다. 실제 이상값을 삭제하면 중요한 정보를 버릴 수 있습니다. 실수를 놔두면 평균이 저하됩니다. 따라서 이상값을 자동으로 삭제하는 것이 아니라 먼저 이상값을 검사할 필요가 있습니다.

일반적인 감지 방법: IQR 방법(사분위수 범위, 데이터의 25%와 75% 5분위수 간 차이의 1.5배를 초과하는 값은 이상값으로 간주됨) 및 z-점수(값의 평균에서 벗어난 표준 편차 수, 일반적으로 3보다 큰 경우 이상값). AI는 이러한 계산을 위한 코드를 몇 초 안에 작성합니다. 하지만 "삭제"라고 말하기 전에 해당 값이 무엇인지 확인하세요.

유형 및 형식 변환: 자동 오류 소스

가장 골치 아픈 것 중 하나는 데이터 유형의 혼란입니다. "금액" 열이 텍스트로 저장된 경우 추가할 수 없습니다. 프로그램이 "천이백오십" 대신 "1,250.50"과 같은 터키어 형식의 숫자를 잘못 읽습니다. 날짜("01/03/2024" 일-월 또는 월-일?), 범주("남성"/"남성"/"M"은 동일합니까?) 및 단위(TL 또는 kuruş?)는 자동으로 잘못된 결과를 생성합니다. 정리의 가장 큰 부분은 이러한 불일치를 표준으로 끌어들이는 것입니다. 즉, 날짜를 하나의 형식으로, 범주를 하나의 철자로, 숫자를 하나의 단위로 끌어들이는 것입니다.

세 개의 미니 케이스

사례 1 - 평균 트랩. 팀은 소득 ​​열의 결측값 320개를 평균($48,500)으로 채웠습니다. 그러나 단점은 체계적이었습니다. 이들은 소득을 신고한 적이 없는 저소득층이었습니다. 평균 채우기는 이 그룹을 인위적으로 부자로 만들었고 신용 모델이 잘못되었습니다. 교훈: 작성하기 전에 “왜 공백인가요?”라고 물어보세요.

사례 2 - 삭제하면 안 되는 이상값입니다. 소매 분석가는 판매 데이터에서 4개의 대규모 주문(각각 180만 TL)을 "오류"라고 생각하여 삭제했습니다. 그러나 이는 실제 기업 주문이었고 전체 매출의 22%였습니다. 삭제 후 예측 모델은 기관의 요구를 완전히 놓쳤습니다. 교훈: 이상치를 삭제하기 전에 검사하십시오.

사례 3 — 날짜 형식 재해. CSV에서는 날짜가 '2024-03-01'과 '01.03.2024'로 혼합되었습니다. YZ가 작성한 코드를 첫 번째 형식에 따라 구문 분석하면 6,400줄이 "잘못된 날짜"로 NaT가 되어 조용히 분석에서 제외되었습니다. 분석가는 라인 수가 감소한 경우에만 이를 발견했습니다. 교훈: 변환 후에는 항상 줄 수와 공백 수를 확인하세요.

복사 가능한 템플릿 4개

1) 결측값 지도:

팬더 df가 있습니다. 각 열의 누락 수와 NaN(%)을 표시하는 테이블을 생성하는 코드를 작성합니다. 그런 다음 누락률이 40%를 초과하는 열과 누락률이 5% 미만인 열을 별도로 나열합니다. 귀하가 제안하는 전략이 아닌 이 진단 코드를 생성하십시오. 나는 결정을 내릴 것이다.

2) 이상값 검사(삭제 아님):

IQR 방법을 사용하여 "금액" 열의 이상값을 감지(삭제하지 않음!)하는 코드를 작성합니다. 수동으로 검사할 수 있도록 외부 행을 별도의 df에 넣습니다. 또한 이상값의 수와 전체에서 차지하는 비율을 인쇄합니다.

3) 유형/형식 표준화:

다음 열을 표준화하는 코드를 작성하세요. - "date": 혼합 형식이 가능합니다("2024-03-01" 및 "01.03.2024"). 그것들을 모두 날짜/시간으로 변환하고, 번역할 수 없는 것들을 세어보고(조용히 버리세요). - "성별": "남성"/"남성"/"M" -> "M", "여성"/"여성"/"F" -> "K". - "금액": 터키어 형식의 텍스트("1.250,50") -> 십진수. 각 변환 후 영향을 받는 행 수를 인쇄합니다.

4) 청소 전/후 확인 사항:

정리 단계 전후에 선택한 열의 df.shape, 누락된 개수 및 요약 통계(평균, 중앙값, 최소값, 최대값)를 비교하는 코드를 작성합니다. 목적: 청소가 어떤 변화를 가져오는지 확인합니다.

약한 프롬프트 / 강한 프롬프트

약한 프롬프트:

이 데이터를 지웁니다.

"Clear"는 모호합니다. AI는 어떤 누락된 부분을 삭제해야 하는지, 무엇을 채워야 하는지, 어떤 열을 처리해야 하는지, 어떻게 처리해야 하는지 모릅니다. 그 결과는 맹목적이고 되돌릴 수 없는 변화입니다.

강력한 프롬프트:

귀하의 역할: 데이터 정리 도우미. df 열: customer_id(int), Registration_date(혼합 형식 텍스트), Revenue_tl(텍스트, "1,200.00"), city(텍스트, 철자법 불일치). 규칙:- 원본 df 변경; df_clean이라는 복사본 작업을 수행합니다.- 소득_tl을 숫자로 변환하고 번역할 수 없는 항목을 계산합니다.- 기록_날짜를 날짜/시간으로 변경하고 오류를 보고합니다.- 내 승인 없이 행을 삭제하지 마세요. 후보자를 별도로 표시합니다. 각 단계 후에 df_temiz.shape 및 누락된 숫자를 인쇄하세요.

여기에서는 소스가 보호되고 모든 변환이 계산되며 삭제는 인간의 몫입니다.

일반적인 실수

  • '왜 비어있지?'라고 묻지 않고 공백을 메우는 것. 체계적/중요한 누락을 평균으로 채우면 데이터가 왜곡됩니다.
  • 이상치를 검사하지 않고 삭제합니다. 실제이지만 희귀한 사건을 폐기하면 중요한 정보가 파괴됩니다.
  • 모든 데이터에서 패딩 값을 계산합니다. 테스트 데이터를 포함하면 누출이 발생합니다. 훈련을 통해 계산하면 됩니다.
  • 변환 후 행/공백 수를 확인하지 않습니다. 자동으로 NaT/NaN인 행은 분석에서 제외됩니다.
  • 원본 데이터를 덮어씁니다. 반품 및 재현성이 손실됩니다.
팁: "전후" 비교를 통해 정리를 실행하십시오. 각 단계 후에 중요 열의 df.shape, 누락 개수 및 요약 통계를 인쇄합니다. 따라서 한 단계가 예기치 않게 6,000개의 행을 삭제하는 것을 즉시 확인할 수 있습니다.

요약하면

정리는 데이터 과학에서 가장 시간이 많이 걸리고 의사결정이 필요한 단계입니다. 모든 변경은 데이터를 변경하므로 각 변경 사항은 의식적인 결정입니다. 누락된 값의 경우 "왜 비어 있나요?"라고 질문하세요. 이상값을 삭제하기 전에 검토하세요. 유형과 형식을 표준으로 가져옵니다. 학습 데이터에서만 채우기 값을 계산하고 원본을 유지하며 이를 계산하여 각 단계의 영향을 추적합니다. AI는 이 사업에서 엄청난 가속기이지만 청소 대상과 이유는 인간이 결정합니다.

응용과제

작은 테이블을 선택(또는 생성)하고 의도적으로 세 가지 문제(결측값 튜플, 이상값, 혼합 날짜 형식)를 삽입합니다. 위 템플릿을 사용하여 AI에 진단 및 표준화 코드를 요청합니다. 각 단계 전후의 행과 공백 수를 비교하십시오. 적어도 하나의 "조용한 상실"을 포착하고 이를 어떻게 발견했는지 기록해 보십시오.

체크리스트

  • [ ] 원본 원시 데이터를 유지하고 사본 작업을 했습니까?
  • [ ] 누락된 각 열에 대해 "왜 비어 있습니까?"라는 질문을 했습니까?
  • [ ] 이상값을 삭제하기 전에 검토했습니까?
  • [ ] 훈련 데이터에서만 패딩 값을 계산했습니까?
  • [ ] 각 단계 후에 줄/공백 수를 확인하고 조용한 손실을 제거하고 있습니까?