《python數(shù)據(jù)分析與應(yīng)用》 課件 第15章 金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析_第1頁
《python數(shù)據(jù)分析與應(yīng)用》 課件 第15章 金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析_第2頁
《python數(shù)據(jù)分析與應(yīng)用》 課件 第15章 金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析_第3頁
《python數(shù)據(jù)分析與應(yīng)用》 課件 第15章 金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析_第4頁
《python數(shù)據(jù)分析與應(yīng)用》 課件 第15章 金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第15章金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析Python數(shù)據(jù)分析與應(yīng)用1機(jī)器學(xué)習(xí)CONTENTS15.1知識準(zhǔn)備15.2任務(wù)介紹15.3代碼演示15.4代碼補(bǔ)全和知識拓展目錄15.5實(shí)訓(xùn)任務(wù)2知識準(zhǔn)備13基于金融預(yù)測的比賽在Kaggle上較為常見:分別是JPX的東京證券交易所預(yù)測,Ubiquant的市場預(yù)測以及G-Research的加密預(yù)測。Python是競賽獲勝者的首選語言,而成功參賽者的工具選擇往往是:Python、Pydata、Pytorch和梯度提高的決策樹。深度學(xué)習(xí)仍未完全取代梯度增強(qiáng)的決策樹。入門機(jī)器學(xué)習(xí)和深度學(xué)習(xí)Kaggle(/)平臺成立于2010年,是一個進(jìn)行數(shù)據(jù)發(fā)掘和預(yù)測競賽的在線競賽平臺。企業(yè)或者研究者可以在平臺上發(fā)布有獎競賽項(xiàng)目。即通過將競賽數(shù)據(jù)集、問題描述、期望的解決結(jié)果和評價指標(biāo)發(fā)布到Kaggle平臺上,以競賽的形式向廣大的數(shù)據(jù)專家和愛好者征集解決方案,類似于KDD-CUP(國際知識發(fā)現(xiàn)和數(shù)據(jù)挖掘競賽)。15.1.1Kaggle數(shù)據(jù)建模大賽阿里云平臺素以舉辦“國際化”、“高端化”、“智能化”的算法比賽在行業(yè)著稱,自2014年推出以來,已相繼有98個國家、30萬開發(fā)者參與,成為一個電商、金融、物流、電力、工業(yè)制造、醫(yī)療等領(lǐng)域創(chuàng)新方案的新發(fā)源地。“阿里云天池”大賽鏈接業(yè)界最新的技術(shù),提供行業(yè)真實(shí)一手賽題和數(shù)據(jù),非常值得學(xué)界關(guān)注15.1.2中國的競賽平臺:阿里云天池大賽知識準(zhǔn)備任務(wù)介紹25以電話營銷為例,銀行營銷經(jīng)理經(jīng)常需要撥打電話給潛在客戶推薦銀行的各類產(chǎn)品,但是也常常遇到多數(shù)接到電話的客戶對所推銷的產(chǎn)品并不感興趣,往往不接聽電話或者即便接聽之后也很快在幾秒鐘之后就掛斷了電話。為了提升營銷的效率,實(shí)現(xiàn)精準(zhǔn)營銷,需要提升銀行經(jīng)理撥打電話的接聽率,同時也可以節(jié)省撥打無謂的電話浪費(fèi)的人力成本。任務(wù)介紹葡萄牙銀行采用機(jī)器學(xué)習(xí)方法優(yōu)化了電話營銷的流程,具體的做法是在撥打電話之前,首先從4萬多潛在客戶中挑選出具有極大概率會接聽電話的客戶,營銷經(jīng)理只給這些機(jī)器選出的接聽成功率高的客戶撥打電話開展?fàn)I銷活動,而不是像傳統(tǒng)營銷一樣,不進(jìn)行任何分析直接給4萬多客戶逐一撥打電話,可以極大提升營銷效率、獲得較優(yōu)的營銷效果。本次任務(wù)的目的就是要建立一個客戶是否接受存款產(chǎn)品的模型,而這個模型的建立是通過機(jī)器學(xué)習(xí)的方式,使用已有的數(shù)據(jù)對模型進(jìn)行訓(xùn)練而完成的。簡單而言就是用數(shù)據(jù)訓(xùn)練模型,然后獲得一個有預(yù)測能力的模型。本次訓(xùn)練模型將使用的數(shù)據(jù)集來自葡萄牙銀行機(jī)構(gòu)的(電話)直銷活動的真實(shí)數(shù)據(jù),經(jīng)過脫敏之后可以被公開使用。本次電話直銷活動的數(shù)據(jù)分析目標(biāo)是對4萬多客戶進(jìn)行分類,目的是預(yù)測客戶是否會接聽電話之后認(rèn)購定期存款(設(shè)定目標(biāo)變量為y,即y=1表示客戶會認(rèn)購銀行的定期存款,y=0則客戶不會認(rèn)購)。該數(shù)據(jù)集名稱為“bankadditionalfull.csv”,它由41188條數(shù)據(jù)組成,其中含有20個自變量。銀行客戶數(shù)據(jù)20個自變量(其中10個是數(shù)字特征,10個是分類特征)代碼演示372312代碼演示一般在建模之前,通常需要對數(shù)據(jù)本身進(jìn)行一些了解、考察和分析,這被稱為EDA(ExploratoryDataAnalysis)#=========================================#1.ExploratoryDataAnalysis(探索性數(shù)據(jù)分析)#=========================================plt.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文標(biāo)簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負(fù)號plt.figure(figsize=(6,4))Y=data["y"]total=len(Y)*1.ax=sns.countplot(x="y",data=data)forpinax.patches:ax.annotate('{:.1f}%'.format(100*p.get_height()/total),(p.get_x()+0.1,p.get_height()+5))#put11ticks(therefore10steps),from0tothetotalnumberofrowsinthedataframeax.yaxis.set_ticks(np.linspace(0,total,11))#adjusttheticklabeltothedesiredformat,withoutchangingthepositionoftheticks.ax.set_yticklabels(map('{:.1f}%'.format,100*ax.yaxis.get_majorticklocs()/total))ax.set_xticklabels(ax.get_xticklabels(),rotation=40,ha="right")ax.legend(labels=("no不接受","yes接受營銷"),shadow=True,fontsize='large')ax.set_title("是否接受電話營銷")ax.set_xlabel('接受營銷yesorno')ax.set_ylabel('人數(shù)占比(總?cè)藬?shù)約4萬)')plt.show()2312代碼演示一般在建模之前,通常需要對數(shù)據(jù)本身進(jìn)行一些了解、考察和分析,這被稱為EDA(ExploratoryDataAnalysis)#=========================================#2.UnivariateAnalysis(單變量分析)#=========================================defcountplot(label,dataset):plt.figure(figsize=(6,4))Y=data[label]total=len(Y)*1.ax=sns.countplot(x=label,data=dataset)forpinax.patches:ax.annotate('{:.1f}%'.format(100*p.get_height()/total),(p.get_x()+0.1,p.get_height()+5))#put11ticks(therefore10steps),from0tothetotalnumberofrowsinthedataframeax.yaxis.set_ticks(np.linspace(0,total,11))#adjusttheticklabeltothedesiredformat,withoutchangingthepositionoftheticks.ax.set_yticklabels(map('{:.1f}%'.format,100*ax.yaxis.get_majorticklocs()/total))ax.set_xticklabels(ax.get_xticklabels(),rotation=40,ha="right")#ax.legend(labels=["no","yes"])plt.show()defcountplot_withY(label,dataset):plt.figure(figsize=(8,6))Y=data[label]total=len(Y)*1.ax=sns.countplot(x=label,data=dataset,hue="y")forpinax.patches:ax.annotate('{:.1f}%'.format(100*p.get_height()/total),(p.get_x()+0.1,p.get_height()+5))#put11ticks(therefore10steps),from0tothetotalnumberofrowsinthedataframeax.yaxis.set_ticks(np.linspace(0,total,11))#adjusttheticklabeltothedesiredformat,withoutchangingthepositionoftheticks.ax.set_yticklabels(map('{:.1f}%'.format,100*ax.yaxis.get_majorticklocs()/total))ax.set_xticklabels(ax.get_xticklabels(),rotation=40,ha="right")#ax.legend(labels=["no","yes"])plt.show()#Feature:job(Category)countplot("job",data)countplot_withY("job",data)代碼補(bǔ)全和知識拓展410231215.4.1代碼補(bǔ)全請繼續(xù)使用單變量方法分析其他變量,比如婚姻狀況、信用違約default、住房貸款等。請嘗試編寫代碼自行分析。分析后得到的圖形如圖15-5、圖15-6所示。圖15-5人群中不同婚姻狀況的占比圖15-6不同婚姻狀況的人群接受定期存款產(chǎn)品的百分比231215.4.2知識拓展機(jī)器學(xué)習(xí)數(shù)據(jù)集的劃分。對于構(gòu)建模型的數(shù)據(jù),一般會將其分為三個部分。第一是訓(xùn)練數(shù)據(jù)(traindata),它被用于訓(xùn)練模型。第二是交叉驗(yàn)證數(shù)據(jù)(crossvalidationdata,又被稱為CVdata),它是被用來調(diào)整模型參數(shù)的。第三是測試數(shù)據(jù)(testdata),它被用來測試、比較和評價模型的。有一個比喻可以幫助理解這個概念:訓(xùn)練集相當(dāng)于學(xué)生的課本,學(xué)生根據(jù)課本里的內(nèi)容來掌握知識。驗(yàn)證集相當(dāng)于作業(yè),通過作業(yè)可以知道不同學(xué)生學(xué)習(xí)情況、進(jìn)步的速度快慢。而測試集相當(dāng)于考試,考的題基本是平常都沒有見過的,主要考察學(xué)生舉一反三的能力。這個比喻中“學(xué)生”就是相當(dāng)于所要構(gòu)建的“模型”。傳統(tǒng)上,一般三者切分的比例是:6:2:2,但驗(yàn)證集CV并不是必需的,但測試集test是必需的。之所以使用測試集來幫助建立模型是因?yàn)椋?)訓(xùn)練集train直接參與了模型調(diào)參的過程,顯然不能用來反映模型真實(shí)的能力(防止死記硬背課本的學(xué)生擁有最好的成績,即防止過擬合)。2)驗(yàn)證集參與了人工調(diào)參(超參數(shù)hyperparameters)的過程,也不能用來最終評判一個模型(刷題庫的學(xué)生不能算是學(xué)習(xí)好的學(xué)生)。3)所以要通過最終的考試(測試集)來考察一個學(xué)生(模型)真正的能力(期末考試)。實(shí)訓(xùn)任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析51315.5實(shí)訓(xùn)任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析fromxgboostimportXGBClassifierfromsklearn.model_selectionimportRandomizedSearchCVfromsklearn.calibrationimportCalibratedClassifierCVfromsklearn.metricsimportroc_auc_score#Loadingthedatasetdata=pd.read_csv("./bank-additional-full.csv",sep=";")()#DealingwithMissingdata#Fromtheabovebasicinfoofeachfeature,#weknowthattherearenomissingvaluesinthisdataset.#Dealingwithduplicatedatadata_dup=data[data.duplicated(keep="last")]print(data_dup)print(data_dup.shape)#Sowehave12rowswhichareduplicates.#Wewilldroptheseduplicaterowsbeforeproceedingfurther.data=data.drop_duplicates()print(data.shape)#Separateinpedendentandtargetvariablesdata_x=data.iloc[:,:-1]print("ShapeofX:",data_x.shape)data_y=data["y"]print("ShapeofY:",data_y.shape)數(shù)據(jù)預(yù)處理15.5實(shí)訓(xùn)任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析#TrainTestsplitfromsklearn.model_selectionimporttrain_test_splitX_rest,X_test,y_rest,y_test=train_test_split(data_x,data_y,test_size=0.2)X_train,X_cv,y_train,y_cv=train_test_split(X_rest,y_rest,test_size=0.16)print("XTrain:",X_train.shape)print("XCV:",X_cv.shape)print("XTest:",X_test.shape)print("YTrain:",y_train.shape)print("YCV:",y_cv.shape)print("YTest:",y_test.shape)#Replace"no"with0and"yes"with1y_train.replace({"no":0,"yes":1},inplace=True)y_cv.replace({"no":0,"yes":1},inplace=True)y_test.replace({"no":0,"yes":1},inplace=True)#至此數(shù)據(jù)處理已經(jīng)完成#之后是建模部分,作為選學(xué)內(nèi)容拆分?jǐn)?shù)據(jù)集15.5實(shí)訓(xùn)任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析####Model1:LogisticRegression邏輯回歸#引入邏輯回歸的包fromsklearn.linear_modelimportLogisticRegressionLR=LogisticRegression()#建立模型LR.fit(X_train,y_train)#訓(xùn)練模型predictions=LR.predict(X_test)#那訓(xùn)練好的模型在測試組上預(yù)測#顯示模型預(yù)測指標(biāo)fromsklearn.metricsimportprecision_recall_fscore_support,accuracy_score,confusion_matrixprint("*****LogisbticRegressionPredictionAnalysis*****")print("AccuracyonTrainingSet:{:0.4f}".format(accuracy_score(y_test,predictions)))prfs=precision_recall_fscore_support(y_test,predictions)print("Precision:{:0.4f}".format(prfs[0][1]))print("Recall:{:0.4f}".format(prfs[1][1]))print("F1Score:{:0.4f}".format(prfs[2][1]))cf=confusion_matrix(y_test,predictions)sns.heatmap(cf,annot=True,fmt='g')plt.title("混淆矩陣(ConfusionMatrix)")plt.show()延伸高級任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)建模邏輯回歸模型15.5實(shí)訓(xùn)任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析####Model2:DecisionTree決策樹#引入決策樹的包fromsklearnimporttreefromsklearn.model_selectionimportGridSearchCVparam_grid={'max_depth':[3,4,5,6]}Tree=DecisionTreeClassifier(criterion="entropy")#建立模型(這里可以調(diào)整超參數(shù)eg.max_depth)grid_Tree=GridSearchCV(Tree,param_grid,cv=5)#調(diào)參grid_Tree.fit(X_train,y_train)#訓(xùn)練模型predictions=grid_Tree.predict(X_test)#那訓(xùn)練好的模型在測試組上預(yù)測#決策樹可視化fig=plt.figure(figsize=(25,20))_=tree.plot_tree(grid_Tree.best_estimator_,feature_names=X_train.columns,filled=True)#顯示模型預(yù)測指標(biāo)fromsklearn.metricsimportprecision_recall_fscore_support,accuracy_score,confusion_matrixprint("*****LogisbticRegressionPredictionAnalysis*****")print("AccuracyonTrainingSet:{:0.4f}".format(accuracy_score(y_test,predictions)))延伸高級任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)建模決策樹模型15.5實(shí)訓(xùn)任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析prfs=precision_recall_fscore_support(y_test,predictions)print("Precision:{:0.4f}".format(prfs[0][1]))print("Recall:{:0.4f}".format(prfs[1][1]))print("F1Score:{:0.4f}".format(prfs[2][1]))cf=confusion_matrix(y_test,predictions)sns.heatmap(cf,annot=True,fmt='g')plt.title("混淆矩陣(ConfusionMatrix)")plt.show()##繪制每個變量在模型中的權(quán)重(feature_importance)Tree=grid_Tree.best_estimator_feature_scores=pd.DataFrame({'features':X_train.columns,'importance':Tree.feature_importances_})#取出每個變量在這個模型中的權(quán)重feature_scores=feature_scores[feature_scores['importance']!=0]#移除掉權(quán)重為0的變量##畫圖fig=plt.figure(figsize=(10,10))ax=sns.barplot(x='importance',y='features',data=feature_scores,order=feature_scores.sort_values('importance',ascending=False).features)ax.set(title="參數(shù)特征的重要性排序(featureimportancescores)")plt.show()延伸高級任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)建模決策樹模型15.5實(shí)訓(xùn)任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析#XGBoostwithRandomizedSearchCVhyperparametertuningX_train,X_test,y_train,y_test=train_test_split(data_x,data_y,test_size=0.2)print("XTrain:",X_train.shape)print("XTest:",X_test.shape)print("YTrain:",y_train.shape)print("YTest:",y_test.shape)y_train.replace({"no":0,"yes":1},inplace=True)y_test.replace({"no":0,"yes":1},inplace=True)#Resetindexsothatpd.concatworksproperlyinResponseEncoderfunctionX_train=X_train.reset_index().drop("index",axis=1)X_test=X_test.reset_index().drop("index",axis=1)X_cv=X_cv.reset_index().drop("index",axis=1)X_train=ResponseEncoder(categorical_cols,X_train,y_train)print("Shapeofthetraindatasetafterencoding:",X_train.shape)X_test=ResponseEncoder(categorical_cols,X_test,y_test)print("Shapeofthetestdatasetafterencoding:",X_test.shape)#RemovedurationfeatureX_train=X_train.drop("duration",axis=1)X_test=X_test.drop("duration",axis=1)延伸高級任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)建模XGBoost模型15.5實(shí)訓(xùn)任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析#tree_method:①'auto':使用啟發(fā)式方法選擇最快的方法,速度很慢;#②'exact':精確貪婪算法,枚舉所有候選項(xiàng);#③'approx':使用分位數(shù)草圖和梯度直方圖的近似貪婪算法;#④'hist':快速直方圖優(yōu)化近似貪心算法。它使用了一些性能改進(jìn),例如垃圾箱緩存。#⑤'gpu_exact':精確算法的GPU實(shí)現(xiàn)。⑥'gpu_hist':hist算法的GPU實(shí)現(xiàn)。x_cfl=XGBClassifier(tree_method='hist',max_bin=16)#沒有設(shè)置gpu,去掉tree_method='gpu_hist'prams={'learning_rate':[0.01,0.03,0.05,0.1,0.15,0.2],'n_estimators':[100,200,500,1000,2000],'max_depth':[3,5,10],'colsample_bytree':[0.1,0.3,0.5,1],'subsample':[0.1,0.3,0.5,1]}random_cfl=RandomizedSearchCV(x_cfl,param_distributions=prams,error_score='raise',verbose=10,n_iter=20,cv=5,scoring='roc_auc')random_cfl.fit(X_train,y_train)print(random_cfl.best_params_)#準(zhǔn)備好變量繪制x_cfl,繪制feature_importance用到x_cfl.get_booster().get_scorex_cfl=XGBClassifier(n_estimators=2000,max_depth=3,learning_rate=0.01,\colsample_bytree=0.5,subsample=1,tree_method='hist',max_bin=16)#沒有設(shè)置gpu,去掉tree_method='gpu_hist'延伸高級任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)建模XGBoost模型15.5實(shí)訓(xùn)任務(wù):金融機(jī)構(gòu)電話營銷數(shù)據(jù)分析x_cfl.fit(X_train,y_train,verbose=True)sig_clf=CalibratedClassifierCV(x_cfl,method="sigmoid")sig_clf.fit(X_train,y_train)predict_y=sig_clf.predict_proba(X_train)print("Forvaluesofbestalpha=2000ThetrainAUCis:",roc_auc_score(y_train,predict_y[:,1]))predict_y=sig_clf.predict_proba(X_test)print("Forvaluesofbestalpha=2000ThetestAUCis:",roc_auc_score(y_test,predict_y[:,1]))#繪制feature_importanceplt.rcdefaults()feature_importance=x_cfl.get_booster().get_score(importance_type='gain')objects=feature_importance.keys()

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論