안녕하십니까 11조 딥러닝개발자들 발표를 맡은 장한검입니다.

 

저희 조 발표는

 

발제 가이드라인을 따라 진행한 타이타닉 모델학습 코드 및 추가 정보 소개 진행한 후 모델평가 비교를 하고

 

그리고 추가 전처리를 진행한 모델학습 및 과제를 진행하며 만난 오류코드와 해결방법

 

순서로 발표를 진행하겟습니다.


데이터 로드부터 살펴 보겟습니다.

 

데이터셋을 가져오는 방법은 READ, SEABORN가 있으며  두 가지 방법의 차이점을 설명하고자합니다.

 

read로 가져오는 타이타닉 데이터셋은 캐글 또는 다른 사이트에서 직접 다운받아서 원본에 가까운 형태를 가지지만 

 

seaborn은 몇 가지 데이터 셋을 내장하고있어 따로 다운을 받지않아도 코드만 작성하면 데이터셋을 불러올수있으며

타이타닉 데이터셋에선 시각화와 분석하기 쉽게 이미 몇 가지 전처리 과정인 컬럼 추가 및 타입변환 된 컬럼 추가 등이 거쳐져 제공 되고있습니다.


다음은 피쳐 분석입니다.

 

저희 조는 5가지 방법으로 피쳐 정보에 대해 알아보았습니다.

 

cloumns매서드를 활용해 인덱스의 이름들을 불러 올 수있습니다.

보이는 표는 출력된 이름들을 해석하여 상관관계에 따라 탈락 가능한 컬럼을 분류 해보았습니다.

 

info메서드를 활용해 데이터 타입 행, 열 개수 결측치 수 등을 확인 할 수 있습니다.

 

head메서드는 데이터셋의 위쪽 5개의 데이터를 불러와 표형태로 보여줍니다. 이를 통해 소수점은 몇자리까지, object타입은 어떤 형태로 작성 되있는지 등을 알 수 있습니다.

 

describe메서드를 통해 행의 수 각 컬럼별 평균, 표준편차, 최소값, 25%값, 50%값, 75%값, 최대값을 확인할수있고 count를 보고 결측치를 예상할 수 있고 다른 값들로는 이상치를 감지 할 수있습니다.

 

isnull.sum을 확용해 각 컬럼별 결측치의 합을구해 결측치에 대한 정보를 파악하기 쉽게 만들 수 있습니다.


feature엔지니어링을 보겟습니다.

 

fillna함수를 활용해 중앙값으로 age 대체, 최빈값으로 승선한 항구 embarked 대체를 징행하였고 잘 진행 되었는지 print함수로 확인을 진행하였습니다.

 

map함수를 활용해 범주형 데이터를 수치형 데이터로 인코딩을 진행하였습니다. 각 수치는 임의로 지정하였고 생존여부에 대해선 yes에 1을 넣어 의미를 해석하기 쉽게 진행했습니다. head함수를 활용해 잘 바뀌었는지 확인했습니다.

 

다음은 기본 연산식을 활용해 수치형 데이터들로 새로운 컬럼을 생성했습니다.

자매 및 배우자 수컬럼과 부모 자식 수 컬럼에 본인을 포함한 컬럼을 코드식을 통해 추가 하였고 데이터 프레임을 불러와 확인했습니다.


모델학습은 로지스틱 회귀, 랜덤 포레스트, XGBoost를 활용해 예측을 진행했습니다.

 

로지스틱 모델을 통해 공통 된 부분을 살펴보고 각 모델학습의 코드를 본 뒤 평가 비교를 하겟습니다.

 

모델학습에 도움이 되고 평가에 필요한 sklearn에서 여러가지 기능들을 가져왔습니다.

 

앞서 소개한 전처리 방식으로 진행했습니다.

 

train_test_split으로 학습 데이터, 테스트 데이터 분리하고 테스트 사이즈와 랜덤 스테이트를 설정해주었습니다.

 

StandardScaler를 활용해 스케일링을 진행하였고

 

각 코드의 다른 설정으로는

 

로지스틱 모델의에서 max_iter=100 학습 최대 반복횟수를 100으로 설정

 

랜덤 포레스트 모델 생성에서 결과를 일관되게 재현 및 비교하기 위해 랜덤 스테이트를 설정

 

xgboost 모델 생성에서 

LabelEncoder의 경고 메세지를 줄이기 위한 use_label_encoder를 False 설정

로그 손실 값을 계산하고 출력하여 학습 상태를 확인할 수 있는 eval_metric='logloss' 설정했습니다.


모델 학습 평가 분석을 해보겟습니다.

 

각 모델학습들의 평가 출력 화면입니다.

 

우선 정확도로는 로지스틱 모델이 가장 높게 나왔지만 다른 모델과 비교했을 때 큰 차이는 없는 것으로 보입니다.

 

classification report를 보게 되면

survive의 값인 0과 1을 나누어서 예측한 값을 보여줍니다.

정밀도 precision , 재현율 recall, 정밀도와 재현율의 균형을 나타내는 F1점수

 

로지스틱 모델은 생존에 대한 예측을 더 높게 하였고 

랜덤포레스트와 XGBoost는 사망인 0을 더 잘 예측했습니다.

하지만 로지스틱 모델에서 생존의 재현율이 0.65로 성능이 좋지 않다고 생각합니다.

 

두 클래스의 평균 성능을 동일한 가중치로 평가한 값 Macro avg

각 클래스의 샘플 수에 따라 가중치를 적용해 계산된 평균 성능 Weighted avg

이며 로지스틱 모델의 성능이 가장 좋은 것으로 확인 되었습니다.

 

confusion matrix 혼동행렬을 해석하게 되면

0클래스를 0으로 정확히 계산한 수

0클래스를 1로 잘못 예측한 수

1클래스를 0으로 잘못 예측한 수

1클래스를 1로 정확히 예측한 수를 보여줍니다.

로지스틱 모델의 혼동행렬을 분석해보면

클래스 0에 대한 예측을 굉장히 잘하고있고

클래스 1에 대한 예측은 약 60%정도의 성능이 나오고있습니다. 

 

랜덤 포레스트와 XGBoost에 대한 설명을 어떻게 해야할지 모르겟는다 (넘길까?)

 

최종적으로

정확도는 세가지 모델 모두 비슷하게 측정 되며

로지스틱 모델의 클래스 0의 성능이 클래스 1보다 조금 더 높은 편이고 랜덤포레스트와 XGBoost는 0보다 1클래스가 성능이 더 좋다고 분석하였습니다.

 

따로 진행한 전처리 코드나 결과 비교, 만났던 오류 코드에 대한 부분은 발표 자료에만 넣을까?(이유는 시간 부족)

+ Recent posts