티스토리 뷰
주제
- 센서 데이터 분류 예측
- 문제 정의
- 562개의 피처 데이터를 통해,타겟값인 6개의 동작 분류
- 3일차 캐글 컴퍼티션에는 라벨 12개를 분류
목표
- 피처 엔지니어링 실습
- 탐색적 데이터 분석 실습
- 머신러닝 모델링 과정 실습
- 모델 성능 향상을 위한 추가적인 피처 엔지니어링/튜닝 실습
프로젝트 내 역할
- pycaret을 이용한 Best model 도출
- 시계열 피처 도출
- smote를 이용한 upsampling
- boxcox를 이용한 데이터 변환
- 최종 순위 21위
1. 데이터 분석
1.1 구성
- data01_train
- 각 피처를 이미 전처리한 데이터. 필터 및 스케일링까지 적용되어 있으므로 따로 전처리할 필요는 없다.
- feature
- 각 피처가 속한 그룹을 표시하는 데이터
- train, test,sample - 캐글용
1.2 분석
train,test,sample은 데이터 유출 금지라서 1,2일차 데이터만 리뷰
가장 먼저 피처 요약표 분석
- 결측값이 없다.
- 피처가 무려 563개
- 가이드라인은 각 피처의 중요도를 기반으로 피처를 고르도록 되어 있다.
- describe를 봐도 0~1의 값으로 이미 스케일링 되어 있는 값이다.
2. 데이터 전처리
앞서 설명했듯이 1~2일차 데이터는 전처리 불필요.
캐글 컴피티션의 경우, 시계열 데이터가 주어졌다.
센서 시계열 데이터 이므로, 기본적인 단변량을 년,월,일,시,분,초로 나누어주었다.
그 후에는 시간이 없어서 결측치를 그냥 drop해주었다.(아마 이게 순위가 많이 내려간 큰 요인)
타겟 분포를 확인했는데, 솔직히 upsampling 할 수준은 아니었으나, 라벨이 12개라는 점 때문에 upsampling을 진행했다.
해당 방식은 smote로 진행했다. smote로 진행한 이유는 단순하게 upsample 하기 가장 간단해서 그렇다.
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
smote_train = train.drop('y',axis=1)
smote_label = train['y']
x_smote, y_smote = smote.fit_resample(smote_train, smote_label)
train = pd.concat([x_smote, y_smote], axis=1)
1~2일차에서 결과로, 해당 데이터에서는 모델을 분류하고 또 세부분류 하는 것보다 그냥 처음부터 다중분류를 하는 게 낫다는 걸 확인.
그래서 이렇게 구한 train과 y를 가지고 진행했다.
3. 머신러닝 결과
처음에 이 정도만 하고도 lgbm으로 0.907이 나왔다.
더 끌어올리고 싶어서 많은 시도를 했다.
예측 결과 피처로 추가 -> 더 떨어짐
예측 결과를 확률로 추가 -> 이것도 더 떨어짐
minmax scaler를 standard scaler로 변경 -> 더 떨어짐
minmax scaler 후 box_cox 변환 -> 성능 향상
그래서 최종적으로는 box_cox 변환한 데이터를 가지고 stack을 진행했다.
lgbm+knn+rf+xgb로 만든 모델이 제일 잘 나왔고, 최종 점수는 0.9244로 순위로는 21위/255명를 기록했다.
다른 사람(조)부터 배운 점
센서의 결측치를 시계열 시간순 정렬 후 -> 보간
imputer로 mice를 사용(다른 변수까지 고려해서 보간)
벡터 변환으로 angle 추가
파이차트로 타겟 분포 확인
2위 -> 각 라벨별로 중앙값을 채워주었다.
시간이 부족하므로 하나씩 넣어가면서 파라미터 튜닝
1위 -> 시간순 sort
label 데이터가 시간대별로 몰려있다.
그래서 각 시간대별로 아예 label을 전부 모아서 각각을 선형 보간으로 만들었다.
양쪽끝값이 나오는 건 중앙값으로.
다른 전처리 -> 날짜 데이터 추가
stacking까지
upsampling
시간단위 변경 => 밀리초까지 추가(생각 못했다)
타임스탬프가 확실히 있다면, 전체를 전부 쓰는 게 확실히 좋다.
깨달은 점과 인사이트
stack을 하지 않아도 성능이 잘 나오는 모델 머신은 따로 있다.
상위권의 경우 xgb가 많았다.
역시 머신러닝은 피처 엔지니어링 싸움이다. 밀리초는 진짜 상상도 못했다.
아래는 개인적으로 낸 결론.
센서 데이터로 행동을 정확하게 예측할 수 있다면, 사용자가 어떤 행동을 하는지에 대한 데이터를 더 면밀히 수집할 수 있다.
결론적으로 비즈니스에 활용하려면, 해당 모델을 활용하여 사용자의 행동 타겟팅을 할 수 있을 것이다.