본문 바로가기

Kaggle, Dacon, 공모전

# Pricing Project : Spanish High Speed Train Service (Renfe AVE)

Intro

합리적인 Train ticket pricing을 하기 위해  tickets pricing monitoring system의 data를 Kaggle에서 가져왔습니다.

data가 너무 방대해 실습에는 작은 규모의 data를 사용하였음을 참고해주세요~ github

 

먼저 어떤 data가 들어있는지 한번 보겠습니다.

제가 좋아하는 도시를 추려 MADRID에서 BARCELONA까지 가는 Ticket을 알아보겠습니다.

먼저 티켓을 구매할 수 있는 사이트에 가보니까 MADRID에서 BARCELONA까지는 평균 3시간 정도 걸리고 가장 빠른 기차는 2시간 반 정도 걸린다고 하니 우리나라 KTX랑 비슷한 것 같네요~. (실제로 최고 속도도 310km/h 정도라고 합니다.)

 

Columns explanation

첫 번째 column부터 알아보겠습니다. insert_date은 가격이 책정됐을 때 기록되는 data라고 합니다. 주로 밤 10시 가까이 됐을 때에 기록이 되는 것 같네요.

origin은 출발지고 수도인만큼 MADRID에서 가장 많은 기차가 출발합니다. 

destination은 목적지이며 이 역시 MADRID가 가장 많지만. 출발지를 MADRID로 설정했기 때문에 SEVILLA와  BARCELONA,  VALENCIA 가 주요 목적지가 되겠습니다.

start_date과 end_date은 출발 시간과 도착 시간입니다. 첫 차는 보통 6시 10분 정도이며 막차는 MADRID에서 9시 반 정도라고 하네요.!

train_type은 기차 종류를 말하며, 많은 종류의 기차가 존재하는데 AVE가 압도적으로 높습니다.

price는 우리가 알고자 하는 target variable이 되겠습니다. ticket 평균 가격은 64유로라고 하네요. 

train_class는 기차 class를 말하며 4가지 종류가 있는데(스페인어라 해석은 안되지만) Turista가 가장 많은 것을 보니 일반석임을 예측해볼 수 있습니다.(여행자라는 뜻이겠지요..?) 

fare의 종류로는 Promo, Flexiblem, Adulto ida, Promo + 네 가지가 있습니다.

 

Exploration

insert_date : 가격이 책정되고 기록이 되는 곳인데 날짜가 맞지 않는 row를 확인해서 크게 신뢰되지는 않습니다. 기록되는 시간은 평균 10시 10분 전입니다.

destination : 세 목적지(SEVILLA, BARCELONA, VALENCIA ) 별로 가격 차이를 확인할 수 있습니다.

start_date : 시간대 별로 티켓 가격이 달라질 수 있습니다.

end_date : 소요 시간을 확인할 수 있습니다. 오래 소요된다면 가격이 저렴해질 수 있습니다.

train_type : 기차의 종류를 나타냅니다. AVE-TGV, AVE, ALVIA 등이 있습니다.

price : 종속 변수로서 티켓을 합리적인 가격에 구매하는데 monitoring 할 수 있는 중요한 column입니다.

train_class : 기차 class가 다름에 따라 가격이 달라지므로 비교해 볼 수 있습니다.

fare : 요금대 별로 가격 차이를 확인할 수 있습니다.

start_time : 5구간으로 나눠 시간대 별로 가격 차이를 확인할 수 있습니다.

구간 0 : ~ 09:00

구간 1 : 09:00 ~ 12:00

구간 2 : 12:00 ~ 15:00

구간 3 : 15:00 ~ 18:00

구간 4 : 18:00 ~

Day_name : 요일을 표시해 요일 별로 가격을 비교할 수 있습니다.

time_in_mins : 여행 시간을 분으로 확인할 수 있습니다.

 

Insights

요일별로, 시간대 별로 나눈다면 좀 더 구체적으로 pricing을 할 수 있습니다.

 

 

Visualization

위의 그래프를 보시면 3번 구간(15:00~18:00)에 가장 많은 기차가 운행하는 것을 확인할 수 있습니다. 

그다음은 0번 구간대로 첫 차(05시 50분)부터 아침 9시의 기차 또한 많이 운행하고 있습니다.

왼쪽 그래프에서 의외인 점을 확인할 수 있는데 수요일에 가장 많은 기차가 운행되고 있었고, 되려 금요일에는 가장 운행되는 기차가 가장 적었습니다.

 

The average travelling time was 177.805 mins

The maximum travelling time was 562.0 mins

The minimum travelling time was 100.0 mins

 

평균 여행 시간은 177분으로 사이트에서 말한 것과 비슷하네요.~ 여행을 정말 좋아하는 사람은 9시간 넘게도 하네요..ㅋㅋㅋ

 

Missing data preprocessing

대부분의 col에서는 예쁘게 빈공간을 보여주지만 가장 중요한 price에서 가장 많은 NaN갑이 보이네요.  fare, train_class에서도 조금의 missing data를 확인할 수 있습니다. fare와 train_class는 fillna(mode()[0])로 채워주었고,

price는 fare와 같은 방법을 사용했습니다. 자세한 code는 여기를 참조해주세요!.

 

Pricing

이제 한번 괜찮은 가격으로 티켓을 사보겠습니다.! (저는 돈이 없고 시간은 많으므로 시간이 얼마나 걸리던 가장 싼 티켓을 구매하겠습니다.)

먼저 train_type은 가장 저렴한 REGIONAL로 선택하겠습니다.

요일도 가장 저렴한 일요일로 했고, 시간대도 역시 가장 저렴한 1번 구간(09:00~12:00)으로 선택했습니다.

목적지는 발렌시아고 여기로 한 이유는 가장 저렴했기 때문입니다.

요금 선택도 가장 저렴한 Adulto ida로 하고 싶었지만 따로 설정하는 곳을 찾지 못했습니다.

 

 

위의 사진은 제가 얻은 티켓입니다. 일단 Pricing은 성공한 것 같습니다.

하지만 거진 7시간을 기차에서 보내야겠네요..(참고로 차로 가면 3시간 반 걸린다고 합니다..ㅎㅎ)

 

 

그럼 여기서 이번 프로젝트를 마치겠습니다. 

 

 

조언은 언제든지 감사합니다.~

 

참조 : https://www.thetrainline.com/en/train-times/madrid-to-barcelona, https://www.kaggle.com/ratan123/a-very-extensive-renfe-analysis