[AIB]Note111~2 EDA, Feature Engineering

머니헌터·2022년 3월 2일
0

EDA와 Feature Engineering에 관한 정리

1. EDA

1.1 EDA는 무엇의 줄임말인가?

EDA는 Exploratory Data Analysis의 줄임말로 탐색적 데이터 분석이라고 한다.

1.2 EDA는 왜 하는가?

Data를 이해하고 관리 및 활용하기 쉽게 파악하게 해준다.
통계적 기법, 시각화(그래픽) 등을 활용해 수집한 데이터 변수들 사이의 분포, 상관관계를 파악함으로써 데이터를 통찰하는 과정이다.

1.3 EDA의 특징

데이터 분석에 있어서 (아주아주) 중요한 초기 분석을 의미한다.
Garbage in, Garbage out(GIGO): '쓰레기🗑가 들어가면 쓰레기🗑가 나온다'는 뜻으로. 컴퓨터는 우리를 너무너무 잘 믿기 때문에 우리가 입력해주는 값을 의심없이 받아들인다. 그렇기에 우리가 원하는 값을 기대하기 위해서는 '좋은' 결과를 낼 수 있는 값을 넣어주어야 한다. 콩 심은데 콩나고 팥 심은 데 팥 난다

1.4 EDA의 방법

크게 두 가지로 나뉜다.
Graphic: bar, histogram, scatter plots 등등의 시각적으로 쉽게 볼 수 있게 표현한다.
Non-Graphic: 위에서 언급한 방식을 사용하지 않고 통계치를 보고 확인하는 방법(평균, 최빈값, 중앙값, 극대,극소값 등등)

1.5 Python에서의 EDA

Pandas를 활용해 Dataframe(이하 'df')으로 확인할 수 있다.
df의 컬럼명, shape, 결측치 등등을 쉽게 확인할 수 있다. (Non-Graphic)
bar, box, his, scatter 등을 활용하여 시각화를 통해 확인할 수 있다. (Graphic)

2. Feature Engineering.

2.1 Feature Engineering은 무엇인가?

Feature Engineering은 도메인(산업군)에서 필요로 하는 지식과 개개인의 창의성을 토대로 df에 존재하는 Feature들을 재가공하여 새로운 Feature를 만드는 것. (여기서 말하는 Feature는 df 상의 column과 의미가 같다!)
즉, Feature engineering은 수학, 통계 및 도메인 지식을 활용해서 원초적인 상태의 data(=raw data)에서 유용한 특징을 추출하는 과정이다.

2.2 왜 하는가?

데이터 사이언티스트가 가장 많은 시간을 할애하는 일! 60%는 Cleaning & Organizing data(데이터의 정제) 20%는 Collecting data sets(데이터의 수집)에 사용한다고 한다.
현실의 data는 매우 복잡하고, 다양하게 있다. 이를 정제하지 않고 바로 model에 넣게 되면.... 앞서 언급하였던 Garbage in, Garbage out.. 이 일어나게 된다. 그렇기에 잘 정제하고 재구성해서 내가 원하는 결과를 도출할 수 있어야 한다. Feature Engineering이 데이터를 정제하고 재구성을 도와준다.

2.3 그럼 어떻게 하는가?

2.3.1 자료형 통일

python에는 다양한 자료형이 있다. object(쉽게 생각하면 문자열), integer(정수형), float(실수형), list(리스트형) 등등 이러한 자료형 중에 내가 필요로 하는 것들의 형태를 통일해준다.
무슨 말이냐면 object와 integer은 df에서 합치거나 곱할 수 없다. 특히 우리 눈으로 보기에는 1,234로 되어 있어도 컴퓨터는 문자열, object로 인식을 한다. 그렇기에 숫자 형태로 바꿔주어야 Feature끼리 더하거나 빼거나 곱하거나 등등을 할 수 있게 된다.

2.3.2 결측치 제거 혹은 대체

친구가 나에게 돈 1,000원을 주고 '매점가서 빵, 우유, 껌을 사오고 남은 돈은 너 가져'라고 한다. 그럼 나는 할 수 있나? 못한다. 왜? 1,000원으로 빵 하나 사기도 간당간당하기 때문이다. 인플레이션으로 인한 화폐가치 하락
결측치(NaN, None 등)이 있는 Feature는 정상적으로 계산할 수 없다. 왜냐하면 위와 비슷한 상황인데 계산 할 게 없는데 계산하라고 하니... 얼마나 복장이 터지겠는가. (0은 NaN, None 과는 다르다. 0은 0이고, NaN, None은 아예 없는 값. 즉, 0도 아닌 값이다.)

  • Python에서는 Na, Null, NaN 모두 같은 의미(이것도 추후 정리!)
    그래서 (1) 결측치를 0으로 바꿔주거나. (2) 결측치가 있는 컬럼 혹은 행을 삭제해준다. (함수는 추후 pandas 정리할 때 정리!)
    꼭 0이 아니라 다른 것(예, 1, 없음, 특정한 값 등)으로도 대체를 해줄 수 있다. 하지만 0 말고 다른 것으로 대체를 해줄 때에는 특정한 목표를 가지고 대체를 해준다. 값을 바꿔주어야 하는 이유가 있다든지..

2.3.3 그렇게 하고 나면?

그렇게 자료형을 통일해주고, 결측치를 제거 혹은 대체를 하고 나면 이제 요리사 마음대로다. 지지고, 볶고, 튀기든, 삶든 내가 원하는 대로 column을 요리(더하기, 빼기, 곱하기 등)해주면 된다.

profile
그냥 저냥 살고 있어요~

0개의 댓글