對於計劃出租房屋的房主,你應該將房屋的租金設定為多少呢?或者對於租房的顧客而言,應該給自己的租房支付多少呢?不管是對於一次有計劃的遠足,還是一次說走就走的旅行,為租房付出多少才真正合適呢?

回答這些問題並不容易。事實上,可以通過將潛在的租房列在我們網站—Airbnb上來實現,Airbnb是一家聯絡旅遊人士和家有空房出租的房主的服務型網站,它可以為使用者提供各式各樣的住宿資訊。

在焦點小組,我們觀察到人們在我們的網站上填寫房屋資訊的過程中,往往在價格選項上會顯得為難。很多人會檢視他們的鄰居們所設定的價碼,然後選擇一個可比較的價格;這個過程會讓使用者在瀏覽器中開啟很多標籤,然後找出那些與他們接近的房源。有些人在填寫資訊之前,腦子裡已經有了一個目標,可能是為了賺取一些額外的資金,來幫助支付抵押貸款或度假費用。於是,他們開出的價格主要是為幫助他們實現這一目標,反而沒有考慮房子真實的市場價值。而對於這其中的有些人,不幸的是,通常他們的房子都沒能被租出去。

顯然,Airbnb需要為人們提供一種更好的方式—自動化定價,以幫助顧客做出正確的決定。這就是我們為什麼在2012年就開始構建定價工具,並至今一直在努力地改進它們的原因。今年6月,我們釋出了我們最新的版本。我們開始實行動態定價,也就是說,根據不斷變化的市場條件每天提供新的價格提示。我們調整了我們的通用定價演算法以考慮市場上一些偶然的、甚至是令人驚訝的特徵。此外,我們還增加了一種獨特的機器學習方法,讓我們的系統不僅能從自己的經驗中學習,而且必要時還能利用人的一些直覺。

線上網路中,許多公司使用演算法來設定或建議價格。以易趣為例,它會告訴使用者哪些類似的產品已經售出,以致使用者可以基於這些資訊對自己的產品設定價格。易趣的定價問題是相對容易解決的,因為它不用關心賣家和買家在哪裡,也不需要是關心產品在什麼時候出售。雖然在搭乘共享公司UberLyft中,地域和時間都是需要考慮的因素,但是這兩家公司僅僅通過法令來確定價格,在定價方面並沒有使用者選項,也不需要考慮定價的透明性。

在Airbnb上,我們面臨著一個異常複雜的問題。我們網站上的數百萬房源都是獨一無二的,它們有自己的地址、大小和裝飾。顧客在接待、飲食或旅遊引導方面的要求也不盡相同。一些規律的(如季節性天氣變化)和不規律的(如本地的大型活動)因素都會讓問題變得更加複雜。

三年前,通過利用房源資訊中最重要的一些特徵,如房間和床鋪的數量、周圍的環境、以及某些特殊的設施(如停車位、游泳池等),我們開始構建一個為潛在使用者提供價格提示的工具。我們在2013年正式將它推出,它在大多數情況下工作得很好。但它也存在侷限性。第一,其定價演算法的工作方式是不變的。舉個例子,假如我們考慮俄勒岡州波特蘭市珍珠區的情況,如果設定河邊的房子的價格比遠離河邊的房子的價格要高,除非我們手動地對這些指標進行變更,否則該演算法將永遠這樣執行。第二,我們的定價工具並不是動態的,並不會根據你預定房間的時間或有多少人在同一時間預定而對價格提示做出調整。

自去年年中以來,我們一直在試圖改變這種狀況。我們想構建一個工具,其能夠通過與使用者進行互動而從錯誤中獲得提高。我們也希望使用該工具來調節需求,在必要的時候,可以在房間空餘時給出價格下降的提示,或根據需求增加給出價格增長的提示。我們現在已經解決了這些問題,並且在今年6月份的時候使用者已經開始使用這一新工具。接下來,我們將告訴你這些工具是如何不斷改進的,並且它們現在是如何工作的。我們還會告訴你,為什麼我們最新的工具—Aerosolve,除了對租賃的房屋進行定價,最終還可以做的更多。這也是為什麼我們將其釋出到開源社群的原因。

三個簡單的例子

為了得到解決這個問題的思路,我們首先舉三種簡單的情況。

比如,去年足球世界盃期間你居住在巴西。你的家鄉會湧入大量來自於世界各地的遊客,聚集在一起享受這個星球上最偉大的足球比賽。如果此時你的房子里正好有空餘的房間,你也想滿足其他足球愛好者的需求,順便賺取一些額外的現金,就可以將它們租出去。為了幫助你設定合理的價格,我們的工具需要考慮幾個因素。首先,在這個國家,這是一代人才可能經歷一次的事情,所以我們在Airbnb上絕對沒有歷史資料可供參考。其次,所有酒店都被預定一空,供需之間巨大的不平衡此時尤為明顯。第三,人們來旅遊的時候,他們已經在機票和國際旅行上花了很多錢,因此他們也已經準備為住房花上一筆。因此,除了房間大小、房間數量和位置等因素,這些因素也都應該被考慮進去。

1016000

或者,想象你在蘇格蘭高地繼承了一座城堡,為了支付清理護城河、經營酒廠、以及飼養獵鷹的成本,你決定將炮塔改造成一個提供早餐和住宿的旅館。不同於世界盃的情況,此時你有一些可比較的資料,那就是附近的城堡。一些資料可能跨越了很多年,提供了有關旅行的一些季節性資訊。而且你知道,因為該地區還有其他的住宿選擇,此時,對於旅遊租房的供應和需求相當平衡。然而,這種特殊的城堡在蘇格蘭是獨一無二的,其擁有獨特的雙護城河。系統應該如何評價這些特有的功能的價值呢?

1016002

再看最後一個例子,假設你在巴黎擁有一個典型的兩居室公寓。當你決定在8月份休假數週,並向南去往蒙彼利埃,此時想把房子租出去。此時存在很多可比較的房源,所以它是相對容易定價的。但是,當有很多人對你的房子產生興趣的時候,你決定開始逐步提高價格,以最大限度地賺取更多的現金。但這是一個棘手的問題,如果你定價太高,或預定日期太緊迫,將面臨賺不到任何錢的可能,這時該怎麼辦?或者相反的情況,你一開始設定了較低的價格,雖然在接下來的幾個月裡就會承擔較小的風險,可是卻賺了更少的錢。我們應該如何幫助房主獲得更好的資訊,以避免這種不確定性和遺憾呢?

這些都是我們所面臨的各種各樣的問題。我們想構建一個易於使用的工具,當使用者決定出租自己的房子的時候,為他們提供有用的資訊,同時為定價提示給出明確的理由。

1016003

工具的整體架構

對於我們的工具,其整體架構出奇簡單:當一個新房主開始在我們的網站上新增一個房源的時候,我們的系統提取房源的關鍵屬性,檢視在這區域中有相同或相似屬性的、且被成功預定的房源,同時考慮到需求要素和季節性特徵,提供一個居中的價格提示。

當我們試圖將這個問題描述清楚的時候,最棘手的問題出現了,即房源的哪些屬性是關鍵屬性。沒有兩個房源在設計和佈局上是相同的,房源也分佈在城市的每一個角落,而且很多都不是公寓或別墅,而是城堡和小屋。我們的工具選擇了三大型別的資料來設定價格:相似性、新舊程度和位置。

對於相似性資料,一開始檢視所有已知的可量化的房源屬性,然後看哪些房源與顧客計劃支付的價格最接近。之後看房間裡可以住多少人,是一個大的集體宿舍還是小的私人房間,以及住房的型別(公寓、城堡、蒙古包等)和評論數量。

這裡最令人驚訝的屬性也許是評論數量。事實證明,人們願意為有很多評論的房源進行支付。而針對買什麼以及向誰買等問題,亞馬遜、eBay和許多網站都靠評論幫助使用者進行選擇,但評語數量是否會導致價格有很大的區別目前並不清楚。對我們來說,與沒有任何評論相比,即使只有一條評論也會導致房源有一個巨大的價格差異。

我們也考慮了新舊程度,因為市場變化頻繁,特別是旅遊業。最重要的是,旅遊是一種季節性很強的活動,所以在進行分析的時候,重要的是基於現在的資料,或者去年這個時候的資料,而上個月的資料可能關聯性很小。下圖給出了一個例子,說明季節性需求和當地的活動會導致房屋出租價格起伏,在得克薩斯州奧斯汀市,在South by Southwest(SXSW)和Austin City Limits festivals音樂節期間,房屋出租價格會上漲。

1016004

對於像倫敦和巴黎這樣高度發達的市場,獲得市場資料是很容易的,在我們的網站上有成千上萬被預定的房源可供比較。對於新興市場,我們按照大小、旅遊業的發展水平以及在Airbnb上所處的增長階段,將它們進行分類。這樣,我們不僅僅能夠將其與所在城市的房源進行比較,而且可以與其他具有相似特徵的市場相比較。因此,如果來自於日本的一個房主第一次在Airbnb進行註冊,計劃出租一套位於京都的公寓,我們不妨檢視來自於東京或岡山的房源,如果Airbnb上沒有這些城市的資料,我們還可以與來自於阿姆斯特丹的房源進行比較,因為對於Airbnb來說,阿姆斯特丹是一個比較成熟的市場,而且它與京都具有接近的城市規模和旅遊業水平。

最後,我們需要考慮位置,對我們來說,這是一個與酒店相當不同的問題。酒店通常成片地分佈在幾個主要的地點,而我們的房源幾乎分佈在城市的每一個角落。

在我們的定價演算法的早期版本中,演算法以房源為中心繪製一個不斷擴大的圓圈,考慮在房源位置附件不同半徑上與其特徵相似的房源。這種方法有的時候工作的很好,但我們最終發現一個重要的缺陷。想象我們在巴黎有一套公寓。如果公寓是位於市中心,那麼我們將圓圈不斷擴大時,它會迅速開始覆蓋塞納河兩側非常不同的街區。在巴黎,雖然在塞納河兩邊的房子都不錯,但僅僅相隔百米距離的公寓都會有非常大的價格差異。在其他的一些城市,有時這個問題會顯得更加明顯。在倫敦,舉例來說,僅僅相隔一條泰晤士河,格林尼治地區的價格可以超過倫敦碼頭附近的兩倍。

因此,我們讓一個製圖員在世界各地主要的一些大城市中為每一個街區繪製邊界。這些資訊的建立是非常準確的,通過使用相關的地理空間資料,如周圍的河流、公路和運輸線,我們能夠對房源進行準確分類。

現在,這些問題得到了解決。例如,在十月份的第一個週末,如果想在倫敦租住一個二人標間,泰晤士河邊上格林尼治地區的價格提示是130美元一晚,而河對岸具有類似條件的房間的價格提示僅僅是60美元一晚。以前的演算法讓系統為很多新的房源給出一個99美元的價格提示,沒有考慮它們的具體特徵。雖然這不是長時間發生,也不是在每一個地區都這樣,但我們認識到,當這種情況發生的時候,可能會導致人們質疑我們的定價工具是否有效。

動態定價與演算法自動學習

隨著時間的推進,我們不斷改進我們的演算法,直到他們能夠考慮數千種不同的因素,並在非常精細的水平上理解地理位置。但該工具仍然存在兩個不足。其一,它給出的這些價格提示是靜態的,事實上,在瞭解了當地的一些活動和旅遊的季節性變化之後,它應該在一年之中不同的季節為相同屬性的房源建議不同的價格。但它並沒有這樣做,然而,航空公司卻會當日期臨近的時候改變機票價格,訂單減少時將價格下調,在市場升溫時將價格提高。

另外一個不足是,工具本身是靜態的。事實上,當工具能夠挖掘到前所未有的歷史資料的時候,它的價格提示有所改善,但演算法本身並沒有變得更好。

去年夏天,我們開始了一個專案,以解決這兩個問題。在動態定價方面,我們的目標是為每個房主,針對他們的房子計劃出租的日期,每天給出一個新的定價提示。動態定價其實並不新鮮。航空公司開始動態調整機票價格已經幾十年了,而且常常是實時的,以試圖確保最大的滿座率,以及每個座位賣出最高的價格。酒店業也是這樣,隨著連鎖的規模變得越來越大,酒店的業務資料量不斷增長,酒店營銷也被搬到網上,使得連鎖每天可以多次變動價格。

因此,我們需要對動態定價進行投資,一旦我們有好幾年的歷史資料,我們就可以挖掘它們,儘管這需要大量的計算資源,但對我們來說具有非常大的意義。

讓演算法自身不斷改進要更加困難,尤其是因為我們希望系統給出的價格提示具有高的可解釋性。在某些情況下,我們希望演算法能夠有自己“思維過程”,能夠從資料中學習而獲得提高。機器學習系統通常具有一定的規模和複雜度,常常以一種神祕的方式工作。例如,谷歌大腦學習了在網路視訊中找出貓臉的能力,通過一個多層模型對資料進行分類,然後得出一個視訊是否包含貓臉的結果,而這個工作對於人類來說幾乎是不可能複製的。

我們選擇了一個分類機器學習模型。它使用房源的所有屬性以及當前市場的需求,然後預測其是否將被預定。系統計算價格提示是基於數百個屬性,如是否包含早餐、房間是否有一個私人浴室等。我們通過將價格提示與結果進行比較,對系統進行訓練。考慮房源是否以一個特定的價格被預訂,將幫助系統調整其價格提示以及評估一個價格被接受的概率。當然,房主可以選擇比價格提示更高或者更低的價格,然後我們的系統也會對估計概率做相應地調整。系統之後會檢查房源在市場上命運,並使用這些資訊來調整未來的提示。

下面就是機器學習發揮作用的時候了。通過分析哪些價格提示獲得了成功,我們的系統開始調整不同房源屬性的權重。我們一開始也會做一些假設,例如地理位置非常重要,而是否有熱水浴缸沒有那麼重要。我們保留了以前的定價系統中所考慮的某些房源屬性,同時又新增了一些新的屬性,如“預定日期之前的剩餘天數”,這些資訊對我們的動態定價產生影響。所有新的資訊被考慮到模型中,都是通過我們對歷史資料的分析,表明它們與我們的動態定價能力是相關的。

例如,某些照片更可能吸引預訂。總的趨勢可能會讓你大吃一驚,時尚、明亮的客廳的照片,雖然易於得到專業攝影師的偏愛,但相比於用暖色調裝飾的、舒適的臥室的照片,它們並沒能吸引更多的潛在客人。

隨著時間的推移,我們期待各種資訊的權重能不斷自動改進,以提高我們的價格提示。如果我們相信我們所瞭解到的一些東西,模型並沒有刻畫清楚,我們也可以通過其他方式參與和影響權重的設定。我們的系統能夠為每個定價提示產生一個各種因素及相應權重的列表,提高工具的可解釋性,這也是大家所希望看到的。如果我們覺得有些資訊在模型中沒有被很好地描述,我們會手動地將它們新增到模型中。

我們的系統也在不斷地調整我們的地圖以反映街區邊界的變化。因此,系統並不是依賴於當地的地圖,比方說,一個當地的地圖可能告訴我們波特蘭開拓者隊的恩光街區在哪個地方結束,里士滿街區從哪個地方開始,但這並不是我們所關心的,我們依靠一個城市中房源的預訂和價格的分佈資料來描繪各種曲線。這種做法也讓我們發現了我們以前所沒有意識到“微街區”。這些地區可能有大量的流行的房源,但它們並不一定與標準的街區邊界相匹配,或者可能存在一些區域性特徵,依據它們將一個較大的傳統街區分為一個個小的部分可能更加理想。下圖給出的例子,是我們的工具所劃分的倫敦的“微街區”分佈。

1016005

今天,這些工具為來自於全球的Airbnb房源提供價格提示。但是,我們認為這些工具除了幫助潛在的房主為線上出租服務更好地設定合理的價格之外,事實上它還可以做得更多。這就是為什麼我們將這些工具所基於的機器學習平臺(Aerosolve)作為一個開源工具釋出的原因。它將給那些還沒有接觸過機器學習的從業人員一個簡單的切入點。通過弄清楚系統的功能,它會讓更多人使用這些工具,這也是作者寫作本文的目的。到目前為止,我們已經用它來構建了一個系統,能夠以一種點彩畫的風格進行繪畫。我們渴望看到我們行業以外的有創造性的工程師開始使用這些工具,並期待他們最終的成果。

關於作者

Dan Hill,Airbnb的產品主管。Hill寫出了Airbnb的定價演算法,他還與人合夥創辦了家庭共享公司Crashpadder,其在2012年被Airbnb收購。Hill一開始做Web開發是為了支援他的小提琴手事業。他在最近的一次採訪中說到,“有一天當我醒來的時候,突然意識到我真的沒有被小提琴所眷顧”。對於他的下一步想法,Hill表示,“我真的想用我的一生致力於技術和產品”。


感謝郭蕾對本文的審校。

來自:InfoQ中文站