데이터사이언스/프로젝트

[프로젝트] 여러가지 변수에 따른 개인 별 의료비 예측

박윤서 2023. 2. 2. 22:23

이번 회귀분석 강의에서는 정말 많은 것을 배웠다. 통계에 대한 흥미를 느끼게 해준 과목이며, 통계에 대한 이해도를 많이 높이는 과목이었다. 강의 하나에 시험,퀴즈,에세이,분석 팀플까지,,, 정말 이 과목에 시간을 많이 썼다.. 솔직히 힘들었지만 많은 걸 남길 수 있어 뿌듯하다 !

 

이번 회귀분석 팀플에서는 나를 제외하고 다른 팀원들이 모두 코딩 경험. 분석 경험이 많지 않았다.

심지어 나도 우리과에서 코딩 실력이 좋다고 보기 어려운 사람이었다..

막막했지만 무조건 내가 이끌고 가야겠다는 생각을 했던 것 같다.

다들 경험이 적다보니 쉬운 데이터로 분석 경험을 하는 것이 좋겠다고 판단 내려서 쉬운 데이터를 가지고 회귀분석 시간에 배우는 전반적인 내용을 모두 담아내보자고 생각했다.


1. Abstract

 

2021년 경상의료비(잠정치) 180.6조 원, GDP 대비 8.8%이다. 이때 경상의료비는 보건 의료 재화와 서비스의 최종 소비(개인의료비 + 집합 보건 의료비)를 말한다. 1인당 경상의료비는 3,490천 원으로 최근 10(‘11~’20) 간 연평균(실질) 증가율이 6.2%이다. 최근 OECD 추정에 따르면 2020년 평균 의료비 증가율은 5%, 이는 COVID-19 대유행을 해결하기 위한 추가적인 요구에 대응하기 위한 정부 및 의무 제도(+8.1%)의 이례적으로 높은 지출 증가율에 힘입은 것이다. 본 분석은 의료비와 높은 상관관계를 나타내는 변수를 알아보고 개인 별 의료비를 예측해 보기 위하여 진행되었다. 분석을 진행하면서 사용한 데이터의 결측치는 없었으며 중복 데이터가 존재하여 분석에 영향을 끼칠 수 있기에 하나만 남기고 제거하였다. Object 형태의 데이터가 존재하기에 labeling을 한 후, 동일한 단위로 scaling 한 데이터들을 가지고 총 6가지의 모델을 적용하였다. 성별, 흡연 여부, 지역, 나이, BMI, 자녀의 수와 같은 변수를 독립 변수로 사용했고 개인 별 의료비를 종속 변수로 사용했다. 종속변수인 의료비와 독립변수의 관계들을 시각화한 후 종속 변수와 관계가 없다고 할 수 없는 변수들을 분석해 본 결과 흡연의 여부가 강한 상관관계를 나타냈다. Smoker 외에도 bmi age가 양의 상관관계를 보였고, region 0으로 선형적인 관계가 없다는 것을 확인했다. 해당 관계를 집중적으로 분석해 보고자흡연자에 남자이고 자녀의 수가 많은 사람일수록 의료비가 높게 측정된다라고 가설 설정하였다. 본 분석에서 사용한 데이터에는 결측치가 없지만 데이터 제공 대상 집단이 미국인이라는 점이라는 한계가 있다. 우리나라 의료비 납부자들에 대한 유사한 데이터가 있다면 이를 적용해 한국인의 개인 별 의료비를 예측할 수 있는 프로그램이라는 점에서 분석에 의의가 있다.

 

2. Methods

 

   1) Dataset

본 주제에서 사용하는 데이터는 캐글 사이트의 Medical insurance cost prediction (https://www.kaggle.com/code/szabolcsfle/medical-insurance-cost-prediction)이고 7가지의 데이터로 이루어져 있다. 개개인의 age, sex, bmi, children, smoker, region, charges가 제시되어 있다. 1338명의 데이터로 이루어져 있다.

 

   2) Data Processing

 본 연구는 개인의 6가지 특징을 파악한 후 charges를 알아보는 것이다. 데이터를 확인한 결과 결측치는 없다. 중복값이 있는지 확인하는 과정에서 195번값과 581번값이 중복됨을 찾았는데 이는 분석에 영향을 줄 수 있기 때문에 한가지만을 남기고 제거하였다.

 

 

또한, 데이터의 타입을 정리한 후 labeling하였다. sex female 0, male 1 smoker no 0, yes 1 region northeast, northwest, southeast, southwest 순으로 0부터 3까지 부여하였다.

 

3) Data Analysis

본 연구는 개인에 따른 의료비를 예측하는 것으로 종속변수를 charges로 하고, 독립변수를 age, sex, bmi, children, smoker, region으로 설정했다. 회귀 모델로는 XGBRegressor, Gradient Boosting, RandomForests, Linear, Lasso, Ridge를 사용하였다.

본 연구에 대한 가설은 다음과 같이 설정하였다. 3가지를 중점적으로 확인하기 위해변수 smoker에 대하여 yes인 사람이 no인 사람보다 charges가 높다.’,‘변수 sex에 대하여 male인 사람이 female인 사람보다 charges가 높다.’,‘변수 children에 대하여 숫자가 높을수록 charges가 높다.’와 같은 가설을 세우고, 이를 종합하여 최종적으로흡연자에 남자이고 자녀의 수가 많은 사람일수록 의료비가 높게 측정된다.’라고 설정하였다. 가설검정을 위하여 각 독립변수와 종속변수에 관한 그래프를 그려 확인해보았다.


변수 smoker에 관하여 살펴보면 확연히 yes인 사람이 no인 사람보다 charges의 분포가 넓으면서 높게 나타나는 것을 확인할 수 있다.

smoker
sex

변수 sex에 관하여 살펴보면 중앙값은 비슷하나 전반적인 charges의 분포는 male이 더 높은 것을 확인할 수 있다. 또한 male의 경우 최댓값과 75% 사이에 해당하는 영역이 상당히 넓은 것으로 보아 charges에 차이가 있다는 것을 알 수 있다.

 

변수 children에 관하여 살펴보면 children의 수가 2,3인 사람의 charges의 분포가 넓음을 알 수 있다

 

다음으로는 독립변수 smoker를 중심으로 변수 age, bmi, children에 관한 분포를 살펴보았다. 아래의 그래프를 보면 age-charges분포와 bmi-charges분포, children-charges분포 모두 흡연자가 비흡연자보다 의료비가 높게 측정되는 것을 볼 수 있으며 가설변수 smoker에 대하여 yes인 사람이 no인 사람보다 charges가 높다.’가 옳다는 것을 확인할 수 있다.

 

독립변수 sex를 중심으로 age, bmi, children에 관한 분포를 살펴보았다. 아래의 그래프를 보면 age-charges분포와 bmi-charges분포, children-charges분포 모두 sex에 대한 상관관계가 뚜렷하지 않다는 것을 확인할 수 있다.

 

독립변수 children를 중심으로 age, bmi에 관한 분포를 살펴보았다. 아래의 그래프를 보면 age-charges분포와 bmi-charges분포 모두 children에 대한 상관관계가 뚜렷하지 않다는 것을 확인할 수 있다.

 

각 변수들간의 상관관계를 나타낸 heatmap을 보면 smoker charges의 상관관계가 0.8로 상당히 높다는 것을 관찰할 수 있다. 이는 흡연여부가 charges에 영향을 미친다는 것을 의미한다.

 

3. Results

 

   1) Fit the model

다음은 중복값을 제외하고, labeling만 한 데이터를 모델에 적합시켰을 때 나온 값이다. 분석자들은 R^2 score가 높은 XGBRegressor, GradientBoosting, RandomForests와 추가로 수업 때 배운 모델인 Linear, Lasso, Ridge를 이용해 분석을 진행하였다.

   2) Shapiro-Wilk Test & Residual analysis

 

잔차분석은 회귀모형에 대한 정규성, 등분산성 가정을 충족하는지에 대한 검정, 이상치가 개입하는지에 대한 검증을 하는 절차이다. 정규성을 Q-Q plot으로 보면 점들이 점선을 따라 배치될 때  정규성이 확인되는데 데이터를 변환없이 사용하였을 때는 아래의 Q-Q plot과 같이 정규성을 확인할 수 없다. 샤피로 검정을 통해 정확한 수치로 확인해보면 p-value 8e-29로 유의수준 0.05보다 작다. 이 검정에서 귀무가설은 모집단이 정규분포를 따른다는 것이므로 귀무가설이 기각되고 이는 정규성에 문제가 있다는 것이다. 선형성과 등분산성을 확인하는 잔차 그래프는 수평에 가까울수록 선형성이 있고, 등분산성이 있다는 것이다. 실제 그려본 그래프를 확인하면 수평에서 꽤 벗어난 모습을 확인할 수 있다. , 선형성과 등분산성에 문제가 있음을 확인할 수 있다.

 

 

 

오차항이 독립성을 만족하는지를 검정하기 위해 더빈-왓슨 통계량을 사용한다. 더빈-왓슨 통계량은 0~4 사이의 값을 갖을 수 있다. 0에 가까울수록 양의 상관관계를, 4에 가까울수록 음의 상관관계를 나타내며 2에 가까울수록 오차항의 자기상관이 없다고 본다. 아래의 표를 보면 더빈왓슨 통계량은 2.088로 본 분석의 데이터는 자기상관성이 없다고 볼 수 있다.

 

3) leverage, outlier analysis

레버리지(leverage) 분석을 통해 개별적인 데이터 표본 하나하나가 회귀분석 결과에 미치는 영향력을 알아본다. 레버리지는 실제 종속변수 값 y가 예측치에 미치는 영향을 나타낸 값이다. 아래의 그래프를 보면 모든 데이터의 레버리지 값이 0.02 근처이 낮은 값을 가진다. 따라서 레버리지에 대해서는 모형에 영향을 주지 않는다.

모형에서 설명하고 있는 데이터와 동떨어진 값을 가지는 데이터, 즉 잔차가 큰 데이터를 아웃라이어(outlier)라고 한다.

 

그런데 잔차의 크기는 독립변수의 영향을 받으므로 아웃라이어를 찾으려면 이 영향을 제거한 표준화된 잔차를 계산해야 한다. 잔차를 레버리지와 잔차의 표준 편차로 나누어 동일한 표준 편차를 가지도록 스케일링한 것을 표준화 잔차(standardized residual)라고 한다. 보통 표준화 잔차가 2~4보다 크면 아웃라이어로 본다. 아래의 그래프를 보면 데이터에 아웃라이어가 조금 측정된다.

 

회귀 분석에는 잔차의 크기가 큰 데이터가 아웃라이어가 되는데 이 중에서도 주로 관심을 가지는 것은 레버리지와 잔차의 크기가 모두 큰 데이터들이다. 잔차와 레버리지를 동시에 보기 위하 기준으로는 Cook’s Distance가 있다. 아래의 그래프는 x축은 표준화된 잔차의 제곱을 표시하고 y축으로 레버리지 값을 표시하고 있다. 그래프에 나타나는 아웃라이어로 보이는 데이터들의 cook’s distance를 구해보니 유의할 만큼 높게 나오지 않았기 때문에 아웃라이어들을 처리하지 않고 모델에 적용시켰다.

  

4) log Conversion

아래의 그림은 변수변환을 하기 전과 후의 charges density를 나타낸 것이다. 로그변환을 함으로써 비대칭성이 줄어듦을 확인할 수 있다.

 

5) Scaling

 분석자들은 스케일링 방법 중 Standard Scaler를 사용하였다. 통계학에서는 주로 표준화 또는 Z-score로 불리고 이는 데이터가 평균이 0이고 분산이 1이 되도록 값을 정규분포 형태로 변환하는 방법이다. , 모든 특성들을 정규분포로 만드는 것이다. Standard Scaler는 특성의 최솟값과 최댓값의 크기를 제한하지 않는다. 이상치가 존재한다면 평균과 표준편차에 영향을 끼치므로 데이터의 확산이 달라지게 되며, 이상치에 매우 민감하다.

 

위의 표에서 스케일링과 로그변환 전의 R^2 점수를 알아볼 수 있다. 스케일링과 로그변환 전과 후의 R^2 점수 차이를 알아보기 위해 스케일링과 로그변환을 한 후에 각 모델 별 R^2 점수를 구해보았다. 먼저 GradientBoostingRegressor0.861989에서 0.85549466, XGBRegressor0.862693에서 0.851259로 떨어진 것을 볼 수 있다. 반대로 LinearRegression0.763172에서 0.771231으로, Ridge0.762919에서 0.771199, RandomForestRegressor0.847876에서 0.848195로 높아진 것을 볼 수 있다. 스케일링과 로그변환 전과 후의 R^2 점수가 눈에 띄게 큰 차이가 없었고, R^2 점수를 올리는 것이 어려움을 알 수 있었다.

 

 

 

6) Prediction

우리가 선택한 모델들 중 가장 성능이 좋은 것으로 판단되는 Gradient Boosting 모델을 사용하여 실제 예측을 진행해보았다. 31세 여성이며, BMI25.74, 아이는 0, 비흡연자, southeast 거주자의 데이터로 예측을 진행해보았다. 실제 값은 3756.622인데 예측 값은 3740.057정도로 꽤 유사하게 예측함을 확인할 수 있다.

 

4. Discussion

 

 1) 본 주제에서 사용한 데이터는 미국인 데이터이다. 외국인이 아닌 한국인 데이터였다면 우리나라 보험 가입자들을 대상으로 보험 값을 예측해볼 수 있는 프로그램이라는 점에서 의의가 있다.

 

 2) 일반적으로 회귀 분석 시간에 로그 변환 시 점수가 증가한다고 배웠는데 실제로 분석을 진행해보니 스케일링과 로그 변환 이후에 오히려 점수가 낮아진 모델들이 있었다. 그 이유에 대해 알아내지 못해서 이후 더 진행하면 그 이유에 대해서 알고 이를 통해 더 최적화된 모델을 적용할 수 있을 것이다.

 

 3) 아웃라이어들을 무시할 수 있는 수준이라고 판단하여 다른 처리없이 분석을 진행하였는데 조금이라도 아웃라이어라고 판단되는 데이터들을 제외하고 다시 분석을 하면 더 좋은 성능을 나타낼 수 있었을 것이다.


 

머신러닝 스터디와 추가적인 공부를 통해서 지식을 더 쌓은 후에 본 이 프로젝트는 허점이 참 많습니다..ㅎㅎ

그래도 제가 처음으로 프로젝트를 주도해서 했고, 거의 모든 코딩을 제가 스스로 했다는 것이 잘한 것 같네요

 

이 프로젝트에서 더 추가할 점은 분산확대인자를 확인해보는 것도 좋을 것 같고, 이상치를 제거하고 진행해봐도 좋을 것 같습니다. 그리고 각 모델들을 파라미터 조정없이 모두 디폴트로 돌렸는데 데이터에 대한 이해를 바탕으로 적절한 모형들을 몇개 골라서 파라미터 조정까지 해서 돌려보면 또 어떤 결과가 나올지 궁금합니다.

다음에 기회가 된다면 더 발전시킨 프로젝트로 진행해보고 싶네요 !!


전체 코드는 이 링크를 타서 들어가시면 확인하실 수 있습니다. 회귀분석 가정들을 확인하는 과정이 많이 담겨져 있으니 참고하시면 좋을 것 같습니다!

https://colab.research.google.com/drive/1RGGuhcLhIwyNd70IvZ8N3nzafM1rwZol?usp=sharing