1. 程式人生 > >貸款逾期--邏輯迴歸(1)

貸款逾期--邏輯迴歸(1)

主要根據資料集來建立一個邏輯迴歸模型

資料集來源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"這兩列怎麼處理?