iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
AI & Data

那些在科技公司和 app 背後的資料科學系列 第 15

[Day 15] 改善 Airbnb 的房源排序模型(中) - ABCD 改善方案

  • 分享至 

  • xImage
  •  

在昨天的文章中,我們提到 Airbnb 為了做出更好的房源排序模型,決定跳脫「讀文獻 -> 實作 -> A/B testing」的迴圈,提出「ABCD 改善方案」:

  • A:模型架構(Architecture):觀察使用者需求後,釐清問題、改善模型。
  • B:偏誤(Bias):消除模型或過去資料中的系統性偏誤(systematic biases)。
  • C:冷啟動問題(Cold start):沒有歷史訂購紀錄的新房源,要如何排序?
  • D:搜尋結果的多樣性(Diversity of search results):如何增加搜尋結果的多樣性,避免集中於特定房源?

今天,讓我們來細探 A 和 B 分別代表什麼問題,又是怎麼解決的吧!


A:模型架構(Architecture)

為了得到更好的模型,他們認為最好的方式是直接觀察使用者的需求,遵循「users lead, model follows」的原則。這句話的核心概念是:觀察並量化用戶的問題,藉此修改模型,以回應此問題。

以房源排序模型為例,當他們在測試各種版本的排序模型(ranking model)時,發現能夠增加用戶實際訂購量的模型,其產出的排序清單之平均房價也較低。這些所謂的成功模型,其預測結果會朝向顧客的偏好靠攏。

因此,他們假設用戶的需求是「傾向訂購更經濟實惠的選項」,並繪製 Fig 1 的圖形觀察被訂購的房源價格和搜尋價格中位數的差異。結果顯示多數用戶集中於圖形左半邊,意即用戶的確是偏好較低的房價

https://ithelp.ithome.com.tw/upload/images/20220927/20152325YQzr2HLouX.png

然而,他們不敢確定模型是否懂這個「便宜即是好(cheaper is better)」的原則,因此著手研究是否價格較低的物件需要有較高的排序順位。他們設計一套新的模型,讓模型強化「便宜即是好(cheaper is better)」的條件。但是,儘管搜尋結果的價格下降 -5.7%,訂房率卻也慘痛地下降 1.5%。

為什麼會失敗呢?他們不是聆聽使用者的需求了嗎?

原因是儘管價格的確是消費者的考量重點,但是何謂「正確的旅遊價格」?並非越便宜越好,也要考慮到旅遊地點和消費者本身的特徵。如下圖所示,不同旅遊城市的「搜尋清單的房價中位數」和「被訂購房源的房價中位數」差異都不同,因此不能單單只是推薦便宜的房型,也要考慮用戶特徵和搜尋的旅遊地點。

https://ithelp.ithome.com.tw/upload/images/20220929/20152325fDlUdLR0Gi.png

最後,設計出一套稱為「雙塔模型(two tower architecture)」的模型架構,如下圖所示。

https://ithelp.ithome.com.tw/upload/images/20220927/20152325HQy8ivugQG.png

第一座塔(中間)輸入用戶特徵(user features)和搜尋內容(query features)至一個一百維的兩層的全連結網路(fully connected),預測對於此用戶和搜尋內容結合,最適合的房源排序。第二座塔的輸入為房源排序的特徵,而訓練資料會是有訂購的房源(左塔)和沒有訂購的房源(右塔)配對。

在訓練時,希望第一座塔(中間)和左塔(訂購房源)的距離越小越好,而和右塔(未訂購房源)的距離越大越好。

在使用新的模型架構後,訂購的房源數量增加了 0.6%。


B:偏誤(Bias)

Airbnb 在觀察頁面時,發現某些房源的排序會比模型預測的還低,例如一些小旅館,或是傳統的 B&B 形式的客房。這些房源的供給雖然在近年來迅速增加,然而排名卻不如預期。

資料科學家提出一個假設,認為也許這一類的房源在以前的清單中較少出現,因此在訓練資料中被低估,因此被排序在叫後面。而因為排名較後、比較不會被使用者看到並訂購,惡性循環下導致其排名不斷落後。

以用戶(user, u)執行一次搜尋(query, q),看到一組房源排序(listing l)為例,此頁面的產生可以被解構成兩個原因:

  1. P(relevant = 1 | l, u, q):此清單(l)和使用者(u)的相關性
  2. P(examined = 1 | k, u, q):每個在 k 位置的房源時,會被用戶檢視的可能性。這個其實會被許多因素影響,例如使用手機的用戶比較傾向於選擇較上面的結果,或是住宿時間將近的用話,較可能只注意位於上方的房源。換句話說,有些房源可能不是和用戶無關、也不是用戶不喜歡,只是被排序的位置影響,而一直被用戶忽略。

https://ithelp.ithome.com.tw/upload/images/20220929/20152325lLSjuCyJc6.png

而當使用這兩個機率結合的公式去訓練模型時,模型會不斷地學到被舊有排序影響的資料,使一些在底層的房源永不得翻身。

為了解決這個偏誤,Airbnb 將位置當作訓練模型時使用的其中一個特徵,並使用 0.15 的 dropout rate。結果顯示此解法的確能夠改善此問題,在 online A/B testing 時觀察到訂房率增加 0.7%,且收益增加 1.8%。特別是原本排序較低的小旅館,其訂房率增加 1.1%。


以上是 Airbnb 發現的兩個問題,和相對應的解法。明天再回來看看 C 和 D 分別對應什麼問題,以及如何解決吧!


謝謝讀到最後的你,如果喜歡這系列,別忘了按下喜歡和訂閱,才不會錯過最新更新。
也歡迎到我的 medium 逛逛!


Reference:


上一篇
[Day 14] 改善 Airbnb 的房源排序模型(上)- NDCG 介紹
下一篇
[Day 16] 改善 Airbnb 的房源排序模型(下)- ABCD 改善方案
系列文
那些在科技公司和 app 背後的資料科學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言