1.定義問題:
在銀行業發展的上百年的歷史中,它推動了整個經濟社會的不斷發展,無論是對于社會發展還是自身成長都取得了很大的成就。但是用戶出現還貸違約的風險是銀行運營中資金的最大風險。過去銀行的貸款可以通過調查借貸人的明顯資產總數,如房產、車、企業等,然后按比例折算給借貸人放款。如今借貸需求大量出現,銀行如何降低借錢的風險。我們可以使用邏輯回歸算法,從大量的歷史個人數據,找出有那些關鍵特征數據可能影響用戶違約。
2.準備數據:
我們得到的原始數據,可能是這樣的。
經過對原始數據進行分析,發現教育和地址都是中文數值,這樣的數值不能適應邏輯,回歸算法無法預測是否與教育和地址有關。我們需要對這兩類數據進行特殊的編碼,如:學歷由低到高采用阿拉伯數值代替教育背景。地址可以由全國各個省市的人均可支配收入進行由高到低的排列。(這樣的編碼方式可能不是最優,但是在同一次分析中相同屬性必須采用同一種編碼規則。將文本數據規范化是預處理中最需要做的)
預處理之后的數據如下:
用于計算的數據全部為數值類型。這樣的數據就可以套用邏輯回歸算法,找出違約用戶可能與那些屬性緊密相關。
3.分析方法:
邏輯回歸算法不同于線性回歸算法,后者一般是找出兩者數據可能存在的線性關系y=ax+b并且盡量精確a和b的值。邏輯回歸算法數據不是線性相關的,我們可以使用事件發生的幾率來表示事件發生與不發生的比值,假設發生的概率是p(取值在0~1范圍),那么發生的幾率是p/(1-p),取值0~正無窮大,幾率越大,發生的可能性越大。將其設為數學模型就是logit函數:
那么logit函數圖如下:
對于客戶違約預測,通過過往歷史數據,找出用戶是否違約關系很緊密的屬性。假設用戶違約,同時他們的銀行負載幾率都是特別高,就可以發現用戶是否會違約與銀行負載幾率關系緊密。
代碼如下:
# coding=utf-8
#邏輯回歸,自動建模importpandasaspd
#初始化參數filename ='data/bankloan.xls'
data = pd.read_excel(filename)
x = data.iloc[:,:8].as_matrix()#8個屬性y = data.iloc[:,8].as_matrix()#第九列結果標簽
#導入邏輯回歸模型fromsklearn.linear_modelimportLogisticRegressionasLR
fromsklearn.linear_modelimportRandomizedLogisticRegressionasRLR
#建立隨機邏輯回歸模型,篩選變量rlr = RLR()
#訓練模型rlr.fit(x,y)
#獲取特征篩選結果,也可以通過.scores_方法獲取各個特征的分數rlr.get_support()
print(u'通過隨機邏輯回歸模型篩選特征結束。')
print(u'有效特征為:%s'%','.join(data.columns[rlr.get_support()]))
#篩選好特征x =data[data.columns[rlr.get_support()]].as_matrix()
#建立邏輯回歸模型lr = LR()
#用篩選后的特征數據來訓練模型lr.fit(x,y)
print(u'邏輯回歸模型訓練結束。')
#給出模型的平均正確率,本例為81.4%print(u'模型的平均正確率為:%s'%
lr.score(x,y))
4.結論:
該段代碼輸出:用戶是否違約與工齡、地址、負債率、信用卡負債關聯特別高。并且根據歷史數據計算出關聯性的可信度81.4%。
通過這個模型的計算與分析,銀行在對新借貸用戶是否放款的問題上,可以對用戶的工作工齡,用戶居住地址,用戶負載率和過往信用卡負債情況進行深入調查,然后決定放貸情況。