
來源丨網絡
作者丨吳達科
這是一份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點這裡👇關注我,記得標星哦~






