機器學習預測Airbnb新用戶帳號

在主題開始前,先談談最近資料科學界的幾個時事。

Google收購Kaggle

首先,Google宣布收購資料科學競賽網站Kaggle的新聞在資料科學界造成莫大的轟動,資料科學家之於Kaggle,就像是武俠小說中的英雄豪傑之於江湖中的武林大會。對於Google來說,收購Kaggle很顯然的是繼收購Deepmind後,佈局資料科學領域的另一大里程。前陣子在資料科學大補帖中分享過我時不時會到Kaggle上瀏覽有什麼有趣的主題,這次的新聞讓我決定分享一篇在Kaggle怎麼找競賽以及如何定義問題的實作。

Facebook發佈開源預測工具

接著是FaceBook近期發布了一個開源數據預測工具『Prophet』,同時支援R與Python,一方面讓過去時間序列預測中大部份都是基於R語言的Python能有一個新的時間序列支援,一方面也讓R有更多時間序列預測的選擇,因此這次決定設定這個新的package來試試看。(這裡不會多花篇幅說明理論模型的細節,如果對這些細節有興趣可以看看Facebook發表的文章。)

開始主題吧!

決定要試試看Prophet這個新的開源包後,偶然間我看到去年Aribnb在Kaggle上發布一個競賽:預測新用戶的第一次訂房服務會訂在什麼地方?(Where will a new guest book their first travel experience?),在一連串閱讀瀏覽競賽討論區、資料集後,我重新思考這個主題能有什麼樣不同的應用,並發現這樣的資料或許可以用Prophet試試看。

首先,在資料集中兩個不同的時間序列欄位,分別是第一次創立帳號的時間(date_account_created)與新帳號第一次訂房的時間(date_first_booking)。

螢幕快照 2017-03-12 下午1.31.48

定義問題

Aribnb預測未來一年內每天新帳號的第一次訂房數量,對於Airbnb開發新用戶轉換成第一次行動(Activation)能讓內部拓展新用戶時的成長與否有一個基準衡量新的策略是否有成效。同時網站做A/B測試時,也能多一些參考,透過比較預測值、實際值與測試值來更進一步分析測試結果。如果知道A/B測試的話,前幾篇文章有提到關於網站流量成長的一些想法,可以參考還搞不清楚嗎?來談談成長駭客(Growth Hacking)與資料科學

資料探索

試著先用圖表探索這兩個2010年到2015年間的時間序列關係。這次我將圖表用plotly package部署成互動的網頁服務(Interactive web service),有興趣的話可以點點看圖表或圖表下的連結,有更詳細的互動圖表細節!

首先是2010/1/1~2014/6/30間第一次訂位的數量統計:

接著是2010/1/1~2014/6/30第一次創立帳號的數量統計:

在總共213,451筆的資料中,第一次訂位的欄位中(date_first_booking)有124,543筆的遺失值(missing value),由於有超過一半的欄位都是遺失值,若選擇移除這些遺失值會一定程度的喪失資料能帶來的訊息,但透過自訂義的值來填寫這些遺失值,又容易造成很大的偏誤。

螢幕快照 2017-03-12 下午2.23.28.png

因此試著找尋另外一個時間序列和第一次訂位欄位的關係,從第一次辦帳號到跟第一次訂房間的時間差(Y軸為數量,X軸為以日為單位的時間差)可以發現一個有趣的現象,絕大多數第一次辦帳號的用戶會在同一天第一次訂房:

螢幕快照 2017-03-12 下午2.09.43.png

因此在絕大多數第一次辦帳號會在同一天第一次訂房的情況下,預測第一次辦帳號的數量也許是一個解決新帳號第一次訂房的資料欄位過於殘缺的可行辦法。

大膽的預測吧!

由於Facebook最近發佈的開源工具Prophet主打人性化建模與自動化程度高,會自動預測水平(Level)、趨勢(Trend)、季節性(Seasonality)和噪音(Noise)。因此我便不設定參數完全按照預設操作預測從2010/01/01~2015/06/21間每日第一次辦帳號的數量。(點選圖或圖下的連結一樣會有互動的網頁圖表!)

結論

這次用Facebook的開源工具Prophet中,初始設定自動偵測以預測的結果似乎能有效地抓取趨勢(Trend),但對於季節性(Seasonality)卻沒有辦法準確的預測,若後續設定參數我或許會嘗試按照乘法季節性(Multiplicative Seasonlity)的方向去測試,因為資料顯示越接近時間後段的數量其季節性成長的幅度看起來似乎是乘法成長。另外也可以試試看異點偵測(Anamoly detection)找出一些異常於正常情況的值,將這些值設為離群值(Outlier)再去預測。

這次的文章主要是分享紀錄我看到新東西時如何思考和實作的流程與模式,並透過短時間快速嘗試驗證自己的想法,因此很多細節的專有名詞或背後的運作模型沒有多做說明,還請多見諒!

我將詳細的程式放我的Github帳號,有興趣的話可以看看:https://github.com/poweihuang/airbnbforecast

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

Create a website or blog at WordPress.com

向上 ↑

%d 位部落客按了讚: