[실전 머신러닝] XGBoost:커플 성사 여부 예측하기 ❶

부스팅 모델 중 가장 유명한 XGBoos를 활용하여 커플 성사를 예측하고, 그리드 서치(Grid Search)로 하이퍼파라미터를 튜닝하여 더 나은 모델을 만드는 방법을 학습합니다.

총 4편으로 연재됩니다. 1편은 XGBoost 소개 및 문제 정의, 데이터 불러오기 및 확인하기 입니다.

 

 

XGBoost 소개

랜덤 포레스트는 각 트리를 독립적으로 만드는 알고리즘입니다. 반면 부스팅은 순차적으로 트리를 만들어 이전 트리로부터 더 나은 트리를 만들어내는 알고리즘입니다. 부스팅 알고리즘은 트리 모델을 기반으로 한 최신 알고리즘 중 하나로, 랜덤 포레스트보다 훨씬 빠른 속도와 더 좋은 예측 능력을 보여줍니다. 이에 속하는 대표적인 알고리즘으로 XG부스트(XGBoost), 라이트GBM(LightGBM), 캣부스트(CatBoost) 등이 있습니다. 그중 XGBoost(eXtra Gradient Boost)가 가장 먼저 개발되기도 했고, 가장 널리 활용됩니다. XGBoost는 손실 함수뿐만 아니라 모형 복잡도까지 고려합니다.

 

▼ TOP10 선정 이유

캐글 컴피티션 우승자가 많이 사용하는 성능이 검증된 부스팅 모델입니다. XGBoost 이후로도 다양한 부스팅 모델이 소개되었지만, 가장 인기 있는 모델이기 때문에 구글 검색에서 수많은 참고 자료( 활용 예시, 다양한 하이퍼파라미터 튜닝)를 쉽게 접할 수 있습니다.

 

💡부스팅 알고리즘

부스팅은 랜덤 포레스트에서 그 다음 세대로 진화하게 되는 중요한 개념입니다. 랜덤 포레스트에서는 각각의 트리를 독립적으로, 즉 서로 관련 없이 만드는 반면, 부스팅 알고리즘에서는 트리를 순차적으로 만들면서 이전 트리에서 학습한 내용이 다음 트리를 만들 때 반영됩니다.

 

▼ 예시 그래프

 

▼ 장단점

 

▼ 유용한 곳

  • 종속변수가 연속형 데이터인 경우든 범주형 데이터인 경우든 모두 사용할 수 있습니다.
  • 이미지나 자연어가 아닌 표로 정리된 데이터의 경우, 거의 모든 상황에 활용할 수 있습니다.

 

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

문제 정의

스피드데이팅 이벤트는 수십 쌍의 선남선녀가 참여하는 커플 도전 프로그램입니다. 스피드데이팅 데이터셋에는 참가자의 정보와 개인 취향이 담겨 있습니다. 이 데이터셋을 분석해 어떤 사람들끼리 커플 성사가 잘 되는지를 예측해봅시다.

 

▼ 예측 목표

 

라이브러리 및 데이터 불러오기, 데이터 확인하기

4개의 필수 모듈과 dating.csv 파일을 불러오겠습니다.

 

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

file_url = 'https://media.githubusercontent.com/media/musthave-ML10/data_source/main/dating.csv'
data = pd.read_csv(file_url)

 

head( ) 를 사용하여 데이터가 어떻게 생겼는지 간단히 살펴보겠습니다.

 

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

 

 

변수가 39개나 되어서 기본 출력 화면에 다 담지 못해 중간에 …으로 표시된 부분이 있습니다. 이는 판다스는 기본 20개 컬럼까지만 보여주며, 20개를 넘으면 … 표시 후 생략합니다. 다음과 같이 보고 싶은 컬럼 수를 지정할 수 있습니다. 40개까지 볼 수 있도록 변경하겠습니다.

 

pd.options.display.max_columns = 40 # 총 40개 컬럼까지 출력되도록 설정

TIP: 컬럼 대신 로우 제한을 변경하려면 max_columns를 max_rows로 바꿔주면 됩니다.

 

info( ) 함수를 호출해 어떠한 변수가 있는지 구체적으로 살펴봅시다.

 

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

 

 

총 8378개 관측치가 있고 39개 변수가 있습니다. 마지막 변수 match가 종속변수이며 나머지는 독립변수입니다. 피처 엔지니어링에 사용할 주요 변수를 알아보고 넘어가겠습니다.

  • has_null : 변수 중 Null값이 있는지 여부. 단, 이 데이터는 기존 데이터에서 일부 변수들이 생략된 축소판이기 때문에, 여기서 보이는 Null값 여부와 다소 차이가 있을 수 있습니다. 전반적으로 무응답 항목이 있는지에 대한 정보이므로 그대로 사용하겠습니다.
  • age / age_o : age는 본인 나이이며 age_o는 상대방 나이입니다.
  • race / race_o : 마찬가지로 본인과 상대의 인종 정보입니다.
  • importance_same_race / importance_same_religion : 인종과 종교를 중요시 여기는지에 대한 응답입니다.
  • attractive(매력적인), sincere(성실한), intelligence(지적), funny(재미난), ambitious(야심찬), shared_interests(공통관심사) : 이 항목들은 4가지 관점에서 평가되어 총 변수가 24(6 × 4)개입니다. • 4가지 관점에 대한 설명을 드리겠습니다.
    • pref_o_xxx( 예 : pref_o_attractive) : 상대방이 xxx 항목을 얼마나 중요하게 생각하는가에 대한 응답입니다.
    • xxx_o( 예: attractive_o) : 상대방이 본인에 대한 xxx 항목을 평가한 항목입니다.
    • xxx_important( 예 : attractive_important) : xxx 항목에 대해 본인이 얼마나 중요하게 생각하는가에 대한 응답입니다.
  • xxx_partner( 예 : attractive_partner) : 본인이 상대방에 대한 xxx 항목을 평가한 항목입니다.
  • interests_correlate : 관심사(취미 등) 연관도
  • expected_happy_with_sd_people : 스피드 데이팅을 통해 만난 사람과 함께할 때 얼마나 좋을지에 대한 기대치
  • expected_num_interested_in_me : 얼마나 많은 사람이 나에게 관심을 보일지에 대한 기대치
  • like : 파트너가 마음에 들었는지 여부
  • guess_prob_liked : 파트너가 나를 마음에 들어했을지에 대한 예상’
  • met : 파트너를 스피드데이팅 이벤트 이전에 만난 적이 있는지 여부

 

다음은 describe( ) 함수로 통계적 정보를 확인하겠습니다.

 

round(data.describe(), 2) # describe를 반올림하여 출력

 

 

최댓값을 살펴보면 조금 특이한 부분이 있습니다. 본인 및 상대방을 평가하는 변수(xxx_o, xxx_partner)에서는 대체로 최댓값이 10으로 일정하나, 중요도와 관련된 변수(pref_o_xxx, xxx_important)에서는 최댓값이 100부터 60, 50 등 변수별로 다양합니다. 이럴 때는 데이터가 어떠한 형식으로 수집되었는지 알아야 향후 데이터 클리닝 및 피처 엔지니어링을 하는 데 도움이 됩니다.

이 데이터에서는 평가 관련 변수는 0~10점까지 개별 항목에 적용합니다. 중요도 관련 변수(pref_o_funny, pref_o_ambitious, pref_o_shared_interests, attractive_o, sincere_o, intelligence_o)는 총 100점을 각 항목에 분배해 적용합니다. 예를 들어 상대방이 각 항목에 대한 중요도 변수들의 합은 개인별로 총 100이 되어야 합니다.

 

2편은 전처리입니다.

권시현(데싸노트)

삼성전자에 마케팅 직군으로 입사하여 앱스토어 결제 데이터를 운영 및 관리했습니다. 데이터에 관심이 생겨 미국으로 유학을 떠나 지금은 모바일 서비스 업체 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
개인정보처리방침
배송/반품/환불/교환 안내