close

來源丨網絡

作者丨吳達科

這是一份kaggle上的銀行的數據集,研究該數據集可以預測客戶是否認購定期存款y。這裡包含20個特徵。

1. 分析框架2. 數據讀取,數據清洗#導入相關包importnumpyasnpimportpandasaspd#讀取數據data=pd.read_csv('./1bank-additional-full.csv')#查看表的行列數data.shape

輸出:

這裡只有nr.employed這列有丟失數據,查看下:

data['nr.employed'].value_counts()

這裡只有5191.0這個值,沒有其他的,且只有7763條數據,這裡直接將這列當做異常值,直接將這列直接刪除了。

#data.drop('nr.employed',axis=1,inplace=True)3. 探索性數據分析3.1查看各年齡段的人數的分布

這裡可以看出該銀行的主要用戶主要集中在23-60歲這個年齡層,其中29-39這個年齡段的人數相對其他年齡段多。

importmatplotlib.pyplotaspltimportseabornassnsplt.rcParams['font.sans-serif']='SimHei'plt.figure(figsize=(20,8),dpi=256)sns.countplot(x='age',data=data)plt.title("各年齡段的人數")3.2 其他特徵的一些分布plt.figure(figsize=(18,16),dpi=512)plt.subplot(221)sns.countplot(x='contact',data=data)plt.title("contact分布情況")plt.subplot(222)sns.countplot(x='day_of_week',data=data)plt.title("day_of_week分布情況")plt.subplot(223)sns.countplot(x='default',data=data)plt.title("default分布情況")plt.subplot(224)sns.countplot(x='education',data=data)plt.xticks(rotation=70)plt.title("education分布情況")plt.savefig('./1.png')plt.figure(figsize=(18,16),dpi=512)plt.subplot(221)sns.countplot(x='housing',data=data)plt.title("housing分布情況")plt.subplot(222)sns.countplot(x='job',data=data)plt.xticks(rotation=70)plt.title("job分布情況")plt.subplot(223)sns.countplot(x='loan',data=data)plt.title("loan分布情況")plt.subplot(224)sns.countplot(x='marital',data=data)plt.xticks(rotation=70)plt.title("marital分布情況")plt.savefig('./2.png')plt.figure(figsize=(18,8),dpi=512)plt.subplot(221)sns.countplot(x='month',data=data)plt.xticks(rotation=30)plt.subplot(222)sns.countplot(x='poutcome',data=data)plt.xticks(rotation=30)plt.savefig('./3.png')3.3 各特徵的相關性plt.figure(figsize=(10,8),dpi=256)plt.rcParams['axes.unicode_minus']=Falsesns.heatmap(data.corr(),annot=True)plt.savefig('./4.png')4. 特徵規範化4.1 將自變量的特徵值轉換成標籤類型#特徵化數據fromsklearn.preprocessingimportLabelEncoderfeatures=['contact','day_of_week','default','education','housing','job','loan','marital','month','poutcome']le_x=LabelEncoder()forfeatureinfeatures:data[feature]=le_x.fit_transform(data[feature])4.2 將結果y值轉換成0、1defparse_y(x):if(x=='no'):return0else:return1data['y']=data['y'].apply(parse_y)data['y']=data['y'].astype(int)4.3 數據規範化#數據規範化到正態分布的數據#測試數據和訓練數據的分割fromsklearn.preprocessingimportStandardScalerfromsklearn.model_selectionimporttrain_test_splitss=StandardScaler()train_x,test_x,train_y,test_y=train_test_split(data.iloc[:,:-1],data['y'],test_size=0.3)train_x=ss.fit_transform(train_x)test_x=ss.transform(test_x)5. 模型訓練5.1 AdaBoost分類器fromsklearn.ensembleimportAdaBoostClassifierfromsklearn.metricsimportaccuracy_scoreada=AdaBoostClassifier()ada.fit(train_x,train_y)predict_y=ada.predict(test_x)print("準確率:",accuracy_score(test_y,predict_y))5.2 SVC分類器fromsklearn.svmimportSVCsvc=SVC()svc.fit(train_x,train_y)predict_y=svc.predict(test_x)print("準確率:",accuracy_score(test_y,predict_y))5.3 K鄰近值分類器fromsklearn.neighborsimportKNeighborsClassifierknn=KNeighborsClassifier()knn.fit(train_x,train_y)predict_y=knn.predict(test_x)print("準確率:",accuracy_score(test_y,predict_y))5.4 決策樹分類器fromsklearn.treeimportDecisionTreeClassifierdtc=DecisionTreeClassifier()dtc.fit(train_x,train_y)predict_y=dtc.predict(test_x)print("準確率:",accuracy_score(test_y,predict_y))6 模型評價6.1 AdaBoost分類器fromsklearn.metricsimportroc_curvefromsklearn.metricsimportaucplt.figure(figsize=(8,6))fpr1,tpr1,threshoulds1=roc_curve(test_y,ada.predict(test_x))plt.stackplot(fpr1,tpr1,color='steelblue',alpha=0.5,edgecolor='black')plt.plot(fpr1,tpr1,linewidth=2,color='black')plt.plot([0,1],[0,1],ls='-',color='red')plt.text(0.5,0.4,auc(fpr1,tpr1))plt.title('AdaBoost分類器的ROC曲線')6.2 SVC分類器plt.figure(figsize=(8,6))fpr2,tpr2,threshoulds2=roc_curve(test_y,svc.predict(test_x))plt.stackplot(fpr2,tpr2,alpha=0.5)plt.plot(fpr2,tpr2,linewidth=2,color='black')plt.plot([0,1],[0,1],ls='-',color='red')plt.text(0.5,0.4,auc(fpr2,tpr2))plt.title('SVD的ROC曲線')6.3 K鄰近值分類器plt.figure(figsize=(8,6))fpr3,tpr3,threshoulds3=roc_curve(test_y,knn.predict(test_x))plt.stackplot(fpr3,tpr3,alpha=0.5)plt.plot(fpr3,tpr3,linewidth=2,color='black')plt.plot([0,1],[0,1],ls='-',color='red')plt.text(0.5,0.4,auc(fpr3,tpr3))plt.title('K鄰近值的ROC曲線')6.4 決策樹分類器plt.figure(figsize=(8,6))fpr4,tpr4,threshoulds4=roc_curve(test_y,dtc.predict(test_x))plt.stackplot(fpr4,tpr4,alpha=0.5)plt.plot(fpr4,tpr4,linewidth=2,color='black')plt.plot([0,1],[0,1],ls='-',color='red')plt.text(0.5,0.4,auc(fpr4,tpr4))plt.title('決策樹的ROC曲線')
來源:https://blog.csdn.net/qq_33333002/article/details/106280462


點這裡👇關注我,記得標星哦~


推薦閱讀

CDA課程諮詢

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()