1. 程式人生 > >python資料分析:攜程出行產品預測未來14個月銷量

python資料分析:攜程出行產品預測未來14個月銷量

資料探勘入門與實戰 公眾號: datadw

原文:https://www.kesci.com/apps/home/#!/forum/postdetail/59194c685d9f204ee315ed90

回覆公眾號“攜程預測”獲取本文資料分析python原始碼.

調查發現,在出行產品業務中,不同區域的產品需求量級不一樣,不同時段需求量會有高低起伏,相同區域相同時段各產品的需求量因產品特性不同又有差異。

此次競賽的目的正是為了深入瞭解產品需求量和產品特性、歷史銷量的關係,挖掘出影響需求量的關鍵因素,預測出行產品未來14個月每月的銷量,從而指導產品的庫存管理和定價策略,這將對收益管理提升有著重要作用。

團隊介紹

我們團隊三人分別來自湖南大學、雲南大學和中國科學技術大學。我們在比賽前期主要採用不同的方式各自為戰,以便形成差異化的模型用於後期融合。

接下來,我將從問題分析、特徵工程、模型選擇和模型融合四方面來分享我們比賽的方法和經驗。

賽題分析

首先通過題意可以得出,本題是一個預測的問題,既可以當做時間序列問題來處理,也可以當做迴歸問題來處理。若使用時間序列模型,對於預測月銷量這一目標,會發現預測週期14個月對於23個月的歷史資料顯得過長,因此時間序列模型無法充分提取總體的變化趨勢以及週期內的規律,因此將此題看做迴歸問題是更為合適的做法。

特徵工程

在進行特徵工程之前,要進行資料預處理。預處理工作主要包括兩項,第一是剔除缺失率過高的特徵,因為缺失率過高的特徵基本上不包含有用資訊;第二對缺失值選擇合適的方法進行填補。

資料預處理完成後,開始構建特徵,當我們把經緯度用圖形呈現出來的時候,發現地理位置出現成塊的聚集現象,這些聚集區可能在真實的地理位置上是同一塊區域劃分。於是自然地想到採用聚類的方式來處理。

此外發現聚集的程度是由下至上越來越發散,這裡面可能存在一些資訊,為了將這一資訊保留,在聚類時,將類別名從下往上分別標記為0-8。

對於三項日期特徵(startdate、cooperatdate和upgradedate),主要使用了兩項處理方式:(1)product_month減日期;(2)2017年1月減日期。

在產品資訊表中,總共給出了5種產品評價指標,其中3種是評級特徵,一種為評分特徵,另一種為點評人數特徵。由於3種評級特徵的分佈大體一致,直接通過求和獲得總評級特徵。而點評人數特徵則是該比賽的強特徵,能夠強有力的反映銷量,於是我們通過點評人數特徵額外地挖掘出“單位時長點評人數”和“單位產品點評人數”特徵,以此來反映該產品的受歡迎程度。

對於產品的價格資訊,我們主要是計算了價格的相關統計量,包括每個產品的最高價格、最低價格、平均價格、價格方差以及平均價格在所有價格中的排名(排序特徵往往能消除數值量級變化過大和異常值帶來的影響)。

由於每個產品對應唯一的訂單屬性1,因此訂單屬性1能夠很好體現產品所屬的型別。而每個產品在其他訂單屬性上均出現多屬性值,因而從屬性值數量的比值中抽取資訊。

節假日永遠是人們出行高峰期,而每個月的節假日天數並不相同,直觀地來看,節假日天數越多的月份銷量往往越高。因此我們將各月的節假日天數作為額外的特徵。

總體來說,隨著人們生活水平的提高,旅遊人數也在逐年提高。有兩種增長的趨勢:(1)年內趨勢,即每年的銷售逐月增長,銷售量以年為週期進行變化;(2)總體趨勢,即銷售量逐年增長。針對第一種趨勢,我們提取月份值為特徵。對於第二種趨勢,則將2014年1月至2017年1月轉換為1-37的序數特徵,但是在選擇採用樹模型的時候,由於訓練集中沒有大於23的值,因此23以上的數值等價於23。

模型選擇

通過多模型的對比,我們最終採用了XGBoost和lightGBM。

為了使多模型融合得到有效提升,我們採取了多種不同的方式設計模型。第一種是針對共線性特徵分別構造多個模型,或者對類別特徵採用不同的編碼方式。第二種是對較優的單模型特徵採用兩種不同的演算法(XGBoost和lightGBM),第三種則是分別對XGBoost和lightGBM採用10折交叉選取90%的資料訓練預測。最後在模型融合時候,我們採取的策略是根據各單模型的表現效果,對各結果進行加權平均,這種方法不僅操作簡單,也能使融合效果得到明顯提升。其中使用了一個技巧,就是設計一個相對較差的模型,在加權平均時,賦予其負權重。

模型融合

這是我們關於本次賽題的整體思路展示,希望能對解決類似問題大家有所幫助。

選手問答 Q1 代和平同學你好,首先恭喜你們獲得了比賽的團體第三名。作為隊長能簡單就你們團隊的情況做個簡單介紹嗎?

好的,我們團隊主要由三名成員組成:隊長代和平,隊員胡濤和喬世吉。胡濤是來自雲南大學,專業是應用統計學。喬世吉來自中國科學技術大學的核科學技術學院,而我則來自湖南大學,專業是管理科學與工程。我們三個是在比賽過程中認識的,因為在比賽初期大家成績比較接近,然後我們就決定一起組隊。

在比賽過程中,我們團隊在前期主要採用不同的方式各自為戰,以便形成差異化的模型用於後期融合這種方式來相互合作,後期也取得了很不錯的效果。

Q2 你覺得本次比賽的難點在哪裡?你們後面是通過什麼樣的方法去解決這個問題的?

我覺得難點在於預測集時間維度相對訓練集較長,難以構造與線上表現一致驗證集。

考慮到AB榜的分佈應當是一致的,我與胡濤則直接把A榜線上的反饋結果作為對模型的驗證,這樣做的優點是這樣的反饋及時有效,但缺點是容易陷入對A榜的過擬合。而喬世吉則構造線下驗證集,以避免我們總體過擬合。

Q3 我注意到你的專業是管理科學與工程,是一個覆蓋面很廣的一級學科。你覺得資料分析在裡面,除了扮演十分重要的分析工具這樣一個角色更重要的意義在哪裡?

自從管理科學這一學科誕生以來,主要目的是探索使用科學的方法來進行管理,而科學的方法則更多的是使用量化方法,我認為隨著網際網路的發展,每個企業或多或少都會積累很多資料,而這些資料則是他們改進內部管理、提升服務、挖掘市場的重要素材。因此充分發揮資料分析在現代管理中作用,對於一個企業至關重要。

Q4 整個迴歸模型分析下來在你們所得的結果中有麼有讓自己覺得驚喜的地方?

這次比賽主要有兩個地方讓我覺比較開心。第一個是將預測的結果與前23個月畫在同一副圖中,會發現迴歸得出的結果趨勢與前兩年的表現很是相像,對趨勢擬合的很好。除此之外,我曾經一度對時序問題思路比較狹窄,總覺得只能用ARMIR,通過這次比賽也大大拓寬了我的思維。

Q5 對於對資料分析有興趣或者剛剛進入資料分析的同學你有沒有什麼覺得很受益的入門書籍推薦給他們的?

我很早看過一本書,叫《赤裸裸的統計學》,裡面沒有複雜的公式,都是一些淺顯易懂的語言,但是對統計學的本質講解的很好,類似的還有一本是《深入淺出資料分析》。再深入一點可以再看看《機器學習系統設計》、《Python資料分析與挖掘實戰》,這兩本是更多的將資料分析與挖掘知識運用到實際當中。最後再瞭解背後的理論,建議將《機器學習實戰》與《統計學習方法》結合著看。並且學習理論的同時也應該提升對資料的理解能力,如果能夠充分理解資料,很夠看懂資料背後潛在的資訊對資料分析應該會起到事半功倍的效果。