내일배움캠프_QAQC 1기/머신러닝의 이해와 라이브러리 활용

머신러닝 심화_데이터분석 프로세스

이지응:) 2025. 2. 13. 20:23
목표
예측 모델링에 필요한 전체 프로세스를 이해해보자

 

강의 자료 : 1. 데이터분석 프로세스

실습 자료 :

머신러닝 심화_1주차.ipynb
0.26MB
머신러닝 심화_전체 실습.ipynb
0.18MB

예측 모델링 프로세스

 

데이터 수집

  1. Data Source
    • OLTP Database: OnLine Transaction Processing 은 온라인 뱅킹,쇼핑, 주문 입력 등 동시에 발생하는 다수의 트랜잭션(데이터베이스 작업의 단위) 처리 유형
    • Enterprise Applications: 회사 내 데이터 (ex 고객 관계 데이터, 제품 마케팅 세일즈)
    • Third - Party: Google Analytics와 같은 외부소스에서 수집되는 데이터
    • Web/Log: 사용자의 로그데이터
  2. Data Lake: 원시 형태의 다양한 유형의 데이터를 저장
  3. Data Warehouse: 보다 구조화된 형태로 정제된 데이터를 저장
  4. Data Marts: 회사의 금융, 마케팅, 영업 부서와 같이 특정 조직의 목적을 위해 가공된 데이터
  5. BI/Analytics: business Intelligence(BI)는 의사결정에 사용될 데이터를 수집하고 분석하는 프로세스
여기서 데이터 분석가 하는 일은 4번과 5번에 해당함

 

실제 데이터 수집

  • 회사 내 데이터가 존재한다면
    • SQL 혹은 Python 을 통해 데이터 마트를 생성
  • 회사 내 Data가 없다면 → 데이터 수집 필요
    • 방법1: CSV, EXCEL 파일 다운로드
    • 방법2: API를 이용한 데이터 수집(API : Application Programming Interface)
    • ex) 공공데이터포털
    • 방법3: Data Crawling

 

탐색적 데이터 분석(EDA)

EDA : Exploaratory Data Analysis

  • 데이터의 시각화, 기술 통계 등의 방법을 통해 데이터를 이해하고 탐구하는 과정

 

 기술통계

  • describe()

시각화

1. countplot

  • 범주형 자료의 빈도 수 시각화
  • 범주형의 데이터의 각 카테고리별 빈도수를 나타낼 때
  • Ex) 상점에서 판매되는 제품의 카테고리별 판매수 파악
  • x축: 범주형 자료,
  • y축: 자료의 빈도수

2. barplot

  • 범주형 자료의 시각화
  • 범주형 데이터의 각 카테고리에 따른 수치 데이터의 평균을 비교
  • Ex) 다양한 연령대별 평균소득을 비교할 때
  • x축: 범주형 자료
  • y축: 연속형 자료

 

3. boxplot

  • 수치형 & 범주형 자료의 시각화
  • 방법: 데이터의 분포, 중앙값, 사분위 수, 이상치 등을 한눈에 표현하고 싶을 때
  • Ex) 여러 그룹간 시험 점수 분포를 비교할 때
  • x: 수치형 or 범주형
  • y: 수치형 자료

 

4. histogram

  • 수치형 자료 빈도 시각화
  • 방법: 연속형 분포를 나타내고 싶을 때, 데이터가 몰려있는 구간을 파악하기 쉬움
  • Ex)고객들의 연령 분포를 파악 할 때
  • x축: 수치형 자료
  • y축: 자료의 빈도수

 

5. scatterplot

  • 수치형끼리 자료의 시각화
  • 방법: 두 연속형 변수간의 관계를 시각적으로 파악하고 싶을 때
  • Ex) 키와 몸무게 간의 관계를 나타낼 때
  • x축: 수치형 자료
  • y축: 수치형 자료

 

6. pairplot

  • 전체 변수에 대한 시각화
  • 방법: 한 번에 여러 개의 변수를 동시에 시각화 하고 싶을 때
  • x축: 범주형 or 수치형 자료
  • y축: 범주형 or 수치형 자료
  • 대각선: 히스토그램(분포)
  • 대각선을 기준으로 대칭

 

 

데이터 전처리

데이터 전처리는 전체 분석 프로세스에서 90%를 차지 할 정도로 노동, 시간 집약적인 단계

 

이상치(Outlier)

  •  보통 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값

방법 1) Extreme Studentized Deviation(ESD) 이용한 이상치 발견

  • 데이터가 정규분포를 따른다고 가정할 때, 평균에서 표준편차의 3배 이상 떨어진 값
  • 모든 데이터가 정규 분포를 따르지 않을 수 있기 때문에 다음 상황에서는 제한됨
    • 데이터가 크게 비대칭일 때( → Log변환 등을 노려볼 수 있음)
    • 샘플 크기가 작을 경우

 

방법 2) IQR(Inter Quantile Range)를 이용한 이상치 발견

  • ESD와 동일하게 데이터가 비대칭적이거나 샘플사이즈가 작은 경우 제한됨

  • 사분위 수 : 데이터를 순서에 따라 4등분 한 것
    • Q1 : 25%
    • Q2 : 50%, 중위수
    • Q3 : 75%
  • IQR = Q3 - Q1
  • 상한 이상치 = Q3 + 1.5*IQR
  • 하한 이상치 = Q1 - 1.5*IQR

이상치 발견 방법

방법1) EDS 이용한 처리

import numpy as np
mean = np.mean(data)
std = np.std(data)
upper_limit = mean + 3*std
lower_limit = mean - 3*std

 

방법2) IQR 이요한 처리

Q1 = df['column'].quantile(0.25)
Q3 = df['column'].qunatile(0.75)
IQR = Q3 - Q1
uppper_limit = Q3 + 1.5*IQR
lower_limit = Q1 - 1.5*IQR

 

❗이상치는 주관적인 값으로 삭제 할지 말지는 분석가가 결정할 몫으로
    도메인과 비즈니스 맥락에 따라 그 기준이 달라지며
    데이터 삭제 시 품질은 좋아질 수 있지만 정보 손실을 동반하므로 이상치 처리에 주의해야 함

 

 

결측치 (Missing Value)

결측치 처리 방법

1. 수치형 데이터

  • 평균 값 대치: 대표적인 대치 방법
  • 중앙값 대치: 데이터에 이상치가 많아 평균 값이 대표성이 없다면 중앙 값을 이용
  • Ex) 이상치는 평균 값을 흔들리게 함

2. 범주형 데이터

  • 최빈값 대치

사용 함수

  • 간단한 삭제 & 대치
    • df.dropna(axis = 0): 행 삭제
    • df.dropna(axis = 1): 열 삭제
    • Boolean Indexing
    • df.fillna(value): 특정 값으로 대치(평균, 중앙, 최빈값)
  • 알고리즘을 이용
    • sklearn.impute.SimpleImputer:평균, 중앙, 최빈값으로 대치
      • SimpleImputer.statistics_ : 대치한 값 확인 가능
    • sklearn.impute.IterativeImputer: 다변량대치(회귀 대치)
    • sklearn.impute.KNNImputer: KNN 알고리즘을 이용한 대치

 

범주형 데이터 전처리 - 인코딩(Encoding)

사전적 의미 : 어떤 정보를 정해진 규칙에 따라 변환하는 것

 

1. 레이블 인코딩(Label Encoding)

  • 정의: 문자열 범주형 값을 고유한 숫자로 할당
    • 1등급 → 0
    • 2등급 → 1
    • 장점: 모델이 처리하기 쉬운 수치형으로 데이터 변환
    • 단점: 실제로는 그렇지 않은데, 순서 간 크기에 의미가 부여되어 모델이 잘못 해석 할 수 있음
  • 사용 함수
    • sklearn.preprocessing.LabelEncoder
    • 메소드
      • fit: 데이터 학습
      • transform: 정수형 데이터로 변환
      • fit_transform: fit과 transform을 연결하여 한번에 실행
      • inverse_transform : 인코딩된 데이터를 원래 문자열로 변환
    • 속성
      • classes_: 인코더가 학습한 클래스(범주)

 

2. 원-핫 인코딩(One-Hot Encoding)

  • 정의: 각 범주를 이진 형식으로 변환하는 기법
    • 빨강 → [1,0,0]
    • 파랑 → [0,1,0]
    • 초록 → [0,0,1]
    • 장점 : 각 범주가 독립적으로 표현되어, 순서가 중요도를 잘못 학습하는 것을 방지, 명목형 데이터에 권장
    •  단점: 범주 개수가 많을 경우 차원이 크게 증가(차원의 저주) , 모델의 복잡도를 증가, 과적합 유발
  • 사용 함수
    • pd.get_dummies
    • sklearn.preprocessing.OneHotEncoder
      • 메소드(LabelEncoder와 동일)
      • categories_: 인코더가 학습한 클래스(범주)
      • get_feature_names_out(): 학습한 클래스 이름(리스트)
# CSR 데이터 데이터프레임으로 만들기
csr_df = pd.DataFrame(csr_data.toarray(), columns = oe.get_feature_names_out())
# 기존 데이터프레임에 붙이기(옆으로)
pd.DataFrame([titaninc_df,csr_df], axis = 1)

 

 

수치형 데이터 전처리 - 스케일링(Scaling)

머신러닝의 학습에 사용되는 데이터들은 서로 단위 값이 다르므로 이를 보정

1. 표준화(Standardization)

  • 각 데이터에 평균을 빼고 표준편차를 나누어 평균을 0 표준편차를 1로 조정하는 방법

  • 함수: sklearn.preprocessing.StandardScaler
    • 메소드
      • fit : 데이터학습(평균과 표준편차를 계산)
      • transform: 데이터 스케일링 진행
    • 속성
      • mean_: 데이터의 평균 값
      • scale_, var_: 데이터의 표준 편차,분산 값
      • n_features_in_: fit 할 때 들어간 변수 개수
      • feature_names_in_: fit 할 때 들어간 변수 이름
      • n_samples_seen_ : fit 할 때 들어간 데이터의 개수
  •  장점
    • 이상치가 있거나 분포가 치우쳐져 있을 때 유용.
    • 모든 특성의 스케일을 동일하게 맞춤.
    • 많은 알고리즘에서 좋은 성능
  • 단점
    • 데이터의 최소-최대 값이 정해지지 않음.

2. 정규화(Normalization)

  • 정의: 데이터를 0과 1사이 값으로 조정(최소값 0, 최대값 1)

  • 함수: sklearn.preprocessing.MinMaxScaler
    • (표준화와 공통인 것은 제외)
    • 속성
      • data_min_: 원 데이터의 최소 값
      • data_max_: 원 데이터의 최대 값
      • data_range_ : 원 데이터의 최대-최소 범위
  • 장점
    • 모든 특성의 스케일을 동일하게 맞춤
    • 최대-최소 범위가 명확
  • 단점:
    • 이상치에 영향을 많이 받을 수 있음(반대로 말하면 이상치가 없을 때 유용)

3. 로버스트 스케일링(Robust Scaling)

  • 정의: 중앙값과 IQR을 사용하여 스케일링.

  • 특징
    • 장점: 이상치의 영향에 덜 민감
    • 단점: 표준화와 정규화에 비해 덜 사용됨
  • 함수: sklearn.preprocessing.RobustScaler
    • 속성
      • center_: 훈련 데이터의 중앙값

 

데이터 분리

과적합(Overfitting)

데이터를 너무 과도하게 학습한 나머지 해당 문제만 잘 맞추고 새로운 데이터를 제대로 예측 혹은 분류하지 못하는 현상

회귀와 분류의 과적합

  • 예측 혹은 분류를 하기 위해서 모형을 복잡도를 설정
    • 모형이 지나치게 복잡할 때 : 과대 적합이 될 수 있음
    • 모형이 지나치게 단순할 때: 과소 적합이 될 수 있음

과적합의 원인

  • 모델의 복잡도
  • 데이터 양이 충분하지 않음
  • 학습 반복이 많음(딥러닝의 경우)
  • 데이터 불균형(정상환자 - 암환자의 비율이 95: 5)

과적합 해결

테스트 데이터 분리

  • 학습 데이터(Train Data): 모델을 학습(fit)하기 위한 데이터
  • 테스트 데이터(Test Data): 모델을 평가 하기 위한 데이터
  • 함수 및 파라미터 설명
    • sklearn.model_selection.train_test_split
      • 파라미터
        • test_size: 테스트 데이터 세트 크기
        • train_size: 학습 데이터 세트 크기
        • shuffle: 데이터 분리 시 섞기
        • random_state: 호출할 때마다 동일한 학습/테스트 데이터를 생성하기 위한 난수 값. 수행할 때 마다 동일한 데이터 세트로 분리하기 위해 숫자를 고정 시켜야 함
      • 반환 값(순서 중요)
        • X_train, X_test, y_train, y_test

 

타이타닉 데이터를 활용한 데이터 전체 프로세스 실습

순서

  1. 데이터 로드 & 분리
    • train / test 데이터 분리
  2. 탐색적 데이터 분석(EDA)
    • 분포확인 & 이상치 확인
  3. 데이터 전처리
    • 결측치 처리
      • 수치형: Age
      • 범주형: Embarked
      • 삭제 : Cabin, Name
    • 전처리(스케일링과 인코딩)
      • 수치형: Age, Fare, Sibsp+Parch
      • 범주형
        • 레이블 인코딩: Pclass, Sex
        • 원- 핫 인코딩: Embarked
  4. 모델 수립
  5. 평가

Titanic - Machine Learning from Disaster | Kaggle

실습 후 케글에 제출까지 했습니다!

 

교차 검증(Cross Validation)

데이터 셋을 여러 개의 하위 집합으로 나누어 돌아가면서 검증 데이터로 사용하는 방법

  • K-Fold Validation
    • 정의: Train Data를 K개의 하위 집합으로 나누어 모델을 학습시키고 모델을 최적화 하는 방법
    • 이때 K는 분할의 갯수
      • Split 1: 학습용(Fold 2~5), 검증용(Fold1)
      • Split 2: 학습용(Fold1, 3~5), 검증용(Fold2)
      • Split 5까지 반복 후 최종 평가

  • 특징
    • 데이터가 부족할 경우 유용합니다.(반복 학습)
  • 함수
    • skelarn.model_selection.KFold
    • sklearn.model_selection.StrifiedKFold: 불균형한 레이블(Y)를 가지고 있을 때 사용

 

하이퍼 파라미터 자동적용하기 - GridSearchCV

하이퍼 파라미터 : 모델을 구성하는 입력 값 중 사람이 임의로 바꿀 수 있는 입력 값

 

전체 데이터 프로세스