城市計算:行人流量預測和空氣質量預測

因之前有幸去聽了京東副總裁、京東城市計算事業部總經理鄭宇老師的宣講會,了解了一下機器學習技術在城市計算領域的具體應用和發展現狀,獲益匪淺。後來根據鄭宇老師的介紹去查閱了一下他團隊的文章,看了幾篇,覺得有所收穫,故寫成此文。

目前來說,存在大量將機器學習應用到自然語言處理、計算機視覺、金融風險預測、推薦系統以及自動駕駛等等領域的相關研究,並且之前也看過一部分資料,有一定的了解。但是當天宣講會卻是第一次聽到城市計算這個名詞,眼前頓時一亮,究竟什麼是城市計算?怎麼將機器學習技術應用到這個領域?

首先,城市計算是關於交通、規劃、能源、環境等等相關的研究領域,如何將機器學習技術應用到這些方面呢?我就去翻看了一下鄭宇老師團隊的論文,看了《Predicting citywide crowd flows using deep spatio-temporal residual networks》和《Deep Distributed Fusion Network for Air Quality Prediction》等論文,本篇文章會詳細介紹這兩篇。從這兩篇論文題目來看,前者是關於城市行人流量預測的,後者是空氣質量預測。下面就來看看他們是怎麼做的吧。

1 行人流量預測

第一篇文章是《Predicting citywide crowd flows using deep spatio-temporal residual networks》,發表在AAAI 2017上面,是關於如何利用深度學習來預測行人流動趨勢的。

1.1 概述

首先,行人流向預測是一件很重要的事情,對城市交通管理和社會治安等方面有很大的影響,比如2015年除夕上海發生的踩踏事件。如果能通過一定手段事先預測什麼地方什麼時間可能會出現大量人群,當預測的人群數量超過警戒值時,即可事先採取相應規避措施,避免不幸。

當然,預測人群流動的趨向還是比較難的一件事,文章給出了三個難點:

  • 空間依賴性(Spatial dependencies) : 即一個地方的人群不僅會受到周邊區域人群數量的影響,還會受到比較遠處地方人群的影響,比如在北京天安門舉辦禮花晚會,那麼可能會有很多人從北京甚至全國四面八方的位置趕來觀賞這場盛會。
  • 時序依賴性(Temporal dependencies) : 即可能會受到一些時間周期上的影響,比如早晚上班高峰期,周末假期,春節等節日等。
  • 其它外部因素(External influence) :比如天氣,交通事故等等。

正因為影響因素太多,所以導致了準確預測人群流動趨勢成為了一個比較困難的問題。

行人流向預測所需要考慮的因素是以一種更為複雜的數據形式表述的,即時空數據(Spatial-Temporal data)。如何利用機器學習技術來處理這樣的時空數據呢,這正是文章的核心,也是最為有趣的地方。我們知道,處理空域上的數據,我們一般的機器學習可能會建立一個圖模型,即建立一個網路圖,然後進行處理;對於時序數據,則有一些時間序列分析的方法來進行處理。更進一步,對應於深度學習裡面的技術,CNN的卷積操作可以將空間四周的信息考慮進來,RNN則可以處理一些時序數據。

1.2 模型架構ST-ResNet

正如概述中說到,影響行人流向的三個因素:Spatial dependencies, Temporal dependencies和External influence。所以,文章就這三種因素分別提出了相應的模塊,最後得到的就是文章的ST-ResNet架構,其中ST指的是Spatial-Temporal,ResNet是利用了殘差網路來提高深度模型的效果的。

1.2.1 問題描述

首先來明確一下問題是什麼,文章將一個區域的行人流量分為了進和出兩個部分,即Inflow和Outflow,具體含義為:

  • Inflow :在一個時間範圍內,從其它區域(包括近的以及遠的區域)進入到這個區域的行人流量。
  • Outflow :在一個時間範圍內,從這個區域離開的行人流量。

那麼,如何定義行人流量呢?文章給出,行人(步行、騎車等等)以及乘坐小汽車、公共汽車、地鐵等等交通工具的行人都算作行人流量,至於如何獲得這些數據,前者可以通過手機信號來粗略估計(畢竟現在大家基本都是有手機的),後者可以通過對公共交通工具、小汽車等進行GPS定位得到。

對於問題的描述,文章給了一張圖來表示,如下圖Figure 1所示:圖中左邊表示劃分的區域,每個小方格是一個區域,紅色箭頭是Inflow,藍色箭頭是Outflow;圖中右邊描述了行人、小汽車等等,表示如何進行定義「行人」或者「人群」(文章中用crowd表示,後文提到行人就默認是人群的概念)。

Figure 1 : 行人流量預測問題描述

1.2.2 Spatial depencencies

如何考慮某個區域人群流向呢?自然的想法是將區域劃分成小塊,然後構建模型,而文章中的做法就是基於將一個區域劃分為 I 	imes J 個小的矩形格子來進行處理的,然後把每個格子當作「像素點」,然後就可以利用CNN的卷積操作來考慮空域信息了。值得注意的是,對於每個時間段內,都可以將一個城市轉換為 兩張 「圖片」,一張表示Inflow Matrix,另外一個是Outflow Matrix。文章給出了一個以北京 為例的劃分,如Figure 2所示,左邊是根據經緯度對北京進行劃分的網格區域,右邊則是Inflow Matrix,可以看出,右邊的Inflow Matrix可以當作一張灰度圖像來處理。

Figure 2 :城市區域劃分

我們在收集數據的時候(通過手機信號、GPS信號進行定位),收集到的數據形式是一系列軌跡(Trajectories),比如第r個行人的軌跡為: T_r = g_1 
ightarrow g_2 
ightarrow cdots 
ightarrow g_{|T_r|} ,其中 |T_r| 是跟蹤的時序上的數目,也就是軌跡的長度,每個 g_t in (i, j) 表示行人第t時刻在第(i, j)個網格內,那麼有了一系列軌跡之 mathbb P 後,就可以得到第t時刻的Inflow Matrix和Outflow Matrix了,公式見Figure 3截圖:

Figure 3 : Inflow Matrix & Outflow Matrix

那麼第t時刻的Inflow Matrix和Outflow Matrix就可以組成一個Tensor,記作 X_t in R^{2 	imes I 	imes J} ,那麼現在Spatial維度上的數據表示已經搭建好了,接下來就是時序維度上的了,問題也就變為了:

給定歷史觀測數據 {X_t | t = 0, 1, 2, cdots, n - 1} ,如何預測 X_n

這裡再補充一下,由於後續會利用CNN進行卷積操作,一層卷積的話會考慮到一個區域及其周邊區域的關係,多層卷積就會考慮到較遠區域處的信息,所以就可以對Spatial dependencies的因素進行很好地建模。

1.2.3 Temporal depencencies

上面給出的問題,已經是一個時序問題了,而對於時序問題的經典解法包括:ARIMA及SARIMA,RNN及LSTM等等,本文則提出了新的模型ST-ResNet。下面先分析一下時序模型需要考慮的東西,然後再介紹本文ST-ResNet。

首先,時序模型要考慮的主要問題可以分為兩個:

  • 最近時刻的觀測值應該對當前時刻的預測值起到較大的影響,而很久之前的觀測值影響比較小。
  • 周期特性,周期有長有短,短周期可以是一天中的早晚高峰,長周期可以是一周中的周末或者季節、節日等等。

所以文章對時序部分分了三個部分進行考慮,分別是Closeness,Period和Trend,分別表示:

  • Closeness :recent time intervals,即最近的一些時間段內的觀測值。
  • Period :小周期,每隔24小時取一次觀測值,比如要預測今天早上八點的行人流量,就利用前幾天早上八點的歷史觀測值進行預測。
  • Trend :大周期,考慮季節因素,假設要預測今天早上八點的行人流量,並且今天是10月21號,那麼假設往前每隔一周取一次早上八點的觀測值,因為隨著冬天來臨,大家起的越來越晚,所以早上八點的辦公區域的Inflow行人流量應該呈現減少的趨勢。

所以,要合理地建模Temporal Dependencies,本文引入了上述三種歷史觀測值來預測當前觀測值,可以說是很精妙了。文章給了一張圖來形象地展示,如Figure 4所示:左邊是選取的最近時刻觀測值,每隔半小時取的;中間是每隔一天來取的,表示一周內的變化情況;右邊是更大粒度刻畫月份之間的變化趨勢。上面三幅圖是辦公區域,下面三幅圖是居住區域。

Figure 4 : Closeness, Period & Trend

1.2.4 External influence

下面要介紹的是外部因素,文章中主要提到了以下幾種外部因素:天氣、節假日、交通事故等等。這裡把節假日也當作外部因素是因為國慶畢竟才一年一次,要想在Temporal dependencies裡面將國慶的因素考慮進去,那麼至少需要上一年的數據,那麼這個就不太合理了(一方面數據難以獲取,另一方面時隔一年太長了)。

文章中給了一張統計圖,表示外部因素的影響,如截圖Figure 5 :左邊表示正常情況下和放假期間一周內辦公區域的Inflow情況,右邊是展示了天氣情況的影響。

Figure 5 : 外部影響

那麼關鍵是如何將這些因素融合進模型裡面呢?那麼就直接看下一小節吧。

1.2.5 模型ST-ResNet

那麼模型究竟是什麼樣的呢,這裡直接放上模型架構圖,見截圖Figure 6。

Figure 6 : ST-ResNet

下面就來逐一解釋一下模型的要點:

  • 首先,歷史數據可以分為三個階段,distant, near和recent,每一時刻的歷史數據都是一個 R^{2	imes I 	imes J} 的Tensor,表示Inflow和OutFlow。
  • 根據Closeness,Period和Trend選取相應的觀測值,即:對於Closeness,選取最近幾個時刻的觀測值,將所有Tensor組合在一起,放入模型最右邊的Conv-Res模塊裡面;對於Period,根據每隔24小時選取歷史觀測值,然後組合Tensor放入中間的Conv-Res模塊;同樣,以較大周期取Trend的歷史觀測值,放入左邊的Conv-Res模塊。
  • 模型的最左邊則是對外部因素進行提取特徵的過程,利用的是兩層全連接輸入層,輸入則是:是否是某個holiday,天氣狀況,溫度,風速等等。

其中Conv-Res利用了殘差卷積網路,模型如Figure 7所示:

Figure 7 : Conv-Res

上面三條解釋分別對應了Spatial,Temporal以及External的模塊,那麼如何將其融合到一塊呢?

首先是Fusion of temporal,即時序部分三個Conv-Res的結果,文章中利用的是Parametric-matrix-based-fusion,公式如下,即權重可以學習的加權求和。

那麼如何把External influence進行包含進來呢,文章直接用相加的方式,即:

那麼最終的損失為:

這樣就可以訓練模型了。

1.2.6 訓練、預測演算法

下面直接貼出來訓練預測的演算法,很簡單,訓練部分主要是訓練數據的處理,得到訓練數據後放進網路裡面訓練即可;預測部分則是多步預測,將當前預測的結果當作下一步預測的輸入的一部分即可。詳見Figure 8 & 9。

Figure 8 : 訓練

Figure 9 : 預測

1.3 總結

行人流量預測的問題的難點在於 它是一個時空數據的問題,既要考慮時序因素,也要考慮空間因素,當然還有一些外部因素。文章的貢獻主要是:

  • 將空域上的因素通過劃分小塊的方法建模成一張「圖像」,利用卷積進行處理。
  • 對時序因素的建模則是選擇不同周期大小的歷史數據進行預測當前值,然後分別處理空間上的關係(即分別用Conv-Res)進行卷積,最後通過Parametric-matrix-based的方式進行 綜合考慮。

文章中有很多值得學習的地方,獲益匪淺,比如:行人流量預測的問題實際上和Video sequence generating的任務很相似,要生成下一幀圖像,需要考慮圖像本身的結構信息(行人流量預測的空域信息)以及圖像前幾幀的信息(行人流量預測的時序信息)。

2 空氣質量預測

下面要介紹的一篇文章是《Deep Distributed Fusion Network for Air Quality Prediction》,是關於空氣質量預測的一篇文章,發表在KDD 2018上面,可以說確實是偏應用的一篇文章了。

2.1 概述

在我的已有認知範圍內,空氣質量預測的方法無非是有兩種(僅僅是我能想到的):

  • 選取諸多因素進行回歸。比如溫度、濕度、是否下雨、周圍是否有污染源等等,通常可以借用能力比較強的回歸演算法,比如可以做特徵選擇的Lasso,基於集成的GBDT等等。
  • 考慮時序信息,建立時間序列模型。參考歷史的空氣質量情況,進行預測未來空氣質量,比如採用ARIMA,RNN,LSTM等等。

讀完本文,我發現了我之前的兩種思路裡面都有一個重要的因素沒有考慮到,那就是空域數據,這個感覺和行人流量預測挺相似的,比如周邊區域的空氣質量因為受到工廠排放而變差,那麼當前區域的空氣質量也很容易變差。

所以,歸根結底,還是一個Spatial-Temporal的問題。那麼本文的重點就在於:如何考慮空域 數據?選擇了哪些因素?DeepNetwork的形式是什麼樣的?如何把時序和空域結合起來?

2.2 模型DeepAir

2.2.1 問題描述

如何根據一個空氣質量檢測站(Monitoring station)的歷史空氣質量指數(AQI, Air Quality Index)以及周邊檢測站的歷史空氣質量指數進行預測該檢測站 下一步的檢測值呢?

問題的研究對象是檢測站,預測的值是空氣質量指數AQI,目標是預測檢測站在未來48小時內給出的空氣質量指數。那麼如何選取影響因素呢?

首先,影響空氣質量的因素有很多,包括直接間接因素,文章列舉了部分,見Figure 10,可以看出空氣質量直接受到當地污染(Local Emission)、區域交通(Regional Transport)、酸雨(Terrain)、氣象因素(Meteorological Conditions)、二次產物(Secondary Productions)等等影響,其中當地污染、區域交通又受到污染物(Pollutants)影響,包括工廠排放(Industrial Emission)、燃煤(Coal Burning)、汽車排放(Vehicle Exhaust)、灰塵(Dust)等等。

Figure 10 :空氣質量影響因素

一方面由於影響因素的數據難以獲得,另一方面由於影響因素之間關係太複雜,所以文章就選取了歷史數據AQI、歷史氣象因素、天氣預報結果當作輸入,以此來預測未來時間段的空氣質量。每個檢測站的歷史數據AQI可以很容易獲得,用歷史AQI來預測下一時刻AQI,是典型的時序模型;並且還考慮了周邊檢測站的歷史AQI值,這是空域上的依賴。此外,歷史氣象因素和天氣預報則分別考慮了歷史天氣狀況和未來天氣狀況,也可以通過一些途徑獲得。

所以問題用數學形式來表達就是:給定中心檢測站(目標檢測站)及周邊檢測站的集合 S={S_1, S_2, cdots, S_n} ,檢測站的歷史空氣質量檢測數據 {AQI_{S}^t}_{t=1}^T ,歷史氣象數據 {M_S^t}_{t=1}^T ,天氣預報數據 {W_S^t}_{t=1}^{T+K} ,如何預測未來時刻的空氣質量指數 {AQI_S^{T+k}}_{k=1}^K

2.2.2 Spatial Transformation Component

先來看看文章是如何考慮空域信息的,即如何將附近的檢測站的歷史AQI進行考慮到模型中。步驟可以分為三步:空域劃分(Spatial partition)、空域聚集(Spatial aggregation)和空域插值(Spatial interpolation)。

三個過程可以通過Figure 11解釋:(a)是所有檢測站分布;(b)是以藍色檢測站為目標檢測站的情況下,劃分區域,分為16個扇形區域,半徑分別為20km和100km;(c)一個小塊內可能有多個檢測站,取平均或其餘加權方法進行Aggregation;(d)可能有的區域內沒有檢測站,那麼利用周邊檢測站進行插值,利用IDW(Inverse Distance Weight)作為權值。

Figure 11 : Spatial Transformation Component

最後可以獲得周邊區域的包括自身的17個歷史AQI檢測值,這就是Spatial Transformation Component。

這麼做的好處是什麼呢?對於不同的目標檢測站,其周邊100km內的檢測站數目不一致,並且很多是沒有檢測站的,所以經過上面轉換之後每個目標檢測站及其周邊的AQI值就是固定的17個,保證了輸入的一致。

2.2.3 DeepAir架構

那麼接下來看看模型架構,見下圖Figure 12:

  • 模型最下面是Spatial Transformation Component,得到的是AQIs值。
  • 然後輸入還有Meteorology、Weather Forecast、Other Pollutants、Time & Station ID四個因素,這些值裡面有的只是一個標識(比如時間、風力等級等等),這些值會加入一個Embedding送到網路裡面,並且每一個因素都會和AQIs進行Fusion,在圖中即表示FusionNet,分別得到HW、WF、SP、MP。
  • 將Meteorology、Weather Forecast、Other Pollutants、Time & Station ID連帶AQIs一塊融合起來得到HI。
  • 將HW、WF、SP、MP和HI進行加權,利用Parametric-matrix-based的方法,加一個sigmoid激活函數,最後得到輸出。
Figure 12 : DeepAir

從上面可以看出模型很簡單,主要是Spatial Transformation Component融合了空域因素,並且上面FusionNet也比較特殊,文章叫作Deep Distributed Fusion,指的就是指定一個主導因素Main Feature以及其餘的輔助因素Auxiliary Feature,在上面的模型中Main Feature就是AQIs,其餘氣象、天氣預報、其它污染物、時間等等輔助因素。將主導因素和 每一個 輔助因素進行Fusion,然後所有因素一塊再Fusion一次,那麼這就是Deep Distributed Fusion。

2.2.4 演算法

演算法流程如Figure 13:

Figure 13 : DeepAir 演算法

2.3 總結

通過閱讀這篇論文,雖然不如第一篇文章收穫大,但是最起碼知道了空氣質量預測也是一個Spatial-Temporal的問題,也可以利用深度模型來建模;除此之外,還了解了一些其它的空氣質量檢測的方法,這裡不再列舉了,可以參考論文。

3 總結

上面兩篇論文總體上來說是應用文,並且解決的是很實際的問題。讀完兩篇論文,然後寫了本文,我覺得有以下收穫:

  • 大概了解了城市計算都做些什麼,如何將機器學習應用到這些問題上。
  • 建模處理Spatial-Temporal數據的難點,如何利用深度學習建模。
  • 了解了一些時間序列模型(文章中用來做對比實驗)。
  • 了解了如何 做行人流量預測以及空氣質量預測。

參考文獻:

  1. Junbo Zhang, Yu Zheng et al. Predicting citywide crowd flows using deep spatio-temporal residual networks, AAAI 2017.
  2. Xiuwen Yi, Junbo Zhang et al. Deep Distributed Fusion Network for Air Quality Prediction, KDD 2018.

推薦閱讀:

TAG:空氣質量 | 深度學習(DeepLearning) | 城市 |