동기

이번 여행은 내가 지금까지 다녔던 여행 스타일과 완전히 달랐다. 하면 유럽인들과 함께 여행을 다녔기 때문이다. 한국인에게 여행이란 건 시작과 끝 그 사이에는 오로지 계획으로 가득찬 일이지만, 이 친구들은 좋게 말하면 ‘즉흥 여행’, 나쁘게 말하면 ‘무지성 방랑’ 그 자체였다. 하루 종일 놀다가 자기 전 5분간 다음날 계획을 세우고, 그 아침에는 출발 10분 전에 그 계획을 뒤집어 엎는 그런 친구들이었다. 그 어떠한 방향성이 존재하지 않는 그런 자유로운 여행이었다.

정신없는 여행을 마치고 나니 그동안 얼마나 썼는지 점검해야 할 필요가 느껴졌다. 발리에서는 종잡을 수 없는 일정으로 인해 그동안 얼마를 썼고, 얼마를 쓸 예정인지 계산하는 것은 쓸모없는 일이었다. 게다가 화폐 단위도 문제였는데, 주로 두자릿수를 넘어가지 않는 SGD에 익숙해져 있다보니 한국보다 0이 하나가 더 붙는 인도네시아 루피아에 지출 감각이 흐려졌다. 그리하여 여행이 끝나고 나서야 제대로 정산해야 겠다고 느꼈다.

목적

발리 여행 지출 분석의 목적은 다음과 같다.

  • 본 여행 중 발생한 소비 행태를 관찰하고,
  • 향후 여행 계획 수립 중 예상 경비 계산에 참고하기 위함이다.

추가적으로 살펴보고 싶은 점은 다음과 같다.

  • 동남아 여행에서 무엇을 얼마나 먹었을까?
  • 현금과 카드는 얼마나 썼을까?

Data Preparation

지출 내역에 대한 데이터는 주로 카메라 앨범과 Splitwise 기록에서 끌어왔다. 여행 중에 돈을 쓸 일이 생기면 나는 영수증이나 메뉴판 사진을 찍거나 메모장에 적어두었다. 그리고 다른 친구가 대신 내주거나 1/N 한 경우에는 Splitwise라는 어플에 장부를 달아두었다. 꼼꼼히 정리해둔 덕분에 거의 모든 지출 내역을 찾을 수가 있었다.

이러한 Raw Dataset을 Excel을 활용하여 정리하였다. Column은 다음과 같다.

  • date: 일자. YYYYMMDD 형식.
  • group1: 4분류. food (음식), living (물건), taxi (이동 할 때), ticket (입장권 같은 거).
  • group2: group1의 하위분류.
  • location: 지출 장소. 데이터 분석에는 활용되진 않고 일정 회고를 위함.
  • name: 지출 품목.
  • price: 가격. IDR 기준. 1/N 적용 후.
  • method: 결제 방법. cash (현금), card (카드), owe (친구가 대신 낸 돈).
  • iscash: 현금 결제 여부. 1 (현금), 0 (카드).
  • notes: 비고.

해당 Dataset에 대한 일러둘 점은 다음과 같다.

  • NTU에서의 출발부터 NTU로의 도착까지 발생한 지출을 기록.
  • 일 단위의 발생주의회계에 따라 기록.
  • 하나의 지출이라도 group에 따라 분류하여 기록.
  • 복합적인 group일 경우 가장 큰 비중의 group으로 분류.
  • SGD 결제 시 10,250 IDR, USD 결제 시 15,000 IDR 적용.
  • KRW 결제 시 수수료 및 캐시백 상계하여 IDR 적용.
  • 1/N 적용 시 10원이하 절삭.

1 SGD = 10,250 IDR을 적용한 이유는 현지에서 해당 환율에 환전했기 때문이다. KRW 결제 건에 대해서는 토스카드는 해외결제 3% 캐시백 이벤트를 하고 있었기 때문에 이를 모두 고려하였다.

가장 고심했던 분류는 FINNS Beach Club Entry였다. 총 943,800 IDR 였는데 여기에 입장권과 좌석이 포함되어있고, 해당 금액 만큼의 음식과 술을 시킬 수 있다는 것이었다. 메뉴판에서의 가격이 20% 정도 비싸다는 점과, 음식과 술 지출 비중이 3:1 이었다는 점, 그런데 칵테일을 실컷 시켜먹었다는 점 등을 모두 고려해 ticket : food-meal : food-alcohol의 비중을 2 : 3 : 2로 산정하였다.

Load Dataset

Excel로 정리한 파일을 CSV로 변환한 후 불러왔다. 그리고 IDR을 SGD로 변환하기 위한 toSGD()와 YYYYMMDD를 예쁘게 출력하기 위한 fmtDt() 함수들을 등록해주었다.

import org.apache.spark.sql.Dataset
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.types._

val SRC_FILEPATH = "/Users/rokong/Repository/zep-notebooks/bali-book/bali-expenditure.csv"

val srcSchema = new StructType()
                  .add("date", StringType, false)
                  .add("group1", StringType, false)
                  .add("group2", StringType, true)
                  .add("location", StringType, false)
                  .add("name", StringType, false)
                  .add("price", IntegerType, false)
                  .add("method", StringType, false)
                  .add("isCash", IntegerType, false)

val df = spark.read.options(Map("header" -> "true"))
        .schema(srcSchema)
        .csv(s"file://$SRC_FILEPATH")

df.createOrReplaceTempView("src")
// IDR to SGD
val toSGD = (idr: Integer) => scala.math.round(idr / 10250.0 * 100) / 100.0
spark.udf.register("toSGD", toSGD)

// Format Date String
val fmtDt = (date: String) => date.substring(4, 6) + "/" + date.substring(6, 8)
spark.udf.register("fmtDt", fmtDt)

Groups

그룹별로 지출을 분류하였다. 전체 지출은 5,614,700 IDR로 547.78 SGD의 비용이 들었으며, 하루에 60 SGD정도 사용하였다. 먹는 것 보다 활동하는 데 (ticket, taxi) 더 많이 썼는데 (ticket+taxi 51%, food 30%), 평소 70% 이상을 식비에 썼던 것과 비교해보면 나름 이곳저곳 많이 하고 돌아다녔음을 알 수 있다. 이동 경비 (taxi)는 113.37 SGD로, 멀리 갈 때만 프라이빗 차량을 빌렸으니 필요할 때마다 Grab이나 Goject을 부르는게 저렴함을 알 수 있다 (Klook 6시간 차량 대여 시 인당 10 SGD).

Imgur

Food

다음으로 group1 중 food에 대해 살펴보았다. 식비 총 지출은 229.2 SGD 이다. 동남아 여행이라 과일을 많이 먹었을 줄 알았는데 술을 더 많이 마셨다. (alcohol 24%, fruit 14%) 발리에서 매일 아침마다 빵을 먹었는줄 알았는데 베이커리에 간 날은 4일 (09/25, 09/27, 09/28, 10/02) 뿐이었다.

Imgur

식비로 가장 많이 지출한 날은 09/25로, FINNS Beach Club에 간 날이었다. 그 날만 식비로 72.67 SGD를 지출했다. 물론 비싸다는 건 알고 있었지만, ‘거기서 점심 + 저녁 + 알콜까지 먹을 수 있으니 괜찮지 않을까?’ 라고 생각하며 갔다. 하지만 meal만 계산해보니 09/25를 제외한 하루 평균 음식값 지출은 10.32 SGD로 (반나절만 있었던 09/24, 10/02 제외), 09/25 하루에만 4배 가까이 지출했다 (39.46 SGD). 과연 FINNS가 그 만큼 가치있는 일정이었는지 재고할 필요가 있다.

Imgur

두 번째로 식비에 많이 지출한 날은 09/26이었는데 (45.9 SGD), 09/27 ~ 10/01 평균 식비 지출이 15.73 SGD 대비 2.7배 였다. 어디서 돈이 줄줄 샜나 추적해보니 그 날은 아침을 식당 가서 사먹었다는 사실, 저녁을 두끼를 먹었다는 사실, 마지막 저녁에 화이트와인을 시켰다는 사실이 합쳐지면서 많은 지출을 하게 된 것이었다.

Date

다음으로 일자별 지출을 정리해보았다. 가장 많은 지출한 날은 FINNS Beach Club에 간 09/25, 출국일 다음으로 가장 적은 지출한 날은 식중독에 걸려서 꼼짝도 하지 못했던 09/28인걸 볼 수 있다.

Imgur

group1 중 living으로 가장 많이 지출한 날은 역시 09/25 였는데, 이날 FINNS Beach Club 앞에서 하와이안 티셔츠를 구매했다 (21.95 SGD). 그 당시에는 10분여간의 네고 끝에 ‘이 정도면 저렴하게 샀네’라고 생각했는데, 전체 지출과 비교하니 꽤나 비싸게 샀다는 걸 알 수 있다.

Imgur

09/27에는 ticket에 유독 많은 지출이 있었다 (57.07 SGD). 그 날은 Ubud에서 ATV를 탔고 (39.02 SGD) 기념 사진도 구매했다 (5.85 SGD). 기념사진을 돈내고 산건 이번이 처음이라 꽤 비싸다는 생각이 들었는데, 그 날 Rice Terrace와 Mt. Batur Observatory 들어가는데 그 정도 비용 (각 4.88 SGD)를 썼다는 것을 보니 무턱대고 비싼 값은 아니었다는 걸 알게 되었다.

09/30에도 ticket에 많이 썼다. 누사페니다섬에 배타고 들어가서 거기서는 스쿠터타고 이동했으며 (총 43.51 SGD) 빌라에서 사람 불러서 마사지도 받은 날이었다 (14.63 SGD). 처음 타보는 스쿠터에다가 위험한 길을 다녀서 오히려 ATV보다 더 재밌었고, 가격도 비교해보자면 이 둘의 가심비는 비슷한 수준이다.

10/01 아침에 새벽 03:30에 Ubud으로 이동, Jeep를 타고 Mt. Batur로 올라가 일출과 Blacklava를 보았다. 모든 인원의 비용을 여러명의 현금을 모아서 그 날 지불했는데, 돈을 모을 당시에는 ‘아 이거 좀 비싸보이는데’ 라는 생각을 했다. 그런데 다른 날과 비교해보니 Ubud으로 가는 비용이나 Jeep를 타는 비용이나 비슷한 수준임을 깨달았다.

Cash

이번에는 지불 방법(현금/카드)에 대해 분석하였다. 전체 지출에서 41%를 카드로 지불했다. 그런데 만약 FINNS Beach Club 관련 비용을 제외해본다면 그 비중은 29%가 된다. 카드만 놓고 봤을 때 Grab이나 Gojek에 가장 많이 쓴줄 알았는데 먹는 데 더 많이 썼다 (food 49%, taxi 18%). 오히려 ticket (30%)에 taxi보다 더 많이 썼다. 아무래도 택시 가격 자체가 싸다는 점을 간과했던 것 같다.

Imgur

항목 별로 현금 및 카드결제 비중을 보았을때도 결과는 비슷했다. living을 제외하고 food, taxi, ticket에서 카드로 지출한 비중은 각각 48%, 36%, 41%로, 유독 카드를 많이 썼던 항목은 없었다.

Imgur

여행을 떠나기 전에는 ‘비싼건 카드로, 싼건 현금으로 결제하지 않을까’ 생각했다. 비싼 가격순으로 정렬했을 때 상위 25개의 지출에서 카드로 결제한 금액의 비중은 44%로, 전체 지출과 비교했을 때 (41%)와 비슷했다. 가격이 결제 방법에 크게 영향을 미치지 않았음을 알 수 있다.

느낀점

이번 분석을 통해 여행 당시 느꼈던 주관적인 생각과 실제 데이터가 차이나는 경우가 있었다. 위의 내용 중에서 요약하면 다음과 같다.

  • FINNS Beach Club은 비쌌다: 하루 종일 먹고 노니깐 이정도 금액이어도 괜찮지 않을까 생각했는데, 전체 지출 중에서 압도적인 비중을 차지했다.
  • 누사페니다섬 경비는 비싸지 않았다: 가장 비싼 액티비티가 아닐까 생각했는데 ATV와 Jeep 투어와 비슷한 수준이었다.
  • Jeep 투어는 비싸지 않았다: 십시일반 현금을 모아서 낼 때는 호갱잡혔나 싶었는데 다른 액티비티보다 저렴했다.
  • 과일보다 술에 더 돈을 썼다: 과일은 혼자 먹고 술은 1/N해서 마시니 술값이 덜 들었나 싶었는데 아니었다.
  • Grab/Gojek에 카드를 많이 쓰지 않았다: 카드로만 결제해서 많이 쓴줄 알았는데 카드로 음식을 결제한 것보다 적게 나왔다.
  • 카드로 이것저것 많이 결제했다: 비싼 것들만 카드로 결제한 줄 알았지만 카드로 싼 것도 많이 샀고, 현금으로 비싼 것도 많이 샀다.

결론

앞으로 여행 계획을 세울 때 도움이 될만한 사실들을 몇가지 포착할 수 있었다. 정리하자면 다음과 같다.

  • 술값과 밥값은 1:4: 먹는데 얼마나 쓸 지 모르겠다면 술값부터 계산하고 전체 식대를 추정하자.
  • 평소에는 Grab/Gojek을 이용하자: 동남아는 택시비가 아주 저렴하니 괜히 Private Car를 종일 빌리지 말고 택시타고 가자.
  • 적어도 예상경비의 2/3은 환전하자: 현금이 남을까봐 무작정 걱정하지 말고 최소한 이정도는 환전하도록 하자.