版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
摘要隨著移動設(shè)備的普及和移動互聯(lián)網(wǎng)的高速發(fā)展,O2O(OnlineToOffline)營銷模式最吸引眼球,同時也引起了不少學(xué)者和業(yè)界的關(guān)注?,F(xiàn)今已有很多論文分析了使用移動優(yōu)惠券的影響因素。本文是對優(yōu)惠券的研究,本研究是基于機器學(xué)習(xí)從多個特征角度探究移動優(yōu)惠券使用行為的影響因素,對O2O優(yōu)惠券實現(xiàn)快速且精確預(yù)測用戶是否會在規(guī)定的時間內(nèi)領(lǐng)取并使用優(yōu)惠券進行研究分析。分析電商平臺的用戶歷史數(shù)據(jù),包括優(yōu)惠券的領(lǐng)券時間、優(yōu)惠券的優(yōu)惠情況、用戶與商家線下的最近距離和用戶的消費時間,對這些數(shù)據(jù)做可視化分析,構(gòu)建特征集。從多個特征角度完成數(shù)據(jù)的處理,生成測試模型,將模型引入到移動優(yōu)惠券是否使用的研究當(dāng)中。本論文對基于機器學(xué)習(xí)的O2O優(yōu)惠券使用率的設(shè)計與實現(xiàn)進行了一系列的分析,包括系統(tǒng)設(shè)計分析??傮w設(shè)計分析,對需求功能進行一系列的規(guī)劃。詳細細節(jié)的設(shè)計分析,進行模型預(yù)測。研究結(jié)果表明模型預(yù)測的準確性有了提升,優(yōu)惠券特征明顯影響著優(yōu)惠券是否會被使用。關(guān)鍵字:O2O優(yōu)惠券決策樹隨機森林XGBoost模型
AbstractWiththepopularizationofmobiledevicesandtherapiddevelopmentofmobileInternet,theO2O(OnlineToOffline)marketingmodelattractsthemostattention,andalsoattractstheattentionofmanyscholarsandtheindustry.Manypapershaveanalyzedthefactorsthatinfluencetheuseofmobilecoupons.Thispaperisaresearchoncoupons.Basedonmachinelearning,thisstudyexplorestheinfluencingfactorsofmobilecouponusingbehaviorfromavarietyofcharacteristics,andconductsresearchandanalysisonthefastandaccuratepredictionofwhetheruserswillreceiveandusecouponswithinaspecifiedperiodoftimebasedonO2Ocoupons.Analyzetheuserhistorydataoftheelectroniccommodityplatform,includingcoupontime,coupondiscount,thenearestdistancebetweentheuserandthemerchantandtheuser'sconsumptiontime,andconductvisualanalysisonthesedatatobuildfeatureset.Thedataisprocessedfrommultiplefeatureangles,andatestmodelisgenerated.Themodelisintroducedintotheresearchonwhethermobilecouponsareused.ThispapermakesaseriesofanalysisonthedesignandimplementationofO2Ocouponutilizationbasedonmachinelearning,includingtheoverallsystemdesign.Overalldesignanalysis,requirementsforaseriesoffunctionalplanning.Detaileddesignanalysis,modelprediction.Theresultsshowthattheaccuracyofthemodelpredictionhasbeenimproved,andthecharacteristicsofcouponssignificantlyaffectwhetherthecouponswillbeused.Keywords:O2OcoupondecisiontreerandomforestXGBoostmodel
目錄摘要 IAbstract II緒論 11 系統(tǒng)分析 31.1可行性分析 31.1.1技術(shù)可行性 31.1.2經(jīng)濟可行性 31.1.3操作可行性 31.2功能分析 32 關(guān)鍵技術(shù)與方法 42.1機器學(xué)習(xí)基礎(chǔ) 42.2機器學(xué)習(xí)算法 42.2.1支持向量機(SVM) 42.2.2決策樹 52.2.3隨機森林 52.2.4XGBoost 52.2.5Stacking融合 62.2.6GidSearchCV 62.3sklearn庫 63 數(shù)據(jù)分析 83.1數(shù)據(jù)的來源 83.2數(shù)據(jù)描述 83.3數(shù)據(jù)導(dǎo)入 83.4數(shù)據(jù)清洗與整理 93.5數(shù)據(jù)可視化 103.5.1用戶分析 103.5.2優(yōu)惠券使用的總體情況 113.5.3每月消費統(tǒng)計 113.5.4優(yōu)惠券的領(lǐng)取數(shù)量和使用 123.6特征工程 133.7特征提取 153.7.1打折率 153.7.2距離 163.7.3領(lǐng)劵日期 163.8標簽 174 模型構(gòu)建與評估 184.1建立訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集 184.2構(gòu)建模型 184.3模型訓(xùn)練 184.4驗證 194.5測試 19研究或成果與社會、環(huán)境、文化、經(jīng)濟、環(huán)保等關(guān)系 20總結(jié) 21致謝 22參考文獻 23
緒論研究背景與意義隨著可支配收入的增長和物流基礎(chǔ)設(shè)施條件的改善,我國網(wǎng)絡(luò)購物普及率有了進一步提升,網(wǎng)絡(luò)零售業(yè)現(xiàn)已成為互聯(lián)網(wǎng)新經(jīng)濟強大的增長引擎。網(wǎng)絡(luò)購物行業(yè)發(fā)展日益成熟,電子商務(wù)企業(yè)之間的市場競爭也非常激烈。各家電商企業(yè)為了在激烈的市場競爭中站穩(wěn)腳跟,除了繼續(xù)不斷擴充品類、優(yōu)化物流及售后服務(wù)外,還紛紛使盡渾身解數(shù)展開銷售大戰(zhàn),各種網(wǎng)絡(luò)營銷手段不足為奇。網(wǎng)絡(luò)營銷主要指的是用計算機網(wǎng)絡(luò)平臺向虛擬市場傳遞各種商品的相關(guān)信息,然后引發(fā)消費者的需求,喚起消費者想要購買商品的欲望,最終形成購買行為的各種銷售活動。電子優(yōu)惠券也是網(wǎng)絡(luò)營銷中的一種常見的促銷方式。電子優(yōu)惠券是電子形式的優(yōu)惠券,是利用各種電子媒體制作、傳播和贖回的促銷憑證。它能夠有效地傳播產(chǎn)品、服務(wù)和價格方面的信息,也可以吸引網(wǎng)民的注意力,還能誘導(dǎo)一部分群體的需求,使其最終產(chǎn)生購買行為。由此電商企業(yè)就可以減少使用昂貴的廣告?zhèn)鞑ッ襟w,從而降低營銷成本,同時提高營銷效率,進而能夠更好地滿足消費者多樣化的需求。國內(nèi)外研究現(xiàn)狀隨著科技的發(fā)展,越來越多的商家開始利用網(wǎng)絡(luò)和電子設(shè)備來提高優(yōu)惠券的質(zhì)量以提高它所帶來的效益。優(yōu)惠券不僅可以降低消費者的消費壓力,還能勾起了消費者的購買欲望并為商家提高極大的銷量,同時也會增加消費者的忠實度。但是在優(yōu)惠券的使用中也要注意到一些問題,優(yōu)惠券的發(fā)行量是否能在能力范圍之內(nèi),優(yōu)惠券的展示方式是否能夠吸引消費者的眼球。從算法角度上來看,個性化優(yōu)惠券的種類與個性化推薦系統(tǒng)非常相像,同樣是分析用戶的潛在需求,但優(yōu)惠券其實又是商品推薦的進一步發(fā)展,正確的推薦了商品,再加上一定的折扣,更能燃起消費者的購買欲望。就國外而言,商家投資于數(shù)字優(yōu)惠券比橫幅廣告更有利可圖,就傳統(tǒng)零售業(yè)向新零售進行轉(zhuǎn)型,重點發(fā)展O2O業(yè)務(wù),提出了O2O平臺下,商家與用戶之間信息不對稱的問題。從關(guān)系角度對O2O商業(yè)環(huán)境下消費者行為進行了初步的研究,提出了如何提高消費者的回購意愿和分享意愿。利用樸素貝葉斯、k近鄰、Logistic回歸、神經(jīng)網(wǎng)絡(luò)、決策樹和隨機森林方法對O2O優(yōu)惠券使用情況進行預(yù)測,通過ROC曲線得出,隨機森林模型預(yù)測準確率更高。研究內(nèi)容與方法本課題再pycharm環(huán)境中使用Python語言在Windows平臺下根據(jù)客戶優(yōu)惠券使用的歷史行為數(shù)據(jù)建立預(yù)測模型。首先對原始數(shù)據(jù)進行數(shù)據(jù)預(yù)處理,主要是把字段的格式整理到符合模型的要求;然后對已經(jīng)完成預(yù)處理的數(shù)據(jù)建立特征,每個特征根據(jù)影響用戶使用優(yōu)惠券的因素而建立;再根據(jù)上述的特征利用sklearn庫建立預(yù)測模型,最后測試建立預(yù)測模型的性能。在編寫論文之前學(xué)習(xí)了機器學(xué)算法、sklearn庫、決策樹、隨機森等。對基于機器學(xué)習(xí)的O2O優(yōu)惠券和優(yōu)惠券使用行為的影響因素有了一定的了解。然后根據(jù)自己所學(xué)習(xí)的內(nèi)容進行程序編碼,做部分測試,最后再做整體測試,整個程序的設(shè)置大致就是這樣。論文結(jié)構(gòu)本文共分為五章:第一章:論文的緒論部分。主要介紹了論文的研究背景與意義、研究現(xiàn)狀和研究方法。第二章:系統(tǒng)分析,主要從技術(shù)、經(jīng)濟、操作、功能四個方面做可行性分析。第三章:介紹了本研究采用的關(guān)鍵技術(shù)和方法,介紹了機器學(xué)習(xí)算法以及本研究需要用到的關(guān)鍵庫。第四章:對數(shù)據(jù)進行分析和處理。解釋數(shù)據(jù)的來源,導(dǎo)入數(shù)據(jù),對數(shù)據(jù)進行清洗整理,然后對整理好的數(shù)據(jù)做可視化。分析特征工程,提取相應(yīng)的特征。第五章:模型構(gòu)建與評估。
系統(tǒng)分析1.1可行性分析本研究主要采用pycharm使用Python語言進行編寫。對基于機器學(xué)習(xí)的O2O移動優(yōu)惠券的使用進行預(yù)測,下面是通過三個方面對可行性進行分析。1.1.1技術(shù)可行性基于機器學(xué)習(xí)的電商平臺個性化投放軟件使用Python,學(xué)習(xí)和使用起來都很便利。因為Python語言學(xué)習(xí)和使用都很簡單,更容易上手,擁有強大的庫,也是當(dāng)下最流行的語言所以本研究采用Python語言實現(xiàn)。因此可以進行此開發(fā)。1.1.2經(jīng)濟可行性本研究需要一臺電腦,電腦配置為Windows7、Windows10都可以。軟件使用Python是免費的,在開發(fā)上消費不高,而且系統(tǒng)功能簡潔需求清晰,開發(fā)時間也并不長,所以此系統(tǒng)基本花費較少具有經(jīng)濟可行性。1.1.3操作可行性基于機器學(xué)習(xí)的電商平臺個性化投放的研究操作簡單、容易實現(xiàn),只需要對Python語言有一定的了解,對機器學(xué)習(xí)有一定基礎(chǔ)就可以對本研究進行實現(xiàn)。所以本系統(tǒng)可以進行開發(fā)。1.2功能分析本研究主要是根據(jù)已有的消費數(shù)據(jù),選取關(guān)鍵性數(shù)據(jù),比如:用戶ID、商戶ID、優(yōu)惠券ID、優(yōu)惠率、領(lǐng)券時間、消費時間以及用戶距離商家的最近門店的距離,來實現(xiàn)優(yōu)惠券的個性化投放。
關(guān)鍵技術(shù)與方法2.1機器學(xué)習(xí)基礎(chǔ)機器學(xué)習(xí)的主要任務(wù)就是將實例中的數(shù)據(jù)劃分到合適的分類中,它還有一個任務(wù)是回歸?;貧w主要用于預(yù)測數(shù)值型的數(shù)據(jù)。分類和回歸都屬于監(jiān)督學(xué)習(xí),因為這類算法必須知道預(yù)測目標變量的分類信息,所以稱它為監(jiān)督學(xué)習(xí)。機器學(xué)習(xí)可以幫我們從很多數(shù)據(jù)中心抽取有用的信息。機器學(xué)習(xí)的六個步驟分別是:收集數(shù)據(jù)、準備輸入數(shù)據(jù)、分析輸入數(shù)據(jù)、訓(xùn)練算法、測試算法、使用算法。之所以選擇Python作為機器學(xué)習(xí)算法的編程語言是因為Python語言語法清晰、容易操作文本文件、使用的范圍廣,擁有大量的開發(fā)文檔。學(xué)習(xí)機器學(xué)算法,必須了解數(shù)據(jù)實例,每個數(shù)據(jù)實例都是由多個特征值組成的。2.2機器學(xué)習(xí)算法2.2.1支持向量機(SVM)支持向量機(SupportVectorMachine,SVM)是一種的分類器,它之所以被稱為“機”是因為它會產(chǎn)生一個二值決策結(jié)果。二值決策結(jié)果就是一種決策“機”,然后通過SVM分類器可以得到低錯誤率的結(jié)果。支持向量機是通過求解一個二次優(yōu)化問題來最大化分類間隔。在SVM實現(xiàn)中會使用核函數(shù),它的作用是直接計算出兩者添加多項式特征之后的點乘,加快計算速度。核函數(shù)的定義域就是樣本的屬性空間,值域就是一個實數(shù)數(shù)軸。核函數(shù)是定義一種距離,定義屬性空間中,兩個樣本之間的距離,大于某個距離為正,小于某個距離為反。核函數(shù)的作用就是強行拉出距離來。SVM應(yīng)用的一般框架:收集數(shù)據(jù):可以使用任何數(shù)據(jù);準備數(shù)據(jù):需要數(shù)值型數(shù)據(jù);分析數(shù)據(jù):有助于做可視化分隔超平面;訓(xùn)練算法:實現(xiàn)兩個參數(shù)的調(diào)優(yōu);測試算法:通過計算實現(xiàn);使用算法:大多數(shù)的分類問題都可以使用SVM,只需要對代碼做一些修改。2.2.2決策樹決策樹(decisiontree):是一個樹結(jié)構(gòu),是一種基本的分類與回歸方法。它的每個非葉節(jié)點代表著一個特征屬性上的測試,每個分支表示這個特征屬性在某個值域上的輸出,每個葉節(jié)點都存放到一個類別里面。在用決策樹進行決策的時候它是從根節(jié)點開始的,測試還沒分類項中的相應(yīng)的特征屬性,然后在根據(jù)它的值選擇輸出分支,直到到達葉子節(jié)點,最后將葉子節(jié)點存放的類別作為決策結(jié)果。在構(gòu)造決策樹時要先找出數(shù)據(jù)集中哪個特征在劃分數(shù)據(jù)分類起決定性的作用。為了找到這個特征,劃分出最好的結(jié)果,首先要對每個特征進行評估。完成測試后,原始數(shù)據(jù)就被劃分成為了幾個數(shù)據(jù)子集,在這些子集中會分布在第一個決策點的所有分支上。如果分支上的數(shù)據(jù)屬于同一種類型,就不再需要對數(shù)據(jù)進行下一步分隔;如果分支上的數(shù)據(jù)不屬于同一種類型,則需要再次劃分數(shù)據(jù)子集的過程,這個劃分過程與之前原始數(shù)據(jù)集劃分的方法相同,最后直到所有數(shù)據(jù)子集內(nèi)的類型都相同。2.2.3隨機森林隨機森林(randomforest)是集成學(xué)習(xí)用來解決分類和回歸的問題,它不僅可以用來處理決策樹訓(xùn)練過程中引入的特征,還能可以用來估計建立模型數(shù)據(jù)變量的重要性。隨機森林采用的是自助法重采樣技術(shù)方法,在原始訓(xùn)練集中有放回地重復(fù)隨機抽取樣本生成新的訓(xùn)練樣本集合。然后再用自助樣本集生成的分類樹組成隨機森林,新數(shù)據(jù)的分類結(jié)果按分類樹投票多少形成的分數(shù)而定。隨機森林包含了很多決策樹,在隨機森林中,對決策樹的每個節(jié)點的屬性集合中隨機抽取包含屬性的子屬性集,再選擇屬性最好的進行劃分。隨機森林用于分類是采用多個決策樹分類,再將分類結(jié)果用投票方式得到最終分類,提高準確率。隨機森林容易理解方便實現(xiàn),在很多數(shù)集上比其它算法更有優(yōu)勢;能夠處理高緯度的數(shù)據(jù)并且做特征選擇。在訓(xùn)練完成之后可以給出哪些高緯度比較重要,隨機森林訓(xùn)練速度快,在訓(xùn)練過程中可以監(jiān)測到高緯度數(shù)據(jù)之間的相互影響,也更容易做成并行化方法。隨機森林用sklearn的相關(guān)算法實現(xiàn)。2.2.4XGBoostXGBoost是一個優(yōu)化的分布式梯度增強庫。它的實現(xiàn)靈活便攜高效。XGBoost是對梯度提升算法的進一步改進,同時也提供了并行樹提升。它可以快速準確的解決很多的數(shù)據(jù)科學(xué)問題。XGBoost是一個樹集成模型,它使用的是樹的總數(shù)K的每棵樹對樣本的預(yù)測值的和作為該樣本在XGBoost中的預(yù)測,XGBoost對代價函數(shù)做了二階展開,加入了一階導(dǎo)數(shù)和二階導(dǎo)數(shù)。XGBoost能夠支持自定義的損失函數(shù),只需要滿足二階連續(xù)可導(dǎo)的函數(shù)這個條件都可以作為損失函數(shù)。XGBoost在損失函數(shù)中使用了正則化項,可以用來控制模型的復(fù)雜度。XGBoost在訓(xùn)練之前,先對數(shù)據(jù)進行了排序,然后保存為(block)結(jié)構(gòu),再迭代中重復(fù)使用這個結(jié)構(gòu),減小計算量。為了提高優(yōu)惠券分類問題的準確率,本研究采用了XGBoost的三分類算法(TWD?XGBoost)。這個算法主要有兩步:(1)用XGBoost算法預(yù)測用戶領(lǐng)取優(yōu)惠券之后會不會使用的概率;(2)根據(jù)得到的預(yù)測使用概率,結(jié)合三支決策思想再建立三分類模型,最后實現(xiàn)優(yōu)惠券的使用預(yù)測。2.2.5Stacking融合Stacking是把已經(jīng)訓(xùn)練好的所有基模型對整個訓(xùn)練集進行預(yù)測。把第j個基模型對第i個訓(xùn)練樣本的預(yù)測值作為新的訓(xùn)練集中第i個樣本的第j個特征值,之后再對新的訓(xùn)練集進行訓(xùn)練。運用的方式對預(yù)測的過程也要先運用所有基模型的預(yù)測形成新的測試集,最后再對測試集進行預(yù)測。2.2.6GidSearchCVGridSearchCV由兩個部分組成分別是GridSearch和CV,即網(wǎng)格搜索和交叉驗證。網(wǎng)格搜索是搜索參數(shù),在規(guī)定的參數(shù)范圍內(nèi),按步長依次調(diào)整參數(shù),在用調(diào)整之后的參數(shù)訓(xùn)練學(xué)習(xí)器,在全部的參數(shù)中找到在驗證集上精度最高的參數(shù),這相當(dāng)于一個訓(xùn)練和比較的過程。GridSearchCV是用當(dāng)前對模型影響最大的參數(shù)調(diào)優(yōu),一直調(diào)到到最優(yōu)化,然后再拿下一個影響最大的參數(shù)調(diào)優(yōu),重復(fù)這個操作直到所有的參數(shù)調(diào)整完畢。使用這個方法雖然可能會出現(xiàn)調(diào)到局部最優(yōu)而不是全局最優(yōu)的情況,但是它省時間省力。2.3sklearn庫現(xiàn)今Python語言已經(jīng)從最前沿的科學(xué)計算語言成為了數(shù)據(jù)科學(xué)、機器學(xué)習(xí)等領(lǐng)域最重要的語言之一。Python提高了對庫的支持,成為了數(shù)據(jù)分析的一個最常用的選擇。Python數(shù)據(jù)分析主要是使用相關(guān)的庫,比如數(shù)據(jù)整理需要用到numpy和pandas庫,數(shù)據(jù)描述與分析主要用到pandas庫。Python對數(shù)據(jù)分析的過程就是對庫的學(xué)習(xí)過程。sklearn又叫scikit-learn,是基于numpy和scipy的Python機器學(xué)習(xí)庫。它是由標準監(jiān)督和無監(jiān)督的機器學(xué)習(xí)方法組成的。一般用于模型選擇和評估、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)加載和模型持久化的工具,它主要有六個模塊分別是:分類:SVM、最近鄰、隨機森林、邏輯回歸等回歸:Lasso、鄰回歸聚類:k-means、譜聚類降維:PCA、特征選擇、矩陣分解等模型選擇:網(wǎng)格搜索、交叉驗證、指標矩陣預(yù)處理:特征選取、正態(tài)化
數(shù)據(jù)分析3.1數(shù)據(jù)的來源本研究的數(shù)據(jù)采用了O2O優(yōu)惠券使用預(yù)測提供的原始數(shù)據(jù)。該數(shù)據(jù)提供了用戶在2016年1月1日到2016年6月30日之間真實線上線下消費行為。它的內(nèi)容是通過這個消費行為預(yù)測客戶利用2016年7月領(lǐng)取優(yōu)惠券后15天內(nèi)的使用情況,判斷是否發(fā)放優(yōu)惠券告。本文使用這個數(shù)據(jù)建立分類模型后,繼續(xù)預(yù)測在15天的規(guī)定時間內(nèi)商鋪的優(yōu)惠券是否會被用戶使用。判斷對2016年7月的用戶數(shù)據(jù)是否在投放優(yōu)惠券后發(fā)生購買行為的平均AUC的大小。3.2數(shù)據(jù)描述數(shù)據(jù)的字段描述如表2-1用戶線下消費和優(yōu)惠券領(lǐng)取行為表。從表中可以知道數(shù)據(jù)集包含了七個字段分別是:用戶ID、商戶ID、優(yōu)惠券ID、優(yōu)惠率、領(lǐng)券時間、消費時間以及用戶距離商家的最近門店的距離。表3-1用戶線下消費和優(yōu)惠券領(lǐng)取行為表字段描述User_id用戶IDMerchant_id商戶IDCoupon_id優(yōu)惠券ID,null代表無優(yōu)惠券消費,當(dāng)它為null時Discount_rate和Date_received字段無意義Discount_rate優(yōu)惠率,x\in[0,1]是折扣率,x:y代表滿x減yDistance用戶經(jīng)?;顒拥牡攸c離商戶最近門店的距離是x*500米(如果是連鎖店,則取最近的一家門店),x\in[0,10];null代表無此信息,0表示低于500米,10表示大于5公里Date_received領(lǐng)取優(yōu)惠券日期Date消費日期,Date=null&Coupon_id!=null表示領(lǐng)取優(yōu)惠券但沒有使用,為負樣本;Date!=null&Coupon_id=null表示普通消費日期;Date!=null&Coupon_id!=null表示用優(yōu)惠券消費日期,為正樣本3.3數(shù)據(jù)導(dǎo)入在機器模型中數(shù)據(jù)集是最重要的,首先導(dǎo)入我們所需要的兩個數(shù)據(jù)集。線下測試集:ccf_offline_stage1_test_revised.csv線下訓(xùn)練集:ccf_offline_stage1_train.csv我們將使用第二個數(shù)據(jù)集訓(xùn)練模型,再對第一個數(shù)據(jù)進行預(yù)測,得出用戶在15天內(nèi)使用優(yōu)惠券的概率值。在導(dǎo)入測試集和訓(xùn)練集的同時也需要導(dǎo)入需要用到的相關(guān)庫,比如:numpy庫、pands庫、matplotlib庫、scikit-learn庫、scipy庫。導(dǎo)入數(shù)據(jù)包:importpandasaspdimportnumpyasnpimporttimefromdatetimeimportdateimportnumpyasnpimporttimeimportosfromsklearn.model_selectionimportStratifiedKFold,GridSearchCVfromsklearn.pipelineimportPipelinefromsklearn.linear_modelimportSGDClassifierfromsklearn.preprocessingimportStandardScalerfromsklearn.metricsimportauc,roc_curve這些導(dǎo)入成功之后先做一個簡單的統(tǒng)計,看一下用戶是否使用優(yōu)惠券購買商品的消費情況,消費情況有如下4種:有優(yōu)惠券,購買商品:75382有優(yōu)惠券,未購買商品:977900無優(yōu)惠券,購買商品:701602無優(yōu)惠券,未購商品:0通過上面4種情況發(fā)現(xiàn)有701602人購買商品沒有使用優(yōu)惠券,有977900人有優(yōu)惠券然而并沒有購買商品,真正使用優(yōu)惠券購買商品的人只有75382人,所以目的就是要把優(yōu)惠券發(fā)放給那些會購買商品的人。3.4數(shù)據(jù)清洗與整理數(shù)據(jù)清洗的主要任務(wù)是刪除原始數(shù)據(jù)中的無關(guān)數(shù)據(jù)和重復(fù)數(shù)據(jù)。數(shù)據(jù)清洗首先要做的是處理數(shù)據(jù)缺失值,處理缺失值包括:刪除缺失值、插補缺失值和不處理缺失值;然后再對重復(fù)值進行處理,最后在處理異常值。數(shù)據(jù)清洗一系列的工作完成后就是對數(shù)據(jù)進行整理。采用numpy庫unique函數(shù)去除其中重復(fù)的元素,并按元素由大到小返回一個新的無元素重復(fù)的元組或者列表。一般情況下優(yōu)惠越多,用戶就越可能使用優(yōu)惠券。刪除重復(fù)項在進行排序,最后輸出最小日期和最大日期。defget_discount_rate_feature_potins(pf):print('Discount_rate類型:\n',pf['Discount_rate'].unique())#convertdiscount_ratepf['discount_type']=pf['Discount_rate'].apply(getDiscountType)pf['discount_rate']=pf['Discount_rate'].apply(convertRate)pf['discount_max']=pf['Discount_rate'].apply(getDiscountMax)pf['discount_jian']=pf['Discount_rate'].apply(getDiscountJian)print(pf['discount_type'].unique())print(pf['discount_rate'].unique())print(pf['discount_max'].unique())print(pf['discount_jian'].unique())returnpf3.5數(shù)據(jù)可視化在導(dǎo)入數(shù)據(jù)、清洗數(shù)據(jù)和整理數(shù)據(jù)之后就可以進行數(shù)據(jù)可視化了??梢暬^程是為構(gòu)建模型提供一些想法,也可以幫助識別一些異常值或所需的數(shù)據(jù)轉(zhuǎn)換。在Python中有很多庫都可以做可視化文件,比如matplotlib。matplotlib自身配置了配色方案和默認設(shè)置,matplotlib只是一個底層的工具,繪圖還是要采用Python中的庫,比如pandas和seaborn庫。3.5.1用戶分析根據(jù)2016年1月1日至2016年6月30日用戶消費次數(shù)設(shè)置用戶等級:大于10次為一級用戶,6-9次為二級用戶,2-5次為三級用戶,1次為普通用戶。從圖中可以看出未消費用戶數(shù)量是已消費數(shù)量的約1.5倍。圖3-1用戶等級圖3.5.2優(yōu)惠券使用的總體情況從圖3-2中可以看出很多人(701602)購買商品卻沒有使用優(yōu)惠券,也有很多人(977900)有優(yōu)惠券但卻沒有使用,真正使用優(yōu)惠券購買商品的人(75382)很少!所以優(yōu)惠券的精準投放非常重要。圖3-2優(yōu)惠券使用的總體情況圖3.5.3每月消費統(tǒng)計如圖3-3所示是每月消費統(tǒng)計圖,由圖可知3月份-6月份的銷售量比1、2月份高很多,因此商戶采取的運營策略導(dǎo)致的銷量提高會受季節(jié)影響。圖3-3每月消費統(tǒng)計圖3.5.4優(yōu)惠券的領(lǐng)取數(shù)量和使用如圖3-1所示,是優(yōu)惠券領(lǐng)取的數(shù)量和使用的對比圖。領(lǐng)取優(yōu)惠券日期和使用優(yōu)惠券日期是非常重要的字段,對后面訓(xùn)練數(shù)據(jù)集和驗證數(shù)據(jù)集標簽起到了重要的作用。采用matplotlib包數(shù)據(jù)進行了可視化分析。從可視化結(jié)果發(fā)現(xiàn)優(yōu)惠券的發(fā)放集中在春節(jié)期間的消費的比例并不高,在特定定節(jié)假日購物有所增加,字段選擇也決定當(dāng)天的優(yōu)惠券折扣率是否應(yīng)該提高。圖3-1優(yōu)惠券領(lǐng)取數(shù)量和使用比例圖3.6特征工程特征表示從數(shù)據(jù)中抽取出對結(jié)果預(yù)測有用的信息,特征工程就是對特征的處理,包括數(shù)據(jù)的采集、數(shù)據(jù)預(yù)處理和特征選擇。特征工程把原始數(shù)據(jù)轉(zhuǎn)化為特征,可以更好的表示預(yù)測模型處理的實際問題,也可以提高對未知數(shù)據(jù)預(yù)測的準確性。本研究采用特征構(gòu)造的方法對原始數(shù)據(jù)集的信息構(gòu)造了:用戶特征、商戶特征、用戶商戶特征、優(yōu)惠券特征和其他特征。用戶特征用戶特征可以反映出用戶的基本信息,比如:用戶的購物習(xí)慣、用戶居住地與商戶的距離等信息。用戶特征的具體特征如下表3-1所示。表3-1用戶特征表特征特征用戶消費的商家數(shù)用戶領(lǐng)取優(yōu)惠券的數(shù)目用戶與商戶距離的最小值用戶領(lǐng)券、用券時間間隔的平均值用戶與商戶距離的最大值用戶領(lǐng)券、用券時間間隔的最小值用戶與商戶距離的平均值用戶領(lǐng)券、用券時間間隔的最大值用戶與商戶距離的中值用戶購買商品使用優(yōu)惠券的比例用戶用優(yōu)惠券購買物品的數(shù)目用戶領(lǐng)券、用券時間間隔用戶購買商品總數(shù)用戶使用優(yōu)惠券數(shù)目商戶特征商戶特征可以反映出商戶的綜合實力、客戶量的多少、受歡迎程度、銷售業(yè)績等相關(guān)信息。具體特征如下表3-2所示。表3-2商戶特征表特征特征商戶的歷史銷售總數(shù)商戶與用戶距離的中值商戶使用優(yōu)惠券銷售商品的數(shù)目商戶歷史優(yōu)惠券的使用率商戶歷史發(fā)放優(yōu)惠券總數(shù)商戶賣出商品使用優(yōu)惠券的比例商戶與用戶距離的最小值商戶與用戶距離的最大值商戶與用戶距離的平均值用戶商戶特征表3-3用戶商戶特征表特征特征用戶購買商戶商品的次數(shù)用戶在商戶使用優(yōu)惠券購買商品的比例用戶領(lǐng)取商戶優(yōu)惠券的次數(shù)用戶在商戶購買商品的概率用戶用優(yōu)惠券購買商戶商品的次數(shù)用戶在商戶不使用優(yōu)惠券購買商品的比例用戶普通購買商戶商品的總數(shù)用戶與商戶的距離用戶在商戶使用優(yōu)惠券的使用率優(yōu)惠券特征用戶領(lǐng)取優(yōu)惠券是具體哪天,具體特征如表3-4所示。表3-4優(yōu)惠券特征表特征特征折扣率滿減優(yōu)惠最低消費金額領(lǐng)券時間在周幾滿減優(yōu)惠券的減免金額領(lǐng)券時間在哪個月份是否滿減優(yōu)惠券領(lǐng)券時間和截止時間間隔其他特征表3-5其他特征表特征特征當(dāng)前時間用戶領(lǐng)取優(yōu)惠券的總數(shù)當(dāng)前時段用戶領(lǐng)取特定優(yōu)惠券的數(shù)量用戶當(dāng)天領(lǐng)取優(yōu)惠券的次數(shù)用戶當(dāng)天領(lǐng)取特定優(yōu)惠券的數(shù)量用戶當(dāng)前領(lǐng)券與最早一次領(lǐng)券時間間隔用戶當(dāng)前領(lǐng)券與最后一次領(lǐng)券時間間隔根據(jù)上面六個方面,最后總匯總了58個特征。原始的數(shù)據(jù)不會有缺失的情況,但新增特征就會存在缺失情況,會利用平均值進行填補。特征選擇的目的就是排除無效和O2O優(yōu)惠券使用率影響不大的特征。3.7特征提取3.7.1打折率選取特征第一個想到的必然是打折率。在平時生活中都是一樣,優(yōu)惠的越多用戶就越有可能使用優(yōu)惠券。null表示沒有打折,[0,1]:折扣率,x:y:滿x減y;根據(jù)這3種情況我們可以選取4個特征:打折類型(getDiscountType())、折扣率(convertRate())、滿多少(getDiscountMan())、減多少(getDiscountJian())。defconvertRate(row):ifrow=='null':return1.0elif':'inrow:rows=row.split(':')return1.0-float(rows[1])/float(rows[0])else:returnfloat(row)defgetDiscountMax(row):ifrow=='null':return0elif':'instr(row):rows=row.split(':')returnint(rows[0])else:return0defgetDiscountJian(row):ifrow=='null':return0elif':'inrow:rows=row.split(':')returnint(rows[1])else:return03.7.2距離距離就是用戶與商戶的距離,距離的遠近完全會影響到優(yōu)惠券的使用,所以距離可以作為一個特征。defget_distance_feature_potins(pf):print('Distance類型:',pf['Distance'].unique())pf['distance']=pf['Distance'].apply(distace_type)print(pf['distance'].unique())returnpf3.7.3領(lǐng)劵日期對領(lǐng)券日期而言,周末領(lǐng)取優(yōu)惠券并使用優(yōu)惠券的可能性更大一些,因此可有選取關(guān)于領(lǐng)券日期的特征。這里提取了9個關(guān)于領(lǐng)券日期的特征:1. weekday:{null,1,2,3,4,5,6,7}2. weekday_type:{1,0}(周六和周日為1,其他為0)3. Weekday_1:{1,0,0,0,0,0,0}4. Weekday_2:{0,1,0,0,0,0,0}5. Weekday_3:{0,0,1,0,0,0,0}6. Weekday_4:{0,0,0,1,0,0,0}7. Weekday_5:{0,0,0,0,1,0,0}8. Weekday_6:{0,0,0,0,0,1,0}9. Weekday_7:{0,0,0,0,0,0,1}經(jīng)過上面特征提取總共得到了14個有用的特征,這些特征包含:discount_rate、discount_type、discount_man、discount_jian、distance、weekday、weekday_type、weekday_1、weekday_2、weekday_3、weekday_4、weekday_5、weekday_6、weekday_7。有了這14個特征之后可以使用label函數(shù)對訓(xùn)練集進行標注,這樣就可以清晰地看出沒有領(lǐng)導(dǎo)優(yōu)惠券和領(lǐng)取優(yōu)惠券并在15天內(nèi)使用以及領(lǐng)取優(yōu)惠券沒在15天內(nèi)使用的樣本有多少了。3.8標簽特征提取之后再對對訓(xùn)練樣本進行l(wèi)abe標注,即確定哪些是正樣本(y=1),哪些是負樣本(y=0)。我們要預(yù)測的是用戶在領(lǐng)取優(yōu)惠券之后15之內(nèi)的消費情況??偣灿腥N情況:1.Date_received==‘null’:表示沒有領(lǐng)到優(yōu)惠券,無需考慮,y=-12.(Date_received!=‘null’)&(Date!=‘null’)&(Date-Date_received<=15):表示領(lǐng)取優(yōu)惠券且在15天內(nèi)使用,即正樣本,y=13.(Date_received!=‘null’)&((Date==‘null’)|(Date-Date_received>15)):表示領(lǐng)取優(yōu)惠券未在在15天內(nèi)使用,即負樣本,y=0知道規(guī)則之后就可以定義標簽備注函數(shù)了://確定標簽,哪些是正樣本,哪些是負樣本deflable(row):ifrow['Date_received']=='null':return-1ifrow['Date']!='null':td=pd.to_datetime(row['Date'],format='%Y%m%d')-pd.to_datetime(row['Date_received'],format='%Y%m%d')iftd<=pd.Timedelta(15,'D'):return1return0
模型構(gòu)建與評估4.1建立訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集我們用前面提取的14個特征作為特征,為了保證模型的性能。首先要劃分驗證集做模型驗證,這個劃分方式是按照領(lǐng)券日期劃分。訓(xùn)練集:20160101-20160515,驗證集:20160516-20160615。具體劃分如下所示:pf_true=pf[pf['label']!=-1].copy()train=pf_true[(pf_true['Date_received']<'20160516')].copy()valid=pf_true[(pf_true['Date_received']>='20160516')&(pf_true['Date_received']<='20160615')].copy()4.2構(gòu)建模型模型不管多復(fù)雜最后出來的都是一個函數(shù),然后再根據(jù)函數(shù)的定義函數(shù)的重點是映射關(guān)系。如A到B可以通過各種函數(shù)來映射,那我們的模型是從輸入到輸出的一種映射關(guān)系,在數(shù)學(xué)上映射叫函數(shù),在機器學(xué)習(xí)中叫模型。folder=StratifiedKFold(n_splits=3,shuffle=True)這里我們構(gòu)建模型采用的是SGDClassifier,還是用了Python中的Pipeline管道機制,它可以讓參數(shù)在新數(shù)據(jù)集,比如測試集上重復(fù)使用。管道機制實現(xiàn)了全部步驟的流式化封裝和管理。這里交叉驗證采用了StratifiedKFold,它的用法與Kfold類似。StratifiedKFold是分層采樣,目的是為了確保訓(xùn)練集和測試集中各類別樣本的比例與原始數(shù)據(jù)集中相同。4.3模型訓(xùn)練在開始訓(xùn)練時先只用來用戶的兩個分析特征,滿減折扣率特征。然后拆分為了0-1之間的折扣率discount_rate,并把滿X(discount_man)減Y(discount_jian)和折扣類型(discount_type)等列,再把接收優(yōu)惠券的日期轉(zhuǎn)換為日期類型,把日期枚舉值轉(zhuǎn)為了one-hot類型字段,這樣分析更方便。使用上面的模型對訓(xùn)練集進行訓(xùn)練,這個訓(xùn)練的過程大約需要兩分鐘左右。predictors=original_featuremodel=check_model(train,predictors)4.4驗證驗證就是進行驗證計算,這里是根據(jù)驗證集中每種優(yōu)惠券預(yù)測的結(jié)果計算AUC,然后再計算所有優(yōu)惠券的AUC的平均值。在計算AUC的時候,如果label只有一類,就直接跳過,因為這時AUC是無法進行計算的。y_valid_pred=model.predict_proba(valid[predictors])valid1=valid.copy()valid1['pred_prob']=y_valid_pred[:,1]valid1.head(5)得到概率值pred_prob之后就可以對驗證集計算AUC,可以直接調(diào)用sklearn庫自帶的AUC函數(shù)進行計算,最后通過驗證最終得到AUC結(jié)果是0.53。4.5測試訓(xùn)練完模型之后,就是使用訓(xùn)練好的模型對測試集進行測試,將測試集數(shù)據(jù)轉(zhuǎn)化成對應(yīng)訓(xùn)練模式時所用特征集,通過之前訓(xùn)練模式,得到預(yù)測值,即會去消費的概率。defcheck_test_csv(dftest,model):y_test_pred=model.predict_proba(dftest[original_feature])dftest1=dftest[['User_id','Merchant_id','Coupon_id','Discount_rate','Distance','Date_received']].copy()dftest1['Probability']=y_test_pred[:,1]ifos.path.isfile('result.csv'):os.remove('result.csv')dftest1.to_csv('result.csv')print("end")
研究或成果與社會、環(huán)境、文化、經(jīng)濟、環(huán)保等關(guān)系本文是對基于機器學(xué)習(xí)O2O優(yōu)惠券個性化投放的研究。通過用戶特征、商戶特征、用戶商戶特征、優(yōu)惠券特征和其它特征研究了移動優(yōu)惠券的使用行為。當(dāng)今我國互聯(lián)網(wǎng)技術(shù)飛速發(fā)展,也促使了電子商務(wù)的發(fā)展,對O2O優(yōu)惠券的發(fā)展也有進一步的推進。O2O優(yōu)惠券使用率的分析和預(yù)測給用戶和商家都帶來了好處,它給了商家更強的銷售能力,幫助商家有效的個性化投放優(yōu)惠券;它給消費者帶來了真正的實惠。根據(jù)研究結(jié)果表明:商戶特征和優(yōu)惠券特征有明顯影響優(yōu)惠券的使用,用戶商戶組合特征、用戶特征以及其他特征對優(yōu)惠券的使用有較小影響,商戶特征對優(yōu)惠券使用快慢有明顯的影響,優(yōu)惠券的折扣率跟優(yōu)惠券的使用快慢正相關(guān),滿減優(yōu)惠券的最低消費金額與移動優(yōu)惠券的使用快慢負相關(guān),地理特征對移動優(yōu)惠券使用快慢的影響不明顯。本次項目通過預(yù)測模型預(yù)測出了不錯的效果,總的來說本次研究通過測試。
總結(jié)本次基于機器學(xué)習(xí)的O2O優(yōu)惠券個性化投放到此就接近尾聲了,獨立完成本次畢業(yè)設(shè)計設(shè)計,讓我學(xué)到了不少東西。從最開始的一無所知到現(xiàn)在稍稍略懂中間經(jīng)歷了不少困難。Python這門語言之前雖說有一點了解但是對于機器學(xué)方面是一點都不了解,甚至是第一次聽說。所以難度是很大的,在這個期間不僅需要學(xué)習(xí)機器學(xué)習(xí)方面的知識還需要去了解這個課題到底是需要做什么。在寫程序的過程中遇到很多麻煩,都需要自己一點一點去查找,因為這個看起來不算很復(fù)雜但是里面的知識點太多了,而每一個知識點都需要你自己去弄明白,不然就沒有辦法去進行下一步任務(wù)。寫程序的過程中訓(xùn)練模型是最重要的一個部分,只有把模型訓(xùn)練出來后面才能繼續(xù),在訓(xùn)練模型之前需要提取相應(yīng)的特征,這些特征提取也是很麻煩的,不過通過做可視化之后就容易多了。還好在寒假期間也在慕課上學(xué)習(xí)了一些機器學(xué)習(xí)的知識,看了不少的資料,不然自己也沒有辦法完成這項研究。編寫程序差不多花了一大半的時間,這樣留給我寫論文的時間就很倉促了。剛開始寫論文是無從下手,感覺是個大難題,但當(dāng)你有了框架之后就寫起來就容易多了。在寫論文的過程中發(fā)現(xiàn)寫的時候又會學(xué)到很
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職(小學(xué)教育)小學(xué)教育心理學(xué)階段測試試題及答案
- 2025年高職國際經(jīng)濟與貿(mào)易(國際經(jīng)濟與貿(mào)易教育心理學(xué)案例分析)試題及答案
- 2025年中職(工業(yè)機器人技術(shù))機器人裝配試題及答案
- 2025年中職電氣運營應(yīng)用(應(yīng)用技術(shù))試題及答案
- 2025年大學(xué)本科 體育運營與管理(運營實務(wù))試題及答案
- 2025年中職(動漫與游戲制作)動畫角色設(shè)計試題及答案
- 2025年中職(環(huán)境監(jiān)測技術(shù))水質(zhì)檢測實操試題及答案
- 2025年大學(xué)二年級(醫(yī)療器械與裝備工程)器械檢測階段測試題及答案
- 2025年本科工業(yè)互聯(lián)網(wǎng)工程(工業(yè)互聯(lián)網(wǎng)設(shè)計)試題及答案
- 2025年大學(xué)二年級(人工智能教育)教學(xué)應(yīng)用綜合測試題及答案
- 養(yǎng)老院老人生活設(shè)施管理制度
- (2025年)林業(yè)系統(tǒng)事業(yè)單位招聘考試《林業(yè)知識》真題庫與答案
- 2026年七臺河職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性考試備考題庫有答案解析
- 2026年直播服務(wù)合同
- 掛靠取消協(xié)議書
- 哲學(xué)史重要名詞解析大全
- 輔導(dǎo)員工作的職責(zé)與使命課件
- 新疆交通職業(yè)技術(shù)學(xué)院教師招聘考試歷年真題
- 吊籃租賃安拆分包合同
- (財務(wù)知識)用友T財務(wù)通普版基本操作詳細資料
- GB/T 156-2017標準電壓
評論
0/150
提交評論