(預測貸款使用者是否會逾期)支援向量機和決策樹的模型建立
阿新 • • 發佈:2018-11-24
(預測貸款使用者是否會逾期)支援向量機和決策樹的模型建立
資料是金融資料,我們要做的是預測貸款使用者是否會逾期,表格中,status是標籤:0表示未逾期,1表示逾期。【今天的任務】構建支援向量機和決策樹模型進行預測(在構建部分資料需要進行缺失值處理和資料型別轉換,如果不能處理,可以直接暴力刪除)
明確需要進行處理的資料
- 需要直接刪除的資料
Unnamed: 0 使用者ID
trade_no:不知道是什麼,可以分析下
bank_card_no:卡號
id_name:名字
‘source’ 提示xs 先去掉 - 需要離散化處理的資料(此處不涉及)
- reg_preference_for_trad
- 針對日期資料的處理(轉換成年月日)(此處不涉及)
- first_transaction_time
- latest_query_time
- loans_latest_time
- 缺失值的填充
- 歸一化處理所有資料
資料處理過程
import numpy as np
import pandas as pd
from sklearn.metrics import classification_report
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import f1_score,mean_squared_error
"""
# 邏輯迴歸預測貸款使用者是否會逾期
"""
datanew = pd.read_csv('F:/ziliao/data/data1.csv', encoding='gbk')
"""
1.缺失值處理
"""
datanew=pd.DataFrame(datanew.fillna(0))
# 簡單的缺失值處理
# datanew.replace(to_replace='0.', value=np.nan)
# 丟棄帶有缺失值的資料
# datanew = datanew.dropna(axis=1, how='any')
data_columns = datanew.columns
"""
1.2 對reg_preference_for_trad 的處理 【對映】
nan=0 境外=1 一線=5 二線=2 三線 =3 其他=4
"""
n = set(datanew['reg_preference_for_trad'])
dic = {}
for i, j in enumerate(n):
dic[j] = i
datanew['reg_preference_for_trad'] = datanew['reg_preference_for_trad'].map(dic)
"""
1.3 資料集的切分
"""
X_train, X_test, y_train, y_test = train_test_split(datanew[data_columns[1:90]], datanew[data_columns[44]],test_size=0.3, random_state=666)
X_train.drop(["status","trade_no","bank_card_no","id_0me","source"],axis=1,inplace=True)
X_test.drop(["status","trade_no","bank_card_no","id_0me", "source"],axis=1,inplace=True)
資料的標準歸一化
"""
1.4標準化資料,方差為1,均值為零
"""
standardScaler = StandardScaler()
X_train_fit = standardScaler.fit_transform(X_train)
X_test_fit = standardScaler.transform(X_test)
使用SVM進行預測
from sklearn.svm import LinearSVC
lsvc = LinearSVC()
lsvc.fit(X_train_fit, y_train)
lsvc_predict = lsvc.predict(X_test_fit)
print("linear_svc準確率:", lsvc.score(X_test_fit, y_test))
print("f1_score準確率:",f1_score(y_test, lsvc_predict) ) # f1_score準確率: 0.34146341463414637 SVC結果
print("r2_score準確率:",r2_score(y_test, lsvc_predict)) #
結果:
使用決策樹進行預測
from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier()
dtc.fit(X_train_fit, y_train)
dtc_predict = dtc.predict(X_test_fit)`
print("linear_svc準確率:", dtc.score(X_test_fit, y_test))
print("f1_score準確率:",f1_score(y_test, dtc_predict) )
print("mean_squared_error準確率:",mean_squared_error(y_test, dtc_predict))
結果: