EDA(Exploratory Data Analysis)
EDA를 하는 이유
- 효과적인 데이터 분석과 모델링을 위한 기초 마련
- 데이터 품질 확인(현업에서 깨끗한 데이터란 존재할 수 없음)
- 중복 레코드 체그
- 최근 데이터 존재 여부(=최신성) 체크
- Primary key Uniqueness 체크
- 값이 비어있는 컬럼 존재 여부 체크
- 데이터 특성(패턴) 확인
EDA 기법
1. 기술 통계 분석
- 숫자 변수와 카테고리 변수 파악
- 숫자 변수의 경우 값 범위 파악
- 카테고리 변수의 경우에는 카테고리 수 파악
- 카테고리의 경우 머신러닝 모델을 만들때 인코딩 방법 결정
2. 결측치 탐지 및 처리
- 비어있는 값이 있는 필드를 가진 레코드들을 찾기
- 널 값이 있는 레코드 무시 가능
- 널 값이 있는 레코드 채우는 방법 :
- 숫자 : 평균값, 최소값, 최대값, 가장 흔한 값등을 기본값으로 사용 가능
- 카테고리 : 가장 흔한 카테고리값을 기본값으로 사용 가능
- Pandas의 경우에는 `isnull().sum()` 함수 사용
3. 이상치 탐지 및 처리
- 해당 레코드들을 전체적으로 다 무시
- 그 숫자 필드의 값을 전체 평균값이나 최소값이나 최대값등으로 교체
- 그숫자필드의값을다른값으로전환 (ex. log, binning)
- 이상치에 강한 ML 모델링 방식을 사용 (ex. DT)
4. Primary Key Uniqueness 체크
데이터에 Primary Key가 존재하는 경우, 그 값의 유일성을 검증해야 한다.
5. 최신성 체크
데이터에 존재하는 타임스탬프 필드를 기준으로 최신 데이터가 있는지 확인해야 한다.
6. 레이블(타겟, 정답) 체크
- 예측 대상이 되는 필드의 값이 어떻게 분포되어있는지 확인
- 분류 모델인데 레이블 값 분포가 한쪽으로 치우쳤다면 평가 지표를 F1으로 사용
- 부족한 예들을 찾아서 훈련 데이터에 추가하는 노력이 필요함
- 이미지, 오디오 등의 데이터 : Python module 활용
- 다른 데이터 : SMOTE(Synthetic Minority Over-sampling Technique) 활용
📌 SMOTE(Synthetic Minority Over-sampling Technique)
: 레이블 데이터를 보고 특정 레이블을 갖는 데이터들의 특성을 파악하여 그것과 비슷한 데이터들을 인위적으로 생성해주는 기술
7. 상관관계(Correlation) 분석
- 레이블과 상관관계를 보여주는 변수들이 무엇인지 검사
- 1 : 100% 일치
- -1 : 정반대의 경우
- 0 : 전혀 상관관계가 없음
- 어떤 피쳐(필드)가 중요한지 파악할 수 있음
- Pandas의 경우 `corr()` 함수 사용
- 머신러닝의 관점에서 1 혹은 -1일때가 좋은 정보
- 전부 숫자 데이터일때 사용 가능
8. 피처 엔지니어링
훈련 데이터에 있는 피처를 조합해서 새로운 피처를 생성
피처 : 머신러닝 훈련에 사용되는 최종 데이터
- 필드의 수가 너무 커지면 PCA등을 통해 필드수(=차원)를 줄여보는 것
- 앞서 언급한 이름 필드에서 성별등을 추출해보는 것
- Regression의 경우 레이블 필드와 약한 상관관계를 갖고 있는 필드들을 곱하거나 더해서 새로운 필드를 만드는 것 등등
EDA with Pandas
1. CSV파일 읽기
- `read_csv` ← 인자로 URL 사용 가능
2. 레코드 일부 확인하기
- `head`
- `tail`
3. 전체 데이터 특징 살펴보기
- `unique`
- `describe`
- `info`
4. 데이터 필터링
- `where`
- `dropna`
- `drop``
5. 데이터 시각화
- `hist`
- `boxplot`
- `plot`
Kaggle 데이터로 EDA 실습
🔗 실습 링크 :
🔗 참고 노트북 : https://www.kaggle.com/code/mjamilmoughal/eda-of-titanic-dataset-with-python-analysis
머신 러닝 관련 개념
1. 과적합(Overfitting)
: 모델이 훈련 데이터셋에 과하게 최적화되어서 새로운 데이터로 학습해보았을 때 성능이 제대로 나오지 않는 상태
해결 방법 :
- 데이터 셋 수집에 편향(bias)가 있는지 확인
- 모델 성능 평가를 hold-out 보다는 cross-validation 사용
- 정규화 적용(L1 normalization, L2 normalization)
2. Hold out
: 과적합 방지를 위한 가장 간단한 방법으로, 훈련 데이터셋을 훈련을 위한 용도와 테스트를 위한 용도로 분리하는 것
- 보통 (훈련 : 평가)의 비율을 (75% : 25%), (80% : 20%)로 함
- 모델 학습 시 훈련 데이터 사용
- 모델 성능 평가는 테스트 데이터 사용
3. Cross-Validation(교차 검증, K-Fold Cross Validation)
- 전체 데이터셋을 K개의 덩어리(Fold)로 나눔
- 해당 Fold 데이터를 평가 데이터로 사용해서 모델 검증
해당 Fold를 제외한 나머지 데이터를 훈련 데이터로 사용해서 모델 학습 - K개의 Fold에 대해서 위의 과정을 반복 = K번의 모델 학습 + 성능 측정 수행
- 모든 Fold를 처리한 후 K개의 성능 결과에 대해 평균을 구하고 이를 모델의 전체 성능으로 간주
4. 표준화 (Normalization)
: 머신러닝 모델이 학습하기 위해서는 입력으로 받는 데이터가 전부 수치화 되어야 하는데, 이 과정에서 특정 컬럼값의 범위가 너무 커서 특정 방향으로 편향되지 않도록 보정해주는 과정
- 훈련 데이터셋에 존재하는 feature들의 값을 특정 범위로 제약을 주어 모델의 성능이 훈련 데이터셋에 따라 달라지는 것을 방지
- 보통 모든 feature들의 값을 동일한 범위에 들어가도록 하는 전처리 기법
- 예) 최대/최소값이 각각 1과 -1이 되도록 표준화
- 예) 최대/최소값이 각각 1과 0이 되도록 표준화
- 딥러닝에서는 “Batch Normalization”이라는 것이 존재
5. 비용 함수(Cost Function, Loss Function)
: 모델의 예측 정확도를 측정하기 위해 사용되는 함수로, 함수값이 최소일 때의 모델이 최적의 모델이 된다.
종류 :
- Absolute loss (Least Absolute Deviation, L1 norm)
- Square loss (Least Square Error, L2 norm)
- Hinge loss
- Logistic loss
- Cross entropy loss
- RMSE (Root Mean Squared Error)
- Logarithmic loss (RMSLE, Root Mean Squared Logarithmic Error)
6. 정규화 (Regularization)
: 손실 함수에 추가 정보(or 패널티)를 부여하여 과적합을 방지하기 위한 기술
(일부 feature의 가중치를 0 혹은 아주 작게 만든다.)
정규화 없는 기본 ML 방식 : Linear Regression
1) L1 정규화
일부 덜 중요한 피처의 가중치를 0으로 만든다.
► Linear Regression + L1 정규화 = Lasso Regression
2) L2 정규화
일부 덜 중요한 feature의 가중치를 아주 작게 만든다.
► Linear Regression + L2 정규화 = Ridge Regression
머신 러닝(Machine Learning) 이란?
: 배움이 가능한 기계가 데이터의 패턴을 보고 인간을 모방하는 방식
► 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야
머신 러닝 모델 (Machine Learning Model)
: 머신 러닝을 통해서 최종적으로 만드는 결과물
- 블랙박스 : 내부가 어떤지 모름
- 선택한 ML 알고리즘에 따라 내부 동작 방식이 다르다.
- 디버깅이 쉽지 않다.
- 입력 데이터를 주면 이를 기반으로 예측
모델 학습(training, building)
: 머신러닝 모델을 만드는 과정
머신 러닝 종류
1. 지도 학습(Supervised Machine Learning)
: 훈련데이터 O + 정답(=레이블, 타겟) O
- 분류(classificaiton) : 정답이 유한한 수의 범주형일때
- 모델 성과 지표(클수록 good) : accuracy, precision, recall, f1 score
- binary classification : 예측 대상이 2개
- multi-class classification : 예측 대상이 2개 이상
- 회귀(regression) : 연속적인 숫자를 예측하는데 사용되는 ML 모델
- 활용분야 : 주택 가격 예측, 주식 가격 예측
- 모델 성과 지표(작을수록 good) : RMSE
1단계. 모델 훈련 (Training) ← 데이터 과학자가 진행
- 훈련 데이터 셋 (X, Y)
- X : 입력데이터 (feature)
- Y : 예측값 (label)
- 학습 알고리즘
- 머신러닝 모델
2단계. 추론/예측 (Prediction) : 학습시킨 모델을 사용하는 단계 ← 백엔드 엔지니어, 프론트엔드 엔지니어
- 응용 프로그램단에서 머신러닝 모델이 필요할 때마다 입력 데이터(X)를 준비해서 API를 호출하면, API안에서 머신러닝 모델에 받은 입력 데이터(X)를 input으로 주고, 머신러닝 모델이 반환해준 값은 예측값이 된다. 이를 응용 프로그램에 돌려주는 방식으로 동작
- 머신러닝 모델을 API 형태로 배포하는 것은 데이터 엔지니어 또는 백엔드 엔지니어가 관여
- 이러한 과정을 한번에 할 수 있게 하는 프레임워크 : SageMaker
📌 API(Application Programming Interface)
: 프로그램을 작성하기 위해 사용하는 인터페이스
= 특정 업무를 수행하기 위해서 호출하는 기능들
◆ 다양한 종류의 API가 존재
ex) Python 모듈은 각기 제공해주는 기능에 따라 다양한 함수 제공 (이것도 API라 할 수 있음)
◆ 보통 API는 웹 상의 다른 서버에 존재하는 특정 기능을 사용 가능하게 해주는 인터페이스를 지칭
◆ 머신러닝에서 API는 모델을 통해 예측하는 것을 의미함
📌 Interface(인터페이스)
: 무엇인가와 통신을 하기 위한 방법
2. 비지도 학습(Unsupervised Machine Learning)
: 훈련데이터 O + 정답 X → 훈련데이터로부터 패턴을 찾음
- 군집화(clustering) : 데이터로부터 특성을 찾아서 비슷한것끼리 묶어줌
- 활용분야 : 뉴스 기사 클러스터링
- 언어모델(LLM; Large Language Model) : 문장의 일부를 보고 비어있는 단어를 확률적으로 예측하는 모델
- 예시 : GPT
3. 강화학습 (Reinforcement Learning)
: 훈련데이터 X → 시행착오를 통해 최적의 결정을 학습하는 ML 학습 방법
- 에이전트 : 머신러닝 모델
- 환경 : 규칙이 명확하게 있어야 함
- 에이전트는 환경과 상호작용하며(행동에 대한 보상을 받으며) 시간이 지남에 따라 최대 보상 전략을 학습
- 예시 : 알파고, 자율주행
모델 추론/예측(사용) 과정
예측 데이터를 실제 훈련에 사용되는 데이터로 전환
모델 훈련 프로세스
1. Load Data
: 훈련 데이터 불러오기
2. Extract features
: 훈련용 데이터가 있는 그대로 모델 훈련에 사용되는 것이 아니라 숫자가 아닌 값들은 무시되거나 숫자로 변환되고 숫자들은 표준화 (0과 1사이) 등으로 한번 변환됨
► 훈련과 추론과정에서 동일하게 진행되어야 한다.
► 추론 과정에서 이러한 변환은 API 내에서 수행하는 것이 좋다.
3. Train model
: 모델 학습
4. Evaluate
: 모델 성능 평가
모델 추론 API 구조
모델 추론 과정 모니터링의 중요성
- 모델 구축하는 사람과 추론 운영 하는 사람이 다름 ► MLOps 팀이 생김
- 데이터 패턴이 달라지면서 모델 성능이 떨어짐 (Data Drift)