이 글은 통계학을 공부하는 과정에서 왜 딥러닝에서 통계가 필요하고 어떤 개념들이 데이터 분석/딥러닝 실무에서 중점적으로 필요한지 개인적으로 정리하기 위한 목적으로 쓴 시리즈 글입니다.
(사실 데이터 분석을 실무를 경험했지만 딥러닝에서는 실무를 경험해보지 않았기 때문에 딥러닝 관점에서는 사실 공부하면서 중요하다고 생각한 개념들이라고 봐주시면 좋을 것 같습니다.)
나조차도 딥러닝 공부하겠다고 그동안 통계공부를 도전해 왔었는데 수학 문제집에서 “집합” 부분만 너덜너덜한 것처럼 항상 평균과 분산, t분포, 중심극한 정리가 공부하다가 이게 앞으로 내가 공부하는 과정에서 왜 필요한지에 대해서 의문을 가져왔는데 해답을 찾지 못해 항상 지지부진했었는데 다시 통계를 공부하기 시작한 시점에서 이를 정리해보려고 합니다.
대푯값
수학의 정석의 집합처럼 매번 통계에서 가장 먼저 배우는 게, 평균/분산/최대/최소/4 분위 수 등이다. 우리는 왜 이런 것들을 먼저 배울까?
하나의 예시를 들어보자. 한 대학교의 컴퓨터 공학과 교수님이 1학기 강의를 운영하게 되었다. 수강에 신청한 학생들이 100명 정도 되고, 그 학생들에 대한 정보를 모두 가지고 있다고 하자. 수업 운영을 잘하기 위해 이 학생들을 파악하려면 어떤 것들이 궁금할까?
- 각 학생들의 성적 평점이 궁금할 수 있고, 각 학생들의 지각 비율을 볼 수도 있다.
또 하나의 예시를 들어보자. 한 명의 스타트업 PM으로써, 지난 한 달간 일별로 각각 방문한 유저들의 id를 데이터로 가지고 있다고 하자. 이 데이터만으로 우리는 우리 서비스가 잘되고 있는지 파악하려면 어떻게 해야 할까?
- 일별/주간로 몇 명의 유저가 들어왔는지, 재방문한 유저의 비율들을 볼 것 같다.
이처럼, 수많은 데이터들 속에서 정보를 얻기 위해서는 데이터 하나하나를 비교해 가는 것이 아니라 더 효율적인 방법이 필요했고, 가장 간단한 방법으로 단 하나의 숫자만 뽑아서 보는 것이 바로 “대푯값”이다.
직관적으로만 봐도 누군가에게 어떤 설명을 할 때 엑셀을 켜놓고 데이터 하나하나 짚어주면서 설명을 하는 게 아니라 그래프가 더 설명하기 쉽고, 단 하나의 숫자만 뽑아서 설명하는 것이 더 쉬운 것과 같은 이치이다.
그래서, 대푯값이라는 개념이 필요하고 흔히들 많이 사용되는 예시로는 평균/분산/최대/최소/4 분위 수 등이 있다.
대푯값의 목적은 우리가 큰 데이터로부터 그 데이터가 어떤 특징을 가지고 있는지 쉽게 이해할 수 있도록 도와주는 숫자라고 이해하면 좋다.
따라서, 대표값의 공식도 물론 중요하겠지만 이 수치를 봤을 때 우리는 어떤 정보를 얻을 수 있을지를 중심으로 배우는 것이 좋을 것 같다.
각각을 어떻게 구하는지에 대해서는 사실 어느 통계책에서 봐도 다 나와있기 때문에 이걸 어떨 때 필요로 하고 우리는 숫자로부터 어떤 정보를 얻을 수 있을지에 대해서만 정리하려고 한다.
1) 평균
- 대부분의 분포가 평균을 가장 많이 사용한다. 앞서 배운 것처럼 정규분포에서 종모양의 가장 확률이 높게 나오는 x값이 평균이다.
- 평균 자체가 일상생활에서 가장 많이 사용되기 때문에 누구나 직관적으로 이해하기 쉬운 대푯값이라고 볼 수 있다.
2) 중앙값, 최빈값
- 평균값과 비슷하게 이 집단을 가장 대표하는 숫자 하나를 뽑는 방식 중 하나라고 볼 수 있다.
- 중앙값은, 각 데이터들을 작은 것부터 큰 순으로 나열했을 때 정중앙에 있는 값이다.
- 평균값이 집단을 대표하기 어려운 상황이 발생하는데 예시로 들어보면 다음과 같다.
- 총 6명의 수학점수 분포가 (10,10,10,10,10,100)이라고 하면 이때 수학점수의 평균은 25점이다. 중앙값은 10이다.
- 이런 예시처럼 평균은 매우 크거나 작은 숫자(outlier)가 계산에 들어감으로써 전체 대푯값에 영향을 주는 상황에서 의미 있는 정보를 주지 못하기 때문에 중앙값을 사용하는 경우도 있다.
- 평균값이 집단을 대표하기 어려운 상황이 발생하는데 예시로 들어보면 다음과 같다.
- 최빈값은 가장 많은 빈도로 나온 숫자로 이 또한 중앙값의 사례처럼 대푯값에서 의미있는 정보를 주지 못할 경우를 대비해서 활용하는 지표이다.
- 실무에서는 셋다 구해서 비교하면서 그래프의 모양을 추정하는 경우도 책에서는 나오는데, 요즘 같으면 그냥 그래프를 그릴 것 같다.
3) 분산
- 수학적 의미로는 실제 데이터와 평균값의 차이를 제곱한 후에 더한 값인데 직관적인 의미로는 평균을 기준으로 얼마만큼 떨어져 있는지를 볼 수 있는 수치이다.
- 쉽게 말하면 평균 중심으로 모여있는지 아니면 퍼져있는지를 볼 수 있다.
- [확률 분포 관점] 정규분포를 기준으로 보면, 같은 평균을 가진 정규분포더라도 분산이 크면 평균 중심으로 퍼져있기 때문에 평탄한 그림을 그릴 것이고, 분산이 작을수록 뾰족한 모양을 그릴 것이다. 아래 파란색은 분산이 0.3인 정규분포 그래프이고, 빨간색 그래프는 분산이 0.5인 정규분포 그래프이다.
- [딥러닝/머신러닝 모델 관점] 그렇다면 딥러닝/머신러닝 모델에서 분산은 어떤 것을 의미할까?
- 딥러닝 모델이나 머신러닝 모델은 사람이 할 수 있는 업무를 기계가 대신 학습하여해주는 모델인데, 주로 어떠한 것을 예측, 분류하는 작업을 한다.
- 여기에서 분산이란 학습데이터를 통해 학습한 모델이 내놓는 예측값(혹은 정답)과 예측의 평균값의 차이를 이용하여 계산하는데 처음에는 굳이 왜 예측의 평균값의 차이를 계산하지?라는 생각이 들어서 많이 찾아보고 생각도 해봤는데, 그 이유는 분류 문제에서 각 예측값들에 대해서 답을 잘 내는지를 본다는 관점으로 보면 될 것 같다.
- 상대적인 차이 개념으로도 보면, 트레이닝 셋에서의 분산과 테스트 데이터셋에서의 분산에서 상대적으로 테스트 데이터셋의 분산이 크면 이것은 기계가 트레이닝 데이터에 대해서만 맞춰서 배웠다(오버피팅 되었다.)라고 본다.
- 딥러닝 모델이나 머신러닝 모델은 사람이 할 수 있는 업무를 기계가 대신 학습하여해주는 모델인데, 주로 어떠한 것을 예측, 분류하는 작업을 한다.
4) 사분위수
- 위의 중간값, 최빈값, 평균은 사실 단 하나의 숫자로 데이터를 대표하기 때문에 충분히 많은 정보를 제공하고 있지 않고 생략된 정보도 많을 것이다.
- 따라서 최대한 데이터를 더 자세히 들여다보기 위해서, 이때 전체 데이터를 중간으로 나누는 게 아니라 4 분할하는 것을 4 분위 수라고 한다.
- 중앙값과 동일하게 전체를 작은 순으로 정렬한 후에, 25%에 해당하는 수를 1 사분위수, 75%에 해당하는 수를 3 사분위수로 정한다.
- 1사분위 수와 3사분위 수 사이의 구간을 많이 활용하는데, 그 이유는 아래 그림을 보면 쉽게 이해할 볼 수 있다.
5) 왜도와 첨도
- 앞서 정규분포를 배웠는데, 사실 대부분의 통계검정은 정규분포를 가정해 두고 다양한 방법론들을 활용한다. 하지만 만일 그 분포가 정규분포를 이루지 않는다면? 그런 접근법들이 다 무용지물이다.
- 그렇기 때문에 실제로 그 분포를 따르는지 확인해야 하는데 가장 간단한 방법이 한번 분포를 그려보는 것이다.
- 분포의 모양이 너무나 명확하게 정규분포가 아니라면? 정규분포를 활용한 검정 방식들을 패스하면 된다.
- 사람이 보기에 애매하다면? 이때 우리는 왜도와 첨도라는 수치를 활용한다.
- 왜도 : 중간 대칭이 아니라, 좌측으로 치우치거나 우측으로 치우친 경우를 의미한다.
- 첨도 : 뾰족한 정도를 의미하며, 정규분포의 첨도를 0이라고 한다.(일반 수식은 정규분포의 첨도는 3인데 주로 3을 빼서 0으로 만들어 주곤 한다.)
EDA와 데이터 시각화
Exploratory Data Analysis의 약어로 데이터를 다양한 각도에서 관찰하고 이해하는 모든 과정을 말한다. 여기서는 간략하게 왜 하는지에 대해서만 설명하고 이후에 실제 코드를 통해서 설명하는 글을 별도로 써보려고 한다.
데이터 분석의 목적은 크게 2가지로 나눌 수 있다.
1. 인사이트 도출 : "쿠팡"에서의 유저 구매 데이터가 있을 때 인기상품은 무엇인지, 자주 사는 유저가 누구인지 등의 특징을 뽑아내는 것
2. 모델링/통계검정을 위한 분포 특징 찾기 : 세상에는 수많은 분포들이 있는데 그 분포들을 하나하나 다 체크할 수는 없을 것이고 약간의 전제와 힌트를 통해서 적합한 분포들을 찾아내는 과정에서 EDA가 필요하다. 모델링에 있어서도 어떤 모델을 세울지, 해당 모델에 어떤 변수를 넣으면 좋을지에 대한 작업도 이 과정에서 진행한다.
EDA에서는 위 목적을 이루기 위해서 데이터들을 훑어보는 작업들을 하는데 크게 4가지 정도의 작업을 한다. 핵심은 outlier와 skew(치우친 그래프인지) 임을 확인하고, 전체 데이터가 어떤 성격을 가지는지를 봐야 한다.
단순히 EDA를 강연이나, 책에서 보면 파이썬 코드와 그래프를 보는 간단한 작업으로 보이지만 실제로 EDA를 해보면 생각보다 outlier와 잘못 측정된 데이터들이 많이 나오고 이에 대한 원인을 파악하고 다시 데이터를 쌓는 과정(주로 개발자들과 함께 원인 찾기..)이 들어간다.
- 이상치 제거(outlier) : 분포를 잘 파악하거나 통계량을 측정하려면 이상치를 제거하고 측정하는 것이 정확한 결과를 얻을 수 있다.
- 개별치 측정 : 엑셀에 표를 하나씩 살펴보면서 특이한 점은 없는지 주로 어떤 데이터를 가지는지 본다. 이때 혹시나 특정 표에 값이 없는 경우가 있는지를 살펴보고 그 원인을 파악해야 한다.
- 대푯값 측정 : 위에서 구한 대푯값들을 측정한다.
- 시각화를 통한 패턴 파악 : 여기서는 시각화를 통해서 어떤 분포를 가지고 있는지 특징을 찾아보는 과정이다.
- 변수간의 관계 파악 : 상관관계 분석 등 변수간에 어떤 관계들이 있는지에 대해서 살펴보는 과정이다.
이를 통해 우리가 얻을 수 있는 정보는 아래와 같다.
- 모델링에 활용할 변수 후보군 뽑기
- 검정에 활용할 분포 후보군 뽑기
- 개별치 측정, 대푯값, 시각화를 통한 데이터 이해
딥러닝에서도 이런 EDA 과정이 필요할까?
딥러닝 모델 설계에 있어서 EDA가 가지는 주요 목적과 수행하는 분석은 6가지 정도로 정리해 볼 수 있을 것 같다.
1. 데이터 이해 : 기본적으로 데이터셋이 가지고 있는 특징에 대한 이해를 돕는 것으로 일반적인 EDA의 특징과 동일하다.
2. 결측치 및 이상치 탐색 : 결측치나 이상치가 있는 경우 그 처리 방법을 결정하기 위해 확인해야 합니다.
3. 불균형 확인 : 특히 분류 문제를 푸는 모델의 경우 클래스 불균형이 있는지 확인하는 것이 필요하다.
4. 특성 엔지니어링 아이디어 생성 : 모델에서 활용할 변수들을 뽑아내는 과정이고, 여기에도 PCA 등의 개념이 들어가는데 이 부분 역시 후반에 정리할 예정이다.
5. 모델 성능 벤치마크 설정 : 모델에 대한 성능을 어떤 지표로 측정할지로 모델링 전에 데이터 특성을 보며 판단해 볼 수 있다.
6. 전처리 방식 아이데이션 : 모델링이나 데이터 분석에 있어서 데이터들을 어떻게 처리할지에 대한 이야기로 정규화, 표준화 등이 이에 속한다. 이 역시도 이후 글에서 다뤄보려고 한다.
'데이터 분석, 통계 > 통계학 개념 정리' 카테고리의 다른 글
딥러닝/데이터 분석을 위한 통계 - 6편) 회귀분석 (1) | 2023.10.17 |
---|---|
딥러닝/데이터 분석을 위한 통계 - 5편) 가설 검정, A/B 테스트, 표본분포 (1) | 2023.10.17 |
딥러닝/데이터 분석을 위한 통계 - 4편) 카이제곱분포, t분포, F분포, ANOVA (1) | 2023.10.17 |
딥러닝/데이터 분석을 위한 통계 - 3편) 정규분포와 중심극한정리 (0) | 2023.10.16 |
딥러닝/데이터 분석을 위한 통계 - 1편) 확률변수, 확률분포 (1) | 2023.10.14 |