Exploratory Data Analysis 란

2021-06-20

.

Data_Preprocessing_TIL(20210620)

[학습자료]

패스트캠퍼스 온라인 강의 “파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online.” 를 공부하고 정리한 내용입니다.

URL : https://fastcampus.co.kr/data_online_preprocess

[EDA 개요와 기초개념]

  • Exploratory Data Analysis(탐색적 데이터 분석, EDA) 개요

그래프를 통한 시각화와 통계분석 등을 바탕으로 수집한 데이터를 다양한 각도에서 관찰하고 이해하는 방법을 말한다.

어떤 데이터가 있으면 시각화나 통계분석을 하고 이 결과를 바탕으로 인사이트를 얻는데 이 인사이트 자체를 데이터 분석 결과로도 활용할 수 있고 머신러닝을 해야한다면 이 인사이트를 바탕으로 데이터를 전처리를 하던가 특정 모델링을 하던가 할 것이다.

  • EDA의 필요성과 효과

1) 데이터를 여러 각도에서 살펴보면서 데이터의 전체적인 양상과 겉으로는 보이지 않던 현상을 이해할 수 있게 해준다.

2) 문제정의 단계에서는 발견하지 못한 패턴을 찾아내고, 이를 바탕으로 데이터를 전처리를 하고, 모델에 관한 가설을 추가하거나 수정할 수 있다.

머신러닝 뿐만 아니라 대부분의 데이터 분석은 결국에는 가설검정과 가설검증을 이용한 결과도출을 하는 것이다. 가설검정에서 중요한것은 어떤 가설을 수립하느냐 일것이다. 그래서 EDA를 잘 했을때는 더 좋은 가설을 뽑을 수 있다는 점에서 중요하다.

결론적으로 EDA는 본격적인 데이터 분석에 앞서 구체적인 분석계획을 수립하는데 도움이 된다.

  • EDA 구성

EDA는 가설(질문) 수립과 검정의 반복으로 구성된다.

여기서 가설검증은 통계적인 가설검증도 있겠지만 단순히 데이터를 확인해서 가설을 검증하는 경우도 있다.

1

  • 가설수립 및 검증 예시

1) 문제상황 : 어떤 보험사에서 고객의 이탈이 크게 늘고 있어서, 이탈할 고객을 미리 식별하는 모델을 만들고, 이탈할 것이라 예상되는 고객을 관리해서 이탈율을 줄이고자 한다.

2) 가장먼저 선행되어야 하는 작업은 고객의 이탈원인을 파악하는 것이고, 파악된 원인을 모델의 피쳐로 사용해야 한다.

2

보험 가입기간이 긴 고객일 수록 이탈율이 줄어들거라는 것은 순전히 보험업계의 도메인 지식으로 가설을 정한 것이다. 따라서 데이터 분석에 있어서 도메인 지식도 상당히 중요하다고 할 수 있다.

이탈하지 않은 고객의 가입기간 분포와 이탈한 고객의 가입기간 분포를 박스플롯으로 파악한 다음에 차이가 있으면 보험가입기간을 바탕으로 신규고객들에게 좀더 혜택을 제공한다던가 대책을 수립하면 된다.

고객여정이란 어떤 고객이 보험에 가입해서 했던 일련의 활동들을 말한다. 예를들어서 보험가입을 하고, 상담을 하고, 보험금을 타고 이런 것들을 말한다. 고객여정이라는게 애매모호하기 때문에 구체화 할 필요가 있다. 예를들어서 주요고객들의 여정이라는게 어떤게 있는지 정의를 해야하고, 주요 고객여정에 따른 이탈률 관계를 시각화하고 파악을 해야한다.

  • EDA 프로세스

STEP 1) 분석 목적 및 변수확인

대략적으로 문제를 정의한 다음에 변수별 의미를 코드북과 도메인 지식을 통해 확인한다.

정답이 없고 상당히 지루한 작업이기 때문에 건너뛰기 좋은 부분이나 변수의 의미를 정확하게 파악하지 못하고 분석을 한다면 좋은 결과를 얻을 수 없다.

결론적으로 분석 목적이 정확히 어떤건지 구체화 시키고, 각 변수가 가진 의미가 무엇인지 확실하게 집고 넘어가는 것이 중요하다.

TODO 리스트

1) 대략적인 문제정의

2) 변수별 의미를 코드북 및 도메인 지식을 통해 확인

STEP 2) 데이터 전체적으로 살펴보기

데이터를 통계적으로 확인한다기 보다는 데이터를 전체적으로 또한 랜덤으로 샘플링해서 대략적으로 확인하는 것이다. 예를 들어서 데이터 수집이 잘못되었는지 확인하고, 이상치나 결측치가 없는지 체크도 해본다.

그런 다음에 군집화를 해보고, 패턴이 있는지 살펴보는 작업을 한다.

TODO 리스트

1) 데이터 자체에 문제가 없는지 확인

2) 데이터의 일부를 샘플링하거나 하나하나 살펴보기

3) 이상치 및 결측치 탐색

4) 군집화 및 빈발 패턴 추출등을 통한 주요 패턴 파악

STEP 3) 개별 속성값 확인

하나의 특징 또는 하나의 변수라고 하는 값들을 확인한다. 그래서 빈도분석이라던가 기술통계를 하고 그래프를 통한 히스토그램이나 파이차트 또는 박스플랏을 이용해서 시각화하고 각 변수가 어떤 분포를 따르는지 확인하고 검정한다.

어떤 그래프를 찍고, 기술통계를 하고 이런것들 다 좋은데 이렇게 분석한 결과를 반드시 next step으로 이어갈 수 있어야 한다. 단순히 뭐를 분석해봤다. 그래프를 이쁘게 만들어봤다. 이게 의미 있는게 아니라 이거를 next step으로 가져가서 결과를 만들어내야 한다. 예를 들어서 그래프를 그리고, 기술통계를 해서 이 변수의 분포가 이러이러 한거 같다 라고 판단이 된다면 가설을 수립하거나 수정을 해서 next step을 고민해야 한다.

TODO 리스트

1) 개별 변수에 대한 빈도분석 및 기술 통계

2) 그래프 시각화(히스토그램, 파이 차트, 박스 플롯 등)

3) 분포 적합성 검정

STEP 4) 속성 간 관계 파악

TODO 리스트

1) 카이제곱 검정

2) 상관관계 분석

3) t-검정 및 일원분산분석

4) 산점도 및 히트맵 시각화

[EDA 사례]

  • 사례 1. 김해시 화재 예측

건물별 화재 예측을 하는데 필요한 특징을 선별하는 과정에서 EDA를 수행했던 사례

머신러닝에서 특징이라고 하는것은 예측이라던가 분류를 할때 근거로 쓰일만한 변수들을 말한다.

특이했던 점은 건축물 근처의 CCTV 현황을 사용하였는데, 화재 발생빈도와 CCTV 히트맵이 중첩된 패턴을 보였기 때문이다.

상식적으로 CCTV 있는 지점과 화재 발생빈도와 무슨상관인지 의문이 들 수 있다. 아래 그림과 같이 먼저 화재 빌생빈도를 히트맵으로 그려보았다. 그런 다음에 김해시에 있는 CCTV 현황을 히트맵 그려보았다. 두개의 히트맵이 유사한 패턴을 보여서 이 둘을 중첩을 시키니까 이 둘이 비슷한 패턴이구나 파악을 할 수 있었다. 그래서 CCTV 위치는 화재발생 예측에 도움이 되겠다는 가설을 수립 할 수 있었다.

3

  • 사례 2. 밸브의 불량이 발생하는 공정상의 원인을 파악

밸브의 생산공정에서 발생하는 불량이 발생하는 원인을 파악하기 위해, EDA를 수행함

밸브를 만드는 공정이 있고, 그 공정의 환경이 있다. 압력이라던가 특정 기기의 셋팅값이라던가 온도라던가 조건들이 있다.

아래 좌측 그림에서 y값이 제품 스펙 들이고, x값이 공정환경 변수들이다. 색이 노란색일 수록 상관관계가 있는 것이다. 실제로 노란색이 있고 패턴이 보여져서 스펙과 공정환경이 상관관계가 있을것이라고 판단했다.

그리고나서 의사결정나무를 이용해서 조건들이 있을때 특정 스펙에 영향을 주는 패턴을 찾아내었다. 예를 들어서 금형온도 하판(슬리브) 케피티2가 40도보다 작으면 우리가 타겟으로 하는 어떤 스펙의 평균이 33.36이다. 아니면 이 조건을 만족하지 않고 금형온도 하판(슬리브) 케피티2가 44.5도보다 작으면 어떠어떠한 스펙이다 라는 규칙관계를 찾아내었다.

이렇게 스펙에 영향을 주는 요인들을 찾아내었고, 요인을 바탕으로 불량줄이기 위한 처방적인 분석을 할 수 있었다. 이를 위한 근거로 위와 같이 EDA를 한 결과를 활용했다.

4

  • 사례 3. 설비 문제 알람의 원인 (1-3)

설비의 문제 알람이 발생하는 원인을 탐색하고, 설비 데이터 자체에 문제를 파악하기 위해서 EDA를 적용함

어떤 설비가 있으면 여러가지 알람을 일으키는데 예를 들어서 설비가 작동중인데 문이 열려있다던가 부품을 갈아야 한다던가 온도가 비정상적으로 높다던가 하는 것들이 있을 것이다. 그래서 이런 알람들이 언제 발생하는지 식별하기 위해 했던 프로젝트였다. 그런데 설비데이터 자체에 문제가 많았기 때문에 거기에 EDA를 적용했었다.

EDA는 상당히 중요하지만 노가다성 작업이 매우 많다. 아래 그림에도 일부 데이터의 그림만 그려놓은거지 실제로는 일일히 사람이 데이터를 확인해보면서 패턴을 찾는 경우가 많다. 아래 그림과 같은 y축은 전류값, x축은 시간이다. 시간 흐름에 따라서 어떤 패턴이 있는 것을 확인할 수 있다. 바가 오르고 내리고 하는 것이 주기적인 패턴이 보인다. 하지만 중간중간에 아예 0값을 보이는 구간도 보인다. 이거를 보고 가설을 세울 수 있는게 이부분은 알람이 발생했다(또는 이부분에 어떤 문제가 발생했다)는 것이다. 그러나 실제 데이터상에서는 그 구간에는 알람이 울리지 않았다. 툴코드(기계가 동작했을때 데이터)도 정상이었다. 이를 보고 내릴 수 있는 가설은 알람이 발생해야하는데 알람이 실제 발생하지 않았다. 또는 애초에 센서값이 잘못들어온거다. 아니면 툴코드가 정상적으로 들어온게 잘못된 것이다. 라는 이런 가설들을 세울 수 있다. 이런 가설을 세운다음에 이게 데이터로는 판단할 수 없으니 도메인 현업 전문가와 상의를 해서 어떤게 잘못된 것인지 확인을 하고 그거를 바탕으로 데이터를 다시 모았다.

EDA를 했을때 흔하게 내리는 결론은 아니지만 데이터 자체가 잘못되었다는 결론도 이런식으로 할 수 있다. 만약에 이런 결론에 도달하지 못하고 여러 그래프만 찍어보고, 분석한다면 잘못된 데이터를 갖고 했기 때문에 어떤 결과도 얻을 수 없을 것이다. EDA는 구체적인 분석계획을 수립할 수 있을뿐만 아니라 불필요한 삽질을 막아준다.

분석내용 : 설비 데이터에 비정상적으로 수집되는 사례가 다수 있음을 확인함

5

결론 : 비정상적으로 수집된 데이터가 있어, 기계설비에서 수집하는 데이터를 점검하고 올바르게 수집할 수 있도록 변경해야한다. 그리고 이렇게 변경하고 재수집해야 한다.

  • 사례 4. 설비 문제 알람의 원인 (2-3)

분석내용 및 결과 : 설비와 시간대별 알람 비율을 확인하였으며, 비정상적인 구간이 존재함을 확인함

월별, 요일별, 시간대별 그래프를 그려보니까 특정 구간에만 유독 튀는 작업이 있었다. 특정 시간에는 빨간색 알람이 많이 울렸고, 월요일에는 초록색 알람이 많이 울렸고, 7월에는 유독 주황색 알람이 많이 울렸다.

6

결론 : 월, 요일, 시간대별로 특정 알람을 많이 울리게한 어떤 이벤트가 있었구나라는 가설을 세웠고, 그 시간대에 어떤 작업을 했는지에 대한 데이터가 필요하겠구나 라고 판단하였고, 추가 탐색을 수행.

  • 사례 5. 설비 문제 알람의 원인 (3-3)

분석 내용 : 알람간 동시 발생 여부 및 알람간 선행여부 분석

알람이 동시에 울린 알람이 있고, 하나의 알람이 울리고 그 다음에 울리는(뭔가 선행관계가 있는) 알람이 있었다. 아래 그림과 같이 수치가 1에 가까울수록 동시에 자주 알람이 발생한다고 판단할 수 있다. 좌측 그림에 106과 131번 알람은 동시에 울릴 확율이 40프로 정도 되었다. 또는 107번이 울리고 그 다음에 106번이 울릴 확률이 24프로 정도 되었다 라고 확인할 수 있었다.

7

결론 : 동시에 발생하는 알람과 선행 및 후행하는 알람 간 관계를 파악하여, 알람들을 카테고리화함