[부스트코스] 쇼핑데이터를 활용한 머신러닝_EDA 및 전처리

#1 개발환경 준비

 

■ 파이썬 코딩환경

- 아나콘다

- 가상환경 만들기

  • > conda create -n boostcourse python=3.8

- 가상환경 활성화/비활성화

  • > conda activate boostcourse
  • > conda deactivate

- 의존 라이브러리 설치하기

  • > 폴더 이동: cd 'boostcourse tabular class' (여기선 cd boostcourse ai224 codes)
  • > pip 업그레이드: python -m pip install --upgrade pip(path 안된 건가 싶었음)
  • > requirments.txt 참고하여 라이브러리 설치: pip install -r requirements-window.txt

- 주피터 노트북 실행

  • > cd notebook
  • >  jupyter notebook

 

■ 실습 자료 다운로드

- README.md에 실습 자료의 구조가 설명되있음

  • > 근데 강의에 다 나와있음

 

#2-1 정형 데이터란?

 

■ 정형 데이터의 정의 

- structure data / tabular data / 트리에 있는, 테이블로 표현 가능한 데이터

- 엑셀 파일 형식이나 관계형 데이터베이스 테이블에 담을 수 있는 데이터: 행과 열로 표현

  • > 하나의 행은 하나의 데이터 인스턴스를 나타냄
  • > 각 열은 데이터의 피처(feature)를 나타냄

- 비정형 데이터 : 이미지, 비디오, 음성, 자연어 등의 정제되지 않은 데이터

  • > 하나의 데이터 인스턴스 표현: 흑백(2차원), 컬러(rgb 포함 3차원) 필요

 

■ 정형 데이터의 중요성

- 대세는 비정형 데이터? 이미지, 음성, 자연어 (다양한 가치 창출)

- 범용적인 데이터 (사람, 기업, 현상, 사회의 많은 부분들이 정형데이터로 기록)

  • > 가장 기본적인 데이터
  • > 분야를 막론하고 많은 데이터가 정형데이터로 존재

- 즉, 필수

  • > (예: 생환 비행기 통계에서 총알이 많이 박힌 곳에 철판을 덛대는게 아니라 반대로 해야 생존 확률 올라감. 반대에 박힌 비행기들은 생환 X)

 

■ 데이터 및 문제 이해

- aggregation? time series? 아니면 both?

 

■ 평가지표 이해

- 경진대회, 프로젝트 등 평가지표 선정 중요

  • > 목적에 맞게 선정해야 모델 성능 제대로 평가
  • > 평가지표를 기준으로 모델 성능 강화

- 분류, 회귀 평가지표 소개

  • > 분류(Classificaton): 예측해야 할 대상의 개수가 정해져 있는 문제
    • # (예: 이미지에서 개, 고양이 분류 / 신용카드 거래가 사기인지 정상인지)
  • > 회귀(Regression): 예측해야할 대상이 연속적인 숫자인 문제
    • # (예: 일기 예보 상 내일의 기온 예측, 주어진 데이터에서 집값 예측)
  • > 평가지표(Evaluation Metric): 분류, 회귀 머신러닝 문제의 성능 평가 지표

- Confusion Matrix : 모델의 예측값 (Prediction)과 실제값을 비교하기 위한 표.

  • > 분류 문제의 평가지표를 개선할 수 있음 
  • > TP와 TN은 실제값 맞게 예측 / FP와 FN은 실제값 다르게 예측
  • > Accuracy (정확도) : (TP + TN) / (TP + FN + TN + FP)
    • # 전체 데이터 중 모델이 바르게 분류한 비율
    • # 불균형한 데이터 (imbalanced data)에 사용하기엔 부적절 
    • # 100명 중 1명의 암환자 
    • # 100명 모두 암이 없다고 예측하면 정확도는 99%지만 실제 암환자는 예측 X
  • > Precision (정밀도): TP / (TP + FP)
    • # 실제 값이 Negative인 데이터를 Positive로 판단하면 안 될 때 사용하는 지표
    • # 예시: 스팸 메일 분류(일반 메일을 잘못 분류)
  • > Recall (재현율): TP / (TP + FN)
    • # 실제 값이 Positive인 데이터를 Negative로 판단하면 안 될 때 사용하는 지표
    • # 예시: 악성 종양 판단
  • > ROC (Receiver Operating Characteristic): P 또는 N 해당하는 T를 찾는 것
    • # 정답이 1인 케이스에 대해 1로 잘 예측하는 비율 (TPR)을 Y축
      • @ True Postive Ratio 수식: TP/(TP+FN)
    • # 정답이 1인 케이스에 대해 잘못 예측한 비율 (FPR)을 X축
      • @ False Positive Ratio 수식: FP/(FP+TN)
    • # 모델의 임계값 (Cutoff Value)를 변경시켜 가며 그린 곡선을 나타냄
    • # AUC (Area Under Curve): ROC 곡선 면적 표시 
      • @ ROC 곡선의 아래 영역
      • @ 0~1 사이의 값을 가짐
      • @ 1에 가까울수록 모델이 잘 예측 (완벽하면 범위를 꽉 채움)
      • @ 머신러닝 모델에서 최소 AUC 0.5 이상은 나와야 의미 있음

 

#2-2 탐색적 자료 분석

 

■ EDA (Exploratory Data Analysis, 탐색적 데이터 분석)

- 데이터를 탐색하고 가설을 세우고 증명하는 과정

- 다양한 시각을 통해 데이터를 이해, 특징을 찾아내는 과정

  • > 특징들을 시각화, 통계량으로 표현
  • > 데이터 특징과 문제를 직관적으로 이해

- 데이터를 이해하고 문제를 해결하는 과정에서 데이터를 통해 고민하는 모든 과정

  • > 분석 결과물은 데이터 이해도에 따라 달라질 수 있음

 

■ EDA 과정

- EDA 순서 (가설 세우기-가설 검정-적용-EDA-반복)

  • 1) Data에 대한 가설 혹은 의문
  • 2) 시각화 혹은 통계량, 모델링을 통한 가설 검정
  • 3) 위의 결론을 통해 다시 새로운 가설 혹은 문제 해결

- EDA 과정은 일반화가 어려우며 정해진 답은 없음

  • > 데이터마다 도메인과 변수들이 다르고 그 안의 내용 역시 천차만별

- EDA 시작 (개요가 없다면 너무 비효율적이기 때문)

  • > 개별 변수의 분표 (Variation)
  • > 변수 간의 분포와 관계(Covariation)

- EDA Titanic Data

  • > 당시 배가 침몰할 당시 상황을 상상해 보며 데이터적 상상력과 함께 데이터를 이해

 

■ EDA 쇼핑 데이터

- 문제 이해 및 가설 세우기

  • > 가설을 확인하면서 데이터의 특성을 파악(데이터 이해)

- Description을 활용한 Feature 추출 방법은 NLP 도메인에 속하는 기술


 

#3-1 정형 데이터 전처리

 

■ 데이터 전처리

- 머신러닝 모델에 데이터를 입력하기 위해 데이터를 처리하는 과정

  • > EDA에 따라 달라지는 데이터 전처리
  • > 모델, 목적에 따라 달라지는 데이터 전처리

- 방법론

  • > 연속형, 범주형 처리
  • > 결측치 처리, 이상치 처리

 

■ 연속형 데이터 전처리

- Scaling: 데이터의 단위 혹은 분포를 변경

  • > 선형기반의 모델(선형회귀, 딥러닝 등)인 경우 변수들 간의 스케일을 맞추는 것이 필수
  • > 잘못할 시 계수값에 다른 모델 해석적인 측면에서 문제 발생, 모델 성능에 영향 줌

- Scale

  • > Min Max Scaling: 현재 값에서 Minimum 값을 빼고, Max 값과 Min 값의 차이로 나눔

Min Max Scaling

  • > Standard Scaling: 현재 값에서 평균값을 빼고, 표준 편차로 나눔

Standard Scaling

  • > Robust Scaling: 현재 값에서 중위 값을 빼고, IQR로 나눔 (이상치의 영역 덜 받음)

Robust Scaling

- Scale + Distribution

  • > Log transformation: 정규 분포에 가까운 분포를 만들어낼 수 있음
  • > Quantile transformation : 값을 유니폼 하거나 정규분포로 바꿔줌
    • # Log transformation과 차이점: 어떠한 분포가 들어와도 변환 가능
  • > Transformation을 사용함으로 인해 특정 Feature와 Target과의 관계를 더욱 직접적으로 변환

- Binning

  • > 연속형 변수 → 범주형 변수로 변형
  • > 연속형 변수 중간중간 유의미하지 않은 정보들이 Overfitting을 발생할 수 있음
  • > 선형 모델을 사용할 때 해석 용이

Scaling을 공부하던 중 든 의문!

 

■ 범주형 데이터 전처리

- 카테고리를 가지는 데이터

- 보통 문자열로 되어 있어 머신러닝 모델의 입력 데이터로 직접 사용할 수 없음.

  • > 수치형 변수로 인코딩 (Encoding)해주는 과정이 필요

- 인코딩 방법:

  • 1) One Hot Encoding
    • > 해당 값이 존재하는 경우에는 1, 그렇지 않은 경우에는 0으로 지정
    • > 장점: 변수의 의미가 명확
    • > 단점: 변수의 종류가 많아질수록 변수 개수가 종류만큼 늘어나게 되고 Parse 한 행렬이 만들어지게 됨 (차원의 저주)
  • 2) Label Encoding
    • > 컬럼의 수는 한 개로 유지하면서 각각의 종이 다른 값을 가지게 의미를 부여
    • > 단점: 숫자의 순서가 특징으로 여겨질 수 있습니다. 
  • 3) Frequency Encoding
    • > 해당 변수의 값이 몇 번 등장하는지 빈도수 측정해 변숫값으로 사용하는 방식
    • > 장점: 값에 의미가 있는 범주형 데이터로 만들 수 있음
    • > 단점: 다른 종류의 변수가 같은 Target 변숫값을 가질 수 있음 
  • 4) Target Encoding
    • > 각각의 변수 종류가 가지는 Target 변수의 평균으로 인코딩
    • > 예) "개"는 사료 비용 평균값 2000원 ((1000 + 1500 + 3500)/3 )
    • > 장점: 값의 의미가 Target 변수와 직접적으로 연관됨(overfitting 가능성)
    • > 단점: 1, 3, 4, 5 ID처럼 다른 종이 같은 Target Encoding을 가질 수 있음
    • # 새로운 종에 대해 인코딩 불가
  • 5) Embedding (Entity Embedding)
    • > description과 같은 text 데이터는 기존의 인코딩으로는 수치화 어려움
    • > Word2Vec과 같은 모델을 이용해 Text 데이터를 low-level로 임베딩하는 방법

 

#3-2 정형 데이터 전처리_결측치, 이상치

 

■ 결측치 처리

- Rule

  • > Rule의 경우 결측치 pattern을 찾아서 전처리

- Random (Univariate)

  • > 제거
    • # 모델이 사용할 데이터 줄어듦 (충분히 많아야 함)
    • # 예측해야 할 테스트 데이터에 결측치가 있을 경우 제거 불가
    • # 전체 데이터에서 해당 변수의 결측치 비율이 높다면 변수를 제거

- Univariate 결측치 해소

  • > 평균값 삽입, 중윗값 삽입, 상수값 삽입
    • # 쉬운 방법이지만 결측치 많을 경우 높은 확률로 문제 발생 (분포 망가질 수 있음)

- Multivariate 결측치 해소

  • > 회귀분석: 머신러닝 모델을 활용해 주변 변수들을 기반으로 결측치의 값을 예측하는 방법
  • > KNN nearest: 존재하는 데이터 중 결측치를 가진 샘플과 가장 유사한 샘플의 값을 이용하는 방법
  • * 실제 발생 결측치 처리: 변수 간의 의미를 보고 합리적으로 채움(통계량으로 채우는 방식 상위호환)

 

■ 이상치 처리

- 다른 데이터보다 아주 작은 값이나 아주 큰 값

- 이상치는 조심스럽게 처리해야 하며, 모델의 성능에 큰 영향을 끼칠 수 있음

- 선형 모델의 경우 제대로 학습 X

- 트리 모델의 경우 선형 모델보다 이상치 영향 적음

  • > 모델의 성능 보고 이상치 처리 여부 결정

- 이상치 탐색

  • 1) Z-Score
  • 2) IQR

- 이상치 처리 관점 (목적에 따라 다르게 접근)

  • > 정성적인 측면
    • # 이상치 발생 이유
    • # 이상치의 의미
  • > 성능적인 측면
    • # Train Test Distribution: 테스트 데이터에 대한 모델의 예측력 떨어짐