[프로젝트 개요]
- [프로젝트 주제] : ChatGPT를 이용한 개인 맞춤형 카드 상품 추천 챗봇
- [진행 기간] : 2023.09 ~ 2023.12
- [개발 인원] : 3인 (본인 포함)
[주제 선정 배경]
- ChatGPT가 등장하면서 사람들의 관심이 매우 빠르게 증가 => 금융업 전반에서의 AI 열풍 가속화
ChatGPT 출시 2개월 만에 월간 사용자 1.23억명 도달, 금융권에서도 금융비서, 개인화된 상담 서비스 제공 중요도가 높아졌음을 확인했다.
기존의 챗봇 서비스는 단순한 키워드 중심으로 자세한 추가적인 상담은 상담원을 통해야 한다는 점에 불편함을 느껴 ChatGPT를 이용한 카드 상품 추천 및 자유로운 대화형 상담 챗봇을 구현했다.
[개발 환경 및 역할]
1. 개발 환경
데이터베이스 (DataBase) | MySQL |
개발 언어 | HTML, CSS, JavaScript, Python |
프레임워크 | Flask |
2. 역할
- 공통 : 자료조사, 카드 상품 데이터 수집 및 입력, 프론트엔드, 백엔드 개발
- 개인 : 챗봇의 기능 중 임베딩을 활용한 카드 추천 모델 구현
[프로젝트 구조]
1. ERD 다이어그램
2. Flask 구조
- Web : 사용자가 데이터 입력 등 컨트롤러에 요청
- 컨트롤러 : 사용자 요청 처리하여 서비스 함수 호출
- 서비스 : 로그인, 소비 내역 추가 등 로직 수행, DB 함수 호출
- DB : 로그인 정보, 카드 상품 정보 insert, delete 문 등의 sql 쿼리 작성
- ChatGPT API : 사용자의 금융 상담 및 고민을 입력받아 ChatGPT 에서 상황에 맞는 답변을 반환
[프로젝트 주요 기능]
1. 로그인, 회원가입 : 사용자 이름, 비밀번호을 DB에 저장 후 토큰을 통해 서비스에 활용
2. 소비 등록 : 소비데이터를 사용자가 직접 입력, DB에 저장
3. 예산 및 소비 그래프 : 목표 예산을 등록한 회원 => 한 달 소비 분석을 그래프로 확인 (목표예산 등록X => 등록 후 서비스 이용 가능)
4. 3개월 소비 분석 : 3월 간 소비 카테고리 별 분석 그래프 및 또래 연령대 평균 소비와 비교 분석 확인
5. 알림창 : 소비 금액이 목표 예산을 초과하게 되면 경고 알림 표시
6. 챗봇
- 소비 리포트 : 사용자가 선택한 년도, 월의 데이터를 바탕으로 총 사용 금액, 소비 금액 상위 3개 카테고리, 목표예산 대비 추가 사용 금액 출력 (ChatGpt 기반)
- 카드 상품 추천 : 사용자가 원하는 카드 종류, 월 평균 소비금액, 혜택을 자유롭게 선택, 입력하여 맞춤형 카드 상품 추천
- 소비 상담 : 원하는 상담 내용을 자유롭게 입력하고 ChatGPT와 대화를 통해 답변을 실시간으로 확인
[문제 해결]
문제 발견 | 문제 해결 |
임베딩 과정에서 한글 인식 X | 파이썬 다운 그레이드 (Python 3.7.x 버전에서 한국어 임베딩을 진행했더니 정상적으로 작동) |
사용자 금융 데이터 연동 불가 (데이터 사용 불허) |
사용자가 금융 데이터 직접 입력하는 것으로 대체 (사용자 로그인 정보와 연동하여 DB에 저장) |
상담 기능 중 ChatGPT 연동 메시지 끊김 발생 (상담에 대한 답변이 일정 길이 이상 받아오면 끊겨서 뒷 내용이 안보임) |
ChatGPT API에서 최대 토큰 수 상향 조정 |
상담기능의 로딩중 메시지 안보임 현상 발생 (조건별 메시지가 비정상적으로 작동 - 처음에는 보였다가 두번째는 안보이는 등 반복) |
챗봇 화면 구조 변경 (JS 수정 및 CSS display:none 속성 이용) (html부터 JS까지 새롭게 구성함) |
카드 추천 시간 매우 오래 걸림 (기본 15분 이상) |
카드 데이터 필터링 구현 - 데이터 분리 ( 카드 종류, 평균 소비 금액, 선호 혜택 을 이용한 필터링 알고리즘 구현 -> 기본 1분 대로 단축) |
프로젝트를 진행하기 위하여 ChatGPT를 연동하는 방법에 대한 인터넷 강의를 수강하면서 기능을 익혔다.
챗봇 기능을 구현하는 과정에서 어려운 상황이 발생하면 강의를 다시 학습하면서 마지막 결과물까지 완성할 수 있었다.
매주 만나서 하루 6시간 이상 함께 작업하고, 기능을 발전시키기 위해 회의하며 수정했다.
각기 다른 환경에서 구현한 기능에 대한 테스트도 끊임없이 진행하며 실행이 안 되거나 오류가 생기면 다시 새로운 방법을 시도해보고 조언하여 문제를 해결했다.
그 결과 처음에는 실행되지 않던 다양한 기능을 구현할 수 있었으며, 알림 기능, 로딩 메시지 기능 등 발전된 서비스도 구현해낼 수 있었다.
[최종 결과물 기능 소개]
최종 결과물을 시연한 영상이다.
전체적인 진행과정은 영상에서 확인할 수 있다.
자세한 기능은 페이지별로 간략하게 설명하겠다.
회원가입 시 DB에 저장되는 회원의 정보가 처음에는 코드의 복잡함으로 인해 입력한 그대로 평문으로 저장되어 DB 내용이 노출될 시 보안에 취약하다는 문제가 발생된다는 피드백을 반영하여 수정작업을 진행하게 되었다.
코드를 수정하여 비밀번호의 해시값을 생성해 생성된 해시값을 DB에 저장하는 방식으로 개선했고 결과적으로 비밀번호가 노출되지 않고 암호화되어 DB에 저장되는 것을 확인했다.
다음으로 로그인 화면에서는 DB에 저장된 회원가입 정보를 사용자 입력과 비교하여 로그인 정보를 비교하도록 했다. 이과정에서 세션을 이용해 필요할 때마다 브라우저가 키값으로 서버에 저장된 데이터를 사용하도록 되어있다.
로그인을 완료해서 서비스를 이용하기 위한 페이지로 이동하게 되면 2가지 경우로 나뉘도록 구성하였다.
1️⃣ 목표예산이 없는 경우 => 목표예산을 등록 화면으로 이동 => 예산 등록 했을 시에만 서비스 이용 가능
+ 등록한 목표예산 => DB에 저장 => 이후 로그인 시 바로 서비스 이용 가능 화면으로 이동
2️⃣ 목표예산 이미 등록된 회원의 경우 => 서비스 이용 가능한 그래프 화면으로 이동 => 목표예산과 이번달 소비 비율 분석 외 다양한 분석 서비스 이용 가능
분석 서비스 중 하나로 하단의 그래프 버튼을 누르면 3개월 소비 분석 그래프와 초과 지출에 대한 분석을 확인할 수 있으며 더 나아가 또래 연령대 소비와 비교 분석하는 서비스도 이용 가능하다.
기능에 대한 화면 동작은 위의 영상을 통해 자세히 확인할 수 있다.
다음으로 분석 그래프에 활용할 소비데이터를 사용자가 입력할 수 있는 화면이다.
=> 상단의 + 버튼 -> 사용자가 해당 입력 완료 후 추가하기 버튼 -> 데이터가 DB에 저장 -> 로그인 정보에 맞는 소비 데이터들만 가져와 분석 데이터로 활용
또한 입력한 소비 내역들도 카테고리별, 전체적으로 볼 수 있도록 구성하였다.
다음으로 챗봇 기능은 동작의 흐름이 중요하기 때문에 영상을 꼭 시청하기를 추천한다.
첫번째, 소비리포트 기능
1️⃣ 소비 데이터가 있는 경우 : 사용자가 선택한 년도, 월의 데이터를 바탕 => '총 사용 금액, 소비 금액 상위 3개 카테고리, 목표예산 대비 추가 사용 금액' 출력
2️⃣ 소비데이터가 없는 경우 : 데이터가 없다는 내용의 메시지 출력
=> 소비리포트를 확인한 이후 : 이번 달 소비 분석 및 소비 조언 화면으로 이동 -> 요청 버튼 누르면 '이번달 총 소비액, 카테고리별 소비액, 지난 3개월 평균 소비액을 초과한 카테고리와 초과액'을 출력
+ 지난 3개월 평균 소비액을 초과한 카테고리와 가장 많이 쓴 카테고리에 대해 ChatGPT가 소비 조언을 생성하여 사용자에게 전달한다.
두번째, 카드 상품 추천 기능
1️⃣ 1차 필터링 : 카드 유형 체크카드, 신용카드로 구분
2️⃣ 2차 필터링 : 사용자의 한달 평균 소비금액 선택 => 카드데이터의 기준실적금액과 비교해 DB에 저장
3️⃣ 카드 상품 추천 :
사용자가 본인이 원하는 혜택 자유롭게 입력 => 사용자 입력 내용은 임베딩 과정, 추천 알고리즘을 거쳐 가장 유사한 카드 추출 => 추천된 카드 화면에서 확인 가능
세번째, 챗봇과의 소비 상담 기능
ChatGPT가 가장 중점적으로 활용되는 서비스이다.
사용자가 원하는 상담 내용 자유롭게 입력 => ChatGPT와 대화 => 원하는 답변 실시간으로 확인
+ 챗봇 페이지 진입 시 소개 초기 메시지 자동 출력
=> ex. 다양한 카테고리 별 절약방법, 소비할 수 있는 금액 계획 등 답변 가능
(ChatGPT의 특성 상 약간의 중복 답변이 있을 수 있으나 2번 이내에 새로운 답변을 다시 얻을 수 있다.)
기능의 동작은 영상으로 확인해주길 바라며 챗봇 기능에 사용된 코드에 대한 설명만 간략하게 남기겠다.
[최종 결과물 요약 및 기대효과]
ChatGPT API를 활용한 개인화된 소비 상담 및 카드 상품 추천 웹 애플리케이션을 개발했다.
1. 주요 기능 3가지 요약
1️⃣ 사용자의 소비 데이터를 다양한 기준과 형태로 분석하여 Pandas 라이브러리를 활용해 시각화한다.
2️⃣ 사용자의 소비 내역을 바탕으로 개인화된 소비 조언을 ChatGPT API를 활용한 챗봇을 통해 제공한다. 소비 리포트 기능으로 한 달간의 소비를 분석하여 조언을 제공하고, 추가적인 상담이 필요할 때에는 대화 형식으로 금융 활동에 대한 다양한 상담과 소비 절약 방법에 대한 조언 등을 받을 수 있다.
3️⃣ 임베딩을 활용하여 사용자의 선호에 따라 개개인에게 최적화된 카드 상품을 추천한다.
2. 기대 효과
1️⃣ 이 웹 애플리케이션은 사용자들에게 맞춤형으로 제공되는 서비스로, 먼저 사용자의 소비 데이터를 다양한 기준과 형태로 분석하여 시각화함으로써 사용자가 소비 행태를 명확하게 인지할 수 있다. 이를 통해 고객 편의성을 높이고 개인의 소비 트렌드를 이해할 수 있다.
2️⃣ 사용자들은 챗봇과 자연스럽게 소통하며 금융 및 소비 관련 질문에 답을 얻을 수 있다. 예상치 못한 지출이나 긴급 상황에 대한 대비책을 제시함으로써 금융 위기에 대처하는 데 도움을 주는 등 자금 계획을 효율적으로 수립할 수 있게 하여, 개인의 재무 상태를 안정적으로 유지할 수 있게 돕는다. 또한, 챗봇 상담을 통해 금융 용어와 상품에 대한 이해도를 향상시키면서 사용자는 자신만의 미래적인 금융 목표를 설정하고 그에 맞는 전략을 구상할 수 있다. 이러한 개인화된 조언은 장기적으로 사용자의 금융 안정성을 증진시켜 신뢰와 만족도를 증가시킬 것으로 기대된다.
3️⃣ 사용자의 선호와 소비 패턴을 고려하여 계산된 임베딩값을 토대로 최적화된 카드 상품을 추천함으로써 사용자들은 짧은 시간 안에 원하는 카드를 찾을 수 있다. 이는 사용자의 개인적인 금융 상황에 기반한 맞춤형 서비스를 제공하여 사용자들의 만족도를 높이고, 동시에 금융 기업의 카드 상품 홍보와 이용률을 증가시켜 시장에서 경쟁력을 강화할 수 있을 것으로 기대된다.
🔔 [소감 및 배운점]
지금까지 이론적인 공부나 클론코딩만 해와서 개발이라는 시작에 두려움이 많이 있었다.
복수전공을 하면서 웹프로그래밍 기초라는 수업을 수강하며 html, css, javascript를 이용해 간단한 홈페이지를 만들면서 기능과 동작이 되는 웹페이지를 만드는 개발에 도전하고 싶어졌다.
기초 코딩 교육이나 프로그래밍 수업을 찾아 들으며 파이썬 구조는 조금이나마 혼자 코딩할 수 있게 되었다.
이를 바탕으로 첫 개발을 시도해보려 캡스톤 강좌를 수강해 팀원분들과 아이디어를 기획하고 학습했다.
파이썬, html, css, javascript, flask를 이용하여 개발을 진행했다.
홈페이지를 만들었던 경험을 토대로 프론트엔드는 어렵지 않게 개발할 수 있었다.
flask를 이용한 백엔드 개발은 처음이었기에 개발환경을 셋팅하는 것부터 어려움을 겪기도 했다.
파이썬 버전에 따른 오류만해도 여러번이었고, 추가되는 라이브러리들의 기능을 학습하고 코드를 수정하느라 많은 시간이 걸리기도 했다.
팀원들과 일주일에 4일은 만나서 고민하고, 온라인 회의도 해가면서 pandas, tokenizer, sklearn 등 라이브러리 동작을 이해하고 알고리즘을 만들었다.
특히 pandas 라이브러리는 그래프를 형성하는 데 많이 사용했다. 초반엔 기능을 구현하는 데 급급했다면, 개발 중반 쯤에는 자유롭게 그래프 크기나 색도 변경하고 이름도 부여할 수 있었다.
개발의 기본 틀을 형성하며 라이브러리 활용에 익숙해진 후, 챗봇의 가장 중심 기능인 ChatGPT를 활용하기 위해 유데미 강의를 수강했다. ChatGPT를 웹페이지에 연결해 동작시키는 방법을 배우며 코딩하였고, ChatGPT 사용법에 대해서도 학습했다.
그 결과 ChatGPT API를 flask에 연결하여 대화 형태의 질의응답이 가능한 환경을 만들 수 있었다.
개발에서 발생하는 문제점을 해결하며 개발 능력이 향상되감을 느낄 수 있었고, 새로운 배움에 대한 두려움을 많이 극복했다. 오류로 기능이 실행되지 않을 때, 처음부터 다시 시작해야할 때 등 긍적적으로 새로운 코드를 작성할 수 있었다.
성급하게 포기하고 좌절하는 것이 아니라 과정을 돌아보며 잘못된 포인트를 찾아 해결할 수 있게 되었다.
특히 MySQL을 DB서버로 사용하면서 SQL 쿼리로 DB를 연결하는 것에 능숙해졌으며, 테이블 형성, 웹페이지 데이터 저장까지 DB 서버에 익숙해질 수 있었다.
이 프로젝트를 통해 새로운 만남에 대한 부담감이 줄어들었고, 열정적으로 공동의 개발 목표에 도달해가면서 팀의 진정한 의미에 대해 느꼈다.
개인의 능력 또한 프로젝트를 이끌고 구현하는 데 중요하지만, 팀 내의 원활한 상호작용 없이 개별 역량만으로는 프로젝트를 성공적으로 완료할 수 없기에 팀은 존재한다.
혼자 고민해도 찾아내지 못하던 오류를 다른 팀원이 발견하고 알려줄 수 있으며, 효율적인 기능 개발을 위한 피드백이 가능하기 때문이다.
팀의 분위기가 개인플레이 없이 함께 열정적이었기에 개인의 능력도 최대한 발휘할 수 있었다.
덕분에 중간에 포기하는 일 없이 팀 프로젝트를 성공적으로 마무리할 수 있었다. 이것이 진정한 팀 프로젝트의 순기능이라고 생각한다.
마지막으로 개발 결과를 발표하며 '실제로 기능이 출시됐을 때 사용하고 싶다.', '충분히 실현 가능한 기능인 것 같다. 꼭 출시가 되었으면 좋겠다.' 라는 피드백을 들을 수 있었다.
4개월간의 과정이 헛되지 않았음을 느꼈고, 기획했던 기능을 빠짐없이 구현할 수 있었음에 매우 뿌듯했다.
마지막으로 팀 프로젝트를 진행하면서 코드를 공동으로 작업하기 위해 사용했던 깃허브 주소를 올리고 마무리 하겠다.
https://github.com/Yoonseo00/finchatbot
'프로젝트 > [머니버디] 카드상품 추천 챗봇(finchatbot)' 카테고리의 다른 글
[머니버디] 예산 및 소비 그래프 오류 수정 (0) | 2023.12.03 |
---|---|
[머니버디] 카드 추천 데이터 필터링 (0) | 2023.11.28 |
[머니버디] 카드 추천 페이지 구현 (1) | 2023.11.22 |
[머니버디] 카드 추천 시스템 (1) | 2023.11.21 |
[머니버디] 카드 데이터 임베딩(embedding) (0) | 2023.11.20 |