도서 <데이터 분석가가 반드시 알아야 할 모든 것> 참조
- 데이터 전처리와 파생변수 생성
- 결측값 처리
- 결측값 종류
- 완전 무작위 결측(MCAR): 순수하게 결측값이 무작위로 발생한 경우
- 무작위 결측(MAR): 다른 변수의 특성에 의해 해당 변수의 결측치가 체계적으로 발생한 경우
- 비무작위 결측(NMAR): 결측값들이 해당 변수 자체의 특성을 갖고 있는 경우
- 결측값 처리 방법
- 표본 제거 방법: 결측값이 심하게 많은 변수를 제거하거나 결측값이 포함된 행을 제외하고 데이터 분석
- 평균 대치법: 결측값을 제외한 온전한 값들의 평균을 구한 다음, 그 평균 값을 결측값들에 대치하는 것
- 보간법: 데이터가 시계열적 특성을 가질 때 사용
- 회귀대치법: 해당 변수와 다른 변수 사이의 관계성을 고려하여 결측값을 계산
- 확률적 회귀대치법: 인위적으로 회귀식에 확률 오차항을 추가하여 변동성을 조정
- 다중 대치법: 단순대치를 여러 번 수행하여 n개의 가상적 데이터를 생성하여 이들의 평균으로 결측값을 대치하는 방법
- 대치 단계: 가능한 대치 값의 분포에서 추출된 서로 다른 값으로 결측치를 처리한 n개의 데이터셋 생성
- 분석 단계: 생성된 각각의 데이터셋을 분석하여 모수의 추정치와 표준오차 계산
- 결합 단계: 계산된 각 데이터셋의 추정치와 표준오차를 결합하여 최종 결측 대치값 산출
- Python 실습
- 결측값의 관측치를 제거하는 dropna()
- 모든 칼럼의 값이 결측값인 행을 제외할 때는 how='all' 옵션 사용
- 한 칼럼이라도 결측값인 행을 제외할 때는 how='any' 옵션 사용
- 특정 칼럼의 결측값을 기준으로 관측치를 제거할 때는 subset 옵션 사용
- 결측값 대치 fillna()
- 전 시점이나 뒤 시점의 값과 동일한 값으로 대치하는 보간법은 method 옵션을 pad나 bfill로 설정하여 적용
- 시점 인덱스를 사용하기 위해서는 우선 시간형 칼럼을 시계열 객체로 변환한 후에 인덱스로 설정 후 interpolate() 함수 사용하여 시점의 정도를 고려한 대치값을 적용
- 다중 대치 sklearn의 impute 패키지 활용
- 결측값의 관측치를 제거하는 dropna()
- 결측값 종류
- 이상치 처리
- 이상치란 일부 관측치의 값이 전체 데이터의 범위에서 크게 벗어난 아주 작거나 큰 극단적인 값을 갖는 것
- 전체 데이터의 양이 많을수록 튀는 값이 통곗값에 미치는 영향력이 줄어들어 이상치 제거의 필요성이 낮아짐
- 이상치는 해당 값을 결측값으로 대체한 다음 결측값 처리를 하거나, 아예 해당 이상치를 제거하는 것이 간단
- 관측값 변경: 하한 값과 상한 값을 결정한 후 하한 값보다 작으면 하한 값으로 대체하고 상한 값보다 크면 상한 값으로 대체
- 가중치 조정: 이상치의 영향을 감소시키는 가중치를 줌
- 평균은 이상치에 통계량이 민감하게 변하기 때문에, 이상치에 보다 강건한 중위수와 중위수 절대 편차(MAD)를 사용하는 것이 효과적
- 변수 구간화
- 이산형 변수를 범주형 변수로 비즈니스적 상황에 맞도록 변환시킴으로써 데이터의 해석이나 예측, 분류 모델을 의도에 맞도록 유도할 수 있는 것
- 변숫값이 효과적으로 구간화됐는지는 WOE값, IV값 등을 통해 측정 가능
- 변수가 종속변수를 제대로 설명할 수 있도록 구간화가 잘되면 IV값이 높아진다.
- Python 실습
- 구간화 수행 cut()
- 구간별로 포함되는 관측치의 수가 유사한 구간화 적용 qcut()
- 종속변수에 대한 독립변수가 최적의 예측력을 가질 수 있도록 구간화 WOE()
- 데이터 표준화와 정규화 스케일링
- 표준화는 각 관측치의 값이 전체 평균을 기준으로 어느 정도 떨어져 있는지 나타낼 때 사용
- 정규화는 데이터의 범위를 0부터 1까지로 변환하여 데이터 분포를 조정하는 방법
- 이상치에 민감하다는 단점을 보완한 RobustScaler
- Python 실습
- 표준화된 값으로 변환 StandardScaler()
- 데이터 정규화 스케일링 적용 MinMaxScaler()
- 모델 성능 향상을 위한 파생 변수 생성
- 파생변수는 데이터의 특성을 이용하여 분석 효율을 높이는 것이기 때문에 전체 데이터에 대한 파악이 중요할 뿐만 아니라 해당 비즈니스 도메인에 대한 충분한 이해가 수반되어야 한다.
- 파생변수는 기존의 변수를 활용해서 만들어낸 변수이기 때문에 다중공선성 문제 발생 가능성 높다. 상관분석을 통해 변수 간의 상관성 확인해야 한다.
- 슬라이딩 윈도우 데이터 가공
- 데이터를 겹쳐 나눔으로써 전체 데이터가 증가하는 원리를 차용한 것
- 많은 분석 데이터셋을 확보하고 학습데이터의 최근성을 가질 수 있다.
- 범주형 변수의 가변수 처리
- 더미 변수라고도 불리는 가변수 처리는 범주형 변수를 0과 1의 값을 가지는 변수로 변환해 주는 것
- 중요한 점은 범주의 개수보다 하나 적게 가변수를 만드는 것
- 변수 간의 독립성을 위해 하나의 범주 가변수를 제거해 주는 것이 중요
- Python 실습
- 판다스의 가변수 처리 함수 get_dummies()
- 해당 컬럼만 지정하여 가변수 처리
- drop_first=True 옵션 설정하면 자동으로 첫 번째 범주를 제거
- dummy_na=True 옵션 적용하여 결측값 범주를 생성
- 판다스의 가변수 처리 함수 get_dummies()
- 클래스 불균형 문제 해결을 위한 언더샘플링과 오버샘플링
- 가중치 밸런싱: 모델 자체에 중요도가 높은 클래스에 정확도 가중치를 주어, 특정 클래스의 분류 정확도가 높아지도록 조정해 주는 것
- 불균형 데이터 자체를 균형이 맞도록 가공한 다음 모델을 학습하는 것
- 언더샘플링: 큰 비중의 클래스의 데이터를 줄임
- 랜덤 언더샘플링
- EasyEnsemble
- Condensed Nearest Neighbor
- 오버샘플링: 작은 비중의 클래스 데이터를 늘림
- 랜덤 오버샘플링
- Synthetic Minority Over-Sampling Technique
- Adaptive Synthetic Sampling Approach
- 오버샘플링을 적용할 때는 먼저 학습 셋과 테스트 셋을 분리한 다음에 적용 해야 한다. 그렇지 않으면 과적합 유발
- 언더샘플링: 큰 비중의 클래스의 데이터를 줄임
- Python 실습
- 언더샘플링 적용 RandomUnderSampler()
- 오버샘플링 적용 SMOTE()
- 데이터 거리 측정 방법
- 관측치 A를 기준으로, B와 C 중 어느 관측치가 더 가까이 있는가를 판단하기 위한 것
- 데이터 거리를 측정하기 전에 데이터 표준화나 정규화 가공 필수
- 대표적인 거리 측정 방법
- 유클리드 거리
- 맨해튼 거리
- 민코프스키 거리
- 체비쇼프 거리
- 마할라노비스 거리: X와 Y의 공분산을 고려하여 거리를 측정
- 코사인 거리: 두 벡터의 사이각을 구해서 유사도를 구하는 것
- 결측값 처리