[통계] 1. 탐색적 데이터 분석 (EDA)
1. 정형화된 데이터의 요소
우리는 센서 측정, 이벤트, 텍스트, 이미지, 비디오 등 수많은 소스로부터 다양한 형태의 데이터를 얻습니다.
이런 데이터들은 정형화되지 않은 상태이기 때문에 통계적 개념을 활용하기 위해서는 활용 가능한 형태의 데이터로 변환해야 합니다. 그리고 데이터가 어떤 데이터인지 알아야 합니다.
[정형화된 데이터의 종류]
구분 | 상세 |
1. 수치형 데이터 | 숫자를 이용해 표현된 데이터 |
1-1. 연속형 데이터 | 풍속(m/s)이나 지속시간처럼 일정 범위 안에서 어떤 값이든 취할 수 있는 데이터 |
1-2. 이산 | 발생빈도, 횟수와 같이 정수 값만 취할 수 있는 데이터 |
2. 범주형 데이터 | 목록, 명목 등 가능한 범주 안의 값만을 취하는 데이터 |
2-1. 이진 | 두개의 값 (참 혹은 거짓, 0 혹은 1)만을 갖는 특수한 범주형 데이터 |
2-2. 순서형 데이터 | 값들 사이에 분명한 순위가 있는 범주형 데이터 [매우 불만족 - 불만족 - 보통 - 만족 - 매우 만족] |
그렇다면 데이터를 구분하면 어떤 이점이 있을까요?
통계 모델을 생성할 때, 통계 방식을 결정하는데 도움을 줍니다. 특히 순서가 있는 범주형 데이터는 순서를 유지함으로써 데이터가 가진 중요한 정보가 손실되지 않도록 사전에 막을 수 있습니다. 예시로 [매우 불만족 - 불만족 - 보통 - 만족 - 매우 만족]과 같이 순서로 표현할 수 있는데, 이를 무시하면 모델이 데이터를 잘 이해하지 못하게 되고, 원하는 결과를 얻지 못하게 됩니다.
(Python의 sklearn.preprocessing.OrdinalEncoder로 순서형 데이터를 지원)
2. 테이블 데이터
데이터 분석에 사용되는 데이터의 가장 대표적인 형태는 엑셀 스프레드시트나 RDBMS(관계형데이터 베이스 시스템)과 같은 테이블 데이터 입니다. 보통 데이터 베이스는 하나 이상의 컬럼(Feature)을 가지고 있고, 각 행(Record)에 고유의 값인 인덱스가 설정된 형태로 구성되어져 있습니다. (Python의 Pandas 같은 형태)
[테이블 데이터의 구성]
구분 | 상세 |
Data frame | 통계와 머신러닝 모델에서 기본이 되는 테이블 형태의 데이터 구조 |
Feature | 일반적으로 테이블의 컬럼(열)이 하나의 Feature를 의미 (SQL에서는 속성, 필드 / 통계에서는 변수) |
Outcome | 프로젝트의 목표로하는 결과값을 가진 Feature를 의미 (통계에서는 종속변수, 모델에서는 예측변수) |
Record | 일반적으로 테이블의 각 행을 하나의 Record를 의미 (사건, 관측값, 샘플, 패턴 등의 용어로 표현되기도 함) |
하지만, 테이블 형식이 아닌 다른 형태의 데이터 구조도 있다.
시계열 데이터와 공간 데이터가 대표적인데, 시계열 데이터는 시간에 따라 순서대로 수집된 데이터로, 측정값이 시간에 따라 변화하는 연속성을 가지고 있습니다. 공간 데이터는 지도, 위치정보, 좌표에 따라 측정값이 발생하는 형태이고, 공간 좌표와 측정값이 데이터의 중심이 됩니다.
반면에 테이블 데이터는 각 Record들이 독립적인 형태로 이루어져 있습니다. 이를 구분하지 못하면 모델링이나, 분석을 진행할 때, 시간적 & 공간적 정보가 손실되어, 원하는 예측값을 얻기 어렵습니다.
3. 데이터 집합의 위치를 추정하는 값
데이터가 주어졌을 때, 데이터를 살펴보는 가장 기초적인 단계는 Feature의 대푯값을 구하는 것 입니다.
이는 대부분의 값이 어디에 위치하는지 나타내는 추정값 입니다. (중심경향성)
[데이터 집합의 위치를 추정하는 값의 종류]
구분 | 영문 | 상세 |
평균 | mean | 모든 값의 총합을 개수로 나눈 값 |
가중평균 | weight mean | 가중치를 곱한 값의 총합을 가중치의 총합으로 나눈 값 은근히 중요한 지표입니다. 특히 범주형 데이터를 볼 때, 꼭 고려해봐야하는 값 입니다. (소수 그룹의 값에 높은 가중치를 주거나, 정확도가 높은 값에 높은 가중치를 주거나) |
중간값 | median | 데이터의 가장 가운데 위치한 값 (백분위수 50번째와 동일값) 평균값은 극단값의 영향을 많이 받지만, 중앙값은 극단값의 영향을 덜 받습니다. |
가중 중간값 | weight median | 정렬 후, 각 데이터 포인트에 가중치를 부여하고 더할 때, 총합의 중간에 위치한 값 가중평균을 사용하는 이유와 마찬가지이며, 극단값의 영향을 덜 받습니다. |
백분위수 | percentile | 전체 데이터 집합에서 특정 비율에 해당하는 위치의 값 |
절사평균 | trimmed mean | 값을 크기 순서로 정렬 후, 일정 비율로 양끝 값을 제거 후, 남은 값의 평균을 계산한 값 데이터에서 극단값들의 영향을 제거한 대표값을 얻을 수 있습니다. |
로버스트 하다. | robust | 극단값들에 민감하지 않다는 것을 의미 |
특잇값 | outlier | 대부분의 값과 매우 다른 데이터 값 (유의어 : 극단값) 다소 주관적이지만, 데이터의 중심에서 많이 벗어나 데이터를 왜곡할 수 있습니다. 다만, 어느정도 규모가 큰 데이터에서는 극단값이 미치는 영향이 크지않습니다. |
대표값에 대한 통계학자와 데이터과학자들의 이해방식이 다르다.
통계학자들은 데이터를 통해 불확실성을 이해하고자 대표값들에 보통 "추정값"이라는 용어를 사용합니다.
반면 데이터과학자는 비즈니스나 목표에 관심을 가지므로 이런 값들을 "측정 지표"라고 합니다.
즉, 통계학에서는 어림 잡아 추측한다는 의미가 강하나, 데이터과학에서는 기준값, 목표값에 대한 의미가 강합니다.
특잇값(극단값)은 모두 제거해도 되지 않을까?
데이터 집합에서 특잇값은 정상적이지 않은 데이터로 골칫거리가 되기도 하지만, 가끔 유익한 정보를 제공하기도 합니다.
특잇값은 일반적인 패턴과 다른 행동을 보이는 값으로 새로운 경향이나, 패턴을 파악할 수도 있고, 센서의 고장 혹은 잘못된 측정 등으로 발생하는 문제를 조기에 발견하여 수정할 수도 있기 때문에 이상치도 잘 살펴봐야 합니다.
4. 데이터집합의 변이를 추정하는 값
위치가 데이터의 특징을 요약하는 요소라면, 변이는 데이터의 값이 얼마나 밀집해 있는지 혹은 퍼져 있는지를 나타내는 산포도를 나타냅니다. 위치를 추정했던 것처럼 변이도 다양한 추정 방법들이 있습니다.
[데이터 집합의 변이를 추정하는 값의 종류]
구분 | 영문 | 상세 |
편차 | Deviation | 관측값과 위치 추정값 사이의 차이 (오차, 잔차) |
분산 | Variance | 평균과의 편차를 제곱한 값들의 합 [n-1]로 나눈 값 (n : 데이터 개수) 절대값은 음의 편차가 상쇄하지 못하도록 하기 위해 사용됩니다. |
표준편차 | Standard Deviation | 분산의 제곱근 |
평균절대편차 | Mean Absolute Deviation | 평균과의 편차의 절댓값의 평균 절대값은 음의 편차가 상쇄하지 못하도록 하기 위해 사용됩니다. |
중간값의 중위절대편차 (MAD) |
Median Absolute Deviation from the madian |
중간값과의 편차의 절대값의 중간값 절대값은 음의 편차가 상쇄하지 못하도록 하기 위해 사용됩니다. |
범위 | Range | 데이터의 최대값과 최소값의 차이 |
순서통계량 | Order Statistics | 최소에서 최대까지 정렬된 데이터 값에 따른 계량형 (순위) |
백분위수 | Percentile | 어떤 값들의 퍼센트의 차이 |
사분위범위 (IQR) |
Interquartile Range | 75번째 백분위수와 25번째 백분위수 사이의 차이 이상치를 파악하는데, 유용한 지표로 사용되고 있습니다. |
분산은 왜 [n-1]을 분모로 사용할까?
분산을 구할 때 왜 n-1을 분모로 사용하는지 설명하기 위해 "자유도"라는 개념을 설명해야 합니다.
통계학적 관점에서의 설명이므로 참고해주시면 좋을 것 같습니다.
우선 우리가 일상에서 얻은 데이터의 집합은 모집단의 일부인 표본집단 입니다. 여기서 문제가 시작됩니다.
모집단의 일부인 표본집단은 모집단의 양 극단값을 포함할 확률이 통계적으로 낮기 때문에 아래 그림과 같이 모집단 보다 상대적으로 중앙 집중적인 형태가 발생할 가능성이 높습니다.
그러므로 표본집단의 분산이 모집단의 분산보다 낮아질 확률이 높은 것이죠.
그럼 어떻게 해야 할까요?
표본집단의 분산을 계산할 때, 분모를 작게 만들어 주면 됩니다. 그러면 표본집단의 분산이 커져서 모집단의 분산과 비슷하게 나타날 것 입니다. 즉 n-1을 적용함으로써 표본분산을 모분산과 유사하도록 만드는 것 입니다.
(n-2가 아닌 -1을 사용하는 이유는 통계적으로 -2로 하면 오히려 모분산 보다 분산이 커지기 때문 입니다.)
5. 데이터 분포 탐색하기
데이터 집합의 위치와 변이는 데이터를 요약한 하나의 수치 입니다. 이와 더불어 데이터가 전반적으로 어떻게 분포하고 있는지를 알아보면 데이터의 상태를 파악하고 새로운 정보를 얻을 수 있습니다.
구분 | 영문 | 상세 |
상자그림 | Boxplot | 데이터의 분포를 시각화한 간단한 방법 |
도수분포표 | Frequency Table | 어떤 구간에 해당하는 수치 데이터 값들의 빈도를 나타내는 기록 |
히스토그램 | Histogram | X축은 구간들을, y축은 빈도수를 나타내는 도수 테이블의 그림 즉, 도수분포표를 시각화한 그래프 |
밀도 그림 | Density Plot | 히스토그램을 부드러운 곡선으로 나타낸 그림 (커널밀도추정이 사용됨) |
6. 이진 데이터와 범주 데이터 탐색하기
범주형 데이터는 구성비율이나 퍼센트를 이용해 그 특성을 이해할 수 있습니다.
구분 | 영문 | 상세 |
최빈값 | mode | 데이터에서 가장 자주 등장하는 범주 혹은 값 주로 범주형 데이터를 분석할 때 사용하며, 수치 데이터에는 잘 사용하지 않습니다. |
기대값 | expected value | 범주에 해당하는 어떤 수치가 있을 때, 범주의 출현 확률에 따른 평균 범주형 데이터의 가중치가 확률이 되는 가중평균이 기대값 입니다. |
막대도표 | bar chart | 각 범주의 빈도수 혹은 비율을 막대로 나타낸 그림 히스토그램과 다른점은 막대도표는 각 요인 변수가 서로다른 범주를 나타냅니다. |
파이그림 | pie chart | 각 범주의 빈도수 혹은 비율을 원의 부채꼴 모양으로 나타낸 그림 통계학자나 시각화 전문가들은 시각적으로 효과적이지 않다는 이유로 잘 사용하지 않는다. |
기대값을 이해하기 위한 예시
기대값은 가중평균과 같은 형태이고, 확률 가중치를 반영한 값의 총합이라고 볼 수 있습니다.
아래 여러 예시와 같이 다양한 분야에 활용되고 있으므로 이해하고 기억하고 있으면 좋은 지표 입니다.
A. 넷플릭스 구독비용으로 1만원짜리 베이직을 사용할 확률이 60%
B. 넷플릭스 구독비용으로 3만원짜리 프리미엄을 사용할 확률이 30%
C. 넷플릭스 구독비용으로 5만원짜리 프리미엄 플러스를 사용할 확률이 10%
- 기대값 = (0.6)(10000) + (0.3)(30000) + (0.1)(50000) = 20000원
새로운 투자 프로젝트의 기대 수익을 구해봅시다.
A. 프로젝트의 성공확률은 60%이고 예상 수익은 1억원
B. 프로젝트의 실패확률은 40%이고 예상 손실은 3천만원
- 기대값 = (0.6)(1) + (0.4)(0.3) = 0.48억원
고객생애가치(CLV)도 구해봅시다.
고객이 평균적으로 매년 50만원을 소비하고, 평균 유지기간이 5년, 매년 고객 이탈률이 20%라고 가정합니다.
- 1년 후 수익: 500,000 * (1 - 0.2)^0 = 500,000
- 2년 후 수익: 500,000 * (1 - 0.2)^1 = 400,000
- 3년 후 수익: 500,000 * (1 - 0.2)^2 = 320,000
- 4년 후 수익: 500,000 * (1 - 0.2)^3 = 256,000
- 5년 후 수익: 500,000 * (1 - 0.2)^4 = 204,800
- CLV = 500,000 + 400,000 + 320,000 + 256,000 + 204,800 = 1,680,800
7. 상관계수 확인하기
모델링 프로젝트에서 탐색적 데이터 분석이라 하면 각 Feature간의 상관관계를 조사해보는 것은 빼놓을 수 없습니다.
각 Feature가 양의 상관관계인지, 음의 상관관계인지도 확인해야 합니다. 만약 각 변수들이 선형적인 관계를 가지고 있지 않아 상관계수가 0에 가깝다면 더이상 유용한 측정 지표가 아닙니다.
구분 | 영문 | 상세 |
상관계수 | Correlation | 수치적 변수들 간에 어떤 관계가 있는지를 나타내는 측정량 |
상관행렬 | Correlation matrix | 각 변수들간의 상관관계를 나타낸 표를 의미 |
산점도 | Scatterplot | X축과 y축이 서로 다른 두개의 변수를 나타내는 도표 |
피어슨의 상관계수는 특잇값에 영향을 받는다.
피어슨 상관계수는 평균과 표준편차를 사용하여 계산됩니다. 평균과 표준편차은 특잇값에 따라 크게 변화하기 때문에 이를 기반으로 하는 상관계수 또한 극단값의 영향을 같이 받게 됩니다. 그래서 상관계수를 확인할 떄는 극단값의 영향을 염두해야 합니다.
이러한 문제를 위해 파이썬에서 사용하는 모듈이 있는데, 사이킷런의 Covariance 모듈 입니다.
이 모듈은 공분산 행렬을 계산하는 다양한 함수를 제공하고 있고, 그 중에서도 이상치의 영향을 최소화한 공분산 행렬을 구해주는 클래스가 MinCovDet 입니다. 사용법은 문서를 참고하여 사용해보면 좋을 것 같습니다.
from sklearn.covariance import MinCovDet
# MinCovDet 문서 참고
# https://scikit-learn.org/stable/modules/generated/sklearn.covariance.MinCovDet.html
8. 두 개 이상의 변수 탐색하기
평균과 분산과 같이 하나의 변수만 다루면 일변량 분석, 상관계수와 같이 두개의 변수를 다루면 이변량 분석, 셋 이상의 변수를 다루면 다변량 분석이라고 합니다. 즉 아래 그래프와 같이 X축과 Y축 그리고 색의 명도 & 채도의 차이를 통해 셋 이상의 변수를 비교 분석할 수 있습니다.
구분 | 영문 | 상세 |
분할표 | Contingency Table | 두 가지 이상의 범주형 변수의 빈도수를 기록한 표 |
육각형 구간 | Hexagonal Binning | 두 변수를 육각형 모양의 구간으로 나눈 그림 |
등고 도표 | Contour Plot | 등고선과 같이 두 변수의 밀도를 선으로 표시한 도표 |
바이올린 도표 | Violin Plot | 상자그림과 비슷하지만 밀도 추정을 보여주는 도표 |
EDA는 위치와 변이와 같은 단순 추정부터 두개의 변수간의 관계를 살피는 상관관계, 다변량 간의 관계를 살펴보기 위한 다양한 시각화 기법까지 살펴보았습니다. 모든 데이터 분석의 기초이나 잘 알아두고 있다면 분석에 많은 도움이 될 것 같습니다. 감사합니다.
해당 내용은 아래 책을 공부하면서 기록하였으므로 자세한 내용은 책의 내용도 참고하시면 좋을 것 같습니다.