
作者:野水晶體
來源:livandata
看到這個題目,大家是否會有一些小小的想法?別鬧了!筆者是一個正經人,討論的也是一個有關python的技術問題,哈哈~
每個人的行為都是有跡可循的,這些蛛絲馬跡可以作為預測的數據支持,有沒有想過一個人什么時候住酒店能夠被預測出來?筆者作為一個從事機器學習方面的程序員,對這一問題表示肯定,因為,如果不信就沒有工作了。
筆者以為:所謂預測即為通過歷史上遺留下來的蛛絲馬跡:行為、訂單甚至大廳門口的攝像頭,判斷某個人接下來的行為舉動。這樣的預測多少還是有些價值的,畢竟,人的想法是會通過行為表達出來,想法是漸變的,也就預示著行為存在一定的連續性。
試想一下,如果一個人或者一個公司能有客戶在某個地方的消費記錄,以及通過觀察分析發現客戶的基本特征,數據量足夠大的情況下是否能夠預測出客人什么時候入住酒店呢?我想結論大家都知道了~
作為一個旁觀者和理論家(哈哈),我們來一起探討一下,什么樣的特征和模型能夠預測出客戶住酒店的時間?
有沒有一點小小激動,畢竟預測是在不確定性中尋找肯定~
01、酒店預測的價值 Value
有誰會關心酒店的預測結果呢?
如果你想到的是情感問題,哈哈,我想該讓你失望了,因為筆者是一個滿心工作的狂人。姑且將上面的人群算作一個吧,還會有誰呢?
1) 心系萬千客戶的大老板們;
2) 將驕傲賦予代碼的程序員們;
3) 天天接待客戶的銷售精英們;
4) 想盡奇招探索客戶的運營大佬們;
……
預測的價值在于能夠幫助決策者減少混亂,是否到店?什么時候到店?的基礎上實現客群的細分并在細分客群的思路下挖掘客戶更深入的價值。在大數據領域中,預測將會是大數據的核心價值。
02、預測的思路 Thoughts
什么樣的客戶會進入到我們的酒店呢?
客戶什么樣的行為預示著要來酒店了呢?
我想這是酒店運營或老板最關心的問題吧?
正如上文所言,一個好的預測是需要對歷史數據進行充分的解讀,然后基于數據特性進行模型的構建,最終得到預測結果。
因此,我們需要分析一下什么樣的情況下才會發生酒店入住行為,以及入住時間受什么因素影響?
對于酒店的入住,往往受較多方面的影響:出差、旅游、走親訪友……
入住時間呢?影響入住時間的因素往往較為寬泛,比如:春夏秋冬季節時令、酒店所處城市、酒店附近交通的便利程度、天氣情況等等……
再結合酒店的定位、客戶的年齡、性別,以及從著裝、談吐定位出的薪資水平、社會階層等幾乎可以勾勒出一個較為完整的特征集合了。
基本特征如下:
其中有些特征是需要進行線下錄入,或者邏輯推理完成,比如:入住目的,在華為公司附近的酒店,見到來自上海的華為員工,工作日獨身一人辦理入住,完全有理由相信,他來是出差的~
特征整理好之后我們就需要對模型有一個預判了:
首先這是一個連續值預測模型,我們姑且把時間轉化成連續值,預測到月日粒度就可以了。
常見的連續值預測模型有如下幾個:
1) 線性回歸;
4) ARIMA等時間序列模型;
每一種模型都會有他的優勢和缺點,比如:線性回歸預測方便簡單,但是較難解決自相關的問題;神經網絡能較好的擬合高維特性但是解釋性較差;ARIMA需要較強的融合時間因素等等。他們的優缺點包括但不限于這些描述,有興趣的讀者可以深入了解一下。
本文筆者采用的是決策樹融合線性回歸GBDT+Ridge的建模方式,這一方式主要是受到GBDT+LR模型的啟發,facebook構建的GBDT+LR融合模型在點擊率預測中效果顯著,曾一度在各個公司中應用,但是在連續值預測中多少會有一些不足,畢竟LR模型是一個用線性回歸實現的分類模型,曲線的調整會影響預測的效果。
GBDT+Ridge融合模型用嶺回歸替換掉了LR的部分,對應功能上Ridge更適合進行連續值的預測。另外,Ridge可以通過添加約束條件以及懲罰系數,限定預測范圍和解決多重共線性的問題,預測結果調整上具有一定程度的靈活性;
GBDT本身在決策樹方面有較好的名氣:
1) 其對特征值有較好的容忍性,數據有空值、異常值等情況下都可以有效運行;
2) 對較高維度的特征融合效果也較為突出,因為樹的特性,GBDT能夠有效的探索高維的特征特性,每一個樹狀分支都是對多個特征的高維度融合;
3) 由于其boosting的設計思路,不停的迭代優化能夠迅速提升模型的準確性;
所以GBDT從一出生就是明星算法。
但是其本身也存在一定的缺點:
1) 樹的每個分支都有一個維度相乘的效果,每個維度的變化都會引發整體的變化,因此其靈敏度較高,容易過擬合;
2) 無法較好的用在連續值預測上,GBDT本質上還是一個分類算法;
而Ridge剛好彌補了這一問題,線性回歸Ridge中各個特征值是相加的,單個特征的變化對整體的影響較小,同時Ridge本身就是用來進行連續值預測的,又較好的解決了多重共線性的問題。
基于上面的考慮,筆者對兩個模型進行了融合,讓有情人終成眷屬。
03、預測的實現邏輯 Logic
模型的預測基本上遵循數據建模的常規套路,我們借這個機會將流程進行一些梳理:
1) 特征清洗:數據的離散化、歸一化,缺失值填充,one_hot/WOE變化等;
2) 特征降維:降維主要有兩方面原因,其一是維度之間有一些共線性,我們在訓練過程中需要把對y值影響不大或者x之間相互影響的特征剔除掉;其二是當我們用one_hot進行向量化變化之后,往往存在梯度爆炸等問題,為了解決這一問題,我們經常用到的方法有:主成分分析、因子分析、決策樹篩選、相關系數計算、embedding、稀疏自編碼等;
3) 切分訓練集和測試集:在訓練集和測試集的切分中常用的方法有兩個:其一是按照一定比例隨機提取,比如:隨機2:8分,80%數據做訓練集,20%數據做測試集,這一方法簡單高效,但是訓練的準確性較低;其二:K-fold切分,將數據集拆分成測試集和訓練集之后,對訓練集進行K折拆分,循環訓練,循環驗證,可以有效防止過擬合的現象;
4) 構建模型:模型的構建正如上文提到的,我們使用的GBDT+Ridge融合模型,在建模過程中,需要格外小心模型的輸入和輸出數據格式,通常我們會把融合模型整合成一個函數,那么對應的參數作為輸入數據就需要做好格式對照;
5) 模型保存/使用:訓練好的模型需要進行保存固話,這樣可以避免下次使用模型的時候重新訓練,畢竟一次模型的訓練需要較長的時間,固話模型的一些常用方法有:pickle、joblib等,對于一些深度學習的模型存在各自的方法,比如keras中的model.save();模型使用時也有對應的方法,比如:joblib和pickle中的loads函數,可以有效的還原訓練好的模型,直接使用到生產環境中。
6) 訓練結果驗證:訓練結果需要進行比較才能知道好壞,我們通常會選擇多個模型,融合之后通過一定的指標進行比較,常用的比較指標有:F-score、AUC、ROC曲線等。
上面即為構建模型的常規思路,在這樣的思路下,我們實現了酒店入住時間的預測,小小的滿足了一下宅男的臆想,看到這里估計會被我的技術折服吧,哈哈,小小調侃一下~
下面是作為程序員的必備課了,上代碼~
04、預測代碼 Code
預測代碼主要是基于下面的思路進行構建的:
1)數據結構為:
2)文件結構為:
3) 對應代碼為:
首先需要對代碼進行特征處理;
……
grd = GradientBoostingClassifier(n_estimators=60)# 調用one-hot編碼。grd_enc = OneHotEncoder()# 調用LR分類模型。# grd_lm = LogisticRegression()grd_lm = RidgeCV(alphas=[0.1, 1.0, 10.0])# 使用X_train訓練GBDT模型,后面用此模型構造特征grd.fit(train_X, train_y)# fit one-hot編碼器grd_enc.fit(grd.apply(train_X)[:, :, 0])# 使用訓練好的GBDT模型構建特征,然后將特征經過one-hot編碼作為新的特征輸入到LR模型訓練。# clf = grd_lm.fit(grd_enc.transform(grd.apply(X_train_lr)[:, :, 0]), y_train_lr)clf = grd_lm.fit(grd_enc.transform(grd.apply(X_train_lr)[:, :, 0]), y_train_lr) # 線性回歸建模# 用訓練好的LR模型對X_test做預測y_pred_grd_lm = grd_lm.predict(grd_enc.transform(grd.apply(test_X)[:, :, 0]))
……
其次需要進行數據匯總;
……
data_s = pd.merge(data_1_4, data_2_2, on='id', how='inner')data_s = pd.merge(data_s, data_3_4, on='id', how='inner')data_s = pd.merge(data_s, data_4_2, on='id', how='inner').drop_duplicates().reset_index()data_s = data_s.filter(regex="[^'index']")data_s.to_csv('data_s.csv', encoding="utf_8_sig")
……
最后就是驗證和使用;
grd = GradientBoostingClassifier(n_estimators=60)# 調用one-hot編碼。grd_enc = OneHotEncoder()# 調用LR分類模型。# grd_lm = LogisticRegression()grd_lm = RidgeCV(alphas=[0.1, 1.0, 10.0])# 使用X_train訓練GBDT模型,后面用此模型構造特征grd.fit(train_X, train_y)# fit one-hot編碼器grd_enc.fit(grd.apply(train_X)[:, :, 0])# 使用訓練好的GBDT模型構建特征,然后將特征經過one-hot編碼作為新的特征輸入到LR模型訓練。# clf = grd_lm.fit(grd_enc.transform(grd.apply(X_train_lr)[:, :, 0]), y_train_lr)clf = grd_lm.fit(grd_enc.transform(grd.apply(X_train_lr)[:, :, 0]), y_train_lr) # 線性回歸建模# 用訓練好的LR模型對X_test做預測y_pred_grd_lm = grd_lm.predict(grd_enc.transform(grd.apply(test_X)[:, :, 0]))
……
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《劉靜:10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda ...
2025-04-23