교육 및 대외활동

[삼성 SDS Brightics] 보험 납부금 기반 의료비 예측 프로젝트

  • -
728x90
반응형

📌 프로젝트 개요 

수행 기간 2022.09
사용 데이터 Kaggle 오픈 데이터
사용 프로그램 및 언어 Brightics Studio, Python

 

📌 주제 선정 배경

  1. 여러 사람들이 접할 수 있으면서 많은 배경지식을 요구하지 않는 데이터였으면 좋겠다.
  2. 공공 데이터로 구현할 수 있어야한다.
  3. 모두가 접해보지 않았던 주제의 데이터였으면 좋겠다.

 

세 가지 주제 중 투표를 통해 보험 납부금에 기반해 의료비 예측 프로젝트를 진행하기로 했으며,
Kaggle의 https://www.kaggle.com/datasets/mirichoi0218/insurance  데이터를 활용하기로 결정했다.

 

Medical Cost Personal Datasets

Insurance Forecast by using Linear Regression

www.kaggle.com

 

📌 데이터 소개 & 프로젝트 목표

1. 데이터 소개

age
나이/numeric
smoker
흡연여부/string
sex
성별/string
region
거주지/string
bmi
비만도/numeric
charges
의료비/numeric
(종속변수)
children
출산경험수/numeric

 

2. 프로젝트 목표

이 데이터셋의 컬럼들은 개인의 사회적 ∙ 신체적 개인정보를 나타내고 있다.

그래서 우리 팀은 개인은 본인의 의료비를 직접 예측하여 과납을 막고,
그리고 보험회사는 보험료 변화 추세를 파악해 그에 따른 맞춤형 상품을 기획할 수 있도록
이 컬럼 정보를 기반으로 의료비 예측을 진행하기로 했다.


📑 프로젝트 보고서

1. 데이터 보기

 

'Dataset Info'를 보면 컬럼 수는 7개,
관측값(행 수)은 1338개,
결측치 0%,
총 메모리 크기는 73.2KIB,
변수 타입은 numeric이 4개,
Categorical(string)이 3개인 것을 확인할 수 있다.

 

 

feature(columns) 간 상관관계를 보여주는 히트맵 자료다.

종속변수인 charges와의 상관관계를 위주로 볼텐데,
(string인 'sex', 'smoker', 'region'은 포함되지 않았으며,
전체 변수의 correlation은 string을 numeric으로 변경한 뒤 한번 더 확인한다.)

전처리하지 않은 원본 데이터에서  Target과의 상관관계는  age>bmi>children 순으로 크다.
그리고 변수간 음의 상관관계를 갖는 쌍은 없는걸로 보인다.

 

 

 

 

 


2. EDA

2-1) 단순 EDA

  • age

18-20세에 해당하는 응답자의 비율이 압도적으로 많다.
나이대를 그룹으로 묶은 새 변수 age_group에 대한 히스토그램에서는 40대의 응답자가 가장 많은 것으로 나타났다.

 

  • sex, smoker

여성과 남성의 비율이 비슷하고, 흡연자보다는 비흡연자가 더 많

  • region

south east에 거주하는 응답자가 많고 나머지는 약 320으로 비슷하다.

 

2-2) 복합적 EDA _bmi 기준

  • bmi별 나이대에 따른 의료비 비용 산점도 : 비만도가 높고 나이가 많을수록 의료비가 높아짐.

 
 
  • bmi별 성별에 따른 의료비 비용 산점도 : 의료비와 성별은 시각화자료로는 패턴 인식이 어렵다.
 
 

 

  • bmi별 흡연유무에 따른 의료비 비용 산점도 : 비만도가 높고 흡연자일수록 의료비가 높아짐.

  • bmi별 거주지에 따른 의료비 비용 산점도: 비만도가 높고 southeast에 거주할수록 의료비가 높아짐.
 

 


3. 데이터 전처리

3-1) 결측치 처리 : 결측치는 0%였으니 처리는 패쓰

3-2) 중복값 처리

  • Distinct중복하는 행을 제거

전체 columns이 겹치는 행이 존재하기 때문에 Input Columns에 전체 컬럼을 넣어줬고
삭제된 행은 1개임을 output table로 알 수 있다.

3-3) 이상치 처리 (수치형 변수 대상)

  • Age

[ Chart Type : Histogram, X-axis : age ]

나이는 17세부터 65세까지 분포하고 있는걸 확인할 수 있다.

  • Bmi

[ Chart Type : Histogram, X-axis : bmi ]

Bmi는 15~54까지 분포하고 있다.
50 이상도 초고도비만으로 분류되어있기 때문에 이상치로 구분하지 않는다.
그래서 Bmi 변수에도 이상치가 없다.

  • Children

[ Chart Type : Column, X-axis : children, Y-axis : Count(children) ]

전체 응답자의 출산경험수를 살펴보면 그 수는 0명에서 5명까지로 이상치가 없다.
그리고 자녀 수는 0명이 가장 많다.

  • Charges

[ Chart Type : Line, X-axis : Row Index, Y-axis : charges ]

연속형 변수로 table로 확인한다.
Charges를 내림차순/오름차순으로 정렬하니
최소값 1121, 최대값 63770으로 분석되었다.

하지만 다른 변수들과 같이 살펴보았을 때, 의료비가 낮을수록 나이가 어리면서 비흡연자이고,
의료비가 높을수록 나이가 많으면서 흡연자였기 때문에 상관관계가 있다고 판단해 이상치가 없다고 정의하고 진행했어요!

3-4) Label Encoder

성별과 흡연여부 컬럼에 라벨인코딩을 적용한다.

3-5) One-Hot Encoder 

지역은 4개의 값으로 작성되어 있기 때문에 원핫인코딩을 적용한다.


4. 모델링

참고문헌
https://scikit-learn.org/stable/index.html

 

scikit-learn: machine learning in Python — scikit-learn 1.5.2 documentation

Comparing, validating and choosing parameters and models. Applications: Improved accuracy via parameter tuning. Algorithms: Grid search, cross validation, metrics, and more...

scikit-learn.org

 

1. Decision Tree

      • 분류와 회귀에 사용되는 비모수적인 지도학습 모델
      • 데이터에서 추론되는 결정 규칙을 학습해서 종속변수의 값을 예측하는 모델
      • 말 그대로 나무처럼 가지로 뻗어나가는 듯이 생긴 트리구조이면서, 트리가 깊을수록 결정 규칙이 복잡해지고 모델이 적합해진다는 것이 특징
      • 장점 : 이해와 해석이 쉽고 수치형∙범주형 데이터를 모두 처리할 수 있습니다.
      • 단점 : 과대적합이 자주 발생합니다.(해결방안 : 가지치기(pruning))

출처 : https://ko.wikipedia.org/wiki/결정_트리_학습법

2. XGBoost Regression

  • 'XGBoost'는 그레디언트 부스트 결정 트리(Gradient Boosted Decision Trees) 알고리즘의 오픈 소스 구현
  • 분류와 회귀의 모델
  • 일반적으로 단일 트리는 실제까지 적용시키에는 약하기 때문에 여러 트리의 예측을 결합하는 앙상블을 통해 강화시키곤 하는데, XGBoost가 이러한 모델 중 하나임
  • 높은 성능을 나타내기 때문에 자주 사용되고, 파라미터 조절을 통해 최적의 모델을 만들기에 좋은 모델

출처 : https://www.researchgate.net/figure/Flow-chart-of-XGBoost_fig3_345327934 ​


4-1) 데이터 분할

  • Split Data

 

Split Data 블록으로 각각의 데이터 프레임을 7:3 비율로 나누면서
동시에 seed를 123으로 고정해서

Train, Test 데이터셋을 준비하고 모델링 준비를 마친다.

 

 

 

 

 

4-2) Decision Tree

  • 학습

[ Feature Columns : 전체, Label Columns : charge]

변수 중요도에서는 전체적으로 흡연여부의 중요도가 0.61로 가장 높고
그 다음으로는 bmi는 0.21, 나이 0.13으로 중요도가 높다.
부양 자녀수와 성별, 거주 지역은 0.02에서 0.00 사이로 중요도가 낮은 편에 속한다.

  • GridSearch

 

  • Evaluate

-하이퍼 파라미터 튜닝 전

-하이퍼 파라미터 튜닝 후

상관성의 관점에서 살펴볼 수 있는 r2_score는 높을수록,
거리의 관점에서 살펴보는 mean_absolute_error(MAE)와 
mean_absolute_percentage_error(MAPE)는 작을수록 좋은 모델이다.

r2_score는 파라미터 조정 후 모델의 성능이 더 높고, MAE와 MAPE도 조정 후 모델의 성능이 더 좋은걸 볼 수 있다.

그럼 결론적으로는 튜닝 후 모델이 성능이 더 좋아진걸 알 수 있다.

4-3) XGBoost

  • 학습

[ Feature Columns : 전체, Label Columns : charge, Objective : Linear regression with squared loss]

BMI의 중요도가 0.39로 가장 높고, 다음으로는 나이, 부양자녀수, 흡연여부 순으로 중요도가 높다.
성별, 거주 지역은 0.04에서 0.00 사이로 중요도가 낮은 편에 속한다.

 

  • GridSearch

 

  • Evaluate

-하이퍼 파라미터 튜닝 전

-하이퍼 파라미터 튜닝 후


5. 그외 모델

  • 전체 변수를 기반으로 한 모델

  • 여성을 대상으로 한 모델

  • 남성을 대상으로 한 모델


6. 최종 결과물

 

[팀 프로젝트] 보험 납부금 기반 개인 의료비 예측 프로젝트

📚 보험 납부금 기반 개인 의료비 예측 프로젝트📌 프로젝트 개요수행 기간 2022.07 - 2022.08 사용 데이터 Medical Cost Personal Datasets (kaggle.com) 내용 Kaggle의 보험 납부금 데이터셋을 활용하여 과잉진

dtdiary.tistory.com

320x100
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.