[KT AIVLE(에이블 스쿨) 3기] 11주차 : AICE ASSOCIATE 대비 특강, 미니 프로젝트 5차

2023. 4. 24. 23:40KT 에이블 스쿨


[11주차] AICE ASSOCIATE  대비 특강, 미니 프로젝트 5차

원래 미니 프로젝트가 5일 동안 진행될 예정이었는데, 다가오는 AICE associate를 대비하여 특강을 준비해주셨다!

그래서 1~2일차는 AICE ASSO 대비, 3~5일차는 미니 프로젝트 5차가 진행됐다.

 


AICE ASSOCIATE 대비 특강 

주제 1  : VOC를 제기한 고객이 해지할 지 여부를 예측하는 머신러닝 ,딥러닝 모델 구현

 

프로젝트의 진행 

1) 필요한 라이브러리 설치

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

2) 데이터 로딩 

df = pd.read_csv('voc_data.csv')

3) 데이터의 구성 확인

#앞부분 5줄
df.head()
#뒷부분 5줄
df.tail()
#정보(컬럼정보, Null 여부, 타입)
df.info()
#인덱스 확인
df.index
#컬럼 확인
df.columns
#값 확인
df.values
#통계치 확인
df.describe()
#Null 확인 
df.isnull().sum()
#컬럼 데이터별 건수 확인
df['컬럼명'].value_counts()
#모든 컬럼에 대한 데이터 분포 건수 확인
[df[c].value_counts() for c in df]

4) 데이터 결측치 처리

#컬럼 삭제
df.drop(columns=['컬럼명'])
# _ 값 확인
df['컬럼명'] == '_'
# _ 값 null로 변경
df.replace('_', np.nan, inplace=True)
# null을 특정 값으로 변경
df['컬럼명'].fillna(값, inplace=True)
df['컬럼명'].replace(np.nan, 값, inplace=True)

5) 라벨 인코딩, 원핫 인코딩 

from sklearn.preprocessing import LabelEncoder
# LabelEncoder
le = LabelEncoder()
df['컬럼명'] = le.fit_transform(df['컬럼명'])

# One-Hot-Encoding
df = pd.get_dummies(data=df, columns=['컬럼명'], drop_first=True)

6) x,y 데이터 분리

from sklearn.model_selection import train_test_split

X = df.drop('컬럼명').values
y = df['컬럼명'].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)

7) 데이터 정규 분포화, 표준화 

from sklearn.preprocessing import StandardScaler

# StandardScaler 적용
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

8) 모델링 & 성능 평가


주제 2  : 실주행 시간을 예측하는 모델을 만들고 이후에 출발 시간+ 실주행시간으로 도착시간 예측

 

프로젝트의 진행 

# 데이터 로딩
df = pd.read_csv('nav_data.csv',encoding='cp949')
# jointplot
sns.jointplot(x='컬럼명', y='컬럼명', data=df)
# 상관계수
matrix=df.corr()
matrix
#heatmap
sns.heatmap(data=matrix, annot=True,cmap='Blues')

# 범주형 -> 수치형으로 변환 
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['컬럼명'] = le.fit_transform(df['컬럼명'])

# 원=핫 인코딩
df_one = pd.get_dummies(df, columns='컬럼명', drop_first=True)

# x, y 분리
x = df_one.drop(['컬럼명'], axis=1)
y = df_one['컬럼명']

# 훈련 검증 데이터셋 7:3
from sklearn.model_selection import train_test_split
x_train, x_val, y_train, y_val = train_test_split(x, y, test_size=0.3, random_state=42

# 정규분포화 & 표준화
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_val)

+) 모델링

 


미니 프로젝트 5차

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

- 센서 데이터로 Activity 분류

( LAYING, STANDING, SITTING, WALKING, WALKING_UPSTAIRS,WALKING_DOWNSTAIRS)

 

프로젝트의 진행 방향

1) 변수 중요도 구하기

- act 별 중요한 변수 중요도 

- 중요한 feature와 중요하지 않은 feature 상위 N개 선정

- 각 feature 그룹별 중요도 파악

 

2) 정적 / 동적 행동으로 구분하여 분석

- 정적  : LAYING, STANDING, SITTING , 동적  :  WALKING, WALKING_UPSTAIRS,WALKING_DOWNSTAIRS 

- 정적 0, 동적 1 로 두어 분석

 

3) 개별 행동 분석

- 해당 행동 1 , 나머지 0으로 두어 분석

 

전처리

- 가변수화

- 데이터 분할

- NaN 처리

- 스케일링

모델링 1 - 기본 모델링

- 각 알고리즘 별로 전체 변수 모델링 성능 비교

-  중요도 상위 N개 변수를 선택하여 모델링하고 성능 비교

-> 변수를 하나씩 늘려가며 적절한 N개를 찾기

모델링 2 - 단계별 모델링

step 1 ) 정적(0), 동적(1) 행동 분류 모델 생성

- step 1에서 정적(0)으로 예측 -> step2의 정적 행동 분류 모델

- step 1 에서 동적(1)으로 예측 ->step2의 동적 행동 분류 모델

step 2 ) 세부 동작에 대한 분류 모델 생성

- 정적 행동 분류 모델 : LAYING, STANDING, SITTING

- 동적 행동 분류 모델 :  WALKING, WALKING_UPSTAIRS,WALKING_DOWNSTAIRS 

step 3) 1,2 단계의 모델을 통합하기

 

Kaggle 

마지막 날에는 kaggle 경진이 이루어졌는데, 사실 위에서 했던 과정이 필요하지는 않았다.학습 데이터셋도 새로 주셨고,  위에서 짰던 모델도 사용하지 않았던..변수 중요도도 딱히 영향을 주지 않았다. 낮은 중요도를 보이는 변수를 삭제해도 성능에는 큰 도움을 주지 않았다.lightbgm을 사용했고 하이퍼 파라미터 값을 조정하는게 성능 향상에 가장 큰 도움을 주었다.