링크텍스트
위 링크는 뉴욕 도시 내 택시 요금 예측을 어떻게 구현했는지 설명하는 내용이다. Train 데이터는 이미 택시 요금 체계에 따라 금액을 지불한 내용이고, 이를 학습하여, 비슷한 유형의 손님이 탑승하는 경우 미리 금액을 예측하여 택시 손님이 요금을 예상가능할 수 있도록 할 수 있다.
Data Cleansing
- 요금이 음수 인 경우 제거
- 위도/경도의 최소, 최대값을 볼때 너무 멀리 있는 지역은 제거
- 요금의 average, standard deviation 구함
- Remove missing data
Google Mapping
- 위도/경도가 있는 데이터는 구글맵 으로 찍어보자
- test 데이터의 Max,Min 값으로 box 형성후 벗어나는 train 데이터 제거
- aiblog.nl/download/nyc_ 해당 사이트에서 이미지 긁어오고, 해당 좌표값을 x축, y축으로 설정, 그리고 그 위에 scatter plot 만들기
- 대륙은 0, 바다는 1로 입력 후 해당 위도/경도가 1인 데이터 제거
- 단순 scatter plot 이 아니라, density 로 표현 가능 (단순 scatter plot 은 밀집지역이 어디인지 파악하기에는 쉽지않음)
- 시간별 밀도 체크 가능 (시간을 idx 로 갖는 for 문 으로 나눠서)
Insight Process
- 거리와 요금이 있으므로, fare_amount 계산 해볼것
- 거리는 0 인데, 요금이 0이 아닌경우, -> 이러한 경우 왜 그런지 정보가 불충분하다.
- 거리가 50마일이 넘는ㄴ데, 요금이 굉장히 저렴한 경우는? (쿠폰이 사용되어진건가)
- 거리가 동일하고 먼데 요금이 거의 동일한 경우,(공항 등의 이유)
yp=θ0+θ1∗xd+θ2∗xt
yp=fare,θ0=시작요금,xd=거리,xt=시간,xd=c∗xt
xdyp=xdθ0+θ1+cθ2∗xdxd=xdyp=xdθ0+θ′
- 결론 : 거리당 요금은 1/거리 로 볼 수 있다.
- 년도별 시간 회귀 그래프를 보여주므로써 추세 변동 볼 수 있음
- NYC 에서 고정적인 거리를 가는데 요금이 비슷한 부분의 dots 들이 몰려있는 경우가 있다 -> hoxy 공항이 있는건 아닐까? 라는 생각. 공항이면 고정금액일 수 있으니, 제거해야할 수도 있다. 왜냐하면, 고정 금액으로 산출되어있는 지역은 기존의 거리당 금액 측정 로직에 방해가 될 수 있기 때문
- 지금까지는, 단순히 거리 대비 가격을 계산하였는데, 방향성은 관련이 없을까?
- 삼각함수를 이용하여 각도로 방향성 대체, (Manhattan-distance)
- 방향성 = 도로의 배치 현황 으로 이해 가능
Conclusion
- 위에 과정들을 통해 제거된 데이터 로 필요한 feature만 넣어서 예측 할 수 있다.
Another Opinion
Preprocessing
- 손님이 6명 초과인 데이터 제거
- Googling 을 통해 위경도 outlier 제거
- dtypes 정리해주기
EDA
- 작성자의 직관: 탑승객의 수, 픽업하는 날짜와 시간 요일, 거리 가 요금에 영향을 끼칠까?
- 구의 위/경도의 거리를 측정할때 Haversine formula 링크텍스트 사용 (H_Distance 필드 추가)
작성자의 직관
- 탑승객 수 : single passenger 가 가장 많았고, 가장 높은 금액 또한 1 passenger
- 날짜와 시간 : 월별 정보는 크게 의미없었고, 시간은 꽤나 유의미한 결과를 보여줌 (아침5시 -> 가장 낮은 금액, 저녁7시->가장 높은 금액) 그리고, 아침 5시~10시 , 오후 2시~4시 사이에 가장 많은 요금 지출, 이를 통해 먼거리에 사는 passenger 가 traffic을 피하기 위해 탑승했다고 예상 가능(?)
- 요일 : 탑승객 수에는 영향을 끼치지 않으나, 가격에 있어서는 영향을 끼침. 일요일, 월요일 가장 먼 거리, 높은 요금. 그리고 금요일에는 많이 사용 안함.
- 거리 : h_distance 를 bin으로 나눔 (frequency 체크), 먼 거리에 있는 데이터들 초기 비용 빼줌(기본료)
- 요금이 0원이 아닌데 거리가 0 인것들에 대한 생각: 손님이 취소하여 기사님이 기다린 시간만 charge 된 경우, 뭔가 missing value 가 있는 경우(28667rows 이기 때문에 쉽게 제거 힘듬)
- distance = (fare - 2.5) / 1.56 로 대체 (1.56 은 구글 검색을 통해, km당 가격)
- 요금이 0원이나, 거리가 0이 아닌경우, 요금이 missing 된 데이터라 간주하여,
fare = 2.5 + 1.56(H_dist) 로 대체
Modeling
- Random Forest model,lgbm,xgb 사용(대부분의 feature 사용),