
이번 프로젝트는 파이썬을 이용한 프로젝트이다.
파이썬으로 여러가지 할 수 있는데, 요즘 파이썬을 쓰는 이유는 무엇인가. 데이터 처리 및 AI를 사용하기 위함 아닌가.
그래서 이번 프로젝트는 머신러닝을 통한 예측 분석이다.

DACON : https://dacon.io/competitions/official/229255/overview/description
2019년도에 DACON에서 대회를 했었는데, 바로 제주도에서 퇴근 시간에 버스 승차인원이 얼마나 되는지 예측하는 대회였다.
물론 내가 이 대회에 참가했던 것은 아니고, 이전 학원에서 파이썬 교육으로 했었던 것을 그대로 들고 온 것이다.
제주도 버스의 효율적인 운행를 위해 퇴근시간(18~20시) 승차인원을 예측하는 모델 개발
id : 고유 IDdate : 날짜bus_route_id : 노선 IDin_out : 시내버스, 시외버스 구분station_code : 정류소 IDstation_name : 정류소 이름latitude : 버스 정류장의 위도longitude : 버스 정류장의 경도X~Y_ride : X:00:00부터 X:59:59까지 승차한 인원 수X~Y_takeoff : X:00:00부터 X:59:59까지 하차한 인원 수18~20_ride : 18:00:00부터 19:59:59까지 승차한 인원 수해당 데이터 컬럼들을 기반으로 18~20_ride 컬럼의 데이터를 예측하는 프로젝트이다.
이에 가장 적합한 방식은 머신러닝이며, 머신러닝은 크게 분류분석과 회귀분석, 두 가지로 나눌 수 있다.

데이터가 어떤 그룹에 속하는지 예측하는데 사용되는 기법.
이 데이터가 A인지 B인지를 구분한다고 생각하면 된다.
변수들 간의 관계를 파악하고 예측하는데 사용되는 기법.
다음에 올 수치형 데이터가 어떤 것인지 예측하는 것이다.
이번 프로젝트에서 필요한것은 인원수이므로 수치형 데이터를 예측하는 회귀분석을 사용하도록 한다.

원래는 직접 모델을 선택하고 파라미터도 직접 조정해줘야 하지만 여기서는 자동으로 진행해주는 AutoML을 이용하기로 한다.

자동으로 여러 모델을 비교하여 가장 최적의 모델을 선택해주는 Pycaret을 사용 했다.
다만 데이터 전처리를 자동으로 해준다고 하지만, 아직까지는 직접 해주는 것보다 못하므로 수동으로 해줘야한다.

| 원본 Feature | 변환 Feature | 설명 |
| date | ||
| weekday | 요일 | |
| is_weekend | 주말 여부 | |
| is_holiday | 공휴일 여부 | |
| latitude / longitude | ||
| jeju_distance | 제주시와의 거리 | |
| seogwipo_distance | 서귀포시와의 거리 | |
| X~Y_ride | ||
| 6~8_ride | 6~8시 승차 | |
| 8~10_ride | 8~10시 승차 | |
| 10~12_ride | 10~12시 승차 | |
| X~Y_takeoff | ||
| 6~8_takeoff | 6~8시 하차 | |
| 8~10_takeoff | 8~10시 하차 | |
| 10~12_takeoff | 10~12시 하차 |
대회 우승자들을 보면 외부 데이터를 사용하면서까지 전처리를 하지만 나는 그렇게까지는 안 하고 간단하게 했다.

데이터 전처리하는데 도움을 주는 라이브러리가 있는데 바로 seaborn이다.
seaborn에는 히트맵이라는걸 제공하는데, 이게 데이터간의 상관관계를 나타내는 것이다.
색깔이 밝을수록 서로가 영향을 많이 주고, 어두울수록 서로 영향이 없다는 것이다.
이를 보고 필요없는 컬럼을 지우면 된다.

이번 프로젝트에서 사용한 모델은 랜덤 포레스트이다.
왜 이걸 사용했는가...
솔직하게 말하자면 Pycaret이 가장 적합하다고 선택해준 것이기 때문이다.
랜덤 포레스트는 결정 트리를 무작위로 만들어서 그 결과를 합쳐서 예측하는 기법이라고 되어있는데, 내가 이해하기로는 결정 트리 == 조건인 것 같다.
즉, 수 많은 if에서 결과를 모아 도출해낸다는 것이다.
그래서 그런지 해당 모델은 다른 모델들에 비해 시간이 굉장히 오래 걸렸다.

모델을 학습, 평가하면서 얼마나 정확한지를 알 수 있는 지표가 있다.
위 이미지만 봐도 6가지나 있는데, 보통 회귀 모델에서는 MAE와 R2를 본다.
보편적인 평가 수치를 나타내는게 R2인데, 생각보다 다른 요인에 의해 값이 변동되는 경우가 많다고 하여 여기서는 MAE를 기준으로 하였다.
MAE는 실제값 - 예측값의 절대값의 평균으로, 수치가 적을수록 실제값과 오차율이 적었다는 것이니 예측도가 높다고 할 수 있다.
0에 가까울 수록 좋은 모델이라는 것이다.

아무튼 이런식으로 모델을 학습해서 결과를 제출하면 이렇다.
등수는 그리 높지는 않다. 저 정도면 중간정도라고 보면 된다.

어차피 데이터 관련은 통계학과를 나온 전공자들을 이길 순 없다.
이번에는 머신러닝을 경험해보고자 하는 목적으로 진행하였고, 어떠한 방식으로 진행되고 어떤 결과가 나오는지 예측하는데 의의를 두었다.
왜 파이썬이 데이터 처리 용도로 많이 쓰이는 건지 느끼게 되었다.
확실히 다른 언어에 비해 편의성이 남다르다.
자세한건 👇하단의 깃허브의 Reame를 읽어달라.
github : https://github.com/HYK-Nov/rush-hour-prediction?tab=readme-ov-file