1. Model관련 변경사항

1-1) 기존 시스템 문제점

문제1) 분할된 모델

기존 모델은 2시간동안(n시 00분 ~ n+1시 59분)의 승차인원을 target으로 하는 모델을 시간별로 총 9개를 만들었다. target을 세분화하지 않으면 모델이 언더피팅되는 바람에 제대로 된 추론을 하지 못해서 해준 조치인데, 이번에 언더피팅 문제를 해결하였다. 따라서 target을 세분화 해줄 필요가 없어졌다. 유지보수도 힘들고 predict 하기도 번거로운 관계로 하나의 모델로 합쳐주었다.

문제2) 모델 종속성

기존 모델은 pycaret이라는 AutoML 라이브러리에 종속되어있었다. 하지만 해당 pycaret은 다른 라이브러리와 의존성 문제가 너무 심했고, 각종 버그가 너무나도 많았다.

[종속된 모델]
from pycaret.regression import create_model

lgbm = create_model('light_gbm')
(...)
pred = predict_model(lgbm, x_data)


1-2) 개선 사항

해결1) 모델 병합

적절한 Feature를 찾아서 언더피팅 문제를 해결하였다. 우선 raw 데이터 컬럼을 다음과 같이 수정해주고 승/하차 및 기타 중요한 컬럼별 요약통계량을 추가해주었다.

[기존 raw 데이터]
정류장 버스 출근시간_탑승인원 출근시간_하차인원 퇴근시간_탑승인원 퇴근시간_하차인원
전남대 진월07 1 0 5 4
[new raw 데이터]
정류장 버스 승/하차 시간 인원
전남대 진월07 승차 출근시간 1
전남대 진월07 하차 퇴근시간 4


다음은 하이퍼 파라미터 튜닝까지 끝마친 최종 모델의 score이다.

[score]

[feature importance]

[y_pred&y_test plot]

  • 문제 제기

    train에 쓰인 Feature가 너무 많고, score가 너무 좋게 나와서 과대적합이 의심된다. score 계산에 쓰인 test 데이터는 train 과정에 전혀 참여하지 않는 데이터이긴 하지만 무언가 잘못된 부분이 있을 수 있으므로 한번 확인해봐야겠다. 또한 지금 Feature가 너무 많으므로 중요도가 낮은 Feature는 제거해주어야겠다.

해결2) Non-pycaret 모델

pycaret으로 build한 모델은 버그가 너무 많고, 속도도 일반 모델에 비해 느리다는 문제가 있었다. 따라서 ML 알고리즘별 성능 비교, 하이퍼 파라미터 튜닝등의 귀찮은 작업만 pycaret을 사용하고, 그 외의 부분에서는 pycaret 사용을 지양하였다.

우선, pycaret으로 최적의 ML 모델을 찾고, 해당 모델 하이퍼 파라미터 튜닝을 끝마친 후에 직접 모델을 build해주었다. 이렇게 되면, 실제 Web 서비스 시에 pycaret의 영향을 전혀 받지 않게된다.

from pycaret.regression import create_model
from lightgbm import LGBMRegressor

lgbm = create_model('lightgbm')
tune_model = tune_model(lgbm, n_iter = 200, optimize = 'MAE', choose_better = True)
params = tune_model.params

lgbm = LGBMRegressor(**params)
lgbm.fit(x_train, y_train, eval_metric='mae')



2. DataSet관련 변경사항

2-1) 기존 시스템 문제점

문제1) 기존 raw 데이터의 부재

기존에 사용하던 주기성 데이터가 갑자기 모두 삭제되는 바람에 raw 데이터를 새롭게 얻을 수가 없어졌다.

문제2) 연산속도 문제

데이터의 수가 많아(약 700만) 연산속도가 매우 느린 관계로 데이터 프레임 작업 시, 매우 불편하다.


2-2) 개선 사항

해결1) raw 데이터 변경

광주광역시 빅데이터 플랫폼에서 새로운 데이터를 받아주었다. 2022년 3월부터 10월 12일까지의 데이터를 train 데이터로 사용하였으며, 최종적으로 약 400만개의 데이터를 학습에 사용하였다. 데이터는 Selenium으로 받아와주었다.


해결2) csv to parquet(파케이)

데이터 저장형식을 csv에서 parquet로 변환해주었다. parquet는 하둡 생태계에서 주로 사용되는 파일 포맷인데, 빅데이터 처리에 특화되어있다. 따라서 연산 속도 향상을 위하여 csv 파일을 parquet로 변환해주었다.



3. Page관련 변경사항

3-1) 기존 시스템 문제점

기존 뻐정은, Main 화면에서 사용자가 특정 정류장과 버스를 선택하면, Detail 화면에서 예상 승차 인원과 다양한 추론 결과를 서비스하는 시스템이다. Detail 화면에 쓸데없는 정보가 너무 많고, Main 화면에는 기능이 많이 부족하여 허전하다.


3-2) 개선 예정

  • Main 화면

Main화면 상단 네비게이션 바에 버스 배차간격 및 도착시간을 확인할 수 있는 페이지를 추가할 예정

  • Detail 화면

    Detail 화면에 있는 레이더 차트를 삭제하고, 그 자리에 더 유용한 정보를 넣을 예정이다. coco 데이터를 학습한 ssd 모델로 실시간 객체 탐지를 하여, 현재 해당 정류장에 사람이 얼마나 있는지 보여주는 기능을 추가하고자 한다.

댓글남기기