[에이블스쿨 AI트랙 7기] 1차 미니프로젝트 회고

ddanglehee·2025년 4월 22일

AIVLE SCHOOL

목록 보기
1/5

들어가기 전에,,

벌써 에이블스쿨 시작한지 4주차가 되어 1차 미니 프로젝트가 진행됐다!
3주동안 파이썬, 데이터 처리, 데이터 분석, 머신러닝, 딥러닝을 배웠는데, 여기서 배운 것을 토대로 프로젝트를 진행한다고 들었다.
갑작스러운 면접 일정으로 중간에 수업을 놓치기도 하고 복습도 제때 하지 못해서 잔뜩 밀린 상태라 과연 프로젝트를 잘 완수할 수 있을지 걱정이 앞섰었는데, 다행히 수업시간에 다뤘던 실습 내용과 유사해서 어찌저찌 해결하고 마무리가 되었다.

이번 1차 미니 프로젝트는 총 4일동안 진행되었다.
첫 2일동안은 '스마트폰 센서 데이터 기반 모션 분류'을 주제로 진행됐고, 나머지 2일은 이번달 말에 있을 AICE ASSOCIATE 준비 미니 프로젝트가 진행됐다.
이번 게시물에서는 1~2일차에 대한 내용을 다루려고 한다.
서론이 너무 길었다! 그럼 바로 1차 미니프로젝트에 대해 알아보자+_+

🗓️ 프로젝트 일정

우선 어떤 일정으로 프로젝트가 진행되는지, 각 일정에 어떤 활동을 하는지 대략적으로 설명하려고 한다.

1일차

시간내용
09:40 ~ 10:301. 미니 프로젝트 설명
10:40 ~ 16:00 (중간 점심시간 1시간)2. 미션 (개별) 진행
16:10 ~ 17:003. 조별 과제 내용 공유 (코드 리뷰)
17:00 ~ 17:104. 1일차 정리 및 마무리
  1. 미니 프로젝트 설명
    전체 미팅방에 모여서 강사님의 미니 프로젝트 설명을 듣는 시간이었다.
    에이블스쿨을 다니면서 항상 강조가 되는 '도메인 이해'가 이루어지는 시간이었다.
    이번 주제와 관련된 '인간 행동 인식'에 대한 도메인 설명과, 해당 도메인으로 문제 상황을 해결한 사례 소개, 해당 데이터는 어떻게 수집되는지 등등을 소개해주셨다.
  2. 미션 (개별) 진행
    미션이 4개가 주어지고, 각자 주어진 미션을 해결하는 시간이다. (검색, GPT 등 활용 가능)
    미션 1,2는 '탐색적 데이터 분석'과 관련된 미션이었고,
    미션 3은 '기본 모델링', 미션 4는 '단계별 모델링' 미션이었다.
    자세한 이야기는 아래에서 하고자 한다.
  3. 조별 과제 내용 공유 (코드 리뷰)
    드디어 팀원들과 첫만남을 가지는 시간이다++
    하지만 시간이 정말 촉박하기에 인사는 정말 잠시, 얼른
    역할 분담을 하고 미션 해결 내용을 공유해야 한다._
    꿀팁🍯)
    • 약 4시간 30분동안 한 프로젝트를 50분 안에 7명의 팀원들과 이야기해야하기 때문에, 팀원 중 2~3명의 코드 리뷰를 진행해야한다는 매니저님의 조언이 있었다.

2일차

시간내용
09:40 ~ 10:001. 미니 프로젝트 설명
10:00 ~ 11:302. 조별 과제 내용 공유, 발표 자료 작성
11:40 ~ 12:303. 조별 과제 발표
13:30 ~ 15:404. 아이데이션 세션
15:50 ~ 16:205. 포트폴리오 정리
16:30 ~ 16:506. 아이데이션 베스트 공유
  1. 미니 프로젝트 설명
    어제 첫시간과 똑같이 전체 미팅방에 모여서 도메인에 대한 설명이 짧게 다시 이루어졌다.
    다시 한번 도메인 이해의 중요성을 느끼게되는 시간이었다.
  2. 조별 과제 내용 공유, 발표 자료 작성
    1일차에 미처 이야기하지 못한 내용을 공유하고, 조원들의 코드를 합치고, PPT를 만들고 발표 준비까지 해야하는 시간이다. 이 모든 과정이 1시간 30분만에 이뤄져야하기 때문에 정말 정신없고 촉박하다.
    꿀팁🍯)
    • 팀원 중 가장 코드를 잘 짠 사람 1~2사람을 빠르게 정해서 그 코드를 합쳐서 제출하기!
    • 비대면으로 진행하는 경우 구글슬라이드/캔바 등 공유플랫폼을 적극 활용하기!(본인은 이걸 바로 떠올리지 못해서 어떻게 진행해야하나 식은땀 흘렸다)
  3. 조별 과제 발표
    전체 미팅방에 모여서 발표와 강사님의 피드백이 이루어지는 시간이다.
    20개가 넘는 팀이 있는데, 발표 시간은 50분밖에 없으니 몇개의 팀만 발표를 할 수 있다.
    그러니 발표하고 싶은 팀은 빠르게 전체 미팅방에 들어가서 선착순으로 발표하겠다고 이야기해야한다.
    꿀팁🍯)
    • PPT와 발표 구성은 두괄식으로 해야한다.그리고 결과 중심으로 깔끔하게!
    • 발표는 5분정도로 구성하는 게 좋겠다. 더 많은 팀들이 발표 기회를 얻을 수 있고, 늘어지면 집중하기가 어려운 것같다.
  4. 아이데이션 세션
    미니프로젝트에서 다룬 주제, 데이터를 활용해서 어떤 서비스를 만들 수 있을지 아이디어를 발굴하는 시간이다.
    B2B, B2G의 관점에서 과제를 선정하고, 그 배경은 무엇인지, 목표 고객은 누구인지, 어떤 서비스를 제공하는지 등을 생각하여 공유 엑셀 파일에 작성하면 된다.
    꿀팁🍯)
    • 기업/정부 관점에서 아이데이션이 이루어져야한다. 즉, 비용 대비 효과/시장 선점/효율성 및 효과성/매출 등의 관점에서 생각해야 한다.
      기업/정부에서 어떤 요구사항이 있는지 파악하고, 그것을 해결하는 아이디어를 내야한다. 그래야 설득력이 높다.
  5. 포트폴리오 정리
    이번 미니 프로젝트에 대한 포트폴리오를 정리하는 시간이다.
    포트폴리오 양식과 예시가 주어지니, 그거에 맞춰서 쓰면 어렵지 않게 완성할 수 있다.
    항상 포트폴리오, 회고 등과 같은 정리 활동은 미루게 되는데 바로 시켜줘서 정말 감사했다 ㅎㅎ

🏃‍♂️ 프로젝트 소개

주제

스마트폰 센서 데이터 기반 모션 분류

데이터 구성

  1. 561개의 Feature가 있다.
    가속도 센서, 자이로스코프 센서로 수집된 데이터로,
    tBodyAcc-mean()-X 즉, 센서종류-집계함수-축와 같은 이름 구조를 갖고 있다.
  2. Label(target)은 주어진 데이터의 'Acitivity'이다.
    ['STANDING', 'SITTING', 'LAYING', 'WALKING', 'WALKING_UPSTAIRS', 'WALKING_DOWNSTAIRS']로 총 6개의 class로 이루어져 있다.
    또, 'STANDING', 'SITTING', 'LAYING'은 정적 행동으로, 나머지는 동적 행동으로 나누어진다.

미션 구성

  1. 미션1 - 탐색적 데이터 분석
    • random forest 알고리즘을 사용하여 중요한 feature 확인
  2. 미션2 - 탐색적 데이터 분석
    • Target을 정적/동적 행동으로 구분하고, 어떤 feature가 정적/동적 행동을 구분하는데 중요한지 탐색
  3. 미션3 - 기본 모델링
    • 다양한 분류 모델을 생성해서 각 모델의 성능을 측정하여 비교하기
  4. 미션4 - 단계별 모델링
    1) 정적, 동적 행동 분류 모델 생성
    2) 그 이후 세부 동작에 대한 분류 모델 생성
        정적 행동으로 예측-> 정적행동 3가지 분류 모델링
        동적행동으로 예측 -> 동적행동 3가지 분류 모델링
    3) (선택) 모델 통합
    4) (선택) 파이프라인 구축

💡 프로젝트 결과

미션1. 탐색적 데이터 분석1

  1. random forest 알고리즘을 사용하여 'Activity'를 결정하는 데 중요한 feature 확인

  2. 중요도가 높은 feature과 target과의 관계, 중요도가 낮은 feature과 target과의 관계를 kdeplot으로 확인해보기
    2-1) 중요도가 높은 feature(tGravityAcc-max()-X)와 target(Activity)

    2-2) 중요도가 낮은 feature(fBodyAccMag-skewness())와 target(Activity)

    결론) target의 하나의 class라도 뚜렷하게 구분할 수 있어야 중요도가 높은 feature라고 볼 수 있다.

미션2. 탐색적 데이터 분석2

  1. Target을 정적/동적 행동으로 구분하기
    정적/동적 행동을 구분하는 'is_dynamic' 컬럼 생성

     static = ['STANDING', 'SITTING', 'LAYING']
      dynamic = ['WALKING', 'WALKING_UPSTAIRS', 'WALKING_DOWNSTAIRS']
    
      data['is_dynamic'] = data['Activity'].apply(lambda x: 0 if x in static else 1)
      data.drop(columns=['Activity'], inplace=True)
  2. 어떤 feature가 정적/동적 행동을 구분하는데 중요한지 탐색

    • 중요도가 높은 feature와 target과의 관계를 확인하기 위해 kdeplot으로 시각화한 결과 (이미지는 한개지만, 모든 중요도 높은 feature들이 비슷한 양상을 보인다.)

      해석) fBodyAccJerk-mad()-X값이 -1.0과 가까우면 정적 행동으로 분류한다.

미션3. 기본 모델링

  • 다양한 분류 모델을 생성해서 각 모델의 성능을 측정하여 비교하기

모델1 - BaseLine

model1 = Sequential([
    Dense(n_classes, input_shape=(n_features, ), activation='softmax')
])

epochs는 20, learning_rate는 0.01로 설정했다.

중간 튐 현상이 있긴 하지만, 그래도 점점 val_error가 줄어드는 양상이 보인다.
learning_rate는 줄이고, epochs는 늘리면 좀 안정적이어질지 않을까 예상해본다.

모델2 - 5개 이상의 은닉층을 추가

model2 = Sequential([
    Dense(80, input_shape=(n_features, ), activation='relu'),
    Dense(60, activation='relu'),
    Dense(40, activation='relu'),
    Dense(20, activation='relu'),
    Dense(10, activation='relu'),
    Dense(n_classes, activation='softmax'),
])

모델1과 마찬가지로 epochs는 20, learning_rate는 0.01로 설정했다.

과적합이 발생했다. 데이터의 크기에 비해 너무 모델이 복잡해서 그런 것 같다. 그리고 learning rate도 더 줄이면 튐 현상도 줄어들 것같다.

모델3 - 학습률 조절

3-1. 모델1에서 학습률 0.01에서 0.001로 줄이기

확실히 val_err의 튐 현상이 줄어들었다. epochs를 늘리면 더 loss를 줄일 수 있을 것같다.

3-2. 모델2에서 학습률 0.01에서 0.001로 줄이기

확실히 튐 현상이 줄어든 걸 확인할 수 있었다.

모델4 - epochs 조절

4-1. 3-1에서 epochs를 20에서 50으로 늘리기

꽤 이상적인 학습을 한 것 같다👍

4-2. 3-2에서 epochs를 20에서 50으로 늘리기

epochs를 늘린 것이 큰 효과는 없는 것같다.

모델5 - Dropout 적용

4-2에서 각 레이어에 0.2의 비율로 Dropout을 적용해서 모델의 복잡도를 좀 낮춰보았다.

확실히 튐 현상이 줄어들었다. epochs를 좀 더 늘리면 loss를 더 줄어들 가능성이 보인다.

모델 1~5까지 Accuracy score로 성능 비교

모델Accuracy
모델1 (은닉층x, lr=0.01, epochs=20)0.9805
모델2 (은닉층o, lr=0.01, epochs=20)0.9737
모델3-1 (은닉층x, lr=0.001, epochs=20)0.9660
모델3-2 (은닉층o, lr=0.001, epochs=20)0.9669
모델4-1 (은닉층x, lr=0.001, epochs=50)0.9762
모델4-2 (은닉층o, lr=0.001, epochs=50)0.9898
모델5 (은닉층o, lr=0.001, epochs=50, droupout=0.2)0.9558

학습곡선만 봤을 때는 모델 4-1의 정확도가 가장 높을 것같았는데, 예상 밖의 결과가 나와서 놀랐다.
학습곡선만 확인하지 말고 성능 지표도 함께 확인하는 것이 중요하다는 것을 다시금 느꼈다.

미션4. 단계별 모델링

앞의 미션에 많은 시간을 쏟느라 아직 미션4는 해결하지 못했다.
추후에 해결하는 대로 여기를 채워넣으려고 한다! :)

😊 느낀점, 배운점

수업시간에는 Pytorch를 사용해서 딥러닝했었는데, 이번 프로젝트에서는 Keras를 사용하는 것을 권장하셨다. 하지만 혼자 미션을 해결할 때는 내가 알고 있는 것을 활용하고 싶어서 Pytorch를 쓰려고 했는데, 너무 많은 오류를 마주해서 오류를 해결하느라 정작 중요한 미션을 해결하지 못한 것 같다ㅎㅎ
결국은 이번 기회에 Keras를 사용해보게 되었는데, Pytorch보다 Keras가 훨씬 코드가 간결해서 사용하기도 편하고 코드를 읽기도 편해서 진작 Keras를 쓸걸 싶었다.

조별 회의시간이 정말 짧아서 제한된 시간 안에 팀원들의 결과물을 확인하고 결론을 도출하고, PPT작업, 발표준비까지 다 완료해야한다는 것에 부담을 느끼긴 했지만, 나중에 현업에서도 이런 상황이 분명히 발생할거라고 생각해서 미리 경험해본 것 같아서 좋았다. 이런 상황에서는 빠른 판단, 결론부터 이야기하기, 의사를 분명히 해서 전달하는 것이 중요하다는 것을 배웠다.

그리고 특히 아이데이션 세션이 있는 게 인상깊었다. 프로젝트를 진행하면서 사용했던 데이터들로 세상의 어떤 문제를 해결할 수 있을지 고민해볼 수 있는 의미있는 시간이었다. 이런 고민이 필요하다고는 항상 느꼈지만 다른 것들에 우선순위가 밀려 계속 미뤄왔는데, 이번 기회에 생각해볼 수 있어서 정말 좋았다.

profile
잊고싶지 않은 것들을 기록합니다✏️

0개의 댓글