[실전 머신러닝] 로지스틱 회귀 – 타이타닉 생존자 예측하기 ❶

직접 로지스틱 회귀 분석 모델로 타이타닉 데이터셋을 분석해 생존자를 예측하고 작동 원리를 이해합니다. 또한 분류(Classification) 문제를 예측하고 평가합니다. 총 3편입니다.

 

로지스틱 회귀 – 타이타닉 생존자 예측하기 ❶

 

로지스틱 회귀 소개

로지스틱 회귀(Logistic Regression) 또한 선형 회귀처럼 기본 분석 모델입니다. 로지스틱 회귀 분석은 알고리즘의 근간을 선형 회귀 분석에 두고 있어서 선형 회귀 분석과 상당히 유사하지만 다루는 문제가 다릅니다. 선형 회귀 분석은 연속된 변수를 예측하는 반면, 로지스틱 회귀 분석은 Yes/No처럼 두 가지로 나뉘는 분류 문제를 다룹니다.

선형 회귀 분석과 마찬가지로, 기본 알고리즘이라서 꼭 알고 있어야 합니다. 실제 이진분류가 필요한 상황이 많기 때문에 두 가지 범주를 구분하는 간단한 예측에 유용하며 딥러닝에서도 기본 지식입니다.

 

▼ 예시 그래프

 

▼ 장단점

 

▼ 유용한 곳

  • Yes/No, True/False와 같은 두 가지 범주로 나뉜 값을 예측하는 데 사용합니다.
  • 분류 문제에 있어서 기준선(Baseline)으로 자주 활용됩니다(타 모델과 비교 목적).

 

1. 문제 정의 : 한눈에 보는 예측 목표

영화 〈타이타닉〉으로 유명한 타이타닉호는 북대서양 횡단 여객선입니다. 모두가 아는 것처럼 1912년 4월 10일 영국의 사우샘프턴에서 미국의 뉴욕으로 향하던 첫 항해 중에 빙산과 충돌하여 침몰했습니다. 안타깝게도 이 사건으로 많은 사상자가 발생했습니다. 이번에 다룰 타이타닉 데이터셋은 당신 승선한 승객의 정보를 담고 있습니다. 이름, 성별, 나이, 티켓 번호 등 같은 정보가 실제로 생존에 어떤 영향을 미치는지 확인해봅시다.

  • 미션: 타이타닉 승객 정보 데이터셋을 이용해 생존 여부를 예측하라.
  • 알고리즘: 로지스틱 회귀(Logistic Regression)
  • 데이터셋 소개: titanic.csv
  • 종속변수: Survived(생존 여부)
  • 데이터셋 소개: 타이타닉에 승객의 정보를 담은 데이터셋입니다. 각 승객 정보(이름, 성별, 나이, 티켓 번호 등)를 활용하여 생존 여부를 예측합니다.
  • 사용 라이브러리
    • numpy (numpy==1.19.5)
    • pandas (pandas==1.3.5)
    • seaborn (seaborn==0.11.2)
    • matplotlib (matplotlib==3.2.2)
    • sklearn (scikit-learn==1.0.2)
  • 예제 코드

 

2. 라이브러리 및 데이터 불러오기

판다스를 활용하여 ‘titanic.csv’를 data라는 이름으로 불러옵니다.

 

import pandas as pd # 판다스 라이브러리 임포트
file_url = 'https://media.githubusercontent.com/media/musthave-ML10/data_source/ main/titanic.csv'
data = pd.read_csv(file_url) # 데이터셋 읽기

 

3. 데이터 확인하기

head( ) 함수로 상위 5행 출력해 데이터를 살펴봅시다.

 

data.head() # 상위 5행 출력

 

❶ 독립변수 8개와 ❷ ****종속변수(Survived) 1개를 볼 수 있습니다. 변수 이름에 대한 설명은 다음과 같습니다.

  • Pclass : 비행기처럼, 일종의 티켓 클래스입니다.
  • Name:승객이름
  • Sex : 성별
  • Age : 나이
  • SibSp:함께탑승한형제및배우자의수
  • Parch: 함께탑승한부모및자녀의수
  • Ticket : 티켓 번호
  • Embarked : 승선한 항구(C = Cherbourg, Q = Queenstown, S = Southampton)
  • Survived:생존유무(1=생존,0=사망)

 

이번에는 info( ) 함수를 호출해 각 변수의 특징을 살펴봅시다.

 

data.info() # 변수 특징 출력

 

이번에도 모든 변수의 ❶ Non-Null Count값이 889로 모두 같습니다. 즉 빈 값(결측치)이 없습니다. ❷ Dtype에서 자료형을 살펴보니 문자형(object) 변수가 4개입니다. Name, Sex, Ticket, Embarked입니다.

이번에는 통계 정보를 확인하겠습니다.

 

data.describe() # 통계 정보 출력

 

 

Pclass에서 min부터 max까지의 값을 보면 1/2/3 총 3가지 값이 있습니다. ❷ Age는 50%값(중앙값)이 28, 75%(상위 25%) 값이 35였다가 max가 80으로 갑자기 높아집니다. 대부분 승객이 비교적 젊은 층이지만, 일부 나이가 많은 승객들이 있다고 해석할 수 있습니다. ❸ SibSp와 ❹ Parch는 25%(하위 25%)와 50% 값이 모두 0입니다. ❹ Parch의 경우 75% 값까지 0입니다. 즉, 대부분 승객이 가족을 동반하지 않고 혼자 탑승했습니다.

이번에는 각 변수의 상관관계를 확인하겠습니다. 상관관계는 두 변수 간의 변화가 서로 연관되었을 때, 즉 A가 증가할수록 B가 증가하거나, 반대로 A가 증가할수록 B가 감소하거나 하는 관계를 숫자로 보여줍니다. 변수 이름만 놓고 봤을때서로관련이있을것같은변수가보이나요?

 

💡상관관계: 두 변수 간의 관련성. 예를 들어 변수 A가 증가할 때, B도 증가하면 상관관계가 있다고 할 수 있습니다. 반대로 A가 증가할 때 B가 감소한다면 이 또한 음의 방향으로 상관관계가 있다할 수 있습니다.

 

data.corr() # 상관관계 출력

 

결과 테이블을 보면 자료형이 object인 변수 4개가 빠져 있습니다. 상관관계는 숫자가 아니면 계산이 안 되기 때문에, 파이썬에서 자동으로 문자형 변수들을 제거하고 상관관계를 보여줍니다. 0에 가까울수록 상관관계가 없는 것이고, 1 혹은 -1에 가까울수록 상관관계가 큰 겁니다. 양수는 정적 상관, 즉 A가 증가할수록 B도 함께 증가하는 경우이며, 반대로 음수는 부적 상관으로 A가 증가할수록 B가 감소하는 경우입니다. 따라서 단순히 숫자가 크고 작음으로 상관관계의 크기를 판단하면 안 됩니다. -0.5는 0.1보다 작은 숫자지만, 음의 방향일뿐이지 상관관계는 더 크기 때문입니다.

가장 큰 상관관계를 보이는 부분은 Parch와 SibSp입니다(약 0.41). 아마도 혼자 온 승객들이 상당히 많고, 가족을 동반할 경우 부모와 자녀, 형제와 배우자를 함께 동반하는 경우가 많기 때문이 아닐까 짐작할 수 있습니다. 이정도 수치면 높은 상관관계는 아니고 중간 정도의 상관관계입니다. 상관관계의 강도에 대한 ( 절댓값 기준) 일반적인 해석은 다음과 같습니다.

  • 0.2이하:상관관계가거의없음
  • 0.2~0.4:낮은상관관계
  • 0.4~0.6:중간수준의상관관계
  • 0.6~0.8:높은상관관계
  • 0.8이상:매우높은상관관계

 

그런데 위의 상관관계 테이블로는 상관관계 파악이 쉽지 않습니다. 더 파악하기 쉬운 히트맵(Heatmap)이라는 그래프를 그려보겠습니다. 우선 그래프를 그릴 맷플롯립과 시본 라이브러리를 불러옵니다.

 

import matplotlib.pyplot as plt
import seaborn as sns

 

히트맵 생성에는 sns.heatmap( ) 함수를 사용합니다. 앞서 사용한 상관관계 테이블 생성 코드를 인수로 넣어주면 됩니다.

 

sns.heatmap(data.corr()) # 상관관계에 대한 히트맵 생성
plt.show() # 그래프 출력(맷플롯립과 시본이 최근 버전이면 제외해도 됨)

 

히트맵을 그려 상관관계를 색으로 확인할 수 있게 되었습니다. 히트맵 우측에는 색상이 의미하는 수치를 보여줍니다. 그런데 우리는 상관관계의 강도를 절댓값 기준으로 해석하기 때문에, 0을 기준으로 대칭이 되는 색상 배열을 사용하는 편이 더 좋습니다. 색상을 변경하는 매개변수를 추가해 해결하겠습니다.

 

sns.heatmap(data.corr(), cmap='coolwarm') # 히트맵 생성 
plt.show() # 그래프 출력

 

💡Note: 극명하게 대비를 주는 coolwarm 색상 배열을 활용했습니다. 시본에서 제공하는 색상 배열은 170여 가지입니다. 이 책에서 모두 다루기에는 너무 많은 색상 배열들이 있으니 구글에서 ‘seaborn palette’로 검색해 여러 아티클에 다양한 색상을 활용해보시기 바랍니다.

 

이제 더 보기 편해졌습니다. 양수는 빨강, 음수는 파랑 계열로 표현되고 있으며, 관계가 강할수록 더 진하게 표시됩니다. 우측 범례를 보면 빨강과 파랑 사이에서 가장 밝은 부분이 0보다 조금 위쪽인 ❶ 0.4 부근에 있습니다. 입력된 수치의 범위가 1부터 -0.5까지라서 그래프에서는 -1 ~ +1까지가 아닌, ❷ -0.5 ~ +1까지로 잡아 색상을 표시했기 때문입니다. 그래프에서 표시 범위를 -1에서 1까지로 조정하여 색상의 밸런스를 맞춰보겠습니다.

 

sns.heatmap(data.corr(), cmap='coolwarm', vmin=-1, vmax=1)

 

vmin과 vmax 매개변수를 이용하여 데이터 범위의 최솟값과 최댓값을 지정하여 더 밸런스가 맞는 색상을 얻었습니다. 각 칸 안에 상관관계 수치를 표현하면 더 좋을 것 같습니다. 이 역시 추가하겠습니다.

 

sns.heatmap(data.corr(), cmap='coolwarm', vmin=-1, vmax=1, annot=True)

 

드디어 이상적인 형태의 히트맵이 되었습니다. 파이썬에서는 이와 같이 다양한 매개변수를 추가하여 활용할 수 있습니다. 매개변수는 그래프를 그릴 때 뿐만 아니라, 다양한 모듈에 적용됩니다. 모듈에 따라서 가지고 있는 매개변수가 다르기 때문에, 각 모듈에 맞는 매개변수를 적절히 활용해야 합니다.

 

다음편에서 계속 됩니다.

권시현(데싸노트)

삼성전자에 마케팅 직군으로 입사하여 앱스토어 결제 데이터를 운영 및 관리했습니다. 데이터에 관심이 생겨 미국으로 유학을 떠나 지금은 모바일 서비스 업체 IDT에서 데이터 사이언티스트로 일합니다. 문과 출신이 미국 현지 데이터 사이언티스트가 되기까지 파이썬과 머신러닝을 배우며 많은 시행착오를 겪었습니다. 제가 겪었던 시행착오를 덜어드리고, 머신러닝에 대한 재미를 전달하고자 유튜버로 활동하고 책을 집필합니다.

현) IDT Corporation (미국 모바일 서비스 업체) 데이터 사이언티스트
전) 콜롬비아 대학교, Machine Learning Tutor, 대학원생 대상
전) 콜롬비아 대학교, Big Data Immersion Program Teaching Assistant
전) 콜롬비아 대학교, M.S. in Applied Analytics
전) 삼성전자 무선사업부, 스마트폰 데이터 분석가
전) 삼성전자 무선사업부, 모바일앱 스토어 데이터 관리 및 운영

강의 : 패스트캠퍼스 〈파이썬을 활용한 이커머스 데이터 분석 입문〉

SNS : www.youtube.com/c/데싸노트

Leave a Reply

©2020 GoldenRabbit. All rights reserved.
상호명 : 골든래빗 주식회사
(04051) 서울특별시 마포구 양화로 186, 5층 512호, 514호 (동교동, LC타워)
TEL : 0505-398-0505 / FAX : 0505-537-0505
대표이사 : 최현우
사업자등록번호 : 475-87-01581
통신판매업신고 : 2023-서울마포-2391호
master@goldenrabbit.co.kr
개인정보처리방침
배송/반품/환불/교환 안내