수업 목표
예측 모델링에 필요한 전체 프로세스를 이해해 봅시다.
데이터 분석 프로세스
1. 데이터 수집
Data Source
OLTP Database: OnLine Transaction Processing 은 온라인 뱅킹,쇼핑, 주문 입력 등 동시에 발생하는 다수의 트랜잭션(데이터베이스 작업의 단위) 처리 유형
Enterprise Applications: 회사 내 데이터 (ex 고객 관계 데이터, 제품 마케팅 세일즈)
Third - Party: Google Analytics와 같은 외부소스에서 수집되는 데이터
Web/Log: 사용자의 로그데이터
Data Lake: 원시 형태의 다양한 유형의 데이터를 저장
Data Warehouse: 보다 구조화된 형태로 정제된 데이터를 저장
Data Marts: 회사의 금융, 마케팅, 영업 부서와 같이 특정 조직의 목적을 위해 가공된 데이터
BI/Analytics: business Intelligence(BI)는 의사결정에 사용될 데이터를 수집하고 분석하는 프로세스
회사 내 데이터가 존재한다면
SQL 혹은 Python 을 통해 데이터 마트를 생성
회사 내 Data가 없다면 → 데이터 수집 필요
방법1: CSV, EXCEL 파일 다운로드
방법2: API를 이용한 데이터 수집
방법3: Data Crawling
: 탐색적 데이터 분석(Exploratory Data Analysis, EDA)는 데이터 시각화, 기술통계 등의 방법을 통해 데이터를 이해하고 탐구하는 과정
1) 기술통계를 통한 EDA
tips.describe(include='all') -> 기술통계 확인 가능, 옵션을 통해 범주형 데이터도 확인 가능
2) 시각화를 통한 EDA
countplot: 범주형 자료의 빈도 수 시각화
방법: 범주형의 데이터의 각 카테고리별 빈도수를 나타낼 때
Ex) 상점에서 판매되는 제품의 카테고리별 판매수 파악
x축: 범주형 자료
y축: 자료의 빈도수
barplot: 범주형 자료의 시각화
방법: 범주형 데이터의 각 카테고리에 따른 수치 데이터의 평균을 비교
Ex) 다양한 연령대별 평균소득을 비교할 때
x축: 범주형 자료
y축: 연속형 자료
boxplot: 수치형 & 범주형 자료의 시각화
방법: 데이터의 분포, 중앙값, 사분위 수, 이상치 등을 한눈에 표현하고 싶을 때
Ex) 여러 그룹간 시험 점수 분포를 비교할 때
x: 수치형 or 범주형
y: 수치형 자료
histogram: 수치형 자료 빈도 시각화
방법: 연속형 분포를 나타내고 싶을 때, 데이터가 몰려있는 구간을 파악하기 쉬움
Ex)고객들의 연령 분포를 파악 할 때
x축: 수치형 자료
y축: 자료의 빈도수
scatterplot: 수치형끼리 자료의 시각화
방법: 두 연속형 변수간의 관계를 시각적으로 파악하고 싶을 때
Ex) 키와 몸무게 간의 관계를 나타낼 때
x축: 수치형 자료
y축: 수치형 자료
pairplot: 전체 변수에 대한 시각화
방법: 한 번에 여러 개의 변수를 동시에 시각화 하고 싶을 때
x축: 범주형 or 수치형 자료
y축: 범주형 or 수치형 자료
대각선: 히스토그램(분포)
1) 이상치(Outlier) : 이상치란 보통 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값
Extreme Studentized Deviation(ESD) 이용한 이상치 발견
데이터가 정규분포를 따른다고 가정할 때, 평균에서 표준편차의 3배 이상 떨어진 값
모든 데이터가 정규 분포를 따르지 않을 수 있기 때문에 다음 상황에서는 제한됨
데이터가 크게 비대칭일 때( → Log변환 등을 노려볼 수 있음)
샘플 크기가 작을 경우
IQR(Inter Quantile Range)를 이용한 이상치 발견
ESD와 동일하게 데이터가 비대칭적이거나 샘플사이즈가 작은 경우 제한됨
Q1(25%), Q2(50%, 중위수), Q3(75%)
IQR = Q3 - Q1
상한 이상치 = Q3 + 1.5 IQR / 하한 이상치 = Q1 - 1.5 IQR
이상치 발견 방법
ESD를 이용한 처리
IQR을 이용한 처리(box plot)
조건필터링을 통한 삭제
(a.k.a. boolean Indexing)
이상치는 주관적인 값이므로 도메인과 비즈니스 맥락에 따라 처리 방법이 달라진다.
데이터 삭제시 품질은 좋아질 수 있지만 정보 손실을 동반하기 때문에 이상치 처리에 주의가 필요
2) 결측치(Missing Value) : 존재하지 않는 데이터
수치형 데이터
평균값 대치 : 대표적인 대치 방법
중앙값 대치 : 데이터에 이상치가 많아 평균 값이 대표성이 없다면 중앙 값을 이용 (이상치는 평균값을 흔들리게 함)
범주형 데이터
최빈값 대치
사용 함수
간단한 삭제 & 대치
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 알고리즘을 이용한 대치
3) 범주형 데이터 전처리 - 인코딩(Encoding)
레이블 인코딩(Label Encoding) : 문자열 범주형 값을 고유한 숫자로 할당
1등급 -> 0 / 2등급 -> 1 / 3등급 -> 2
장점 : 모델이 처리하기 쉬운 수치형으로 데이터 변환
단점 : 실제로는 그렇지 않은데, 순서간 크기에 의미가 부여되어 모델이 잘못 해석할 수 있음
사용 함수 : sklearn.preprocessing.LabelEncoder
원-핫 인코딩(One-Hot Encoding) : 각 범주를 이진 형식으로 변환하는 기법
빨강 -> [1, 0, 0] / 파랑 -> [0, 1, 0] / 초록 -> [0, 0, 1]
장점 : 각 범주가 독립적으로 표현되어, 순서의 중요도를 잘못 학습하는 것을 방지, 명목형 데이터에 권장
단점 : 범주 개수가 많을 경우 차원이 크게 증가(차원의 저주), 모델의 복잡도를 증가, 과적합 유발
사용함수 : pd.get_dummies / sklearn.preprocessing.OneHotEncoder
4) 수치형 데이터 전처리 - 스케일링(Scaling)
표준화(Standardization) : 각 데이터에 평균을 빼고 표준편차를 나누어 평균을 0, 표준편차를 1로 조정하는 방법
이상치가 있거나 분포가 치우쳐져 있을 때 유용
모든 특성의 스케일을 동일하게 맞춤, 많은 알고리즘에서 좋은 성능
데이터의 최소-최대 값이 정해지지 않음
사용함수 : sklearn.preprocessing.StandardScaler
정규화(Nomalization) : 데이터를 0과 1 사이 값으로 조정(최소값 0, 최대값 1)
모든 특성의 스케일을 동일하게 맞춤
최대-최소 범위가 명확
이상치에 영향을 많이 받을 수 있음(반대로 말하면 이상치가 없을 때 유용)
사용함수 : sklearn.preprocessing.MinMaxScaler
로버스트 스케일링(Robust Scaling) : 중앙값과 IQR을 사용하여 스케일링
이상치의 영향에 덜 민감
표준화와 정규화에 비해 덜 사용됨
사용함수 : sklearn.preprocessing.RoburtScaler
5. 데이터 분리
과대적합(Overfitting) 이란 데이터를 너무 과도하게 학습한 나머지 해당 문제만 잘 맞추고 새로운 데이터를 제대로 예측 혹은 분류하지 못하는 현상
모형이 지나치게 복잡할 때 : 과대적합이 될 수 있음
모형이 지나치게 단순할 때 : 과소적합이 될 수 있음
과적합의 원인
모델의 복잡도
데이터 양이 충분하지 않음
학습 반복이 많음(딥러닝의 경우)
데이터 불균형(정상환자-암환자 비율이 95:5)
테스트 데이터의 분리 - 과적합 해결
학습 데이터(Train Data) : 모델을 학습(fit)하기 위한 데이터
테스트 데이터(Test Data) : 모델을 평가하기 위한 데이터
6. 교차 검증과 GridSearch
교차검증(Cross Validation)이란 데이터 셋을 여러 개의 하위 집합으로 나누어 돌아가면서 검증 데이터로 사용하는 방법
K-Fold Validation
정의: Train Data를 K개의 하위 집합으로 나누어 모델을 학습시키고 모델을 최적화 하는 방법
이때 K는 분할의 갯수
Split 1: 학습용(Fold 2~5), 검증용(Fold1)
Split 2: 학습용(Fold1, 3~5), 검증용(Fold2)
Split 5까지 반복 후 최종 평가
데이터가 부족할 경우 유용(반복 학습)
GridSearchCV : 하이퍼파라미터 자동 적용
전체 데이터 프로세스