NYC Taxi Fare(kaggle, 가격 예측)

고독한 키쓰차·2020년 11월 10일
0

Kaggle Notebooks

목록 보기
1/2

링크텍스트

위 링크는 뉴욕 도시 내 택시 요금 예측을 어떻게 구현했는지 설명하는 내용이다. 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+θ1xd+θ2xty_p = \theta_0 + \theta_1*x_d + \theta_2*x_t
yp=fare,θ0=시작요금,xd=거리,xt=시간,xd=cxty_p = fare, \theta_0 = 시작요금, x_d = 거리, x_t = 시간, x_d = c * x_t
ypxd=θ0xd+θ1+θ2cxdxd=ypxd=θ0xd+θ\frac{y_p}{x_d} = \frac{\theta_0}{x_d} + \theta_1 + \frac{\theta_2}{c}*\frac{x_d}{x_d} = \frac{y_p}{x_d} = \frac{\theta_0}{x_d} + \theta'
  • 결론 : 거리당 요금은 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 사용),
profile
Data Scientist or Gourmet

0개의 댓글