데이터 다루기와 데이터 다듬기 과정을 공부한 후 실무에서 적용하는 방법을 연습하기 위해 미니프로젝트를 진행하였다.
7일과 8일 총 이틀동안 진행되었으며 주제는 서로 달랐다.
데이터는 주제에 맞는 데이터셋을 받았으며 흩어져있는 데이터들을 필요한 정보를 정제하여 조인하는 방식으로 진행하였다.
복습도 할 겸 미니프로젝트 리뷰를 해 볼 생각이다.
[3월 7일 첫째날]
학부시절, 팀프로젝트 진행 당시 대면으로 하는 것이 의사소통이 잘 되고 효율적이라 생각하여 팀원들과 만나기 위해 전농교육장을 예약하여 대면으로 미니프로젝트를 진행하였다.
우리 조는 7명으로 구성되어 있었고 한 분을 제외한 6명이나 모두 이틀동안 나왔다. (참고로 나는 4반이고, 이렇게 적극적으로 참여하실 지 몰랐다...)
9시 10분까지 도착해야해서 넉넉히 4-50분 전에 출발하였지만 차가 이렇게 막힐줄 몰라서 고려대학교에서 택시를 타고 갔다...
하지만 도착해서 더 큰 일이 터져버렸는데, 팀원분들과 처음 인사 후 긴장되는 마음으로 프로젝트를 진행하려 하였으나 대여받은 노트북의 화면이 요동을 쳐서 미니프로젝트 오리엔테이션 시간에 매니저님께 양해를 구한 후 내 노트북을 가지러 집으로 다시 갔다 왔다... (이날 택시비만 25000원인가 나갔다... 아까워 죽겠네 진짜)
본격적으로 프로젝트 내용에 대해 복습을 해보면,
첫째날의 주제는 "구매 패턴을 통한 이탈고객 예측을 위한 모델링에 사용할 데이터 정제"이다.
즉, 머신러닝 / 딥러닝 알고리즘을 사용하기 위한 데이터를 가공하는 과정을 진행한다.
대상고객은 2014년 ~ 2016년에 신규 고객이면서 2016년 하반기에 한번 이상 방문한 고객이며, 이들 중 2017년 1분기(1월 ~ 3월) 동안 한번도 방문하지 않은 고객을 이탈로 정의한다.
주어진 데이터 셋은 다음과 같다.
customers 테이블 : CustomerId, RegisterDate, Gender, BirthYear, Addr1, Addr2
sales 테이블 : OrderId, Seq, OrderDate, ProductId, Qty, Amt, CustomerId
products 테이블 : ProductId, ProductName, Category, Subcategory
1. 먼저 주어진 테이블들의 데이터들의 특징들을 살펴보았다. 예를 들면, 일별 매출액은 얼마인지? 어떤 상품이 잘 팔렸는지? 고객의 나이대는 얼마인지? 등등의 특징들을 살펴보며 각각의 데이터들을 살펴보는 시간이었다.
2. 그 후, Label 과정을 거친다. Label 과정은 데이터에 의미있는 값을 부여하는 과정으로, 위 주제에서 맞는 Label 과정은 이탈고객에게 의미있는 값을 부여하는 것이다. 즉, target 변수는 이탈 고객여부이며 이 과정을 Label 과정이라 일컫을 수 있을 것이다.
2-1. customers 테이블에서 RegisterDate가 2014년 ~ 2016년에 포함되는 고객을 뽑아내고, sales 테이블에서 OrderDate가 2016년 하반기에 한번 이상 주문한 고객을 조인한다. 즉 대상이 되는 전체 고객의 테이블을 만드는 과정이다.
2-2. sales 테이블에서 2017년 1분기(1월 ~ 3월)에 주문 내역들을 뽑고 target 변수의 값에 0을 부여한다. 즉, 이 사람들은 주문을 하였기 때문에 customers 테이블과 조인하여 해당한다면 이탈하지 않은 고객이므로 0값을 부여하는 것이다.
2-3. 2-1과 2-2에서 만든 테이블을 2-1 기준으로 left join 을 진행한다. 2-2에서 만든 테이블과 조인되지 않는다면 결국 재주문을 하지 않은 고객이기 때문에 이탈한 것이며 target 변수의 값은 결측치로 존재할 것이다.
2-4. 결측치의 값을 1로 바꾸어 추후에 모델링에 사용할 수 있게 target 변수의 값을 알맞게 진행하며 Label 과정을 마친다.
3. 추가로 다양한 feature을 추가한다. 이 feature들은 이탈 여부를 예측할 수 있게 하기 위한 변수들로 피처 엔지니어링을 통해 만들어 지는 것으로 볼 수 있다.
[3월 8일 둘째날]
둘째날의 프로젝트의 주제는 "토익 응시자들에 향후 토익 점수점수를 예측을 위한 모델링에 사용할 데이터 정제"이다.
학습할 데이터는 다양한 feature들이 존재하며 대표적으로 회차 정보를 나타내는 'Seq', LC / RC score, 공부 방법 등의 다양한 컬럼들이 존재한다. 위 프로젝트에서는 Seq = 3의 해당하는 3차시 토익 응시 점수를 바탕으로 데이터 가공을 진행하였다.
주어진 데이터 셋은 다음과 같다.
data 테이블 : ID, Seq, Gender, Birth_Year, LC_Score, RC_Score, Total_Score, 학습목표, 학습방법, 강의 학습 교재 유형, 학습빈도, 기출문제 공부횟수, 취약 분야 인지 여부, 토익 모의테스트 횟수, StudentID
1. 첫째날과 마찬가지로 먼저 데이터 탐색을 진행하였다. 예를 들면, 결측치여부나 행과 열의 갯수 파악, 고윳값 파악 등과 같은 각각의 컬럼등을 탐색하는 시간을 가졌다.
2-1. 중복값을 제거하고 3차시를 기준으로 1차시 2차시 정를 집계하여 한 행으로 올렸다. (겹치는 컬럼이 생기므로 각 차시 정보를 기준으로 컬럼명을 변경하였다.)
2-2. 그 이후 개인 정보와 조인하여 전체 테이블을 생성하였다.
2-3. 첫째날 미니프로젝트와 다르게 위 주제는 여부를 파악하는 것이 아닌 점수 변화를 예측하기 위한 데이터 정제이므로 점수 변화를 target으로 하여 Label 과정을 거쳤다. (3차시 점수 - 2차시 점수를 집계하여 target 변수를 주었다.)
[느낀점]
프로젝트를 하면서 학부시절 진행한 팀프로젝트를 상기하며 그 당시 부족했던 부분은 무엇인지 느꼈다. 과거에 나는 응급환자 데이터(MIMIC 4)를 활용하여 재입원 환자 예측을 하는 프로젝트를 진행하였다. 프로젝트를 진행할 당시 각각의 변수들을 탐색하는 시간을 충분히 가지지 못하여 Feature selection을 신중히 하지 못했다고 느꼈다. 또한, Feature Engineering을 충분히 하여 target 변수에 영향을 충분히 줄 수 있는 변수들을 생각해내지 못했다고 생각이 들었다. Feature가 target에 영향을 주지 않을 지라도 삭제하는 것에는 신중해야 하며 다른 Feature 들과의 연산으로 target에 영향을 줄 수 있는 변수를 만들 수 있을 것이고 생각이 들었다. 즉, 파레토 법칙이 얼마나 중요한지 느낄 수 있는 시간이었다.
두번째로는 팀원들과 상의하며 어떤 주제로 데이터 분석을 진행할 수 있을 지 고민하며 재밌는 시간을 가질 수 있었다. 브레인스토밍의 과정을 거쳐 다른 주제는 어떻게 데이터를 다루고 다듬을 수 있을지 고민하며 한가지 데이터로 여러가지 접근 방식을 달리하여 다양한 주제를 생각하는 의미있는 시간이었다.마지막으로는 비즈니스적 관점으로 데이터를 바라봐야 한다는 것이다. 단순 해결책이 아닌 비즈니스적 관점으로 현재 상황을 분석하고 사업의 목표가 어떤 것인지 파악해야하며 고객의 니즈를 분석하여 문제를 정의하는 과정을 거쳐야 비로소 향후 진행할 데이터 분석의 올바른 방향성을 제시할 수 있을 것이라 생각이 들었다. 첫 미니프로젝트였지만, 전공자였던 내가 부족한 부분이 무엇인지 느끼는 좋은 시간이라 생각하며 리뷰를 마친다!
[추가]
미니프로젝트가 끝나고 회식을 갔다!
사실 낯가림이 심해 엄청난 고민을 했지만 극 E인 팀원들 덕분에 잘 적응할 수 있었다. (말은 안했지만 고마워^^)
(다들 외모가 출중하지시만... 기분이 나쁠 수 있으니 스티커로 대체하겠습니다...)
술을 얼마나 먹었는지 셀 수는 없고 그냥 계속 마셨다. (다음날 SQLD 시험인데 참 생각도 없이 마셨네^^)
옛날에는 친한 친구들과 노는거만 선호했지만, 처음 뵙는 분들 만나는 일도 재미를 느끼고 있다. (다음 회식도 참여할 수 있으면 참여해야지!!!)
KT 에이블스쿨은 교육적으로도 좋은 프로그램이지만 추가로 내가 더 성숙해질 수 있는 프로그램이지 않을까 싶다...
'KT AIVLE SCHOOL 5기 > Mini Project' 카테고리의 다른 글
[Mini Project] 6월 4일 ~ 6월 13일 미니프로젝트 6, 7차 후기 (3) | 2024.07.27 |
---|---|
[Mini Project] 4월 22일 ~ 5월 2일 미니 프로젝트 4, 5차 후기 (0) | 2024.06.25 |
[Mini Project] 4월 4일 ~ 9일 미니프로젝트 3차 후기 (0) | 2024.05.28 |
[Mini Project] 3월 20 ~ 22일 미니프로젝트 2차 후기 (1) | 2024.04.17 |