ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [삼성 SDS Brightics] 개인 의료비 예측(3)
    카테고리 없음 2022. 8. 30. 23:42

     

     

     

    안녕하세요.ㅎㅎ Brightics 서포터즈 3기 정민경입니다.

    팀미션 마지막이에요!

     

    사실 저번주에 멘토분들의 피드백을 받고

    분석과정을 좀 더 변형해서 진행하였는데요,

     

    확실히 함께하니까

    내용이 더 풍부해지고, 알지 못했던 부분도 배우게 되더라고요.

     

    그중, Random Forest, Adaboost 를 소개할 예정입니다 :)

     


    1) 프로세스

    저희가 로그변환을 시도했지만,

    model에 따라 전처리 방법이 달라 이를 고려해야한다는 피드백을 받고

    로그변환을 시도했을 때와 그렇지 않았을 떄로 나누어 진행했어요.

     

    Linear Regression에서는 로그변환이 의미가 있기에 그대로 두었지만,

    그 외에는 오히려 과정을 무겁게 만들 수 있다는 점에

    가장 앞에서 '로그변환X' 인 것을 볼 수 있답니다.

     

    위에는 하이퍼파라미터 및 교차검증 조정 전,

    아래는 python script를 활용해 하이퍼파라미터와 교차검증 과정을 거쳤어요!

     

    그렇게 오늘은 4가지 방법을 비교하면서

    RandomForest와 Adaboost에 대해 알아봐요!

     

    ***

     

    RandomForest : 대중의 지혜와 같이 의사결정나무를 여러개 만들어 종합하는 것

    ▶학습이 병렬적으로 일어난다.

    Adaboost : 오류데이터에 가중치를 부과하며 모형을 변환 및 개선해나가는 것

    ▶학습이 순차적으로 일어난다.

     

    - Q. 데이터에 따라 정확도가 높은 모형은 달라진다.과연 의료비 예측에는?-

     

    ***

     

    2) 랜덤포레스트 : RandomForest

    'Random Forest Regression Train' 함수로

    아래에 X변수를 넣어주고 이로써 예측하고 싶은 Y변수를 지정해주세요!

     

     

     

    그러면 위와 같이 Y변수를 예측하는데 준 X변수의 영향도가 시각화됩니다.

    Random Forest에서는 의료비 예측에

    흡연 / 비만도 / 나이

     

    위 세가지의 중요도를 확인할 수 있었어요.

     

    그 다음! 'Random Forest Regression predict' 함수로

    훈련한 모델로 실제 의료비를 예측해봅니다.

    예측값이 옆에 뜬 것을 볼 수 있어요!

     

     

     

    그리고 그 옆에, 모든 과정에 공통으로 'Evaluate Regression'을 볼 수 있을 텐데요.

    모델의 성능을 평가할 수 있는 지표를 표로 보여줍니다.

     

    이는 마지막에 4가지를 모두 모아 비교하기 위해 생략해두겠습니다 :)

     

     

    위의 과정을 python script로 나타내며

    동시에 하이퍼파라미터와 교차검증을 조정해보았어요.

    RandomForest python script

     

     

    그렇지만 구체적인 python 코드는 다음에 더 구체적으로 살펴보기로 하고,

    결과창에 뜨는 최적의 하이퍼파라미터 값이 보이시나요?

     

    이를 통해 만들어진 모델로 예측하고

    table을 생성하는 과정이 코드 안에 있어서

    위의 과정을 거치고, 마찬가지로 해당 모델을 Evaluate해보았습니다.

     

     

     

     

    3) 에이다부스트 : Adaboost

    모델이 바뀌었을 뿐이지 과정은 거의 똑같습니다!

    'Adaboost Regression Train' 함수로

    아래에 X변수를 넣어주고 이로써 예측하고 싶은 Y변수를 지정해주세요!

     

    그러면 Y변수를 예측하는데 준 X변수의 영향도가 나오죠!

     

    Adaboost와 똑같이

    흡연 / 비만도 / 나이

    위 세가지의 중요도를 확인할 수 있어요.

     

    (※ 위의 3가지 변수가 의료비에 주는 영향이 클 것이다!

    EDA를 하며 제가 추론했던 내용이라 뿌듯하네요 :▷ )

     

    Adaboost python script

     

     

    그리고 동일하게 Adaboost를 python sciprt를 활용해

    하이퍼파라미터 및 교차검증하는 과정을 거쳤습니다!

     

     

     

    4) model 성능(정확도) 비교

     

    Brightics에서 보여준 결과는 위와 같은데요, 이중에서

    r2-square / MAE / MAPE

    위 세가지 평가지표를 사용할거에요!

     

     
     
    r2-square
    MAE
    MAPE
    RandomForest_Train
    0.843
    2795.47
    40.06
    → GridsearchCV
    0.89
    2472.43
    31.67
    Adaboost_Train
    0.844
    3795.28
    59.35
    → GridsearchCV
    0.88
    2685.70
    34.21

     

    짜라란. 이렇게 정리가 되었습니당

     

    얼핏 보기에 전체를 대상으로 한 의료비 예측 모형에는

    Adaboost보다 RandomForest가 더 어울려 보이네요!

     


    제가 2개의 모델을 돌려보았지만,

    다른 팀원이 또 다른 2가지 모델(XGboost, DecesionTree)을 시도해

    그 전의 Linear까지 합쳐서

    총 5가지 모델을 비교해볼 예정이에요.

     

    나아가 예측모형을 남/여로 나누어서 찾아보기도 했는데요,

    (즉, 남자 의료비 예측 모델 & 여자 의료비 예측 모델)

    이렇게 따로 두었을 때 예측모형은 어떻게 변할지 궁금하지 않나요?

     

    해당 결론 그리고 나머지 부분은 다른 팀원이 맡아주어

    이후 링크를 첨부합니다. :)

     


    Review

     

    거의 팀프로젝트가 마무리 되어가는데요,

    비록, 다른 요인 - 흡연, 나이, 지역-은

    표본수가 너무 적어지기도 하고

    비율이 맞지 않다는 문제에 시도하지 않았지만

    추후 그룹을 나누어 더 정확한 예측을 찾아간다는 게

    이번 프로젝트에서 새로웠던 접근법이자 소중한 피드백이었어요.

    또한, 자연어처리만 주로 다뤄오다가 팀원들과 함께하며

    아무래도 수치예측모형을 저는 처음 다룬 것과 다름 없었는데,

    그래서 새로 접하고 알게되는 내용이 많아서

    너무 고마웠어요...!!

    그떄 Brightics에서 각 과정이 무엇인지 간단히 설명을 넣을 수 있고

    흐름을 한눈에 알아볼 수 있으니까

    서로 무엇을 진행했는지 이해하기 한결 수월하더라고요.

    그렇게 통계 용어와 지식을 더 넓혀갔어요.

     

    아마 이것저것 서툴렀을 저와 함꼐 해준 팀원에게

    여전한 고마움의 인사를 전하며, 이번 포스팅을 마칩니다.ㅎㅎ

     

     

     

    ※본 포스팅은 삼성SDS Brightics 서포터즈 3기 활동의 일환으로 작성하였습니다

     

     

     

     

     

Designed by Tistory.