- 일본 여행 경비를 예상해 최적의 여행을 위한 서비스를 제공을 목표
팀원 | 역할 | 프로젝트 담당 업무 |
---|---|---|
경동연 | 팀장 | 항공편 데이터 ETL, ML 모델링 및 고객이 데이터 입력시 가격 예측이 가능한 Flask 서비스 개발 |
박재현 | 팀원 | 호텔 데이터 ETL, ML 모델링 |
장혜수 | 팀원 | 항공권&호텔 데이터 크롤링, 프론트엔드 웹 개발 |
정재훈 | 팀원 | 항공권&호텔 데이터 크롤링, 호텔 데이터 EDA 및 항공권, 호텔 대시보드 작성 |
- 웹 데이터를 크롤링
- Selenium 사용해 네이버 호텔 및 항공권 웹 데이터를 크롤링 및 자동화 작업, 크롤링 데이터 CSV 파일로 저장
- 대시보드 작성(Looker Studio)
- 대시보드를 고민중 Meata base와 Looker Studio중 진입 및 바로 수정 및 적용이 가능한 Looker를 채택
항공권 대시보드 링크
호텔 대시보드 링크
- 대시보드를 고민중 Meata base와 Looker Studio중 진입 및 바로 수정 및 적용이 가능한 Looker를 채택
항공권 데이터 분석(상세보기 클릭)
- 항공권 데이터 46771 x 11 사용(네이버 항공편 사이트에서 오사카, 후쿠오카, 도쿄의 데이터)
- 학습 데이터 세부사항
- 크롤링시 "2023-07-22" 같은 데이터를 연도, 월, 일로 데이터 세분화
- duration에 대한 문항을 불여 편리한 서비스를 제공할지 / 포함하여 더 정확한 정보를 제공할지 팀원들의 의견을 모음
- -> 모델 학습 결과 duration을 포함했을 시 r2 값이 0.025 정도 높아지는 결과가 확인되서 포함하는 쪽으로 결정함
- 출발 & 도착 시간 컬럼은 불필요해 삭제처리
- direct flight 컬럼은 One-Hot encoding을 적용
- 예측변수 : price , 입력변수 : price 이외 컬럼들
- 사용한 모델 : XGBoost Regression
- 작업을 병렬로 처리하기 때문에 학습 속도가 빠름
- Greedy 알고리즘을 사용해 분산처리 하므로 과대적합의 위험이 낮아짐
- 모델 자체가 유연해 커스터마이징이 쉽기 때문에
- 사용한 이유:
호텔 데이터 분석(상세보기 클릭)
- date : 연도/월/일 합쳐져 있음으로 연도, 월, 일 구분해 컬럼 생성
- city의 경우 크롤링 과정에서 지역이 구분되어 있지 않아 One-Hot encoding을 적용시켜 구분함
- 예측변수 : price, 입력변수 : price 이외 컬럼들
- 모델 선정 과정
전처리 전 데이터 | 전처리 후 데이터 |
- 데이터는 DBeaver를 사용해 MySQL로 데이터베이스에 저장
- ML 모델은 파이썬 라이브러리인 pkl을 사용해 복호화하여 사용함
- 이후 Flask 사용해 웹에서 데이터를 입력 받을시 모델을 이용해 최저값을 예측해서 웹에 리턴해주는 방식으로 진행함
- 문제 해결 과정
- 웹 크롤링 중 첫 페이지는 가져올 수 있는데 다음 2번째 이후로 가져오지 않고 크롤링이 에러가 뜸
팀원들끼리 상의한 결과 웹 페이지에서 각 Elements이 로딩되는 시간이 달라서 어느것이 가장 늦게 나오는지 모르고
시간이 오래 걸려도 데이터를 확실히 수집해야 해서 time.sleep()을 사용함 - 파일 같은걸 전부 한 폴더에 넣어 놨었는데 웹이 작동하지 않아서 문제를 공유함
파일마다 특정 폴더에 넣어야 제대로 작동이 한다 해서 파일 경로의 중요성을 깨달음
- 시간이 부족해 웹 디자인을 어떻게 할지 의견을 모음
가장 직관적인 디자인으로 하자 결정
- 웹 크롤링 중 첫 페이지는 가져올 수 있는데 다음 2번째 이후로 가져오지 않고 크롤링이 에러가 뜸
- 미흡한점
- 내가 생각보다 SQL언어, 웹 디자인, Flask 사용이 많이 미숙하다는걸 알았고 도와줄려 했지만 큰 도움이 되진 않았다.
- CS지식이 더 있었으면 웹 크롤링을 할때나 EDA 과정에서 더 빠르게 작업이 가능했을 것이다.
- 개인적인 팀의 문제점중 하나가 있었는데 각자의 업무 진척도 및 문제점을 바로 공유 했으면 좋지 않았을까 생각을 한다.
내가 완료한 작업을 다른 팀원이 해메는 중 이였단걸 알앗을때 꽤 많은 시간이 흘러있었기 때문..