일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 코테
- 알고리즘
- 큐
- 백준
- 데이터마이닝
- 깊이우선탐색
- DP알고리즘
- solvedac
- 문자열
- 반복문
- 프로그래머스
- DFS
- 그래프
- 그리디알고리즘
- 코딩테스트
- PYTHON
- 자료구조
- greedy
- 너비우선탐색
- dp
- 수학
- 정렬
- Baekjoon
- 그래프탐색
- BFS
- 문제풀이
- Datastructure
- 파이썬
- 그리디
- 다이나믹프로그래밍
- Today
- Total
nyunu
[FSI Data Challenge 2023] 삼성카드 대표이사상 : 카드소비 형태에 따른 보험 종목별 사고율 분석 (2) - 본선 1차 본문
[FSI Data Challenge 2023] 삼성카드 대표이사상 : 카드소비 형태에 따른 보험 종목별 사고율 분석 (2) - 본선 1차
여뉴누 2023. 12. 8. 14:51이 메일을 봤을 때 얼마나 행복했는지 모른다 !!!
아예 기대도 안하고 있었어서 너무 놀랬던 결과 :-)
암튼 지금부터 공모전의 메인 of 메인이었던 본선 1차 정리 레고
진행 방식
분석 가능 기간은 약 일주일 정도가 주어졌고, 원래는 주말에는 사용할 수 없도록 했다가 대회도중 주말에도 원격환경을 사용할 수 있게 해주셔서 다행히 무사히 .. 대회를 마칠 수 있었다.
모든건 원격환경 안에서 이루어졌다. 주최측에서 어떻게 원격환경을 사용할 수 있는지 안내해주셨고, 금융데이터거래소 웹사이트에서 "분석시스템 >> 시스템이용"에 접속해 아래와 같이 사용할 수 있었다. 보고서 제출도 내부 기능을 활용하여 제출할 수 있었다.
원격환경 안에 들어가면 인터넷은 하나도 안되고, 보고서를 쓸 수 있는 워드 ? 한글 ? 같은 프로그램, 파워포인트 같은 프로그램, R, 파이썬 등 정말 분석과 보고서에 필요한 기본 시스템만 이용할 수 있다.
외부 데이터나 제공되는 것 이외의 라이브러리를 사용하고 싶으면 대회 기간 중 딱 1회 한정으로 운영진께 요청드려 반입이 가능했다.
원격환경의 장점은 팀마다 하나의 원격환경을 공유하다 보니 내가 보고서를 써서 공유 파일에 저장해두면, 모두가 함께 확인할 수 있었다는 점이었다. 코딩 파일도 공유를 굉장히 손쉽게 할 수 있었다. 그리고, 원격환경을 껐다가 다음날 다시 켜도 내가 원격환경을 껐던 그 상태 그대로 남아있다는 점도 굉장한 장점이었다. 전날 코드를 돌리고 코드 창을 그대로 두고 원격환경을 껐다면 다음날 원격환경에 다시 접속해서는 전날 돌리던 코드를 바로 이어서 돌릴 수 있었다.
하지만 반대로 단점도 있었는데 .. 외부 코드를 복붙할 수 없어서 무조건 손으로 다 옮겨야 한다는 점이었다. 특히 라이브러리의 경우에도 주어진 것이 아니면 무조건 1회 한정 반입해야 하는데, 나중이 되어서 갑자기 반입하고 싶은 것이 생길까봐 SOM의 경우 모든 코드를 손으로 입력하고, 수정했다. 진짜 너어어무 길어서 너무 슬펐다. 다 옮겨도 제대로 안돌아가서 수정도 여러번 했는데 이게 돌아갔을 때의 쾌감이란 말뭐말뭐
+ ) minisom code
https://github.com/JustGlowing/minisom/blob/master/minisom.py
분석 파이프라인
분석 파이프라인은 다음과 같았다. 한눈에 보기에도 예선 계획서와 달라진 점이 많다는 것을 확인할 수 있을 것이다. 데이터를 확인한 뒤 수정한 부분들도 있지만, slack을 통해 주최측의 답변을 확인하며 주최측이 원하는 것은 "분석"에 가깝다는 사실을 파악했다. 도메인을 최대한 이용해서 & 최대한으로 데이터 내에서 인사이트를 추출해보는 것이 주최측의 의도라고 느꼈고, 이를 최대한 표현할 수 있는 방법론을 구축하고자 했다.
1. 카드소비 데이터를 LifeStyle(건강관심도, 주거지 등) + 소비(요식소비, 여행소비 등) 데이터로 분리
2. 각각에 대해 K-means 클러스터링
3. 각 클러스터를 조합하여 최종 고객 군집 추출
4. 사고율 계산 및 군집 별 사고율 특성 분석
문제점 & 해결방안
데이터를 확인하고 우리가 예선에서 작성했던 보고서의 방법론을 아예 뒤엎어야 했다. 분석 과정에서 발생했던 가장 큰 문제점들과 & 이에 대한 해결방안은 다음과 같다.
1. 데이터 크기
(1) 문제점
우리나라에 웬만한 사람들은 다 카드를 쓰니까, 그런 카드의 소비 데이터이고 무려 삼성이니까 무조건 데이터 양이 많을거다라고 예상했었는데 확인해보니 8만개정도밖에 안되는 크기의 데이터였다. 우리는 데이터가 매우 많을 것이다라는 예상 하에 보험 종목별로 데이터를 분리하고 그 안에서 군집화를 진행해야겠다고 계획을 세웠던 것인데, 8만개의 데이터에서 보험 종목별로 데이터를 나눠버리는 순간 너무 작은 데이터가 되어버리기 때문에 이 안에서 고객 세분화를 하는건 의미가 없을 것이라고 판단했다.
특히, 보험 종류로는 생명보험, 자동차보험, 장기보험 이렇게 세 가지가 있었는데 절반 이상이 자동차보험이어서 더더욱 보험별로 데이터를 분리해 사용하는 방식은 사용하지 못한다고 결론내렸다.
(2) 해결방안
" 분석 방법의 변화 "
보험 종목별로 데이터를 분리해 사용하는 것이 아니라 전체 데이터를 활용해 클러스터링을 진행한 뒤, 해당 군집에 대해 사고율 분석을 실시했다. 더욱 자세한 내용은 분석 과정에서 다루기 !
2. 사고율 계산
(1) 문제점
아마 가장 큰 문제는 이부분이었는데, 주어졌던 사고율 산식은 다음과 같았다.
(1) 생명보험
생명보험 데이터 중 사고건수가 1인 데이터가 1%도 되지 않았다. 생명보험의 사고율은 사고건수를 분자로 두기 때문에 나머지 99%의 사고율이 전부 "0"으로 계산되었다. 이를 사고율로 두고 분석을 한다면 모두 0이기 때문에 유의미한 결과를 내기 어렵다고 판단했다.
(2) 자동차보험
지금금액 및 보험료 컬럼이 대부분 결측치였다. 특히 보험료의 경우 전체가 결측치였기 때문에 자동차보험의 사고율은 아예 계산이 불가능했다.
2) 해결방안
" 사고율 재정의 "
우리의 결론은 "사고율 재정의"였다. 사고율 산식을 보험 내에서 중요하게 여겨지는 심도와 빈도의 관점으로 각 보험의 특성에 따라 해석했고, 해석에 맞게 재구성하였다.
(1) 생명보험
대부분의 사고율 값이 0으로 도출되는 문제를 본 프로젝트의 주제인 "카드 소비 형태"와 연관지어 해결하고자 했다. 즉, 라이프 스타일과 소비 패턴 군집의 조합으로 도출된 최종 고객 유형을 기준으로 유형 별로 생명보험의 사고건수가 1이상인 비율을 구해 사고건수 0을 대체하여 사고율을 계산하였다. 그 결과, 99%의 값이 0으로 도출되는 문제를 해결할 수 있었다.
(2) 자동차보험
실제 자동차 보험료 산정시에 할인, 할증 요인으로 심도와 빈도 모두 사용된다는 점에서 심도와 빈도 모두 동등하게 중요한 요인이라고 판단할 수 있었고, 심도를 대신하여 빈도를 기준으로 사고율을 계산하여도 될 것이라 판단했다. 실제로 해당 주장의 타당성 검증을 위해 현직자의 피드백 또한 받았다.
3. 개인정보
보험이랑 카드 소비 데이터 모두 개인정보이다 보니, 주최측에서 개인에 대한 파악이 되지 않도록 하기 위해 대회 이전에 데이터를 결합해 제공해주셨다. 그러다 보니 원데이터의 형식이 깨져 정확한 분석이 어려웠고, 데이터를 이해하는데에도 힘듦이 있었다.
예를 들어, 보험을 가입할 때는 어떤 종목을 보장받겠다 !라고 하는 담보를 함께 선택해 가입하게 되는데, 이러한 담보는 여러개가 될 수 있다. 만약 생명보험을 가입한다고 할 때, 질병사망만 보장받는 것이 아니라 암도 보장받고 싶다고 한다면 담보는 두 개가 되는 것이다.
근데 이런 경우가 데이터 내에서는 아예 고려되지 않았다. 무조건 개인 한명당 하나의 보험 & 하나의 담보의 형태로 데이터가 구성되어 있어 개인별 자세한 분석에 한계가 존재했다. 또한, 개인 한명이 손해보험, 생명보험 모두 가지고 있을 경우도 있을 텐데 이러한 경우도 파악이 불가능하다는 점도 아쉬웠다.
이 부분은 해결할 수 있는 부분은 아니라 .. 그냥 아쉬움정도로 남길 수 있을 것 같다 ! 실제로 본선 2차에서 아쉬웠던 점과 어떻게 더 분석해보고 싶은지를 질문해주셨었고, 위 내용을 활용해 답변했다. 내 분석 과정 상의 잘못된 점이나 아쉬움을 얘기하는 순간 결과의 신뢰성이 떨어질 것 같아 데이터 상의 아쉬운 점을 말해 책임을 피해갔다 ㅎㅎ ...
분석 과정
앞선 예선에서 말했듯이, 주제는 두 개로 분리할 수 있었다. " 카드 소비 형태 분석" + "보험 종목별 사고율 분석 "
분석 과정 또한 이 순서에 맞춰 정리해보려고 한다.
1. 카드 소비 형태 분석
1) 차별점
" 카드 소비 형태 분석 = 클러스터링 " 이라는 공식을 대부분의 팀들이 사용하지 않을까라고 생각했기 때문에, 이 안에서도 차별점이 필요하다고 판단했다.
그래서 사용한 방식이 바로 삼성 카드 데이터 내 " 라이프 스타일 " 과 " 카드 소비 " 데이터를 분리하여 각각 클러스터링하고 이를 조합하여 최종 고객 유형을 도출해내는 것이었다. 여기서 라이프스타일이란 기존의 의미 대신 " 개인의 특성과 그에 따라 나타나는 삶의 우선순위 "라고 직접 정의해 사용하였다. 소비 형태 분석의 예시는 다음과 같다. 1번 고객과 3번고객은 라이프스타일 클러스터링 결과, 동일한 클러스터에 포함되지만 서로 다른 카드소비 클러스터에 소속되기 때문에 최종 고객 유형은 상이하다고 판단하고, 최종 고객 유형을 기준으로 사고율을 분석하였다.
고객번호 | 라이프스타일 클러스터링 결과 | 카드소비 클러스터링 결과 | 최종 고객 유형 |
1 | 1 | 2 | [1, 2] |
2 | 3 | 5 | [3, 5] |
3 | 1 | 6 | [1, 6] |
그렇다면 !! 이게 왜 우리 팀의 차별점인가에 대한 설명도 필요할 것 같다.
결국 카드 소비 형태 분석이라는건 카드 소비 형태에 따라 고객을 세분화한다는 의미이다. 고객 세분화란 소비자 세그먼트를 그룹화하여 보다 맞춤화된 마케팅 메시지를 전달하고자 하는 것인데, 이때 일반적으로 널리 사용되는 고객 세분화의 기준으로는 다섯가지가 있다. 그리고 비즈니스적인 목표에 맞게 해당 기준들 중 한가지를 선택하여 고객 세분화를 실시하게 된다.
하지만 보험에서 필요한 고객 세분화는 어떤 것일까를 생각해보았을 때 인구학적 세분화가 가장 기본이 될테지만 그 이외의 것들 또한 필요할 것이라 판단할 수 있었다. 개개인의 연령, 소득 등 개인의 특성도 당 ! 연 ! 히 ! 보험에서 너무나 중요한 요소이지만, 개인의 생활습관 및 취미 등의 요소를 통해 개인마다의 보험별 위험성을 판단할 수 있기 때문에 이러한 요소 또한 무시할 수 없다. 따라서, 위의 기준들 중 " 인구학적 세분화 & 심리학적 세분화 " 기준을 혼합하여 사용함으로써, 더욱 구체적인 고객 세분화를 실시하고자 했다.
그리고 이 모든 변수를 한번에 사용하여 클러스터링을 진행한다면 변수가 너무 많아 클러스터링의 성능 저하가 예상될 뿐더러, 고객 군집의 두드러지는 특성을 파악하기 힘들 것이라 판단하여 " 라이프 스타일 " & " 카드 소비 " 데이터를 각각 분리하여 클러스터링을 진행 후, 최종 고객 유형을 도출해내었다.
2) 모델링
K-means
사용한 모델의 종류는 DBSCAN, K-MEANS, SOM 이렇게 세 가지였다. 클러스터링의 결과를 비교하기 위해 2차원 시각화 및 군집 내 표준편차(within STD), 군집 간 표준편차(total STD) 등을 평가지표로 사용했다.
라이프 스타일과 소비 데이터로 분리했음에도 클러스터링을 진행하기에는 변수의 수가 많다고 판단했고, 이를 이유로 t-SNE을 활용해 비선형 차원축소를 실행했다. 1차적으로는 PCA를 활용해보았으나, 데이터의 선형성이 부족해 PCA의 성능이 낮아 비선형 차원축소를 사용했다. 이후 차원축소한 데이터를 활용하여 클러스터링을 진행하였다.
DBSCAN, K-MEANS, SOM 클러스터링 결과를 비교한 결과, DBSCAN < SOM < KMEANS 순으로 결과가 좋게 도출되었다. 특히 SOM과 K-means의 성능 차이는 크지 않았는데 SOM의 모델 특성 상 학습 시간, 하이퍼파라미터 선택 등의 문제를 근거로 범용성이 넓고, 학습 시간이 빠르다는 장점을 지닌 K-Means를 최종 모델로 채택하여 분석을 진행하였다.
K-means의 최적 군집 개수를 선정하기 위해 Elbow-Method를 사용하였고 엘보우 포인트에 따라 라이프 스타일 클러스터는 6개, 소비 패턴 클러스터는 8개로 선정하였다. 그리고 해당 변수의 최대값, 최소값이 어떤 클러스터에 포함되었는가를 기준으로 하여 각 클러스터별 특징을 분석하였고 각 클러스터의 특징에 맞게 네이밍하였다.
Ex.
자녀에게 올인하는 부모형 | 적응을 원하는 사회초년생형 | 여유를 즐기는 중장년형 |
3) 최종 고객 유형 도출
이후 각 클러스터의 조합을 최종 고객 유형으로 설정하여 총 48개의 유형을 얻을 수 있었다. 그리고 데이터 내에서 등장 빈도가 낮은 고객 유형에 대해서는 분석의 중요성이 상대적으로 낮을 것이라고 판단하여 누적 등장 빈도 비율 90% 이상에 해당하는 13개 유형만 분석에 이용하였다.
4) 최종 고객 유형 네이밍
그리고 다음과 같이 최종 고객 유형을 네이밍함으로써 카드 소비 형태 분석을 마무리지었다.
2. 보험 종목별 사고율 분석
여긴 정말 데이터 ^분석^으로 풀어나갔다. 말그대로 데이터를 요리조리 뜯어보며 인사이트를 내는데 집중했다. 데이터의 보안을 계속 강조하셨던터라 .. 해당 결과에 대해서는 언급할 수 없을듯하지만 과정만 간단히 정리해보고자 한다 !
해당 분석과정에서 우리팀의 숨은 키포인트는 " 담보별 분석 "이었다. 사실 처음에는 담보를 아예 생각도 안하고 있었는데 보험사 현직자께 연락드려 여쭤보는 과정에서 "담보"라는 숨은 보석을 찾을 수 있었다.
보험에 가입했다 ! 라고 할 때 물론 생명보험 ~ 손해보험~ 이렇게 얘기하기는 하지만 결국 보험 자체를 가입한 것이 아니라 ^담보^를 가입했다고도 봐도 과언이 아니다. 앞서 말했지만, 담보란 보험 내에서 보장되는 항목을 말하는 것이기 때문에 만약 생명보험에서 일반사망을 담보로 보장받는다고 하면 일반사망에 대해서만 보험금이 지급된다는 의미이기 때문에 어떤 보험에 가입했다보다 사실 어떤 담보에 가입했다가 훨씬 중요한 정보인 셈이다. 그리고 실제로 이 부분에 대해서는 본선 2차에서 "굉장한 분석을 하신거네요 !"라는 평가도 얻을 수 있었다.
어쨌든, 해당 과정에서는 보험 별 사고율 분석 & 담보 별 사고율 분석을 실시했다. 각 고객유형의 보험 담보별 비율, 담보별 사고율 등 보험 별로, 담보 별로 데이터에서 뽑아낼 수 있는 모든 인사이트를 뽑아보자 !! 라는 마음으로 요리조리 뜯어봤고 최종 결과를 도출했다.
본선 1차 후 느낀점
본선 1차는 정말 도메인 싸움이었다. 주최측에서 강조했던 것이 ^분석^이었던 만큼 데이터를 최대한 많이, 잘 사용하는 팀이 본선 1차를 통과할 수밖에 없다고 느꼈고, 보험의 ㅂ도 모르던 세 명이 정말 머리 싸매면서 논문 읽고, 보고서 읽고, 뉴스 읽으며 결과를 만들어냈다.
어쩔 수 없이 현업자의 도움을 받아야만 하기도 했는데 아는 분이 없어 무작정 학과 행사에서 받았던 명함 전화번호로 조심스럽게 연락드렸다. 근데 역시 최고의 연은 학연인건지 다들 너무나도 정성어린 답변을 주셔서 정말 감동 그잡채 눈물 좔좔이었다 .. 숙대 통계 첵오 !!! 💛
'공모전' 카테고리의 다른 글
[FSI Data Challenge 2023] 삼성카드 대표이사상 : 카드소비 형태에 따른 보험 종목별 사고율 분석 (1) - 예선 (0) | 2023.11.02 |
---|