貸款逾期--邏輯迴歸(1)
阿新 • • 發佈:2018-11-15
主要根據資料集來建立一個邏輯迴歸模型
資料集來源https://pan.baidu.com/s/1izJZerx0lfvQX6YRKYWv-g
主要問題是根據資料建立一個邏輯迴歸模型來預測貸款是否逾期。
下面是對其進行編寫的程式碼:
主要分為五步:
1.資料分析
- 對缺失值進行處理
- 對包含中文資料進行對映
- 對兩個時間的不確定進行刪除
2.劃分訓練集和驗證集,驗證集比例為test_size
3. 分標籤和 訓練資料
4.模型訓練與模型預測
5.模型評分
程式碼是黑桃即胡聯粵所寫
import pickle import pandas as pd #資料分析 from pandas import Series,DataFrame from sklearn.model_selection import train_test_split import time from sklearn.linear_model import LogisticRegression from datetime import datetime from sklearn.metrics import f1_score print("開始......") t_start = time.time() path = "E:/moxingxuexi/Task1/data.csv" """===================================================================================================================== 1 讀取資料 """ print("資料預處理") data = pd.read_csv(path ,encoding='gb18030',engine='python') """ 1.1 缺失值用100填充 """ data=DataFrame(data.fillna(100)) """ 1.2 對reg_preference_for_trad 的處理 【對映】 nan=0 境外=1 一線=5 二線=2 三線 =3 其他=4 """ n=set(data['reg_preference_for_trad']) dic={} for i,j in enumerate(n): dic[j]=i data['reg_preference_for_trad'] = data['reg_preference_for_trad'].map(dic) """ 1.2 對source 的處理 【對映】 """ n=set(data['source']) dic={} for i,j in enumerate(n): dic[j]=i data['source'] = data['source'].map(dic) """ 1.3 對bank_card_no 的處理 【對映】 """ n=set(data['bank_card_no']) dic={} for i,j in enumerate(n): dic[j]=i data['bank_card_no'] = data['bank_card_no'].map(dic) """ 1.2 對 id_name的處理 【對映】 """ n=set(data['id_name']) dic={} for i,j in enumerate(n): dic[j]=i data['id_name'] = data['id_name'].map(dic) """ 1.2 對 time 的處理 【刪除】 """ data.drop(["latest_query_time"],axis=1,inplace=True) data.drop(["loans_latest_time"],axis=1,inplace=True) status = data.status # """===================================================================================================================== # 4 time時間歸一化 小時 # """ # data['time'] = pd.to_datetime(data['time']) # time_now = data['time'].apply(lambda x:int((x-datetime(2018,11,14,0,0,0)).seconds/3600)) # data['time']= time_now """===================================================================================================================== 2 劃分訓練集和驗證集,驗證集比例為test_size """ print("劃分訓練集和驗證集,驗證集比例為test_size") train, test = train_test_split(data, test_size=0.2, random_state=666) """===================================================================================================================== 3 分標籤和 訓練資料 """ y_train= train.status train.drop(["status"],axis=1,inplace=True) y_test= test.status test.drop(["status"],axis=1,inplace=True) """===================================================================================================================== 4 模型訓練 """ print("模型訓練") lr = LogisticRegression(C=120,dual=True) lr.fit(train,y_train) """===================================================================================================================== 4 模型預測 """ y_test_pre = lr.predict(test) """===================================================================================================================== 5 模型評分 """ score_vali = f1_score(y_test, y_test_pre, average='macro') print("驗證集分數:{}".format(score_vali))
遇到的問題
1.encoding='gb18030',為什麼改為utf-8不可以?
2.對"latest_query_time"與"loans_latest_time"這兩列怎麼處理?