BraveTiger

미니프로젝트 3차 회고 본문

취업 준비/AIVLE SCHOOL

미니프로젝트 3차 회고

BraveTiger 2023. 3. 28. 00:01

주제: 스마트 워치 데이터 분석

목표: AI 분류 CASE 미션 해결을 통해 데이터 분석, 모델링 역량을 향상한다.

 

개요

일단 프로젝트의 도입부터 흥미를 불러오는 주제였다. DX컨설턴트가 되었다고 가정과 함께 Watch사의 헬스케어 서비스 출시를 앞두고 Smart Watch23 버전에 "계단 오르기" 운동을 감지할 수 있는 기능을 탑재를 위해 6가지 행동 데이터 중 "계단 오르기"를 분류할 수 있는 AI모델링 상황이 주어졌다. 실무자로서 받을 수 있을법한 요청과 제안이 다소 흥미로웠다. 또 머신러닝 기간 동안 배운 분류 모델링을 직접 실습해 볼 수 있는 기회였다. 궁극적인 목표는 real data에서 30개의 데이터가 행동을 분류하지 못했고 모델링을 통해 real data에 대한 행동의 분류였다.

 

출처: 스마트폰 기반 행동인식 기술 동향, 김무섭

센서 신호로부터 사용자가 어떤 행동을 하고 있는지에 대한 추론은 이미 논문으로 설명되어 있었다. 평소 센서 데이터가 어떤 방식으로 활용되는지 궁금했었는데 다양한 머신러닝/딥러닝 기법으로 행동을 추론한다는 내용이 흥미로웠다.

Label이 부여된 데이터를 통해 각 행동에 대한 특징이 잘 담긴 데이터를 분류할 수 있는 방법이나 혹은 데이터 간의 공통적인 특징을 모아 군집을 통해 행동을 추론할 수 있을 것이라 생각이 들었다.

 

Keep

3일 동안 이뤄진 미니프로젝트는 크게 데이터 분석, 모델 튜닝, 모델 검증 순으로 이어졌다.

 

Part 1. 데이터 분석

탐색적 데이터 분석과 각 feature들의 분석을 진행했다. 사실 분석가가 561개의 변수를 모두 이해하고 분류하는 것은 한계가 있을 것이라고 생각한다. 이번 프로젝트는 tree 기반 모델을 사용하여 변수 중요도를 통해 분류를 진행하였다.

 

 

1. 그래프에 대한 해석

feature importance에 대한 수치 해석은 누구나 할 수 있다. 단순히 대소 비교이기 때문이다. 하지만 저 Boxplot에 대한 아이디어는 절대 생각하지 못했다. 위 그래프는 각 변수가 잘 설명할 수 있는 타깃에 대해 설명하고 있다. 변수 중요도가 높았던 상위 5가지의 변수를 통해 시각화를 진행했는데 각 변수와 타켓이 어떤 관계를 나타내는지 볼 수 있다. 특히 첫 번째 변수를 보면 Laying Activity를 가장 잘 나타내는 변수? 임을 추측해볼 수 있다. 이 처럼 각 변수가 타켓에 어떤 영향력을 미치는지 그래프를 통해서 볼 수 있는 아이디어를 얻을 수 있었다.

 

 

Part 2. 모델 튜닝

KNN, LogisticRegression, SVM, GBM, XGB 총 5가지의 모델을 가지고 데이터를 가장 잘 분류해 내는 모델은 무엇인지에 대해 나타냈다. 결과는 XGB모델의 성능이 가장 좋았다. 중요한 것을 모델의 퍼포먼스를 더 일깨우기 위해 튜닝해 주는 일이었다. 이는 다음과 같이 2가지로 나눌 수 있다. 첫 번째 적절한 파라미터 값 두 번째 유의미한 변수의 학습

 

1. GridSearchCV

다음은 GridSearch를 통해 최적 파라미터를 탐색할 수 있는 코드이다. GridSearchCV는 모델 하이퍼 파라미터에 넣을 수 있는 값들을 순차적으로 입력한 뒤에 가장 높은 성능을 보이는 하이퍼 파라미터들을 찾는 탐색 방법으로 과적합을 피할 수 있는 모델의 최고 성능을 나타내는 파라미터를 찾아준다. 

 

2. 유의미한 변수

프로젝트에서 변수 중요도가 높았던 변수 순서를 기준으로 95개, 50개, 최고 성능을 보여준 변수의 개수로 나눠 모델링을 진행했다. 모델 학습에서는 120개의 변수를 넣어주는 것이 가장 좋은 성능을 보여줬다. 이처럼 유의미한 변수를 선택하는 것 역시 모델의 성능을 좌지우지한다는 것을 얻었다. 수많은 변수 1000개 <<<< 유의미한 변수 10개

 

Part 3. 모델 검증

애써 만든 모델을 드디어 test 데이터로 검증할 수 있는 단계였다. 기존 머신러닝 실습에서 대부분 한 가지의 데이터를 train : test로 분할하고 train 데이터를 train : validation으로 분할하거나 K-fold를 사용하여 검증하는데 이렇게 데이터가 train, test, real 데이터로 나눠져 있어 test 데이터로도 검증이 가능했다. 학습 단계로부터 얻은 아이디어를 기반으로 모델을 다시 한번 다듬는 과정? 간단하지만 중요한 단계였다. 검증이 완료된 모델은 실제 데이터를 예측한 결과는 출력하였다.

 

Problem

데이터부터 모델링 순서까지 정해진 루트로만 진행되었기 때문에 다소 어려움이 없는 프로젝트였다. 그렇다면 직접 데이터를 수집해서 모델링까지 해보면 어떨까? 프로젝트에서 사용된 데이터를 찾아보니 누구나 쉽게 접근할 수 있는 토이데이터였다.

Human Activity Recognition

https://archive.ics.uci.edu/ml/datasets/human+activity+recognition+using+smartphones 

 

UCI Machine Learning Repository: Human Activity Recognition Using Smartphones Data Set

Human Activity Recognition Using Smartphones Data Set Download: Data Folder, Data Set Description Abstract: Human Activity Recognition database built from the recordings of 30 subjects performing activities of daily living (ADL) while carrying a waist-moun

archive.ics.uci.edu

위 데이터를 사용해서 새로운 문제를 도출해보는 것은 어떨까?

 

Try

https://colab.research.google.com/drive/19gIaQBV5TAwqOZZaqrWroIzbABRPGMA9#scrollTo=BfE37z9Tn7Ys

 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

직접 데이터를 다운로드하여 모델을 만들기 위한 전처리까지 끝난 코드들이다. 역시 프로젝트에 사용된 데이터는 잘 가공된 데이터였다. 이 데이터를 통해 나만의 모델을 만들고자 한다.

느낀 점

머신러닝을 한 단어로 요약하자면 "Powerful"

예측을 할 수 있어서 강력한 것이 아니라 정말 다양한 분야에서 사용되고 있어서 이다. Python을 통해 무료로 누구나 잘 짜인 모델링 코드로 자신의 관심분야 혹은 학습에 사용할 수도 있고 이윤을 만들 수도 있는 강력한 도구라고 생각한다.

다만, 모델을 만들어 해석하는 몫은 분석가의 몫이다. 모델 성능에 불필요한 변수나 파라미터를 입력하고 좋은 성능이 나왔을지라도 그 모델은 현실에 대한 내용을 예측할 수 없을 것이다. 내가 만든 모델이 성능이 좋게 출력되었을지라도 내가 목표한 바를 얻어낼 수 있는 결과물인지? 항상 경계하고 의심하며 접근해야 할 것 같다. (일이 쉽게 진행되면 그 일은 옳은 길로 가는 것이 아니라는 명언...)

Comments