資料科學應用實例:如何從數據中找出高齡者的交通需求?

講師:闕嘉宏/創代科技股份有限公司 執行長

創代科技股份有限公司闕嘉宏執行長透過實戰的心血經驗,以台灣全類別電子票證及全公共運具的數據解析專案,分享如何打造世界領先的資料解析程序。

其實做資料科學或是將AI技術導入到工作中,應該要先問自己:你的職務該執行什麼決策?哪種技術最適用?

我個人過去的經驗所接觸的資料類別十分多元,這裡主要會以多種公共運輸系統(跨運具)的資料進行分享,這些分析我們已經執行了八年多,過程中有許多心得,也吃過一些苦頭,更看過太多謬論及迷思。但是,我認為過程中最重要的是:要檢視資料本身為了什麼目的而生?想要透過資料達到什麼目的?資料在你的工作內扮演的角色是什麼?

以雙北市所有的電子票證交易行為為例,透過這些行為我們可以察覺哪些地方有大眾運輸的需求,需要的是公車?捷運?Ubike或其他交通工具?過去的做法是每年編列近2000多萬的預算進行市調,但市調過程根本無法看到母體的樣本數,蒐集到的樣本也不具座標跟時間特性。

這個專案實際執行8年多來,每一天要結算的交易量超過480萬筆,解析將近2700多萬次的封包量。從第一年僅分析公車和捷運,到現在只要能使用電子票證搭乘的運輸工具都是分析的範疇。

承認吧,現實資料比想像中的還要棘手

首先,交易發生的瞬間,你可能會以為我掌握了交易數據;實際上,雖然有卡片號碼及交易時間,但系統其實不知道乘客的位置及搭乘工具。無論是悠遊卡、一卡通、遠新、iCash卡...,在城市運輸的使用過程當中,能記載的部分就是卡號及中間的交易時間,並沒有空間座標的概念。

假使我的左手是交易時間、右手是GPS時間,我要做的就是把這兩個東西合在一起;理論上,「交易當下的時間、卡片相關屬性及當時使用運具的所在地部分,」是我當時所有的資料動作。

我發現,台北市總共有18家以上的公車業者,新北市更多,包括大公車、小公車業者,在資料底層的部分長得全部都不一樣,例如科技大樓站在捷運體系的代號是BR2,但科技大樓也是某個Ubike車站的中文名、某公車業者站牌的中文名,也是某公車業者的車牌名稱。大家的基準全都不一樣,過程中團隊花了很多時間洗資料,因為很多站牌的資料品質很差。於是,我能做的第一件事就是在這5萬多個站牌中找到一個更好的對口。過程中,我花很多心思去完成資料清洗,我不會去推這個工作,因為這是其中一個環節,需要把這些前置工作都找完。我發現,跨部門溝通是個藝術,也是成就事情很重要的關鍵,當這部分的靜態工完成後,接下來才是展現資料科學的重要事情。

接著分享的是:「向量性站位編碼技術」及「卡號行為的追蹤」。基本上只要使用電子票證在這個城市上面移動,就是我分析的對口。我目前手上有公車、捷運、台鐵、高鐵、國道客運跟微笑單車,之後Gogoro如果使用GoShare,且能跟小額消費部分結合的話,就會變成我分析範圍的部分。過程中看到一件事情:例如台北車站不僅是一個捷運站,所有的大眾運輸也都有一個名為「台北車站」的站牌,也就是台北市的捷運車站名和公車站牌名會重複,這也是需要額外清洗的部分;在雙北市的部分則是,這麼多的公車業者加上很多條公車路線底層的資料都長得不一樣,要怎麼把這些資料訂出來?我們花了很多時間思考這件事情。

團隊原定是做雙北市,但因為知道編碼要全國統一,所以花了更多時間去完成全國性的編碼。大家有沒有發現一件事情,雖然我做雙北市的生意,但卻先解決全國的事情。因為我知道,如果不這麼做,後續資料清洗的部分將會重複發生,所以才花了近十倍的時間完成這件事情。其他人看到的可能是我解決了雙北市的問題,但是,以公司角度來說,我知道自己的市場價值是將這樣的技術繼續往下擴散、推動。

我們看到前面編碼的過程缺乏一個共通性的編碼概念,在這之前,前輩們會用郵遞區號或空間概念來看這個編碼過程。以公車中山國中站的編碼行為為例,63-01是鄰里區間的代號,63指的是新北市、鄰里區號是01的部分,中間站牌可能是某個主要幹道。很不幸的,由於切分鄰里區多半以大路口為主,但是全國每個縣市幾乎都有「中山路、中正路」,通常鄰里區的部分,中正路的上邊、左邊部分是A鄰里區、右邊部分則是B鄰里區。可是,大家知道公車有個特性,就是你在這個路口的左側稱為去程站牌,通常對面會有個站牌叫返程站牌,但大家看這個例子,如果說中山國中站A側的部分叫63-01-003,這是某個去程站牌,到了右邊部分都是叫中山國中站,卻變成001的部分,更慘的是中間被劃分成去返程處,剛好是個重要的路口,卻被切分成是002的部分。各位都搞混了吧?都是中山國中站,我的編碼邏輯部分竟然被切割成001、002、003。從頭到尾應該只有一個編碼,但光是這個路口,所有編碼卻都長得不一樣?

為了解決這樣的事情,我們把全國50多萬個車牌一次編碼完。像是幾乎全國都有的中正路,在我的編碼邏輯裡,它指的就是01155。同時,我也放進密度的概念,發明密度分群這套方法。其實,過去沒有人做密度分群,我們在六年前把這件事情完成後,現在澳洲、中國、日本也開始學習這樣的技術。

它的概念是什麼呢?公車的編碼其實會隨時異動,我們希望有一個認祖歸宗的概念,紅色部分是這個範圍內最不容易跑的部分,通常我們稱為「火車站」、「捷運站」這種大站口,其他小部分可能是UBike,或其他公車站牌。以這種方式,各個運具類別都有權重,因此,在這個密度中,「如何分群」變成一個很大的學問。

別人的方法,可以複製照抄嗎?

分群技術有很多種,在這個主題下,我們測試後決定使用密度分權法。上面所有點的部分都是某個公車站牌加上捷運站,因為點真的很多,我就將公車跟捷運的部分打上去。原本它是一個獨立的車牌,現在變成有聚合的統一編碼,不只是聚合的統一編碼,顏色的部分甚至形成所謂密度的概念,以後這些區就是運具類別區塊的部分。換言之,某些地方是一個大的運具,某些地方成為小運具,運具可能是捷運、Ubike…,按照運具組成過程,某些地方可能就只有公車,透過這樣的方式居然讓全國達到統一的空間、時間跟密度的編碼行為。

完成這些事情後,我們可以做出以下分析,包括看到公車轉捷運的最大轉運量是哪?捷運轉Ubike最大轉運量又會發生在哪裡?甚至可以做出公車轉捷運、學生最愛的轉乘點在哪?對城市服務的供給來說,就能根據最大的使用者投其所好。比起在意老人津貼要怎麼發?在所有路網中,找出高齡者最常使用的運具是哪些?這些運具當中會發生在哪個路線?高齡者最常使用的是哪個站牌?那個站點有沒有提供所謂的低底盤公車?有沒有所謂的便民服務?或是高齡服務的部分?才是更好的城市規劃。

接著是很重要的資料面解析,老實說,每天需要分析的資料高達480萬交易量,但是這些資料非常不完美。舉例來說,捷運有進站刷卡、出站刷卡,所以會獲得明確的上車與下車、出站及入站的時間。

可是之前的公車並不是這樣,換言之,在運具類別的交易過程,會發生一個斷停,就是上車有刷卡,卻找不到下車處。因為不管消費者搭乘哪種交通工具,這些行為都要被解析,所以我們在過程中發明了一套三階層演算法部分。這是根據這個議題所設計出的方法,並不是要大家原封不動的複製這套方法,而是能在所屬的領域中,找出適合的方法。

資料科學最重要的是解決問題

其實我解析的是每一張卡片在雙北市移動的軌跡,我幾乎有所有卡號的通勤路線偏好,但是這些並不觸犯個資,因為對我來說就是卡號,我不曉得是誰。大家常說:「用樣本去窺視母體」,基本上,大眾在雙北市移動的行為過程,我目前樣本將近89%到93%以上,我已經不是從樣本去窺視母體,近乎是掌握母體的全貌。

因此,我能夠按照時間、空間、路線、卡種等類別去精算,包括台北市跟新北市在換乘過程中,如何設計公車站牌的交易位置、步行距離?每條公車應該獲得多少補助款?公車上的擁擠人數?是否要加開班次、特定接駁路線的段次或通勤運量分析、補助款計算、卡片費率、行銷費率、補助費率,都能被精算出來。

想跟大家分享的是:「不要告訴我,你找到什麼樣的問題。因為踢爆問題一點都不偉大,請把自己變成一個解決問題的人。」不要告訴你的主管或下屬,你發現什麼樣的問題。它很重要沒錯,但是它無法成就你最後的目的。請把自己當成一個解決問題的Solution創造者,這才是我認為定義資料科學的一個價值。

延伸閱讀:資料很多,卻不會用?基礎資料處理與分析

想知道更多專案細節: