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

[프로젝트] 보험 사기 예측 모델

박윤서 2023. 12. 27. 18:28

이 프로젝트는 고객 데이터 분석론 수업에서 기말 프로젝트로 개인별로 진행하게 되었다.

고객 데이터 분석론 수업을 실제 대기업에서 계셨던 교수님이 진행하셔서 실제 기업이 데이터사이언티스트에게 원하는 방향을 잡는데 도움을 많이 주셨고, 모델 중심적인 사고만 하던 내 문제점들을 많이 깨달았다.

이 수업을 들으면서 내가 만든 모델을 사용하게 하기 위해 어떻게 통계를 모르는 사람들에게도 설득할 수 있을지 고민을 많이 해보았다.

나는 보험 사기 예측 모델을 구축하는 것을 목표로 진행하였고, 데이터는 2016 빅콘테스트에서 제공한 한화생명의 데이터를 사용하였다.

발표에 활용한 피피티를 가지고 진행한 프로젝트를 설명할 예정이다.

1. Introduction

우선 보험사기의 정의에 대해 알아보았다. 보험사기방지 특별법에서 보험사기행위란 무엇인지 설명하고 있다.

자료를 통해 볼 수 있듯이 보험사기 적발 금액과 인원이 전체적으로 증가하는 양상을 보이고 있다. 보험사 입장에서는 피해가 상당하고, 보험 계약자들 입장에서는 보험료 인상을 초래할 수도 있으며, 더 나아가 보험 제도 자체의 존립 기반을 위협하기 때문에 보험 사기를 미리 예측하고 이를 방지할 수 있다면 좋을 것이다. 그렇기에 보험 사기 예측 모델을 구축하는 것을 목표로 삼았다. 

왜 모델을 구축하여서 이를 예측해야 하는지에 대해 정당성을 부여하기 위해 논문 내용을 활용하였다.

과거에는 경험에 의존한 사기 적발을 진행했지만, 현재에는 많은 곳에서 정확한 정보를 얻기 위해 과학적인 알고리즘을 활용하고 있으며, 이를 통해 더 효율적인 판별이 가능할 것이라고 기대한다.

2. Data

데이터가 여러 개의 csv로 나뉘어져 있기 때문에 각 데이터가 어떤 정보들을 담고 있는지 알아보았다.

그리고 이후 데이터베이스 테이블로 나타내 primary key와 foreign key의 관계를 표현하였다.

이를 참고하여 데이터들을 합쳤다.

3. EDA

피처를 선택하기 위해 어떤 변수들에서 보험사기여부에 따라 차이를 보일지 확인해보았다.

보험 사기 여부와 관련이 있을 것이라고 가설을 세운 피처들에 대해서 사기 여부에 따라 분포가 어떻게 다른지를 쭉 살펴보았다.

  • 성별/직업 : 여성인 경우가 유의하고, 주부와 자영업자 직업을 가진 경우가 유의한 결과를 보였다.

  • 연령/사고구분 : 30~60대 사이가 대부분인데, 50대의 경우가 유의하게 많았다. 또한 질병으로 인한 경우 사기인 경우가 많았다.

 

  • 설계사경력/ 결혼여부 : 설계사 경력을 가진 경우와 결혼을 한 경우가 사기인 경우가 유의하게 많았다.

  • 소득/고객가입일 : 소득이 낮은 경우와 특정 가입연도에서 사기인 경우가 유의하게 많았다.

  • 소득/고객가입일 : 소득이 낮은 경우와 특정 가입연도에서 사기인 경우가 유의하게 많았다.

  • 실손처리여부/입원통원일수 : 실손 처리를 하지 않은 경우, 입원통원일수가 긴 경우 보험 사기인 경우가 유의하게 많았다.

  • 병원종류/유의병원여부: 요양,한방병원, 한의원, 의료기관 이외의 병원 종류인 경우, 사기 유의 병원인 경우 보험 사기인 경우가 많았다.

4. Feature selection & Feature Engineering

1~6번은 social and behavioral sciences 저널에 소개된 A fraud detection approach with data mining in health insurance라는 제목의 논문을 참고하였으며, 7번은 나타나있는대로 금융감독원에서 공개하고 있는 통계자료를 활용하여 변수를 선택하였다.

 

그리고 각 feature마다 보험사기와 유의한 관계를 가지고 있는지를 카이제곱검정과 T-test를 활용하여 가설 검정을 진행하였다.

 

금융감독원 자료와 실제 데이터에서 유의함이 겹치는 피처는 반드시 포함하고, 그외에도 유의한 변수를 보였던 변수들은 우선적으로 포함하였다.

 

여기서 최종 선택된 피처들은

[성별, 직업, 연령, 사고구분, 설계사경력, 결혼여부, 소득, 가입일, 실손처리여부, 입웝통원일수, 병원종류, 유의 병원 여부] 이다.


그외에도 유의미한 변수들을 만들어내고자 보험 사기 관련 논문에서 얘기한 보험 사기자가 보이는 경향에 대해서 다시 살펴보았다.

논문에서 언급된 것에서 많은 보험 청구를 확인할 수 있는데 실제 피쳐에는 보험 청구 횟수가 따로 피쳐로 정리되어 있지 않다.

따라서 보험 청구 데이터프레임과 고객정도 데이터 프레임을 활용하여 보험 계약 개수와 보험 청구 개수, 그리고 FP(보험 계약 주선자)의 risk를 계산하여 새로운 feature로 추가하였다.

또한 결측치 처리가 필요했는데

  • 주택거주코드, 병원 종류의 경우에는 새로운 범주로 저장하는 방향으로 진행
  • 총 납입액, 자녀 수, 등록일 수의 경우 0으로 처리하면 값들이 너무 튀게될 것 같다고 판단하여 평균값으로 처리
  • 최소/최대 신용등급의 경우 확인이 안된경우 제일 낮은 등급으로 부여
  • FP risk 같은 경우에는 사실 결측치가 매우 많은 편이고, 사기인 경우가 더 희박하기 때문에 0으로 처리

5. Model

모델 구축에는 2가지 시도가 있었다.

우선 첫번째 모델에 대해서 설명하겠다.

모델 선택시 고려한 사항이고, 이를 고려하여 랜덤 포레스트와 XGBoostClassifier 모델을 사용하기로 결정하였다.

평가 지표로는 분류 문제이기 때문에 F1 score를 사용하였고, 보험 사기자를 옳게 예측하는 것이 중요하다고 판단하여 FPR을 최소화 하기 위해 높은 특이도가 필요하기에 특이도(Precision)도 평가 지표로 추가하였다.

전체적으로 랜덤 포레스트 모델보다는 XGBoost 모델이 더 좋은 성능을 보였다. 그리고 불균형 데이터이기 때문에 SMOTE 기법을 사용해보았으나 적용하기 전이 더 좋은 성능이 나와 SMOTE 기법을 적용 안한 XGBoost 모델을 선택하게 되었다.

랜덤 포레스트와 XGBoost는 트리 계열 모델이기 때문에 feature importance를 확인할 수 있었다.

이를 통해 청구 개수, 계약 개수, 총납입액, 추정가구소득, 연령이 분류에 중요한 역할을 한다는 것을 확인하였다.

이에 대한 지식을 가지고 2번째 모델을 다시 구축해보았다.

2번째 모델에서는 청구 사유 코드를 전체 다 넣는 것이 아닌 입원인 경우와 아닌 경우로 두가지 범주로만 나누고,

병원 종류도 마찬가지로 선택된 병원과 아닌 병원 이렇게 두가지 범주로 나누었다.

그리고 사고 원인에 대한 결과도 피쳐로 추가하였고, 고객이 상품을 구매한 경로가 법인인 경우 사기가 낮은편인 것을 확인하여 이에 대한 것도 피쳐로 추가해 모델 학습을 진행하였다.

좀 더 향상된 결과를 확인할 수 있었다.

이렇게 구축된 모델을 활용하면 좋은 점에 대해 설명하였다.

머신러닝을 기반으로 여러 변수를 고려할 수 있게 구축되었으며, 보험 사기자의 경향과 금융감독원이 주목하는 변수, 그외 유의한 결과를 보인 변수들을 사용하여 컴팩트하게 모델을 구성하고 하였기에 가벼우면서 정확한 모델을 사용해 보험 사기를 분류할 수 있을 것이다.

 

이외에도 트리계열의 모델이기 때문에 중요 변수를 확인하여 좀 더 조심해야 할 점에 대해 보험 처리 부서에 전달할 수 있다.

6. Discussion

이 프로젝트를 진행하면서 아쉬웠던 점이다. FP risk가 굉장히 중요한 변수였을텐데 결측치가 너무 많아 모델에 큰 영향을 주지 못했고, 그렇기 때문에 이와 관련한 양질의 데이터를 보험 회사측에서 수집하는 것이 중요할 것이다.

그리고 과적합 경향을 보였는데 이를 제대로 해결하지 못한 점이 아쉬웠다.

또한 feature importance를 사용하여 피쳐를 좀 줄여서 학습을 진행시켜보지 못한 점이 아쉽다.

 

마지막으로 이 프로젝트를 진행하면서 쓴 모든 코드는 깃허브에 올려져있으니 참고 부탁드립니다.

링크