[ML] 스마트폰 센서 데이터로 사용자 행동 분류하기: HAR 다중분류 실습

2026. 4. 5. 07:55·ML & DL
데이터 다운로드:
https://www.kaggle.com/datasets/uciml/human-activity-recognition-with-smartphones
 

Human Activity Recognition with Smartphones

Recordings of 30 study participants performing activities of daily living

www.kaggle.com

 

1. 문제 소개: 사용자 행동 인식이란

사용자 행동 인식(Human Activity Recognition, HAR)은 스마트폰이나 웨어러블 기기의 센서 데이터를 바탕으로 사람이 어떤 행동을 하고 있는지 분류하는 문제이다. 

대표적으로 걷기, 앉기, 서 있기, 계단 오르기, 계단 내려가기, 눕기와 같은 행동을 예측하는 데 활용된다.

 

이번 실습에서는 스마트폰 센서 기반 데이터를 이용해 여러 머신러닝 분류 모델을 비교하고, 하이퍼파라미터 튜닝을 통해 최종적으로 가장 적합한 모델을 찾는 과정을 정리해보았다.

 

2. 데이터셋 구조 살펴보기

이번에 사용한 데이터는 Kaggle에 공개된 Human Activity Recognition with Smartphone 데이터셋이다.

이 데이터는 스마트폰의 가속도계와 자이로스코프 센서 정보를 바탕으로 만들어졌으며, 원시 시계열 데이터가 아니라 이미 정리된 수치형 특징들로 구성되어 있다.

 

즉, 딥러닝보다도 전통적인 머신러닝 분류 모델이 충분히 강한 성능을 낼 수 있는 구조라고 볼 수 있다.

 

또한 데이터에는 subject 컬럼이 포함되어 있는데, 이는 사람 ID에 해당한다. 이 값을 그대로 입력 변수에 포함하면 모델이 행동 패턴이 아니라 특정 살마의 특성을 학습할 수 있으므로, 이번 실습에서는 데이터 누수를 방지하기 위해 제거하고 학습을 진행했다.

 

3. 전처리와 학습 데이터 준비

전처리 단계에서는 다음 과정을 수행했다.

Activity 컬럼을 타깃값으로 분리하고, subject 컬럼은 제거했다. 이후 활동 라벨은 모델 학습을 위해 숫자형으로 인코딩했다. 또한 SVM, Logistic Regression, KNN 처럼 입력 스케일의 영향을 많이 받는 모델에는 StandardScaler를 적용했다.

 

이 과정에서 다시 한 번 느낀 점은, 모든 모델에 똑같은 전처리를 적용하는 것이 아니라 '모델 특성에 맞는 전처리'가 중요하다는 점이다.

 

4. 비교할 분류 모델 선정

이번 실습에서는 서로 성격이 다른 여러 모델을 비교했다.

  • Logistic Regression
  • Random Forest
  • XGBoost
  • LightGBM
  • SVM (RBF)
  • KNN

Logistic Regression은 베이직라인 역할을 하고, Random Forest는 트리 기반 모델의 대표적인 예시이다.

XGBoost와 LightGBM은 성능이 강력한 부스팅 계열 모델이며, SVM은 고차원 데이터에서 자주 강한 성능을 보이는 대표적인 분류기이다. 

KNN은 거리 기반 모델 비교를 위해 함께 넣었다.

 

5. 평가 지표 정리

다중분류 문제에서는 Accuracy만 보는 것이 부족하다. 그래서 이번 실습에서는 Accuracy, Precision, Recall, F1-score, AUC를 함께 비교했다.

 

Accuracy는 전체 정답률이고, Precision은 예측의 신뢰도, Recall은 실제 정답을 얼마나 잘 찾아냈는지를 보여준다. 

F1-score는 Precision과 Recall의 균형을 나타내는 지표이다.

AUC는 Area Under the Curve의 약자로, 모델이 클래스 간 구분을 얼마나 잘하는지를 보여준다.

 

즉, Accuracy는 "얼마나 많이 맞췄는가"이고, AUC는 "얼마나 잘 구분하는가"라고 이해하면 된다.

 

6. 베이스라인 모델 성능 비교

베이스라인 비교 결과에서는 Linear SVM과 Logistic Regression이 꽤 높은 성능을 보였다. 이는 데이터가 이미 잘 정제된 수치형 특징으로 이루어져 있어서, 복잡한 비선형 모델이 아니더라도 좋은 분류 결과를 낼 수 있었기 때문이라고 해석할 수 있다.

 

반면 KNN은 상대적으로 낮은 성능을 보였는데, 이는 특징 수가 많고 거리 계산의 영향을 크게 받는 데이터 구조 때문으로 볼 수 있다.

 

이 단계에서 인상적이었던 점은 "복잡한 모델이 무조건 더 좋다"는 것이 아니라, 데이터 구조가 모델 성능을 크게 좌우한다는 사실이었다. 

 

7. 하이퍼파라미터 튜닝 과정

베이스라인 결과와 모델 특성을 고려해 XGBoost, LightGBM, SVM(RBF)을 중심으로 하이퍼파라미터 튜닝을 진행했다. 튜닝은 RandomizedSearchCV를 사용했고, 교차검증 기반으로 최적 파라미터를 탐색했다.

 

튜닝 결과 교차검증 점수는 다음과 같았다.

  • LightGBM: 0.9937
  • XGBoost: 0.9894
  • SVM(RBF): 0.9861

이 결과만 보면 LightGBM이 가장 좋아 보인다. 하지만 모델 선택은 여기서 끝나지 않는다.

교차검증 성능이 높더라도, 최종 테스트셋에서의 일반화 성능이 다르게 나타날 수 있기 때문이다.

 

8. 최종 모델 선정 결과 해석

최종 테스트셋에서 튜닝 모델들의 성능을 비교한 결과는 다음과 같았다.

모델명 Accuracy Precision Recall F1-score AUC
Best SVM (RBF) 0.9566 0.9574 0.9566 0.9564 0.9977
Best LightGBM 0.9427 0.9437 0.9427 0.9425 0.9975
Best XGBoost 0.9413 0.9425 0.9413 0.9411 0.9974

 

결과적으로 최종 우승 모델은 SVM(RBF) 이다.

 

흥미로운 점은 교차검증에서는 LightGBM이 1등이었지만 테스트셋에서는 SVM(RBF)이 더 높은 Accuracy, F1-score, AUC를 기록했다는 점이다. 이는 모델 선택 시 교차검증 결과만 보는 것이 아니라, 반드시 최종 테스트셋 결과까지 함께 확인해야 한다는 점을 잘 보여준다.

 

또한 베이스라인에서 Linear SVM이 강했고, 최종적으로는 RBF SVM이 1등이 되었다는 점을 보면, 이번 HAR 데이터는 매우 복잡한 트리 앙상블보다도 커널 기반 경계 설정이 잘 맞는 구조였다고 해석할 수 있다.

 

9. 느낀 점 및 한계

이번 실습을 통해 느낀 점은 세 가지 이다.

 

첫째, 잘 정제된 특징 기반 데이터에서는 전통적인 머신러닝 모델이 여전히 매우 강력하다는 점이다.

둘째, Accuracy만 보는 것이 아니라 F1-score와 AUC까지 함께 봐야 모델을 제대로 평가할 수 있다는 점이다.

셋째, 교차검증 1등 모델이 최종 테스트셋 1등 모델과 다를 수 있기 때문에, 모델 선택은 반드시 최종 평가까지 마쳐야 한다는 점이다.

 

다만 이번 실습은 주어진 train/test 분할을 기준으로 진행한 것이므로, 더 엄밀하게는 subject 단위 일반화 성능을 따로 검토해 볼 수도 있다.

또한 confusion matrix를 통해 어떤 행동 클래스끼리 혼동되는지도 추가로 분석하면 더 깊이 있는 해석이 가능하다.

 

10. 전체 코드 및 마무리

전체 코드는 GitHub의 05_machine_learning > 06_ensenble > practice > practice.ipynb 파일에 정리해두었고, 데이터는  포스팅 상단의 Kaggle 링크를 통해 내려받아 동일하게 실습할 수 있다.

 

이번 실습은 단순히 모델 정확도만 비교하는 연습이 아니라,

[ 데이터 이해 → 전처리 → 모델 비교 → 하이퍼파라미터 튜닝 → 최종 해석 ]이라는 머신러닝 전체 흐름을 정리하는 좋은 경험이었다.

 

특히 이번 결과를 통해, 최신 부스팅 모델이 항상 정답은 아니며 데이터 구조에 따라 SVM 같은 전통적인 모델이 더 뛰어난 결과를 낼 수도 있다는 점을 확인할 수 있었다.

 

* 본 분석은 생성형 AI 중 저와 잘 맞는 chatGPT와 함께 학습했습니다.

 

 

'ML & DL' 카테고리의 다른 글

[ML] 상품명 기반 군집화: TF-IDF와 KMeans로 제품 카테고리 자동 분류하기  (1) 2026.04.07
머신러닝을 한 단계 더 이해하기  (0) 2026.03.29
머신러닝 성능을 바꾸는 핵심 요소  (0) 2026.03.29
지도학습 핵심 개념과 대표 알고리즘  (0) 2026.03.29
머신러닝의 기본 흐름 이해하기: 데이터부터 첫 모델까지  (0) 2026.03.29
'ML & DL' 카테고리의 다른 글
  • [ML] 상품명 기반 군집화: TF-IDF와 KMeans로 제품 카테고리 자동 분류하기
  • 머신러닝을 한 단계 더 이해하기
  • 머신러닝 성능을 바꾸는 핵심 요소
  • 지도학습 핵심 개념과 대표 알고리즘
J. Son
J. Son
Petit à petit l'oiseau fait son nid.
  • J. Son
    Steady Study Log
    J. Son
  • 전체
    오늘
    어제
    • 분류 전체보기 (170) N
      • Python & SQL (63)
        • Python Basics (21)
        • Python Problems (23)
        • Python Practice (11)
        • MySQL (1)
        • Git & GitHub (7)
      • ML & DL (7) N
      • Projects (5)
        • Project Portfolio (5)
      • AI Camp (4)
        • Camp Reflection (4)
      • Concept Notes (6)
        • Statistics & Stata (4)
        • Mathematics (2)
      • Archive (84)
        • Java (24)
        • R (1)
        • Languages (49)
        • Miscellaneous (10)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • GitHub
    • WikiDocs
  • 공지사항

  • 인기 글

  • 태그

    Python
    파이썬
    GIT
    프로젝트 오일러
    불어 공부
    machine learning
    Stata
    점프투파이썬 연습문제
    초보자를 위한 파이썬 300제
    프랑스어 공부
    어린왕자 불어
    python streamlit
    streamlit
    passe compose
    파이썬 streamlit
    share.streamlit.io
    MySQL
    파이썬 크롤링
    Le Petit Prince
    파이썬 문제
    자바
    객체
    python problem
    맥 git
    점프투파이썬 연습문제 풀이
    머신러닝
    복합과거
    Github
    불어 관계대명사
    어린왕자 프랑스어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
J. Son
[ML] 스마트폰 센서 데이터로 사용자 행동 분류하기: HAR 다중분류 실습
상단으로

티스토리툴바