【360 萬字爬蟲成果】平機票網「大數據」:flyagain.la 真的幫你買平機票嗎?

幾個月前說過跟大家分析 flyagain.la 整個網站的大數據,希望在年底把這件事完成,當作 2017 年的終極目標。

雁橋花了半年左右學習寫程式和應用不同框架爬蟲,進行數據分析、把數據視像化和學習一些統計學的基礎,老實說仍未精通這一切,希望前輩們多多指點,有不成熟的見解也煩請指出。

事不宜遲,我們今日就看看 flyagain.la 的數據吧。

#頭盔:文章全都是公開資料,數據純為學習用途。

#頭盔2:會選擇 flyagain.la 而不是其他同類網站是因為名氣,當然要平行比對也是做得到的,只需要時間。

#頭盔3:我不能說自己絕對中立,當然會有個人意見,歡迎理性討論。

背景資料: 7389 篇文章、360 萬字資料

這部份是交代數據來源,對研究方式沒興趣的朋友可以跳過。

  • 在學程式的最初,雁橋是用 RequestsBeautiful Soup 這兩個函式庫去進行爬蟲,但問題是 flyagain.la 真是他媽的難爬,原因有兩個:
  • 文章似乎有時間限制,有部份在 Facebook 找得到的文章已經失效,憑 url 列表去爬會不斷出現 Error
  • 如果利用「窮舉法」去試每一個網址的可能性,速度實在太慢了,即使每秒能進行一次請求,爬完也足足要一整天。
  • 很容易被發現是爬蟲然後封 IP,利用 VM 進行爬蟲亦相當沒效率。

最後乖乖的跑去學 Scrapy 框架,然後在幾個小時內就已經建立起一套爬蟲了。在 30 分鐘就可以把 flyagain.la 從 2011 年開站到 2017 年 12 月 16 日當天的 7389 篇文章共 360 萬字文章抓取到 .csv 檔進行分析。

標題說是「大數據」卻沒有大到那裡~(汗)

這次主要用 Python ,有部份數據以R 處理

flyagain.la 關鍵字:平機票、台灣、國泰

大家認為上 flyagain.la 最常見到的是什麼?平機票是標準答案,但你們應該不會留意飛哪個國家的機票是熱門字吧?雁橋從「文章內容」與「標籤」(Tags) 兩方面統計。

首先大家可以看看文章的 Word Cloud (只顯示首 150 位關鍵字):

出現得最多的三大題目:「航空」、「優惠」、「香港」大家應該不意外,然後「暑假」、「日本」、「台灣」、「歐洲」、「澳門」、「泰國」、「CYN」亦是關鍵字,我們嘗試去除一些無關痛癢的常用字再輸出一次。(這次只留 50 個關鍵字):

你會發現 flyagain.la 真的很愛國泰、虎航與 Hong Kong Express 。

這是一個巧合嗎?利用網站的 tag 進行分析會更簡單精準,在 7000 多篇文章內有 1,496 個不同的 tag ,只需要一個簡單的 for loop 就可以簡單統計結果,首 20 名的排序為:

當中「旅遊」這個關鍵字出現了 7165 ,佔了總文章的 96% (但仍有 100 篇以上的文章「忘記」落 tag (有部份是信用卡廣告);次名就是大家期待的「平機票」了,共出現 6,155 次,因為部份文章是關於「平酒店」,這倒是很合理的數字;然後按順序排就是「東京」、「台北」、「大阪」、「首爾」、「曼谷」、「國泰航空」、「日本」、「倫敦」、「香港航空」、「巴黎」、「酒店」、「台中」、「台灣」、「新加坡」、「米蘭」、「沖繩」、「名古屋」、「高雄」。

整體來說都是亞洲為主,「買平機票窮遊見識視野」也就是這麼一回事。

至於冷門字(只出現一次)超過 200 個,就舉一些有趣的給大家參考:

坎昆和穆赫雷斯島、四季酒店、無國界醫生、特洛伊、烏魯木齊、南美洲、蘇臘亞巴、明尼亞波利斯、蒙尼黑、蓋特威克、國內線、喜來登金沙城酒店、特朗素、卡拉卡斯、庫斯科、秘技、筍盤、康泰、直布羅陀……

flyagain.la 同事有多勤力?偶爾令人覺得很煩的程度~

如果用最簡單、粗糙的數學計算, 7389 篇文章/ 6 年 ,平均每日在 flyagain.la 上面刊登的文章有 3.2 篇,一個星期足足接近 22 篇旅行優惠資訊……比起不少編輯要勤力多了(汗)

可是作為一個偽.數據科學家當然以數字說話,雁橋就做了一個簡單的統計:

  • flyagain.la 發文平均數(Mean):3.42877
  • flyagain.la 發文標準差 (Standard Deviation):2.08276
  • flyagain.la 發文中位數(Median): 3.0
  • flyagain.la 發文眾數(Mode): 0、2 (原來也有不發文的日子,也有可能被下架了!)

有了這些數字我們甚至可以分析發文數的 normal distribution ,可是這意義不大,雁橋較傾向於知道文章密度的規律,故此做了這一幅圖。當中紅色 X 是發文數超過 6 的日子;而綠色 O 是發文數少於 3 的日子。

聰明的讀者應該留意到在 2014 年中,他們的發文數一直在上升,直到 2015 年中瘋狂一天出 10 篇文,直到 2016 年稍為回落。大家可以想想,他們出文密度增加是因為平機票資訊增加了、航空公司/OTA (Online Travel Agency) 願意提供更多優惠還是香港人在那段時期特別喜歡去旅行?

從現有的數據我們難以作出任何結論,只能說小編辛苦了。

粗略價格分析(台灣)

上面談的都是 flyagain.la 的平台數據,如果你並非平台的死忠粉絲(或者內部員工),也許對你來說不是很實用,我們還是談回「平機票」這回事吧。

會進行 flyagain.la (和其他機票網)的爬蟲,原因是想知道他們每天發佈最少一篇文章,每星期提供如此多的平機票資訊,總不可能每篇文章都提供「最優惠價格」吧?

那麼什麼才是「平機票」呢?他們的資訊能幫助什麼人呢?如果直接跳過他們的資訊到 skyscanner 找機票,是否又有效率?

這些都是雁橋想過的問題,但很快就遇到幾個瓶頸。

  • 機票與手機等消費品不同,航班時間、航空公司、機位能否儲里數、航班機型、旅行時期…全部都影響價錢,這也牽涉到買家的價值觀。比如說有人接受不了廉航,卻有人樂此不疲;有人接受不了午夜航班,卻有意見說這是省時間的好方法;有人提出儲里數飛行才是王道,亦有人覺得效率不彰。以個人意見去評論「抵買」,肯定難以令所有人信服。
  • flyagain.la 與其他平機票網站所寫的都是「虛價」,例如是「 $1,432起」、「$688 就可以去日本」、「連稅 $1,913起」,這往往不是大家找到的實際價格。
  • 畢竟 flyagain.la 沒有與機票網連動的一個機制,撰文時當然有相當的彈性,卻不夠 meta-search engine 直觀。
  • 機票、套票、單程、來回有各式各樣的優惠,甚至你可以「國泰去、港航返」,還有著名的吉港歐、港歐泰等組合。
  • 無法去確認他們報導的價格是否可靠,實實在在買得到(難以標籤是否有效數字)
  • 各式各樣優惠難以逐一計算

儘管有以上問題,雁橋亦用自己想法進行了一些統計,看看 flyagain.la 為大家報導的機票價錢範圍大約如何。

先談談研究方式:

  • 利用 tag 選取「台灣」相關的文章
  • 利用 regex 抓出文章內最高的價錢,因為抓取純機票價錢沒有意義(未連稅),甚至中位價錢亦沒有意義(時間差、未包行李、未必能買得到 etc…)

製作出來的圖表:

這……根本什麼也看不出來吧,台灣的機票會貴到 $10,000 HKD 嗎?而最便宜竟然顯示為 $0 ?!這些都是一些無關的「髒資料」,當中包括一些「台港歐」、「台灣轉機飛美國」、「信用卡簽帳滿 $7,000 優惠」等等,先把他們去除乾淨:

情況像樣多了,但仍然是散亂的一堆「點」,完全沒有任何意義。(仍然有一堆 $10 ~$80 的「假資料」存在,原因是 Jieba 也不是萬能的,我們就粗糙的省略 $500 以下的數字,再看看當中有幾多是套票相關文章:

令人意外的是套票的有效文章並不是很多(326 篇),經典的應該是台北 3 日 2 夜 $1,119 (住文旅、不包行李):罕平Package!Expedia澳門飛台北3日2夜連稅每位$1,119起,10月24前出發 — 又飛啦!

我隨便在 Expedia 找到虎航台北機票來回 $888 ,你願意住 Hostel 的話每晚 $100 ~$150。

這個套票真的是「罕平」嗎?真的是「必買」嗎?

知道大家不會滿足於此,我們就把 Package 與 $2,000 以上的機票扔掉,保留剩下來的資料為 314 筆:

雁橋不想搞得太複雜,先把不同的航班拆出來:

事實離不開常識,最貴的航班落在國泰/港龍、長榮、華航,而最便宜的自然是虎航、香港快運與華信航空等廉航公司,我們再來一個粗略的分類圖:

「廉航」亦非佔盡優勢,主要是香港航空曾推出大量 $1,000 來回台灣的機票,我不認為這相當關鍵。數字顯示平均機票價錢為 $855 ,中位數是 $807 ,代表當你隨機找一篇 flyagain.la 的文章,有 50% 以上機會機票是貴於平均。

而標準差 (Standard Deviation) 為 $255 ,我相信可以去旅行的人都不缺這幾百塊,時間可以花在其他更有意義的事。

為什麼有人覺得 flyagain.la 報導的機票「好抵」?

看到這裡可能有人不同意我的看法,認為 flyagain.la 推薦的優惠很「抵買」甚至是「必買」,願意每天花時間「追捕」機票。我個人意見是大家都不花時間消化資料,而是 tag 另一個人幫忙去格價,往往都是被標題黨騙了。

來一個標題價格與內文價格分佈對比:

結果顯然易見,就是標題黨麻。

12/21 補充資料:

因應前輩的指點,把程式 debug 再跑一次,這次進行「文章最高價」、「文章最低價」、「標題最高價」、「標題最低價」的對比,大家可以參考下圖,可以見到文章的價錢比起標題高上一截是很平常的,但價格差我忘記計算(下次再考慮),價錢走勢的也進一步思考,可能在日本價錢的文章再加入。(說真的,我沒大家想像中閒)

另外這是 4 個價錢 Correlation 的圖表,懶得解釋了。至於前輩說可以做的 K-mean Clustering 或者 hierarchical clustering ,我要諗一下 Feature 先再做,雖然是 unsupervised machine learning ,但不思考清楚也是沒有意義的:

 

price_min price_max title_max title_min
price_min 1.000000 0.247302 0.445891 0.561532
price_max 0.247302 1.000000 0.505491 0.428524
title_max 0.445891 0.505491 1.000000 0.759977
title_min 0.561532 0.428524 0.759977 1.000000

題外話:原來 flyagain.la 那麼多外國讀者…

鑒於爬網並無法得知 flyagain.la 的 Google Analysis 數據,雁橋自然不知道哪些文章多人看/比較有效。可是仍然有方法「偷窺」 flyagain.la 網站內的連結資料。

內行的都會知道,當你使用 bit.ly 或 goo.gl 等轉址服務,只要在網址尾巴加上 「+」,就可以看到完整的報表,當中包括每個時期的點擊量、點擊來源、讀者國家統計,對於 Marketer 來說很簡略,對於 Side Project 卻是足夠有餘了,首先用 regex 去抽取含「bit.ly」或「goo.gl」的 連結與出現次數:

像這條連結就有 18,635 次點擊,從 2015 年底起每個月 500 多次(除了 2017 年 3 、4 月),這是在文章底部直接向 Booking.com 的連結,數字看起來沒什麼不合理之處,但我們再看看讀者分佈:

嗯,原來有 5,246 位點擊過連結的人是從 Email 、SMS 或是直接輸入網址,而 7,900 是從「另外的途徑」點進網址,只有不到 1/3 人直接從 flyagain.la 連結過去;讀者群更令人大開眼界, 18,600 多人中只有 8,935 位是香港本地人,而有 8,826 次點擊是來自全球 35 個不同的國家。

作為一個華文網站,這真的超級「國際化」啊!

也許你說這連結未必只用於 flyagain.la ,那麼我們看看平台廣告的連結吧:

http://bit.ly/zujiflyagain <- 這個總不會是別個平台的廣告連結吧?來看看點擊率:

67,665 個點擊!

從 flyagain.la 跳轉過去的只有 220 人,住在香港的亦只有 200 多人!

再看看 goo.gl ,不禁令人懷疑 bit.ly 有 bug 。不過實際數字顯示網站的帶動能力遠不及他們的 Facebook Page ,甚至不及對手們…這都只是資料的冰山一角而已。

不排除是他們使用老撾網域 (.la) 令 bit.ly 的流量追蹤變得異常奇怪,因為在 flyagain.la 的 Facebook 連結並無出現如此的情況。沒錯,雁橋也「順道」把他們幾年的 Facebook Feed 全部爬下來當數據分析用。

這需要另外再寫一篇文章交代,給我 Like 作為動力,我會快點完成。

還有什麼可以做的?

以上就是雁橋所做的分析了,但這並不完美,還有一些可行的方向:

  •  利用 NLP 找出關鍵字之間的「距離」,例如「必買」會與什麼字詞相對應
  •  更有效率的判斷文章價值,可能需要配合 Skyscanner / Google Flight API
  •  對旺季/淡季有更好的分析,不過這真的異常複雜,也許邏輯回歸會用得著?
  •  使用更多 Machine Learning Algorithm ,學以致用
  •  找出某些 Correlation ,比如說標題、內文價格的關系
  •  利用資料尋找平機票的規律?當做到這件事我會找份數據科學家工作

後記:「搶平機票」這件事根本不科學

記得某次接受訪問的時侯,相熟的記者問我有沒有「搶平機票」的秘技,我直接答沒有。「冇可能架啵,你唔 L 係窮遊 KOL 黎架咩!」然我分享對 flyagain.la 等等幾個網站的觀察。

因為有著強大的 meta-search Engine ,flyagain.la 、MeetHK 等網站對於我來說是沒有任何價值,就跟搶 iPhone 一樣,浪費精神時間去做一件低機率的事情,配合極低的期望值(就算給你搶到,大不了省幾百塊),機票還有各式各樣限制。

倒不如痛痛快快辭工搭巴士去歐洲吧,我試過,我真係試過。

看完這篇文章之後我希望你不要再於平機票 Facebook 專頁 Tag 你的朋友/男朋友,先完整消化一下資訊,考慮各種因素決判斷這是否值得分享。

雁橋在此承諾,如果這篇文在 Facebook達到 200 Like 我會再寫一篇日本/泰國的價錢分析。當然下一篇會是 flyagain.la 的 Facebook 表現分析(包括 Like 、Share 、Comment 、Hashtag) 。

喜歡我的文章,請 Like 我的 Facebook Page 《雁橋曰》,可以發訊息問我關於旅行的任何意見,但不保證你會得到滿意的回應。

雁橋

足跡踏遍 40 + 國家的旅遊者,旅人中年發現愛上科技與編程,戒酒後更喜歡咖啡香氣,希望以文字令世界變得更加美好。

發表迴響

%d 位部落客按了讚: