
作者:野水晶體
來源:livandata
看到這個(gè)題目,大家是否會有一些小小的想法?別鬧了!筆者是一個(gè)正經(jīng)人,討論的也是一個(gè)有關(guān)python的技術(shù)問題,哈哈~
每個(gè)人的行為都是有跡可循的,這些蛛絲馬跡可以作為預(yù)測的數(shù)據(jù)支持,有沒有想過一個(gè)人什么時(shí)候住酒店能夠被預(yù)測出來?筆者作為一個(gè)從事機(jī)器學(xué)習(xí)方面的程序員,對這一問題表示肯定,因?yàn)椋绻恍啪蜎]有工作了。
筆者以為:所謂預(yù)測即為通過歷史上遺留下來的蛛絲馬跡:行為、訂單甚至大廳門口的攝像頭,判斷某個(gè)人接下來的行為舉動(dòng)。這樣的預(yù)測多少還是有些價(jià)值的,畢竟,人的想法是會通過行為表達(dá)出來,想法是漸變的,也就預(yù)示著行為存在一定的連續(xù)性。
試想一下,如果一個(gè)人或者一個(gè)公司能有客戶在某個(gè)地方的消費(fèi)記錄,以及通過觀察分析發(fā)現(xiàn)客戶的基本特征,數(shù)據(jù)量足夠大的情況下是否能夠預(yù)測出客人什么時(shí)候入住酒店呢?我想結(jié)論大家都知道了~
作為一個(gè)旁觀者和理論家(哈哈),我們來一起探討一下,什么樣的特征和模型能夠預(yù)測出客戶住酒店的時(shí)間?
有沒有一點(diǎn)小小激動(dòng),畢竟預(yù)測是在不確定性中尋找肯定~
01、酒店預(yù)測的價(jià)值 Value
有誰會關(guān)心酒店的預(yù)測結(jié)果呢?
如果你想到的是情感問題,哈哈,我想該讓你失望了,因?yàn)楣P者是一個(gè)滿心工作的狂人。姑且將上面的人群算作一個(gè)吧,還會有誰呢?
1) 心系萬千客戶的大老板們;
2) 將驕傲賦予代碼的程序員們;
3) 天天接待客戶的銷售精英們;
4) 想盡奇招探索客戶的運(yùn)營大佬們;
……
預(yù)測的價(jià)值在于能夠幫助決策者減少混亂,是否到店?什么時(shí)候到店?的基礎(chǔ)上實(shí)現(xiàn)客群的細(xì)分并在細(xì)分客群的思路下挖掘客戶更深入的價(jià)值。在大數(shù)據(jù)領(lǐng)域中,預(yù)測將會是大數(shù)據(jù)的核心價(jià)值。
02、預(yù)測的思路 Thoughts
什么樣的客戶會進(jìn)入到我們的酒店呢?
客戶什么樣的行為預(yù)示著要來酒店了呢?
我想這是酒店運(yùn)營或老板最關(guān)心的問題吧?
正如上文所言,一個(gè)好的預(yù)測是需要對歷史數(shù)據(jù)進(jìn)行充分的解讀,然后基于數(shù)據(jù)特性進(jìn)行模型的構(gòu)建,最終得到預(yù)測結(jié)果。
因此,我們需要分析一下什么樣的情況下才會發(fā)生酒店入住行為,以及入住時(shí)間受什么因素影響?
對于酒店的入住,往往受較多方面的影響:出差、旅游、走親訪友……
入住時(shí)間呢?影響入住時(shí)間的因素往往較為寬泛,比如:春夏秋冬季節(jié)時(shí)令、酒店所處城市、酒店附近交通的便利程度、天氣情況等等……
再結(jié)合酒店的定位、客戶的年齡、性別,以及從著裝、談吐定位出的薪資水平、社會階層等幾乎可以勾勒出一個(gè)較為完整的特征集合了。
基本特征如下:
其中有些特征是需要進(jìn)行線下錄入,或者邏輯推理完成,比如:入住目的,在華為公司附近的酒店,見到來自上海的華為員工,工作日獨(dú)身一人辦理入住,完全有理由相信,他來是出差的~
特征整理好之后我們就需要對模型有一個(gè)預(yù)判了:
首先這是一個(gè)連續(xù)值預(yù)測模型,我們姑且把時(shí)間轉(zhuǎn)化成連續(xù)值,預(yù)測到月日粒度就可以了。
常見的連續(xù)值預(yù)測模型有如下幾個(gè):
1) 線性回歸;
4) ARIMA等時(shí)間序列模型;
每一種模型都會有他的優(yōu)勢和缺點(diǎn),比如:線性回歸預(yù)測方便簡單,但是較難解決自相關(guān)的問題;神經(jīng)網(wǎng)絡(luò)能較好的擬合高維特性但是解釋性較差;ARIMA需要較強(qiáng)的融合時(shí)間因素等等。他們的優(yōu)缺點(diǎn)包括但不限于這些描述,有興趣的讀者可以深入了解一下。
本文筆者采用的是決策樹融合線性回歸GBDT+Ridge的建模方式,這一方式主要是受到GBDT+LR模型的啟發(fā),facebook構(gòu)建的GBDT+LR融合模型在點(diǎn)擊率預(yù)測中效果顯著,曾一度在各個(gè)公司中應(yīng)用,但是在連續(xù)值預(yù)測中多少會有一些不足,畢竟LR模型是一個(gè)用線性回歸實(shí)現(xiàn)的分類模型,曲線的調(diào)整會影響預(yù)測的效果。
GBDT+Ridge融合模型用嶺回歸替換掉了LR的部分,對應(yīng)功能上Ridge更適合進(jìn)行連續(xù)值的預(yù)測。另外,Ridge可以通過添加約束條件以及懲罰系數(shù),限定預(yù)測范圍和解決多重共線性的問題,預(yù)測結(jié)果調(diào)整上具有一定程度的靈活性;
GBDT本身在決策樹方面有較好的名氣:
1) 其對特征值有較好的容忍性,數(shù)據(jù)有空值、異常值等情況下都可以有效運(yùn)行;
2) 對較高維度的特征融合效果也較為突出,因?yàn)闃涞奶匦?,GBDT能夠有效的探索高維的特征特性,每一個(gè)樹狀分支都是對多個(gè)特征的高維度融合;
3) 由于其boosting的設(shè)計(jì)思路,不停的迭代優(yōu)化能夠迅速提升模型的準(zhǔn)確性;
所以GBDT從一出生就是明星算法。
但是其本身也存在一定的缺點(diǎn):
1) 樹的每個(gè)分支都有一個(gè)維度相乘的效果,每個(gè)維度的變化都會引發(fā)整體的變化,因此其靈敏度較高,容易過擬合;
2) 無法較好的用在連續(xù)值預(yù)測上,GBDT本質(zhì)上還是一個(gè)分類算法;
而Ridge剛好彌補(bǔ)了這一問題,線性回歸Ridge中各個(gè)特征值是相加的,單個(gè)特征的變化對整體的影響較小,同時(shí)Ridge本身就是用來進(jìn)行連續(xù)值預(yù)測的,又較好的解決了多重共線性的問題。
基于上面的考慮,筆者對兩個(gè)模型進(jìn)行了融合,讓有情人終成眷屬。
03、預(yù)測的實(shí)現(xiàn)邏輯 Logic
模型的預(yù)測基本上遵循數(shù)據(jù)建模的常規(guī)套路,我們借這個(gè)機(jī)會將流程進(jìn)行一些梳理:
1) 特征清洗:數(shù)據(jù)的離散化、歸一化,缺失值填充,one_hot/WOE變化等;
2) 特征降維:降維主要有兩方面原因,其一是維度之間有一些共線性,我們在訓(xùn)練過程中需要把對y值影響不大或者x之間相互影響的特征剔除掉;其二是當(dāng)我們用one_hot進(jìn)行向量化變化之后,往往存在梯度爆炸等問題,為了解決這一問題,我們經(jīng)常用到的方法有:主成分分析、因子分析、決策樹篩選、相關(guān)系數(shù)計(jì)算、embedding、稀疏自編碼等;
3) 切分訓(xùn)練集和測試集:在訓(xùn)練集和測試集的切分中常用的方法有兩個(gè):其一是按照一定比例隨機(jī)提取,比如:隨機(jī)2:8分,80%數(shù)據(jù)做訓(xùn)練集,20%數(shù)據(jù)做測試集,這一方法簡單高效,但是訓(xùn)練的準(zhǔn)確性較低;其二:K-fold切分,將數(shù)據(jù)集拆分成測試集和訓(xùn)練集之后,對訓(xùn)練集進(jìn)行K折拆分,循環(huán)訓(xùn)練,循環(huán)驗(yàn)證,可以有效防止過擬合的現(xiàn)象;
4) 構(gòu)建模型:模型的構(gòu)建正如上文提到的,我們使用的GBDT+Ridge融合模型,在建模過程中,需要格外小心模型的輸入和輸出數(shù)據(jù)格式,通常我們會把融合模型整合成一個(gè)函數(shù),那么對應(yīng)的參數(shù)作為輸入數(shù)據(jù)就需要做好格式對照;
5) 模型保存/使用:訓(xùn)練好的模型需要進(jìn)行保存固話,這樣可以避免下次使用模型的時(shí)候重新訓(xùn)練,畢竟一次模型的訓(xùn)練需要較長的時(shí)間,固話模型的一些常用方法有:pickle、joblib等,對于一些深度學(xué)習(xí)的模型存在各自的方法,比如keras中的model.save();模型使用時(shí)也有對應(yīng)的方法,比如:joblib和pickle中的loads函數(shù),可以有效的還原訓(xùn)練好的模型,直接使用到生產(chǎn)環(huán)境中。
6) 訓(xùn)練結(jié)果驗(yàn)證:訓(xùn)練結(jié)果需要進(jìn)行比較才能知道好壞,我們通常會選擇多個(gè)模型,融合之后通過一定的指標(biāo)進(jìn)行比較,常用的比較指標(biāo)有:F-score、AUC、ROC曲線等。
上面即為構(gòu)建模型的常規(guī)思路,在這樣的思路下,我們實(shí)現(xiàn)了酒店入住時(shí)間的預(yù)測,小小的滿足了一下宅男的臆想,看到這里估計(jì)會被我的技術(shù)折服吧,哈哈,小小調(diào)侃一下~
下面是作為程序員的必備課了,上代碼~
04、預(yù)測代碼 Code
預(yù)測代碼主要是基于下面的思路進(jìn)行構(gòu)建的:
1)數(shù)據(jù)結(jié)構(gòu)為:
2)文件結(jié)構(gòu)為:
3) 對應(yīng)代碼為:
首先需要對代碼進(jìn)行特征處理;
……
grd = GradientBoostingClassifier(n_estimators=60)# 調(diào)用one-hot編碼。grd_enc = OneHotEncoder()# 調(diào)用LR分類模型。# grd_lm = LogisticRegression()grd_lm = RidgeCV(alphas=[0.1, 1.0, 10.0])# 使用X_train訓(xùn)練GBDT模型,后面用此模型構(gòu)造特征grd.fit(train_X, train_y)# fit one-hot編碼器grd_enc.fit(grd.apply(train_X)[:, :, 0])# 使用訓(xùn)練好的GBDT模型構(gòu)建特征,然后將特征經(jīng)過one-hot編碼作為新的特征輸入到LR模型訓(xùn)練。# 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) # 線性回歸建模# 用訓(xùn)練好的LR模型對X_test做預(yù)測y_pred_grd_lm = grd_lm.predict(grd_enc.transform(grd.apply(test_X)[:, :, 0]))
……
其次需要進(jìn)行數(shù)據(jù)匯總;
……
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")
……
最后就是驗(yàn)證和使用;
grd = GradientBoostingClassifier(n_estimators=60)# 調(diào)用one-hot編碼。grd_enc = OneHotEncoder()# 調(diào)用LR分類模型。# grd_lm = LogisticRegression()grd_lm = RidgeCV(alphas=[0.1, 1.0, 10.0])# 使用X_train訓(xùn)練GBDT模型,后面用此模型構(gòu)造特征grd.fit(train_X, train_y)# fit one-hot編碼器grd_enc.fit(grd.apply(train_X)[:, :, 0])# 使用訓(xùn)練好的GBDT模型構(gòu)建特征,然后將特征經(jīng)過one-hot編碼作為新的特征輸入到LR模型訓(xùn)練。# 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) # 線性回歸建模# 用訓(xùn)練好的LR模型對X_test做預(yù)測y_pred_grd_lm = grd_lm.predict(grd_enc.transform(grd.apply(test_X)[:, :, 0]))
……
思路和python代碼都只是機(jī)器學(xué)習(xí)的引導(dǎo),算是建模的一個(gè)較為完整的流程,希望能夠?qū)Υ蠹矣兴鶐椭?,有興趣歡迎相互溝通~
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03