위클리 페이퍼 #3 - 데이터 전처리, t-test
금주의 위클리 페이퍼의 주제는 2가지이다.
1) 데이터 전처리 방법들 (ex. 결측값 처리 등) 에 대해 설명해 주세요.
2) t-test에 대해 설명해 주세요.
데이터 전처리 방법들
데이터 전처리는 Data Science에서 매우 중요한 단계로, 수집한 데이터를 분석에 적합한 형태로 가공하는 과정으로, 데이터 전처리 과정을 통해서, 결측치, 이상치 등을 처리하여 데이터의 품질을 향상시키고 그에 따라 분석 결과의 품질을 향상시키는 과정이다. 이러한 과정이 전체 과정에서 시간과 노력이 가장 많이 드는 작업으로 꼽히기도 한다.

데이터와 관련하여 데이터 클리닝과 정리 과정에서 60%, 데이터 셋 수집 과정에서 19%를 차지하여 데이터 사이언스의 시간의 약 80%를 차지할 정도로 분석을 위한 준비에만 많은 시간이 할애가 된다는 점을 의미한다.
2020년 데이터 사이언스와 관련하여 100개국 이상에서 약 2400명을 대상으로 사용 되어지는 오픈 소스 기술에 대한 조사에 따르면 대체적으로 python을 사용하고 그 다음으로는 R을 사용하는 모습을 보였습니다.

( 출처 : https://www.datanami.com/2020/07/06/data-prep-still-dominates-data-scientists-time-survey-finds/ )
데이터 전처리와 관련하여 대표적으로 결측값 처리와 이상치 제거가 가장 중요하다고 생각 되어진다. python을 기반으로 하여 결측값 처리와 이상치 제거에 관한 이야기를 이어가겠습니다.
결측치란 데이터 내부에 누락된 항목을 말하고 주로 NaN(Not a Number), NaT(Not a Time), None(=Null), inf(infinite)가 이에 속한다. 데이터 결측치는 주로 3가지 유형으로 분류된다.
결측치 처리
결측치의 3가지 종류
1. 완전 무작위 결측치(MCAR, Missing Completely at Random) : 결측값의 발생이 다른 변수의 값과 관계없이 완전히 무작위로 발생
2. 무작위 결측치(MAR, Missing at Random) : 결측치가 다른 변수에 의해서 설명되지만, 결측된 변수 자체에 의해서는 설명 되지 않은 경우
3. 비무작위 결측치(MNAR, Missing Not at Random) : 결측치의 발생 원인이 다른 변수와 상관이 있는 경우
발생되어지는 결측치를 처리하는 방식에는 아래의 그림과 같다.

( 출처 : https://www.kaggle.com/code/parulpandey/a-guide-to-handling-missing-values-in-python/notebook)
결측치 처리 방식에는 크게는 2가지 방식을 사용합니다. 삭제(DELETION), 대체(IMPUTATION)의 방식을 사용하게 됩니다.
삭제(DELETION)
- 결측치가 있는 행이나 열 자체를 제거하는 방법으로, 열 데이터(특성)를 삭제를 하는 행동자체를 통해서 데이터에 유효한 특성과 정보를 잃을 위험성을 가지고 있습니다.
- 제거 기준의 가이드 라인
- 10% 미만의 경우 : 해당되는 행의 데이터를 제거하거나 그대로 두기
- 10% ~ 50%의 경우 : 회귀분석 혹은 모델 기반 대체
- 50% 이상 : 해당 변수 자체를 제거
대체(IMPUTATION)
- 알고리즘을 통한 결측값 처리
- XGBoost와 LightGBM과 같은 알고리즘을 이용해 결측값을 처리하는 방법이 있다. - 중앙값, 평균값으로 대체
- 수치형 데이터에서는 .median(), .mean()을 사용해서 대체한다. - 최빈값, 0, 상수 값으로 대체
- 최빈값의 경우에는 범주형 데이터에서 사용되는 대체방법이다. - K-NN 알고리즘을 사용
- K-Nearest Neighbor 알고리즘을 사용하여 근접한 데이터 K개를 찾는 방법이다.
- 장점 : 비모수적으로 다양한 데이터 분포에 유연하게 적용, 평균·중위값을 넣는것 보다 정확한 경우가 있다.
- 단점 : k값에 따른 성능의 편차가 있음, 이상치(outlier)에 매우 민감(가장 가까운 이웃을 이용해 클래스를 결정하고 이를 이용해 예측을 하게 되는데 해당 과정에서의 가장 먼 이상치가 선택이 된다면, 전체 예측 결과에 부정적인 영향을 크게 주기 때문) - MICE(Multivariate Imputation by Chained Equation) - 다중 대치법
- 결측값 처리를 위한 통계적 기법으로 결측 데이터를 여러번 대치하여 여러개의 완전한 데이터를 생성 및 결합하여 결측값에 대해서 불확실성을 반영하는 방법이다.
- 핵심 개념으로는 다중대치, 연쇄방정식, 반복적인 과정이 있다.
- 장점 : 결측값 대치의 불확실성을 반영할 수 있다, 다양한 변수간 상관관계를 유지, 여러번의 대치를 통해 신뢰성 있는 결과 도출
- 단점 : 계산 비용이 높을 수 있음, 모델링 및 대치 과정의 복잡함, 적절할 모델 선택에 어려움 - Forward Fill, Backward Fill, Linear Interpolation
- 시계열 데이터에서 결측치를 처리하는 방법이다.
- Forward Fill : 결측치의 직전 값으로 결측치를 채우는 방법(원본 데이터의 성향을 가져온다.)
- Backward Fill : 결측치의 직후 값으로 결측치를 채우는 방법(미래보다 과거를 채우는게 의미가 있는 경우에 사용)
- Linear Interpolation(선형보간법) : 결측치가 주변 데이터에 의해서 선형적인 일관성을 갖게하는 방법, 과거와 미래 데이터를 이용해 직선을 그어 해당위치를 예측하는 방식이다.
이상치 처리
데이터에서 이상치란 관측된 데이터의 범위에서 많이 벗어난 아주 작은 값이나 큰값을 나타낸다. 이말은 즉슨 데이터의 집단이 아주 적은 수에 밀집해 있지만, 아주 큰 이상치 데이터에 의해서 데이터 전체의 평균값이 크게 달라지는 경우가 생길 수 있고, 그에 따른 의사결정에 큰 영향을 미치기 때문에 데이터 전처리 과정에서 적절한 이상치 처리는 필수적이라고 볼 수있다.
이상치 처리를 위한 방법에는 크게 Z-score를 통해 데이터가 평균으로부터 얼마의 표준편차 만큼 벗어나 있는지에 대해서 판단을 하거나 IQR(Interquantile Range, Box plot)을 통해서 찾아 낼 수 있다.
이상치의 처리 방법 중 IQR을 이용해 처리하는 방법에 대해서 간단히 코드를 구현하여 설명하도록 하겠습니다.
import pandas as pd
import numpy as np
df = pd.to_csv('data.csv') # DataFrame 생성
#pandas.quantile() 명령어를 이용해서 간편히 추출가능 (0.25, 0.5, 0.75, 1) 1 ~ 4분위수에 해당
Q1 = df['value'].quantile(0.25) # Q1(제 1사분위수)에 해당하는 값
Q3 = df['value'].quantile(0.75) # Q3(제 3사분위수)에 해당하는 값
IQR = Q3 - Q1 # IQR 범위 지정
Lower_limit = Q1 - 1.5 * IQR # 하한한계점(이상치제거)
Upper_limit = Q3 + 1.5 * IQR # 상한한계점(이상치제거)
drop_outlier = (df['price'] >= Lower_limit) & (df['price'] <= Upper_limit) # 이상치를 제외한 나머지만 가져오기
df[drop_outlier] #boolean을 사용해 df의 이상치를 제외한 데이터 추출
이와 같은 방법을 통해서 이상치를 처리 할 수 있습니다.
t-test
t-검정(t-test)
t 검정이란 모집단의 분산이나 표준편차를 알지 못하는 경우에 모집단을 대표하는 표본으로부터 추정된 분산이나 표준편차를 이용하여 검정하는 방법으로, "두 모집단의 평균간의 차이가 없다"라는 귀무가설과 "두 모집단의 평균간에 차이가 있다"라는 대립가설 중에 하나를 선택 할 수있도록 하는 통계적 검정 방법이다.
(교육평가용어사전, 2004, 학지사)
t-검정의 기본 가정
1. 정규성 가정 : 데이터가 정규 분포를 따른다.
2. 독립성 가정 : 표본이 독립적으로 추출되었다.
3. 등분산성 가정 : 두 집단의 분산이 동일하다.
t-검정의 절차
- 가설설정 : 귀무가설, 대립가설에 대해서 지정
- 유의수준 설정 : p값에 대해서 지정
- 검정통계량 계산 : t-값을 계산하여 두 집단 간의 평균 차이를 표준 오차로 나누어 구함
- p-값 계산 : t-분포를 사용하여 계산된 t-값에 대해서 p-값과의 차이를 봄
t-값 < p-값(예 : 0.05) = 귀무가설을 기각
t-값 > p-값(예 : 0.05) = 귀무가설을 기각할만한 충분한 근거가 없다. - 결론 도출
t-값(t-value)
t-값은 두 집단의 평균 차이가 표준 오차의 몇 배인지를 나타내는 값으로, t-값은 검정 통계량으로 사용되고, 이를 이용해 유의 수준과 비교를 통해 귀무 가설에서 얼만큼 일탈을 하는지에 대해서 측정하는 값으로 사용된다.
- 독립 표본 t-검정 : 두 독립적인 집단의 평균 차이를 검정할때
$$t = \frac{\bar{X}_1 - \bar{X}_2}{\sqrt{\frac{s^2_1}{n_1} +\frac{s^2_2}{n_2}}}$$
\(\bar{X}_1, \bar{X}_2\) : 두 집단의 표본 편차
\(s_1 , s_2\) : 두 집단의 표본 표준편차
\( n_1 , n_2\) : 두 집단의 표본 크기
t-분포(t-distribution)
평균을 0을 가지고, 좌우 대칭을 이루고 있다. t-분포는 정규 분포와 비슷하지만, 표본의 크기가 적은 경우에 표본의 평균이 모집단의 평균을 얼마나 잘 추정하는지에 대해서 검증을 하는데 사용된다. t-값이 커질 수록 표준정규분포(normal distribution)와 같은 형태를 띠게 된다. t-분포는 평균을 중심으로 대칭적인 모습을 보인다.
공부하는데 참고한 자료
참고자료2 : https://cow-coding.tistory.com/59
참고자료3 : https://www.kaggle.com/code/parulpandey/a-guide-to-handling-missing-values-in-python/notebook