Airbnb 如何結合機器學習與結構模式分析來預測市場的動態變化

TengYuan Chang
9 min readMar 16, 2019

文章出處:Learning Market Dynamics for Optimal Pricing

Airbnb 的商業模式是一個市集 (marketplace),房東與房客分別位於供給和需求的兩端,平台的工作,就是讓這兩端的媒合可以更快更有效率。要做到這件事,預測市場的動態變化就變得很重要,需求和供給在不同的地點,不同的季節完全不同。但如果可以建立一個模型來預測長期或短期的趨勢,則對於媒合房東與房客會很有幫助。比如說,房東還不確定自己清明連假的行程,所以可能會先選擇不讓自己的房型在連假期間開始接受預訂。但是如果她可以知道有許多在計劃連假旅遊的人都對該地區的房型感興趣,且已經開始訂房並規劃行程了,那房東或許就可選擇讓房型開放接受預訂。更重要的是,平台還可以根據市場的需求,建議房東將價格提高到合理的區間,幫助她提高收入。

這篇文章即介紹了一個作者用來建構可以描述市場動態變化模型的框架,結合了機器學習與結構模式分析 (structural modeling),不但提高了預測的準確度,也增加了模型的可解釋性。

市場需求可用統計模型來表示

對於 Airbnb,或是大部分的旅館與旅遊業來說,前置時間 (lead time) 的動態變化是個很重要的指標。前置時間指的是房客從訂房一直到入住當天的中間這段時間,假設以使用者規劃到紐約倒數跨年為例,跨年夜 (12/31) 當天是入住時間,而有個使用者在 12/1 訂房,那前置時間就是 30 天 (如圖一)。換言之,如果是入住當天才訂房的話,前置時間就是 0。

圖一、前置時間 (lead time) 的圖示,假設入住時間為 12/31,訂房時間為 12/1,則前置時間為 30 天。圖片來源

如果我們觀察所有紐約的房型在跨年夜當天的訂房紀錄,會發現隨著跨年夜的接近,訂單會一筆一筆的產生,因為可假設每筆訂單之間是彼此獨立,隨機產生,而這訂單產生的過程,我們稱之為到達過程 (arrival process)。如果我們將紐約的房型在跨年夜的訂單與前置時間的關係作圖,則可以得到如圖二的分佈,我們稱為前置時間分佈 (lead time distribution)

圖二、訂房密度與前置時間的分佈圖。圖片來源

從上圖一就可以理解為什麼研究前置時間分佈是重要的,因為訂單產生的動態變化,與入住時間有著高度的關聯。越接近入住時間 (越往左邊),訂單產生的密度逐漸增加。當然這也和不同的旅遊季節與景點有關,像紐約的跨年夜,通常前置時間會拉得較一般的訂房來得長,而有辦法用統計模型計算出早期的需求和市場的動態變化,就可以提供給房東作為訂價的參考。比如說如果我是紐約曼哈頓區的房東,比起採用固定的訂價,如果我可以知道在不同的旅遊淡旺季,房客對於我的房間的需求以及願意支付的價格,我就可以採用比較彈性的訂價策略,在淡季時調降至合理價位,確保可以有訂單進來;在旺季時調升價格,賺取更多的收入。

因此,對於這次要解決的問題,就會是:

假設我們有一個密度分佈為 𝑓,我們能不能夠將所有的房型做分類,同一個類別中的每一個房型 𝑖,入住時間 𝑗,找出在不同的前置時間 𝑡 下,𝑓 的機率密度。

結合機器學習與結構模式分析

我們有沒有辦法直接訓練一個監督式學習的模型來解決這個問題?答案是肯定的,理論上我們可以使用 Airbnb 累積的大量的特徵資料 X,以及標籤資料 Y (在此會是每個房型的前置時間) 來訓練模型,這個模型可以預測出每個房型在每個入住時間的平均前置時間。但實務上,卻會有幾個問題:

  • 產出的結果未必有意義:對於單一房型的到達過程,其實是一個相當隨機的分佈,為了可以最佳化訂價,我們必須要知道訂單相對於不同前置時間下的分佈,只有預測出平均前置時間的商業意義不大。
  • 資料的稀缺性:每一個房型在入住當天只能被訂一次,訂完就沒了。這樣資料稀缺的特性讓我們必須要對模型做一些複雜的處理 (比如說 transfer learning),才有辦法學習的比較好。
  • 過多的維度降低訓練模型的效率:在 Airbnb,有上百萬個房型,每個房型都有許多特徵會影響到其到達過程,這造成每個房型的特徵維度很大,傳統的機器學習模型計算起來會很沒有效率。
  • 過於複雜且龐大:模型要預測三個維度:房型、入住時間與前置時間,這需要龐大且複雜的訓練資料集,以及大量的運算時間,造成實務上應用的侷限。

而如果仔細觀察圖二,我們可以發現他有一些特徵:他是一個接近指數函數的分佈,且週末與週間的的模式會以每週為單位重複,因此,作者就想到,那我們或許可以用結構模式分析 (structural modeling) 的方式來做分析。

第一步、將不同房型做聚合分類

由於上述所提的特徵資料維度過多且過於複雜的問題,因此第一步先將需求類似的房型歸類在一起,被歸在同一類的房型會有類似的需求分佈。分類的方式則使用之前介紹過的房型嵌入 (list embedding) 的方式,透過使用者搜尋,瀏覽,到訂房的資料,訓練一個模型將每個房型投影到另一個向量空間,來找出各個房型之間的相似性:

圖三為分類結果的示意圖,將分類的結果做很直觀的解釋,以最右邊的圖為例,在 Tahoe 北邊的房型 (墨綠色) 被歸在同一類,可以解釋為在冬天雪季他們有類似的需求;南邊的房型 (粉紅色) 則被歸為另一類,可以解釋為在夏天時,這個地區是避暑勝地,該地區的房型有類似的需求。

圖三、將房型嵌入後的結果畫在地圖上,不同地區的房型被歸在不同的集群。圖片來源

第二步、用結構模式分析來表示前置時間分佈

由於每個訂單之間彼此獨立,我們可以合理的假設在單位時間內的訂房數為泊松分布 (Poisson distribution),且時間對訂房事件發生的機率為伽瑪分佈 (Gamma distribution),則我們就可以將同一個集群內的房型的訂房機率密度與前置時間分佈的關係,用一個伽瑪分佈來表示,並去預測其中的 β 兩個函數 (如下圖四所示)。

圖四、可用伽瑪分佈來表示同一個集群內的房型的訂房機率密度與前置時間分佈的關係。圖片來源

第三步、參數預測

最後,我們則訓練一個機器學習的模型來預測其中的參數,並與歷史訂房紀錄做比對,找出最佳的參數組合,如下圖五所示:

圖五、綠線為預測的結果,紅線為歷史資料,透過比對找出最佳的參數組合。圖片來源

這樣的架構不但成功地降低了問題的複雜度,也增加了結果的解釋性,不同的參數代表影響到達過程中的不同部分,我們可以使用不同參數被預測的數值來解釋最後的結果。

提供對於價格的洞見給房客和房東,協助做決定

最重要的是,這個預測結果可以運用在自家的 Smart Pricing 工具上。Smart Pricing 是 Airbnb 用來幫助房東做市場定價的工具 (如下圖六),考慮市場的供給和需求,以及不同時期,不同地區的市場波動,來建議房東最佳化房型的訂價,幫助他們增加收入。

圖六、Airbnb 的 Smart Pricing 工具。圖片來源

圖七則為有辦法預測市場動態變化後,應用的範例。左圖為提供給房客的資訊,讓使用者知道通常在八月份會造訪洛杉磯的遊客,通常前置時間是兩個月,暗示使用者如果現在已經是七月了,建議你盡快訂房,以免價格攀升,或是最後因為訂不到房型而向隅。右圖則為提供給房東的工具,讓 Tahoe 地區先將雪季時段設定為不公開的房東知道,有 22% 可能會在滑雪季訂房的房客,都已經訂了,該是將房型設定改為公開的時候了。

圖七、兩個將這次預測市場動態變化的模型上線成產品的應用範例。左圖為讓房客看到的建議,右圖為讓房東看到的市場洞見。圖片來源

這篇文章的做法有幾個創新之處:

  • 根據要解決的問題,選擇最適當的方式:隨著機器學習的技術變得越來越普及,我們可以很快的就訓練一個模型來做預測。因此,有沒有辦法把一個問題解決的好,通常不會是模型的精準度,而是解構問題的方法,以及所具備的 domain knowledge。
  • 用房型嵌入來做分類後,使用結構模式分析來建構最後要預測的結果,並使用機器學習的方式來預測其中的參數:當今的機器學習模型通常是用來預測最後的結果,鮮少會用來預測建構模型所需要的其中的參數,這篇文章即做了一個很好的示範。另外,機器學習通常是拿來預測,但對於模型的解釋性通常沒有那麼好,結構模式分析則相反,這篇文章擷取了兩個方法的優點。
  • 產生商業價值:有辦法產生商業價值來自於對要解釋的問題所理解的深入度,在解決類似問題的時候,很多資料科學家會直覺想到訓練一個模型來預測平均的前置時間,這就可以讓房東知道我的房間在跨年夜那天的需求,大約會從什麼時候開始。但是,作者觀察到在 Airbnb 上,供給與需求兩端的波動性只是告知房東平均前置時間無法真的提供價值。工程師們都喜歡用最新的技術做很酷的東西,但實際要產生商業價值,不但對要解決的問題有足夠深入的理解,也要花時間做那些聽起來不酷的事情。

Airbnb 其他的與機器學習相關的產品應用:

掃描 QR code 或按此連結加入 LINE 可訂閱部落格最新的文章

--

--