본문 바로가기
Data Science

[Data Science]EDA란(1)

by NoiB 2023. 6. 26.
반응형

이번에는 본격적인 데이터 분석의 전처리 과정이라고도 할 수 있는 EDA에 대해서 한 번 알아봅시다.

 

EDA의 정의

EDA(Exploratory Data Analysis) : 탐색적 데이터 분석

보통 EDA라는 약자로 부르는 이 과정은 본격적인 데이터 분석에 앞서서 현재 내가 가지고 있는 데이터를 다각적으로 관찰하고 탐색하는 모든 과정을 말합니다. 시각화를 해서 데이터의 분포를 살펴볼 수도 있고 결측치의 유무, 중복값의 유무, 이상치 등등 결과를 내기 위한 분석에 앞서서 데이터 그 자체의 탐색 및 점검 단계라고 보면 되겠습니다.

 

EDA를 하는 이유

기본적인 이유는 추후에 진행할 데이터 분석에 있어 분석 결과에 도움이 되지 않는 것들을 미리 방지하고자 함입니다. EDA는 보통 데이터 수집 이후에 바로 진행하는 과정으로써, 수집된 데이터에 문제가 없는지, 어떤 식으로 분석을 진행하면 좋을지를 미리 체크하는 과정이라고 보시면 됩니다.

 

예를 들어 어떤 센서로부터 측정되는 값의 평균을 구해 해당 평균값을 임계치로 설정하여 임계치가 넘었을 때만 동작하는 기계를 만들었다고 생각해보겠습니다. 그런데 센서값을 수집하는데 대부분 10, 11, 9 이런 식의 값들만 들어오다가 센서 이상으로 갑자기 1000이라는 값이 들어왔다고 가정해 보겠습니다. 이 경우 평균치는 257.5가 되는데 그 이후로 계속 10, 12 이런 값들이 들어온다면 1000이라는 값이 이상치였음에도 불구하고 더 이상 정상적인 상황에 기계가 동작하지 않게 될 것입니다. 이럴 때 미리 데이터의 분포를 확인해 보고 혼자서 이상한 값이 나와있는 데이터를 이상치로 간주하고 삭제를 해버린다면 위와 같은 문제를 미연에 방지할 수 있을 것입니다.

 

저도 몇 번 했던 실수였는데 데이터 크롤링을 하면서 에러가 날 경우 값이 아예 수집이 안되거나 중복된 값이 계속 추가되는 경우가 있습니다. 이럴 때 결측치나 중복치를 고려하지 않고 결과를 도출한다면 해당 결과를 제대로 된 분석 결과라고 말할 수는 없을 것입니다.

 

위와 같이 EDA를 진행하며 데이터의 이상 유무를 확인할 수도 있지만, 수집한 데이터의 특성을 보면서 어떤 식으로 특성간의 유기적인 관계를 찾았거나 분석에 있어 필요하지 않은 특성은 제거하는 등의 방법을 통해 데이터 분석을 진행하는 틀을 잡을 수도 있습니다. 예를 들어 내가 A라는 특성만 있으면 결과 도출도 보고서도 쉽게 작성할 수 있을 것 같은데 하필 수집한 데이터에는 A 특성이 없어서 골치가 아픈 상황이라고 해봅시다. 그런데 이미 수집한 데이터에 있는 B, C, D 특성을 통해 A특성의 근사치를 구할 수 있다면 그냥 버려야 했던 데이터를 살려서 쓸 수 있겠죠(물론 이렇게 좋은 상황은 잘 없겠지만요).

 

말이 길어졌지만 결국 EDA는 데이터 자체의 이상 유무를 확인함과 동시에 어떻게 데이터 분석을 하면 되겠구나, 좀 더 발전해서 이 데이터로 이런 결과도 도출할 수 있겠는데?를 파악하는데에 중요한 과정이라고 할 수 있겠습니다.

 

Kaggle을 통한 실습

이번에는 전세계의 Data Science에 흥미를 둔 사람들의 온라인 경쟁 사이트이자 커뮤니티인 Kaggle의 대표적인 예제, 타이타닉 생존 예측 예제를 통해 EDA에 대해 한 번 알아보겠습니다. 아는 분들은 아시겠지만 Kaggle은 Codeforce 같은 온라인 대회가 있는 플랫폼입니다. 다만 알고리즘 대회가 아닌 ML/DL 모델 성능을 겨루는 대회죠. 대회에 참여해 자신이 설계한 모델의 예측 결과를 제출하여 스코어를 통해 랭킹을 매기기도 하고, 사람들끼리 어떤 주제에 대해 토론을 하기도 하는 등의 캐글 활동을 활발히 하다 보면 사용자의 등급(Novice, Contributor, Expert, Master, Grandmaster의 5개 등급 존재)이 올라가는 캐글 활동을 장려하는 시스템도 있습니다(참고로 구인 시, 캐글 Expert 이상 등급을 우대하는 기업도 있습니다).

 

그래서 이번에는 ML입문자들에게 추천하는 캐글 예제 중 하나인 타이타닉 생존자 예측 예제에서 EDA를 한 번 진행해볼까 합니다. 저도 잘 못하기 때문에 분석이 이상하거나 놓치는 부분이 있을 수 있습니다. 언제든지 댓글로 지적 부탁드리겠습니다.

 

https://www.kaggle.com/competitions/titanic

 

Titanic - Machine Learning from Disaster | Kaggle

 

www.kaggle.com

직접 참여해보고 싶으신 분들은 Kaggle 사이트에 접속해서 계정을 생성하고 위의 타이타닉 링크로 들어가 Join Competition 버튼을 누르시면 됩니다.

저는 이미 타이타닉 예제에 참여중이라 사진은 다른 사진으로 대체했습니다.

예제에 대한 설명이나 캐글 대회에 참여하는 방법이 좀 더 궁금하신 분들은 사이트에 들어갔다면 overview 탭의 내용을 찬찬히 읽어보시면 좋습니다(글 분량 상 저는 스킵하겠습니다). 다음에 기회가 되면 캐글 사용법을 따로 포스팅하도록 하겠습니다. 바로 Data 탭으로 넘어가서 제공되는 Data가 어떤 형태를 하고 있는지 확인해 봅시다.

데이터는 traing set, test set의 두 세트가 주어집니다. 우리는 트레이닝 셋을 이용해 모델을 학습시키고 테스트 셋을 이용해 모델의 예측값을 제출해야 합니다. 지금은 예제다 보니 이런 식으로 트레이닝, 테스트를 나눠서 제공하지만 예제가 아닌 실제 문제를 예측하실 때에는 스스로 훈련, 검증, 시험 데이터를 다 나눠서 사용하게 될 겁니다(이 내용도 다음에 자세히 소개해드리겠습니다). 함께 들어있는 gender_submission.csv는 제출 파일의 양식 참고용이라고 생각하시면 되겠습니다.

 

다음으로는 데이터의 열(칼럼)을 살펴봅시다. column, variable, feature 등등으로 부릅니다만, 요는 데이터의 정보를 담고 있는 것이라고 생각하시면 됩니다. 예를 들어 서울에 사는 사람의 정보라는 데이터가 있다면 칼럼은 주소, 이름, 키, 체중, 직업 등등이 되겠죠. 주어진 데이터의 칼럼을 살펴보면,

이 데이터는 생존 여부, 티켓 클래스, 성별, 나이, 가족 관계, 티켓 번호, 요금, 객실 번호, 탑승 항구의 칼럼을 가지고 있습니다. 우리는 생존 여부를 예측하는 것이 목적이기 때문에 생존 여부 칼럼을 제외한 다른 특성들로 이 사람이 생존했는지 안 했는지를 예측하게 되겠죠. 이런 정보 외에도 스크롤을 내리면 Data Explorer 박스에서 데이터의 정보를 더 자세하게 볼 수 있습니다. 결측치가 있는지, 고유값은 얼마나 있는지, 평균값은 얼마인지 등등... 하지만 EDA 실습이니 이번 포스팅에서는 직접 해보도록 하죠.

 

일단은 머리로만 한 번 해볼까요? 어떤 특성이 생존 여부에 영향을 미칠까요? 먼저 티켓 클래스입니다. 1st, 2nd, 3rd의 티켓이 있네요. 아직 요금은 확인하지 않아서 잘 모르겠지만 보통 1 > 2 > 3 순으로 가격이 비싸겠죠? 그럼 등급이 높은 티켓을 가진 사람은 부유층이니까 상대적으로 살 가능성이 높으려나? 노블리스 오블리제라고 낮은 등급 티켓부터 탈출할 수 있도록 배려했으려나? 등등을 생각해 볼 수 있겠네요.

 

성별은 어떨까요? 남성들이 여성들보다 신체적으로 강인할 가능성이 높으니 생존 가능성이 더 높을까요? 아니면 여성들과 아이들을 먼저 살리기 위해 끝까지 남아있었을까요? 한 가지 특성에서도 여러 가지로 의견이 갈릴 수 있겠네요.

 

나이는 어떨까요? 아무래도 아이들이 재해에 노출되었을 때 생존할 가능성이 성인들보다 낮을 수 있겠죠. 하지만 한정적인 크기의 구명보트가 있다면 아이들을 훨씬 많이 태울 수 있으니 생존율이 더 높을 수도 있습니다. 이제 슬슬 머리가 아프기 시작하네요.

 

다음은 가족 관계네요. 얼핏 봤을 때는 사실 어떻게 써먹어야 할지 잘 모르겠는 특성입니다. 형제자매, 부부/부모, 아이 등으로 나눠서 두 가지의 특성이 존재하는데 데이터의 표현이 어떤지, 누가 누구 가족이라는 건지 데이터를 직접 확인하기 전에는 뭐가 뭔지 감을 잡기 힘드네요. 일단은 넘어갑시다.

 

티켓 번호입니다. 어떠려나요. 어차피 티켓 번호는 어떤 약속에 따라서 순서대로 부여되는 것일 텐데 큰 의미가 있나 잘 모르겠습니다. 일단은 별로 쓸모가 없어 보이네요.

 

요금입니다. 많은 돈을 지불한 쪽이 상대적으로 부유층일 것 같으니까 돈을 많이 낸 사람이 살아남지 않았을까? 그러면 티켓 등급이랑 묶어서 생각해야 하나? 묶어서 생각할 거면 굳이 요금을 예측에 사용할 필요 있나? 등등 생각이 많아집니다.

 

객실 번호입니다. 객실도 따져보면 등급이 분명히 있을 텐데, 혹은 객실 번호로 위치를 구분할 수도 있을 것 같고, 어떤 번호가 비싼 객실인지 알 방법도 있지 않을까? 모든 사람이 다 객실을 이용할까? 이런저런 생각을 해볼 수 있겠죠.

 

탑승 항구입니다. 탑승한 항구가 큰 의미가 있을까? 지역에 따른 빈부의 정도를 파악할 수 있을까? 생존 여부를 예측하는 데에 탑승 항구가 어딘지가 그렇게 중요할까? 등의 생각이 떠오르네요.

 

역시 머리로만 따져봤을 때는 이럴 때는 이거 같고, 저럴 때는 저거 같고 등등 뾰족한 수가 떠오르지 않습니다. 이런 부분을 해소하려면 직접 데이터를 좀 뜯어보는 게 좋겠죠. 데이터의 분포도 보고, 값도 보고, 다른 데이터와 묶어서 생각해보기도 하는 등의 과정이 필요할 것입니다.

 

하지만 글이 좀 길어지는 것 같아서 다음 포스팅에 이어서 해야 할 것 같네요. 긴 글 읽어주셔서 감사합니다.

반응형

'Data Science' 카테고리의 다른 글

[Data Science]데이터 사이언스란  (0) 2022.11.11