오늘은 3주차 EDA & DataViz 첫날!
이번 주차에는 데이터 분석과 시각화, 전처리, 특성추출 등 데이터를 중점적으로 다룬다.
현실에서 측정하고 수집한 사실이나 값.
그 자체로는 의미가 없지만 이를 분석하고 해석해 유의미한 정보로 변환될 수 있다.
vs 정보
정보는 목적이나 의도에 맞게 데이터를 가공해 의미를 부여한 것.
유형
정형데이터 : 행과 열로 고정된 형식의 데이터. 비교와 저장, 관계를 구하기 쉽다.
지리데이터 : 지도 정보 + 보여주고자 하는 정보
시계열데이터 : 정형데이터 중에서 데이터를 구분하는 가장 중요한 key값이 시간인 경우.
시간에 따라 순차적으로 기록된 데이터. 기온, 주가, 비디오, 음성 등.
추세, 계절성, cycle이 중요하다.
데이터를 체계적으로 조사해서 그 안의 유의미한 정보를 추출해 의사결정에 활용하는 과정
데이터 수집 - 전처리 - 탐색(EDA) - 모델링 - 해석(평가) 의 과정을 거친다.
과거의 통계
는 가지고있는 표본 데이터로 모집단의 특징을 대표값 위주로 추론하는 것에 그쳤지만, 현재는 통계를 넘어서 해석, 의사결정, 예측과정에 데이터가 더 중요해졌다.
EDA(탐색적 데이터 분석)
데이터 분석 과정에서 데이터를 직관적으로 이해하고, 중요한 통찰을 얻기 위해 사용하는 다양한 기법과 접근법.
데이터를 시각적으로 탐색하고, 패턴, 이상치(Outliers), 데이터 분포, 상관관계 등을 발견하는 것
데이터를 시각적인 형태로 표현해 정보를 더 쉽게 이해하고 분석하도록 하는 과정
Expressiveness : 데이터가 가진 정보 모두를 시각 요소로 표현
Effectiveness : 중요한 정보가 부각
mark : 가장 기본적인 그래픽 요소. 점선면으로 구성
channel : 마크를 변경할 수 있는 요소. 위치, 색, 모양, 기울기, 크기 등
효율적인 시각화 원칙
Accurucy: 정확도. 데이터 값이 정확하게 표현
Discriminability : 구별 가능성. 채널 내에서 값을 명확히 구분
Separability : 분리성. 채널간 상호작용에 대한 구분
Popout : 시각적대비. 채널을 통한 명확한 데이터 구분
Grouping : 그룹화. 유사한 것 끼리 그룹화
category(범주)에 따른 수치값을 비교하기 좋다.
일반적으로는 x축에 범주, y축에 값을 표기하는 수직스타일을 많이쓰고, 범주가 많으면 역으로 수평 막대그래프를 쓴다.
Principle of Proportional Ink
잉크(시각적으로 표현된 모든 요소)는 데이터를 전달하는 데 필요한 만큼만 사용해야한다.
즉, 데이터와 직접 관련이 없는 모든 시각적요소는 최소화해서 데이터 잉크의 비율을 최대화 해야 한다. 특히 3d 시각화는 비 데이터 잉크가 많아 지양해야 한다.
그리고 x축의 시작값은 항상 0이어야 한다.
정확한 정보를 전달하기 위해서는 정렬을 해야한다.
시계열은 시간순, 수치형은 크기순 등.
pandas에서는 sort_values(), sort_index()로 정렬한다.
errorbar, 오차 막대를 추가하면 uncertainty를 보여줄 수 있다.
연속적으로 변화하는 값을 순서대로 점으로 나타내고 이를 선으로 연결한 것.
시계열 데이터 분석에 특화되어있다. 추세 파악에 좋다.
선이 5개를 넘어가면 인지하기 쉽지 않으므로 5개 이하가 좋다.
이중 축 사용도 지양하는게 좋다.
smoothing : noise를 줄여서 패턴이나 추세 파악을 쉽게하는 기법
막대와는 다르게 축을 0에 둘 필요는 없다.
오히려 detail한 data보다 생략된 line plot이 나은 경우가 있다.
다만 간격은 일정하게 유지해야되고, 데이터가 규칙적이지 않다면 값에 mark를 표시해야 한다.
점을 사용해 두 feature간의 관계를 알아내기 위한 그래프
기본 목적은 상관관계(양,음)를 파악하는 것.
추가적으론 군집, 값 사이의 차이, 이상치를 파악할 수 있다.
마커 모양 차이는 크게 눈에 띄지 않아 보조로만 쓰고, 색이 구분하기 더 쉽다.
점이 너무 많으면 분포를 알기 힘드므로 투명도 조정, 지터링, 2차원 히스토그램, contour plot 등의 방법이 있다. 뒤의 두 방법이 추천된다.
regression을 이용해서 추세선을 1개 정도 그려주면 좋다.
grid(격자)는 사용하더라도 투명하거나 눈에 띄지않게, 될 수 있으면 사용 x
시각적 표현이 할 수 없는 설명을 추가. 과하면 방해.
title(제목), label(축 설명), tick label(축 눈금), legend(범례, 데이터 구분) 등
화려함보다는 이해가 우선.
강조를 위해선 대비를 쓴다. 색상, 채도, 명도, 보색 대비를 쓴다.
기존 정보(ex.저온-파란색)와 색에서 오는 느낌을 잘 활용해야 한다.
컬러 팔레트 : 미리 정해진 색 set. 범주형 변수에 사용
7개 이상은 구분이 힘드니까 적당히 쓰고 나머지는 무채색.
연속형 변수에는 단일 색조를 명암에 따라 균일한 색상변화를 보이게 세팅하는게 좋다.
(ex. 연한 빨강 ~ 진한 빨강)
발산형(양 끝으로 발산)은 중앙을 기준으로 두 색이 발산해 끝으로 갈수록 진해지는 세팅.
행과 열로 고정된 형식의 데이터. 비교와 저장, 관계를 구하기 쉽다.
범주형
데이터와 수로 나타나는 수치형
데이터로 나뉘어진다.범주에 순서가 없는 데이터. ex) 성별, 국가 등
label encoding
모델에 넣기위해서는 카테고리를 수로 수치화해야한다.
범주를 0,1,2,3 같은 정수에 mapping해 처리한다.
없는 레이블은 -1로 전처리해야한다.
one-hot encoding
범주를 0,1,2로 순서를 줘서 매핑하면 bias가 생길 수 있다.
이를 해결하기 위해 카테고리 만큼의 차원을 가진 벡터로 변환해 해당 범주는 1, 나머지는 0으로 만든다. ex) 남자 -> [1,0] / 여자 -> [0,1]
범주가 너무 많아지면 학습 속도와 퀄리티에 문제가 생기므로 다른 방법을 쓴다.
binary encoding
범주를 0,1,2,3..으로 레이블링해 이를 이진수로 변환해 컬럼데이터로 바꾸는 방법.
범주가 많을 때 가끔 사용하는 방법
범주에 순서가 있는 데이터. ex) 리커트 척도(우위가 있는 별점), 영화 별점 등
별점 3점이 별점 1점보다 3배 좋은가?라는 질문에 yes면 수치형으로 보고 no면 순서형이다.
즉, 사칙연산 가능 유무로 구분한다.
범주형의 인코딩 방법 다 사용가능.
순환형 데이터 : 요일, 각도 처럼 순환되는 데이터.
수치가 1,2,3같은 정수로 구분되는
이산형
데이터와 수치가 실수로 연속적으로 이어진연속형
데이터로 구분된다.
구간형 데이터
온도, 시간처럼 비율로 따질 수 없고 구간이 중요한 데이터
20도가 10도보다 2배 뜨겁다고 할 수 없다.
그래서 일정 값을 기준점으로 만들어서 비교를 할 수 있다.(최저값으로 다 빼기)
비율형 데이터
인구수, 밀도 처럼 원점과의 거리(비율)이 중요한 데이터.
단순한 평균, 표준편차 같은 대표값에만 의존하면 안되고 왜도, 첨도 같은 분포도 같이 봐야한다.
정규화 : 데이터의 범위를 0~1 or -1~1같은 특정 범위로 변환하는 것.
표준화 : 데이터의 평균을 0, 표준편차를 1로 만들어 표준 정규분포 형태로 만드는 것
정규화 과정 후 왜도(skewness)를 조정해 분포를 맞춰준다.
왜도가 negative(우측쏠림)이면 큰 데이터들의 간격을 띄워줘야하므로 거듭제곱이나 지수함수를 씌운다.
왜도가 positive(좌측쏠림)이면 작은 데이터들의 간격을 띄워줘야하므로 로그나 제곱근 연산을 해준다. 부호 영향은 미리 전처리 해둔다.
현업에서는 시각화 라이브러리로 matplotlib과 seaborn을 쓰긴하지만, plotly가 html로 렌더링해주고 데이터 값을 마우스 올리면 표시해줘서 자주 쓰긴한다.
attention은 추론, self-attention은 자기자신도 넣기때문에 검증.
트랜스포머는 positional encoding이 핵심. 시간 순서를 고려하지 않기 때문에 병렬 처리가 가능해 처리 속도가 빠르지만, 순서가 사라져서 이를 잡아줄 positional encoding이 필요하다.
트랜스포머 포지셔널 인코딩 참고
다음주 월요일까지 Attention All you need 논문 읽어오기!