Skip to content

스마트폰 센서 기반 데이터를 활용한 행동 인식

Notifications You must be signed in to change notification settings

eunv0110/SmartSense-Activity

Repository files navigation

📱 스마트폰 센서 기반 행동 인식 프로젝트

close-up-friends-holding-smartphones_23-2149103059




📋 프로젝트 개요

"스마트폰 센서 데이터를 활용한 인간 행동 인식(HAR) 모델 개발"


본 프로젝트는 스마트폰의 가속도계와 자이로스코프 센서 데이터를 활용하여 사용자의 행동을 자동으로 인식하는 모델을 개발하는 것을 목표로 합니다. 이러한 기술은 헬스케어, 운동 모니터링, 안전 관리 등 다양한 분야에 활용될 수 있습니다.


⏰ 프로젝트 기간

  • 2024년 10월 16일 ~ 2024년 10월 18일 (3일간)

📝 문제 정의

❓ 스마트폰 센서 데이터(가속도계, 자이로스코프)를 통해 6가지 동작을 정확히 분류할 수 있는가?

행동 인식이 중요한 이유:

  • 🔹 스마트 디바이스의 컨텍스트 인식 기능 강화
  • 🔹 건강 모니터링 및 활동 추적 서비스 지원
  • 🔹 사용자 맞춤형 서비스 제공을 위한 기초 기술
  • 🔹 낙상 감지 등 안전 관련 응용 프로그램 개발 가능

🛠️ 기술 스택

분류 기술 용도
💻 언어 Python 전체 프로젝트 개발
데이터 처리 Pandas 데이터프레임 조작 및 전처리
NumPy 수치 연산 및 배열 처리
시각화 Matplotlib, Seaborn 데이터 시각화 및 결과 표현
🤖 머신러닝 Scikit-learn 데이터 전처리, 모델 평가
TensorFlow, Keras 신경망 모델 구현 및 학습
개발 환경 Google Colab 코드 개발 및 학습 환경

📊 데이터 소개

분석 대상 스마트폰 센서 기반 인간 행동 데이터
출처 UCI Machine Learning Repository
데이터 구성
  • 561개의 특성(feature)으로 구성된 데이터셋
  • 총 7,353개의 샘플(행)
  • 6개의 행동 클래스: STANDING, SITTING, LAYING, WALKING, WALKING_UPSTAIRS, WALKING_DOWNSTAIRS
측정 방법
  • 30명의 피실험자가 허리에 착용한 스마트폰(Samsung Galaxy S II)을 통해 데이터 수집
  • 2.56초 window 단위로 데이터 샘플링, 50% 중첩(overlapping)
  • 다양한 통계적 특징(평균, 표준편차, 최대값 등) 추출

🛠️ 프로젝트 수행 단계

1️⃣ 탐색적 데이터 분석

  • 데이터 기본 정보 확인
  • 특성 중요도 분석
  • 상위/하위 특성 KDE 시각화
  • 정적/동적 행동 그룹 분석
  • 센서 및 집계 방식별 중요도 분석

2️⃣ 기본 모델링

  • 데이터 전처리 (스케일링, 인코딩)
  • 다양한 신경망 구조 실험
    • 은닉층 없는 기본 모델
    • 다층 신경망 모델
    • 드롭아웃 적용 모델
    • 조기 종료(Early Stopping) 적용 모델
  • 모델 성능 비교 및 평가

3️⃣ 단계별 모델링

  • 계층적 모델 구성
    • 1단계: 정적/동적 행동 분류
    • 2단계: 세부 행동 분류(각 그룹별)
  • 모델 통합 파이프라인 구축
  • 테스트 데이터 예측 및 성능 평가

🧪 실험 결과

📊 변수 중요도 분석

분석 관점 주요 특성 관찰 결과
6개 행동 구분
  • fBodyAcc-bandsEnergy()-1,8
  • fBodyAccJerk-bandsEnergy()-1,24
  • fBodyGyro-bandsEnergy()-1,24
  • LAYING은 비교적 분류가 잘 됨
  • 다른 행동 간에는 구분이 상대적으로 어려움
  • 주파수 영역의 에너지 밴드 관련 특성이 중요함
  • 중요도 상위 변수들은 6개 행동을 세부적으로 구분하는데 효과적이지만, 정작 정적/동적 행동의 구분에는 덜 효과적
정적/동적 행동 구분
  • tBodyGyro-mean()-Z
  • tGravityAcc-mean()-X
  • tBodyGyro-std()-Z
  • 소수의 특성만으로도 높은 정확도로 구분 가능
  • 중력 가속도와 자이로스코프 센서 데이터가 핵심적
  • 특성 상위/하위 분석에서 뚜렷한 그룹 구분 확인됨
  • 흥미롭게도, 전체 모델에서 중요도가 낮은 하위 변수들이 정적/동적 행동 구분에는 더 효과적으로 작용

변수 중요도에 따른 KDE 분포 비교

스크린샷 2025-03-02 오후 10 04 15

중요도 상위 변수(tGravityAcc-energy()-X)의 KDE 분포
LAYING은 분리되지만 다른 행동들은 구분이 어려움

중요도 하위 변수(fBodyBodyGyroJerkMag-iqr())의 KDE 분포 - 정적 행동(STANDING, SITTING)과 동적 행동(WALKING 계열)이 뚜렷하게 구분됨

🔍 주목할 점: 위 KDE 플롯 시각화에서 볼 수 있듯이, 중요도가 높은 변수(좌측)는 LAYING 행동만 분리하고 나머지 행동들의 분포가 상당 부분 겹치는 반면, 중요도가 낮은 변수(우측)는 오히려 정적 행동과 동적 행동을 명확하게 구분합니다. 이는 모델 구축 시 단순히 전체 중요도가 높은 변수만 고려하는 것이 아니라, 문제의 계층적 특성에 맞는 변수 선택이 중요함을 보여줍니다.

📊 이진 분류(정적/동적 행동) 특성 분석

정적/동적 행동 구분을 위한 상위 특성의 분포 패턴

스크린샷 2025-03-02 오후 10 10 03
정적 행동(0)과 동적 행동(1)의 명확한 분류가 가능한 상위 5개 특성의 KDE 분포

🔍 주요 관찰: 이진 분류(정적/동적 행동 구분)에 초점을 맞춘 특성 중요도 분석에서는 위 그래프와 같이 매우 명확한 패턴이 관찰됩니다. 특히 tBodyAccJerk-entropy()-X와 같은 특성에서는 정적 행동(파란색)과 동적 행동(주황색)이 완전히 분리된 분포를 보여, 이진 분류가 99.9%의 높은 정확도로 가능했던 이유를 설명합니다. 이는 문제를 계층적으로 접근할 때 각 단계에 맞는 특성 선택의 중요성을 보여줍니다.

📈 기본 모델 성능 비교

모델 Hidden Layer Dropout Early Stopping Accuracy Test
model1 - - - 0.97 (0.954,0.975) 0.955812
model2 64,32,16,8 - - 0.98 (0.969,0.986) 0.959891
model3 64,32,16,8 0.1 - 0.98 (0.970,0.986) 0.951054
model4 64,32,16,8 0.1 min_delta=0.001, patience=5 0.97 (0.961,0.980) 0.941536
model7 64,32 - - 0.98 (0.971,0.987) 0.961251

📈 계층적 모델 성능

단계 모델 정확도 구성
1단계 정적/동적 행동 분류 0.999 Hidden Layer: 32, epoch: 50, learning rate: 0.001, sigmoid 활성화 함수
2단계 동적 행동 세부 분류 0.99 Hidden Layer: 64,32,16, epoch: 50, softmax 활성화 함수
정적 행동 세부 분류 0.96 Hidden Layer: 512,128,32, epoch: 70, softmax 활성화 함수
통합 파이프라인 모델 0.97 1단계 + 2단계 모델을 결합한 파이프라인
1단계: 정적/동적 행동 분류 2단계: 세부 행동 분류
1단계 모델 학습 곡선 동적 행동 모델 학습 곡선 정적 행동 모델 학습 곡선
1단계 모델 학습 곡선 동적 행동 모델 학습 곡선 정적 행동 모델 학습 곡선

학습 곡선 분석:

  • 1단계 모델(정확도: 0.999): 빠르게 수렴하며 안정적인 학습 곡선을 보임
  • 동적 행동 모델(정확도: 0.99): 약간의 변동이 있지만 비교적 안정적으로 수렴
  • 정적 행동 모델(정확도: 0.96): 가장 변동성이 크고 학습에 더 많은 시간이 소요됨

핵심 관찰: 정적 행동(STANDING, SITTING, LAYING) 간의 센서 데이터 패턴이 서로 유사하여 세부 분류가 더 어려운 반면, 동적 행동(WALKING 계열)은 상대적으로 특징이 뚜렷하여 분류가 용이함을 확인할 수 있습니다.


🌟 계층적 모델링 접근법

프로젝트의 핵심은 복잡한 다중 분류 문제를 더 단순한 하위 문제로 분해하는 계층적 접근법입니다.

  1. 1단계 모델: 정적 행동(0)과 동적 행동(1)을 구분 (정확도: 99.9%)

    • 정적 행동: STANDING, SITTING, LAYING
    • 동적 행동: WALKING, WALKING_UPSTAIRS, WALKING_DOWNSTAIRS
  2. 2-1단계 모델: 정적 행동 내 세부 분류 (정확도: 96%)

    • STANDING, SITTING, LAYING 구분
  3. 2-2단계 모델: 동적 행동 내 세부 분류 (정확도: 99%)

    • WALKING, WALKING_UPSTAIRS, WALKING_DOWNSTAIRS 구분
  4. 통합 파이프라인: 두 단계 모델을 결합하여 최종 예측 수행 (정확도: 97.5%)

계층적 모델링 접근법을 통해 최종 통합 파이프라인은 테스트 데이터에서 97.5%의 정확도를 달성했습니다.

test_result = data_pipeline(test)
print(accuracy_score(test['Activity'], test_result['Activity']))
46/46 —————————————————— 0s 1ms/step
27/27 —————————————————— 0s 2ms/step
20/20 —————————————————— 0s 2ms/step
0.9748470428280082

💡 모델 선택과 최적화

🔍 최적 단일 모델

✓ model 7: Accuracy(정확도) : 0.98

  • hidden layer 개수 2개
  • Dropout, Early Stopping 미사용
  • 단순한 구조로 설정했을 때 가장 정확도가 높게 나옴

🔍 최적 계층적 모델

✓ 1단계 모델: Accuracy(정확도) : 0.999

  • 정적 행동과 동적 행동을 분류하는 모델
  • 매우 높은 정확도로 두 그룹 구분 가능
  • 단순한 구조로도 뛰어난 성능 달성

📊 주요 관찰: 변수 중요도의 역설

흥미로운 관찰 결과 중 하나는 변수 중요도와 분류 효과성 간의 역설적 관계입니다. 전체 6개 행동 분류에서 중요도가 높게 나온 변수들은 정작 가장 기본적인 구분인 정적/동적 행동 분류에는 효과적이지 않았습니다. 반면, 중요도가 낮게 평가된 하위 변수들이 정적/동적 행동을 명확하게 구분하는 데 더 효과적이었습니다.

이는 문제의 계층적 특성을 이해하고 각 단계에 맞는 특성을 선별하는 것의 중요성을 보여줍니다. 이러한 통찰이 계층적 모델링 접근법의 효과성을 뒷받침합니다.

💡 결론 및 시사점

📝 연구 결론

  • 계층적 접근법의 우수성: 복잡한 다중 분류 문제를 단계별로 해결하는 방식이 단일 모델보다 효과적
  • 이진 분류의 높은 정확도: 정적/동적 행동 구분은 99.9%의 정확도로 매우 신뢰성 높게 수행 가능
  • 행동 유형별 정확도 차이: 동적 행동(99%)이 정적 행동(96%)보다 세부 분류가 더 정확함 - 정적 행동 간 유사성이 더 높기 때문
  • 모델 단순화의 효과: 더 복잡한 구조가 아닌, 최적화된 간결한 모델(model 7)이 더 좋은 성능 달성
  • 파이프라인 자동화: 데이터 전처리부터 예측까지 일관된 파이프라인 구축으로 실시간 예측 시스템 구현 가능

🔍 실용적 활용 방안

  • 건강 관리 시스템: 일일 활동량 자동 기록, 칼로리 소모 추적, 운동 패턴 분석을 통한 맞춤형 피트니스 코칭
  • 활동 촉진 서비스: 장시간 정적 행동 시 알림 제공, 규칙적인 움직임 유도로 건강한 생활 습관 형성 지원
  • 맞춤형 UX: 사용자의 현재 행동 상태에 따라 스마트폰 인터페이스와 알림 방식을 자동 최적화
  • 스마트홈 연동: 행동 패턴 감지에 따른 자동 조명 조절, 실내 온도 제어, 음악/미디어 추천 등 환경 최적화
  • 안전 모니터링: 노인이나 장애인의 비정상적 행동 패턴 감지, 낙상 즉시 알림, 응급 상황 자동 대응 시스템
  • 교통 및 도시 계획: 대규모 인구의 행동 패턴 분석을 통한 대중교통 최적화 및 도시 인프라 계획 지원

🌟 프로젝트 배운 점

📊
특성 선택
많은 특성(561개) 중 중요도 기반으로 핵심 특성을 선별하는 기법 습득
🔄
계층적 모델링
복잡한 다중 분류 문제를 더 작은 단위로 분해하여 해결하는 접근법 학습
🤖
딥러닝 최적화
드롭아웃, 조기 종료 등 과적합 방지 기법의 효과적인 적용 방법 습득
📈
신뢰구간 평가
단순 정확도가 아닌 신뢰구간을 활용한 모델 평가의 중요성 인식 - 정확도 뿐만 아니라 모델 예측의 신뢰성도 고려해야 함
🔍
세분화된 분류
단일 복잡 모델의 높은 정확도보다 문제를 세분화하여 각 하위 문제를 정확하게 해결하는 접근법이 더 효과적임을 학습
⚙️
파이프라인 구축
복잡한 데이터 처리 및 다단계 예측 과정을 일관된 흐름으로 구현하는 기술 습득
💼
센서 데이터 이해
가속도계, 자이로스코프 센서 데이터의 특성과 의미에 대한 이해 심화

👨‍💻 참여자

김예은 김지수 윤종진 이대희 정재원 황은비

About

스마트폰 센서 기반 데이터를 활용한 행동 인식

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published