스파르타코딩클럽의 강의를 참고하여 정리하였습니다
예측모델링 프로세스
데이터 전처리
1. 이상치(outlier)
이상치: 보통 관측된 데이터 범위에서 많이 벗어난 아주 작은/큰 값
1-1. 이상치 발견 방법
1) ESD(extreme studentized deviation)을 이용한 이상치 발견
- 데이터가 정규분포를 따른다고 가정할 때, 평균에서 표준편차의 3배 이상 떨어진 값
- 모든 데이터가 정규분포를 따르지 않음(데이터 크기가 비대칭일때->log변환, 샘플 크기가 작을 때)
import numpy as np
mean = np.mean(data)
std = np.std(data)
upper_limit = mean + 3*std
lower_limit = mean - 3*std
2) IQR(inter quantile range)을 이용한 이상치 발견
- EDS와 동일하게 데이터가 작거나 샘플 사이즈가 작은 경우 제한
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
- Q1: 25%, Q2:50%, Q3: 75%
- IQR = Q3 - Q1
- 상한 이상치: Q3 + 1.5*IQR
- 하한 이상치: Q1 - 1.5*IQR
1-2. 이상치 처리 방법
1) bloolean indexing을 통한 데이터 삭제
- df[df['column'] > limit_value]
2. 결측치 (Missing Value)
- 의미: 존재하지 않는 데이터
2-1. 결측치 발견 방법
2-2. 결측치 처리 방법
(1) 수치형 데이터
- 평균값 대치: 대표적인 대치 방법
- 중앙값 대치: 데이터에 이상치가 많아 편균이 대표성이 없다면 사용
(2) 범주형 데이터
- 최빈값 대치
(3) 사용 함수
간단한 삭제 및 대치 | 알고리즘 사용 |
3. 범주형 데이터 전처리-인코딩(encoding)
정해진 규칙에 따라 변환하는 과정
3-1. 레이블 인코딩(Label Encoding)
- 문자열 범주형 값을 고유한 숫자로 할당
- 예: 1등급 -> 1 / 2등급->2 /. 등급 -> 3
- 장점: 모델이 처리하기 쉬운 수치형 데이터로 변환
- 단점: 실제로는 그렇지 않은데, 순서 간 크기에 의미가 부여되어 모델이 잘못 해석할 수 있음
3-2. 원-핫 인코딩(one-hot-encoding)
- 정의: 각 범주를 이진 형식응로 변환
- 예: 빨강 -> [1,0,0] / 노랑 -> [0,1,0] / 초록 -> [0,0,1]
- 장점: 각 범주가 독립적으로 표현되어, 순서사 중요도를 잘못 학습하는 것을 방지(for 명목형 데이터)
- 단점: 범주 개수가 많을 경우 차원이 크게 증가, 모델의 복잡도 증가, 과적합 유발
# CSR 데이터 데이터프레임으로 만들기
csr_df = pd.DataFrame(csr_data.toarray(), columns = oe.get_feature_names_out())
# 기존 데이터프레임에 붙이기(옆으로)
pd.DataFrame([titaninc_df,csr_df], axis = 1)
4. 수치형 데이터 전처리-스케일링(scaling)
머신러닝의 학습에 사용되는 데이터들은 서로 단위값이 다르기 때문에 보정필요
4-1) 표준화(Standardization)
- 각 데이터에 평균을 빼고 표준편차로 나누어 편균을 0, 표준편차를 1로 조정하는 방법
- 장점: 이상치가 있거나, 분포에 치우쳐져 있을 때 유용, 모든 특성의 스케일을 동일하게 맞춤(알고리즘에 적합)
- 단점: 데이터의 최소-최대 값이 정해지지 않음
4-2) 정규화(Normalization)
- 정의: 데이터를 0과 1사이 값으로 조정(최소값 0, 최대값 1)
- 장점: 모든 특성의 스케일을 동일하게 맞춤, 최소-최대 범위가 명확
- 단점: 이상치에 영향을 많이 받을 수 있음(이상치가 없으면 유용)
4-3) 로버스트 스케일링 (Robust Scaling)
- 정의: 중앙값과 IQR을 사용하여 스케일링
- 장점: 이상치의 영향에 덜 민감
- 단점: 표준화와 정규화에 비해 사용도가 낮음
데이터 전처리 - 데이터분리 for 과적합
1. 과적합(overfitting)
- 데이터를 너무 과도하게 학습한 나머지 해당 문제만 잘 맞추고 새로운 데이터를 제대로 예측 혹은 분류하지 못하는 현상
모형이 지나치게 복잡할 때 -> 과대적함
모형이 지나치게 단순할 때 -> 과소적합
과적합의 원인 : 모델의 복잡도 / 데이터 양이 충분하지 않을 때 / 학습 반복이 많음(딥려닝) / 데이터의 불균형
2. 과적합의 해결 by 테스트데이터 분리
- 학습 데이터 (train data) : 모델을 학습(fit)하기 위한 데이터
- 테스트 데이터 (test data) : 모델을 평가 하기 위한 데이터
- 일반적으로 합습데이터보다 테스트의 적합도가 낮아짐
EDA(exploratory data analysis,탐색적 데이터 분석)
데이터의 시각화, 기술통계 등의 방법을 통해 데이터를 이해하고 탐구하는 과정
기술통계를 통한 EDA : .describe()
tips_df.describe(include = 'all')
include = 'all' 옵션을 통해 범주형 데이터도 확인 가능
tips_df.describe() | tips_df.describe(include = 'all') |
사용데이터: Kaggle의 titanic train 데이터셋
시각화를 통한 EDA : sns
1. counplot :범주형 자료의 빈도 수 시각화
- 목적: 범주형 데이터의 각 카테고리별 빈도수
- x축: 범주형 자료
- y축: (데이터x) x축 자료의 빈도수
# countplot: x축 범주형, y축 관측치
sns.countplot(data = tips_df, x = 'day')
2. barplot: 범주형 자료의 시각화
- 목적: 범주형 데이터의 각 카테고리에 따른 수치 데이터의 평균 비교
- x축: 범주형 자료
- y축: 연속형 자료
# barplot: X축이 범주형, Y축이 연속형 값
sns.barplot(data = tips_df, x = 'sex', y = 'tip')
# 평균으로 집계하고 싶을 때 estimator = 'mean' -> 기본값
3. boxplot: 수치형&범주형 자료의 시각화
- 목적:데이터의 분포, 중앙값, 사분위 수, 이상치 등을 한눈에 표현
- x축: 수치형/범주형 자료
- y축: 수치형 자료
sns.boxplot(data = tips_df, x = 'time',y = 'total_bill')
4. histogram: 수치형 자료 빈도 시각화
- 목적: 연속형 분포를 보고 데이터가 몰려있는 구간을 파악하기
- x축: 수치형 자료
- y축: (데이터x) x축 자료의 빈도수
sns.histplot(data = tips_df, x = 'total_bill')
# sns를 활용하지 않고도 표현 가능
# tips_df['total_bill'].hist()
5. scatterplot: 수치형끼리의 시각화
- 목적: 두 연속형 변수간의 관계를 시작적으로 파악
- x축: 수치형 자료
- y축: 수치형 자료
#X축: 수치형변수
#Y축: 수치형변수
sns.scatterplot(data = tips_df, x = 'total_bill', y = 'tip')
6. parplot: 전제 변수에 대한 시각화
- 목적: 한 번에 여러개의 (숫자도된)변수를 동시에 시각화 하고 싶을 때
- x축: 수치형/범주형 자료
- y축: 수치형/범주형 자료
sns.pairplot(data = tips_df)
'학습노트 > Python' 카테고리의 다른 글
[강의노트] Python - 머신러닝 - 로지스틱 회귀 - 실습(1) (2) | 2024.01.31 |
---|---|
[강의노트] Python - 머신러닝 - 로지스틱 회귀 (0) | 2024.01.31 |
[강의노트] Python - 머신러닝 - 선형회귀-실습(2) (1) | 2024.01.30 |
[강의노트] Python - 머신러닝 - 선형회귀-실습(1) (2) | 2024.01.30 |
[강의노트] Python - 머신러닝 - 선형회귀 (1) | 2024.01.30 |