본문 바로가기
코알라UNIV

7주차 데이터로 타이타닉을 분석하라

by 인듯아닌듯 2019. 11. 20.

이번 주 부터는 데이터사이언스에 대해 배우게 된다. 지금까지 웹크롤링으로 데이터를 수집할 수 있었다면,

앞으로는 '그 데이터를 가지고 어떤일을 할 수 있는가' '어떻게 활용하는게 좋을까?' 를 배우는 시간이다.


머신러닝 - 각 특징을 인간이 미리 구분하여 정제된 데이터를 제공한다는 점 , Decision Tree

(+ 타할라타구치 시스템을 적용해서 조금 더 error를 캐치해볼 수 있을 것 같아)

딥러닝 - 그런 특징 조차도 전체 이미지로부터 스스로 찾아서 학습한다.

(+딥러닝이여서 그런 것은 아니고 머신러닝중 Unsupervised learning에 해당하기 때문임)

머신러닝 딥러닝(인공신경망)
쉽다 어렵다
Data가 적을 때 효율이 크다 Data가 많을 때 효율이 크다

우리의 목표는 예측분석/인과분석을 중점적으로 MachineLearning을 하려는 것.

 

Feature Enginnering

Data를 전처리하는 과정

특징선택(예측) : 어떤 요소가 영향을 많이 미치고, 범위는 이렇게 모여있다.

특징생성(가공): 데이터를 사용하기 좋게 만드는 것

특징추출(삭제및 정리): 차원감소

 

타이타닉의 생존자와 사망자 정보'를 이용하여 Machine learning에 입문하였다. -> (결과물 : 예측)

붓꽃 구분하기-> (결과물 : 분류) / 마지막 남은 것은 생산이네?

 

Google spread sheet 에서

Pivot Table을 통해 '특징선택'에 대한 힌트를 얻을 수 있었고,

Filter 를 이용하여 '특징생성'을 보다 편하게 할 수 있었다. (Filter 사용후 함수에서 범위 선택할 때, id값 확인!!)

마지막으로 원하지않는 데이터는 '특징 추출'의 과정으로써 삭제처리하였다.

Feature Engineering 이 끝났으면, 이제 일일히 가중치를 다르게 줌으로써 가장 확률이 높은 값을 찾아내도록한다.

-> 이부분을 자동화하여 가장 최적의 해를 찾아내도록하는 것을 파이썬코드를 통해 만들려고하는 거같아

이번 주차가 지금까지 배운 내용중에 가장어렵다고느껴졌었는데, 그이유는 어떤 근거를 가지고 가중치를 설정할 것인지에 대한 직관적인 해석과 수학적인 해석이 필요했기때문. 생각을 많이 해야되었다.

 

타이타닉 - (예측)

종목과 그안에 요소로 설명하려고한다. 종목의 경우는 성별, 이름, 객실번호 등을 가르키는 것이고, 요소는 성별에서는 남녀 /이름에서는 이름값/객실번호에서는 C101 D22 A33 등을 요소로 가진다.

 

1. 종목속 요소의 가중치는 Data의 개수를 통해서 비율이자 확률을 구할 수 있고, 종목사이 가중치는 대체로 둘사이 확률의 차이가 큰 종목을 높게 쳐줘야한다.
왜냐하면 종목의 영향력이 커서 에서 요소가 바뀔 때 그 비율이자 확률이 크게 변하는 것이기 때문이며,
이는 분산으로 정량화 할 수 있다.  확률이 크게 차이가 난다면 분산이 클 것이고, 예측에 주는 영향력이 높다는 말이다.

그래서 나는 분산의 비율과 표준편차의 비율을 구해서 가중치를 구해보았다.

가중치를 구하기위해 표준편차와 분산을 둘다 구해서 비교해보았다.
위 비율에 따라 가중치를 다르게 줬다.

위 비율 대로 가중치값을 달리해서 정확도를 확인하였는데 둘다 80.7%로 같았다. 이 데이터자료에서는 무엇이 더 나은지 판단할 수 없었다.(타원 축의 축소할 때도 표준편차로 나누어주는 것 보면 표준편차가 조금 더 낫지 않을까 싶다.)

 

2. 타이타닉(예측)에서 생존점수사이 간격이 너무 커버리면, 오직 하나의 원인만 크게 영향을 미치게된다. 따라서 좀 더 정확도를 높이려면, 엄청복잡해지겠지만, 적절한 수준의 가중치가 필요하다.(나는 적절한 수준의 가중치를 분산비로 잡았다.) 특히 복잡하고 비슷비슷한 경우에는 가중치를알맞게 설정하는 것이 필요할 것 같다. 가중치가 커지면 예외처리, 특별한 경우를 잡아내지못한다.

생존점수의 합의 기준을 어디로 잡느냐에 따라서 각 데이터의 Survived 값(0 or 1)이 달라진다. / 굉장히 양극화되서 기준 잡기는 편함 but..

현재 나는 성별이라는 종목에 가중치를 많이주어서, 데이터가 극명하게 갈린다. 하지만 성별때문에 치우친 생존점수가  60이 넘더라도 실제로는 죽은 사람도 있을 수가 있다.(하지만 사고/사망 데이터의 경우는 죽음이라는 것이 Chaos 하기 때문에 예측의 상한선이 존재하여 특정수준이상의 정확도를 가지는 것을 불가능 할 것으로 예상된다.)

데이터가 많다는건 나올 확률이 많다는 것일 수도 있다. 그래서 비율이아닌 갯수로 가중치 값을 두어도 괜찮을 수도 있다. 세상살다보면 대부분은 주로 발생하는 것들이 있으며, 우리는 그러한 것을 예측범위내 라고 말한다.

하지만 우리가 (분류+예측)DataScience를 하는이유가 일반적인 상황이아니라 특수한 상황까지 Catch하기 위해서라면, 결론적으로 비율로 두는 것이 맞는 것으로 보인다.

 

실습에서 생존점수를 몇가지로 잡아서 정확도를 체크해봤다.

생존점수 기준을 60으로 잡았을 때는, 0.69377

생존점수 기준을 50으로 잡았을 때는 0.76555 (∨)

생존점수 기준을 20으로 잡았을 때는 0.741

이 결과를 통해서

1. 가중치는 알수는 없지만 적정한 수준이 필요하다. -> 이 경우에는 생존점수가 극명히 갈리는 것이 더 좋은 정확도를 내었기 때문에 적절한 가중치를 두었다고 할 수 있다. 

2. 히스토그램을 보면서 기준값을 설정 해 볼 수 있다

3. 표준화가 필요하다. Scale이 섞여버리면 안되기때문에 단위를 통일시킨 후(표준정규분포처럼) 맨 마지막에 가중치를 넣어주자.

붓꽃 분류하기(분류)

나는 학습자료에 이미 힌트가 될 수 있는 데이터값이 없다고 생각하고, 정말 Raw한 Data를 크롤링을 통해 얻었다고 생각하니, 어떤 상황에서도 적용되는 알고리즘을 짜놓는 것이 좋겠다고 생각했다.

그래서 생각한 것이 정규분포이다.

머신러닝에서는 데이터의 값을 범위로 나누고, 가중치를 두는데, 이때 데이터를 나누는 것을 정규분포의 68–95–99.7 rule을 통해 나누고, 가중치는 표준편차의 값으로 영향력을 고려해주면 좋겠다고 생각했다.

68–95–99.7 Rule
붓꽃의 각각 종목의 요소들의 평균과 표준편차 그리고 ±σ 범위

그렇게 각 종목의 요소에 범위를 정규분포의 범위(68–95–99.7 Rule)에 맞추서 평균±1σ 범위로 하여 분류해주었다.

그리고 가중치는 표준편차(=분산)을 조금씩 다르게 적용해보았다.

점수에 1~5번까지 대입하여, 예측을 해보았고, 어떤 것이 가장 정확도가 높은지 비교해보았다.

4가지 Cm에 대한 가중치는 표준편차(16%/68%/16%)를 기준으로 맞춰서 주었고, 종목별 가중치는 5가지의 변화를 주어서 비교해 보았다.

 

Train에서 정확도

Test에서 정확도

1.정규분포/표준편차 비

0.9

0.86

2.정규분포

0.87

0.84

3.실제 데이터 갯수

0.86

0.82

3.정규분포*표준편차 비

0.8

0.82

4.정규분포/분산 비

0.56

0.44

여기시 정규분포라는 것은 위 사진에서 보듯이 68–95–99.7 Rule을 따라서 가중치를 16 16 68 로 동일하게 준 것이다.

나는 표준편차가 클수록 데이터가 가지는 특이성이 작아지므로, 가중치를 적게주어야한다고 생각했다. 다시말하면 데이터들이 표준편차가 작아서 한점에 모일수록 그 값은 그 꽃의 대표값이자 가장 영향을 많이 주는 요소라고 생각했다.

그래서 표준편차를 나누어주었을 때가 가장 정확도가 높을 것이라 예상하였고, 실제로도 맞았다.

그리고 분산비와 표준편차의 비, 둘 중 어느 것이 나을지도 비교하였는데, 분산비는 제곱을 나누는 것이므로, 너무 과하게 가중치를 주게되어서 정확도과 오히려 내려갔다. 분별력이 떨어졌다는 의미이다.

 

우리 코알라멤버들은 어떻게 했는지 공유해보니,

피벗테이블을 통해서 하나의 종목을 설정하고 3가지 꽃의 경향을 보면, 데이터들이 특정구간에서 몰려있는 것을 확인 할 수 있고, 적절한 3등분을 통해 범위를 정하고, 데이터의 갯수를 가중치로 두었다고 한다.

이렇게하면 정확도가 0.95이상을 가뿐히 넘긴다고한다.

이런결과를 보니 수업에서 들었던 이야기가 생각난다.

코알라 수업자료(너무 알맞은 설명이라서 올립니다. 문제시 내리겠습니다!)

머신러닝은 쉽고 데이터가 적을 때 효율이 좋고, 딥러닝 같은 인공신경망은 매우어렵고 데이터가 많을 때 효율이 좋다고 한다. 내가 한것은 딥러닝은 아니지만 어떤 경우에도 적용할 수 있도록 프로그램을 짰다. 그 과정속에서 데이터의 소실이나 간과가 발생하여 높은 정확도를 보여줄 수 없었고, 우리 멤버들이 한 것은 머신러닝의 Feature Engineering을 적용하여 높은 수준의 정확도를 이끌어 낸 것으로 보인다.

다만 우리 팀원들의 가중치 설정에서아쉽다고 생각되는 것은, 가중치를 데이터 양으로 두었다는 것인데, 지금 주어진 데이터는 각 꽃 별로 30 30 30개로 주어져서 상관이 없겠지만 만약 80 10 10으로 주어진 경우, 데이터의 양으로 설정한다면, 데이터양이 많은 꽃의 영향력이 커져서 분류가 단순해지고 정확한 분류가 불가능할 것으로 예상된다.

분류는 속성을 가지고 판단하는 것이므로 scale이 들어가면 안될 것이라고 짐작한다..