日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

逻辑回归实现客户逾期分析

發布時間:2024/1/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 逻辑回归实现客户逾期分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、【 目標】

構建邏輯回歸模型進行預測用戶是否逾期

二、【 任務分析】

  • 首先,由于數據中存在缺失值,因此需要對缺失值數據進行預處理。
  • 其次,對明顯與模型無關的特征進行刪除
  • 最后,采用邏輯回歸模型進行模型訓練。
  • 三、【 原始數據】

    數據:金融數據
    任務:我們要做的是預測貸款用戶是否會逾期,
    標簽說明:表格中,status是標簽:0表示未逾期,1表示逾期。

    四、【 數據預處理】

    一共4754行,89列(除去首行、首列)

  • 直接刪除,對模型影響不大的數據及特征,比如固定的個人信息
    列:custid、trade_no、bank_card_no、id_name
    行:刪除很多項特征缺失的用戶信息
    缺失特征數據的用戶數據:apply_score等到最后一個特征全為缺失項的用戶數據
  • 特征轉換:特征student_feature列的NA轉為0,2轉為0(2只有2個)
  • 幾個需考慮的因素
    城市:境外0,一線1,二線2,三線3,四線4,NA及其他(共4組數據,刪除)
  • 現階段不進行處理而直接刪除的列:比如 first_transaction_time,latest_query_time,loans_latest_time
  • 五、【代碼實現】

    代碼部分由yezuolin完成

    1、調包、導入數據以及數據替換

    # coding=utf-8"""1. 導包""" import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import f1_score,r2_score"""2. 讀取數據""" dataset = pd.read_csv('./data/data.csv',encoding='gbk')"""3. 數據處理""" # 刪除固定信息列 dataset = dataset.drop(["custid","trade_no","bank_card_no","id_name","first_transaction_time","latest_query_time","loans_latest_time","source"],axis=1) # 對于sstudent_feature列,我們進行NAN轉成0,2轉為0 # 缺失值填充 dataset["student_feature"] = dataset["student_feature"].fillna(0) # 2替換為0 dataset["student_feature"] = dataset["student_feature"].replace([2],[0])# 針對城市列'reg_preference_for_trad',進行數據替換 dataset["reg_preference_for_trad"] = dataset["reg_preference_for_trad"].replace("一線城市", "1") dataset["reg_preference_for_trad"] = dataset["reg_preference_for_trad"].replace("二線城市", "2") dataset["reg_preference_for_trad"] = dataset["reg_preference_for_trad"].replace("三線城市", "3") dataset["reg_preference_for_trad"] = dataset["reg_preference_for_trad"].replace("其他城市", "4") dataset["reg_preference_for_trad"] = dataset["reg_preference_for_trad"].replace("境外", "0")

    2、填充缺失值

    # 填充其他空值 # 使用均值進行填充 # dataset.fillna(dataset.mean(), inplace=True) # 使用眾數進行填充 dataset = dataset.fillna(0) # 使用 0 替換所有 NaN 的值 col = dataset.columns.tolist()[1:]def missing(df, columns):"""使用眾數填充缺失值df[i].mode()[0] 獲取眾數第一個值"""col = columnsfor i in col:df[i].fillna(df[i].mode()[0], inplace=True)df[i] = df[i].astype('float')missing(dataset, col)# 將object類型轉成folat dataset = dataset.convert_objects(convert_numeric=True)

    3、數據劃分

    X = dataset.drop(["status"],axis=1) Y = dataset["status"]# 數據按正常的2、8劃分 X_train, X_test, y_train, y_test = train_test_split(X, Y,test_size=0.2, random_state=666) # not enough values to unpack (expected 4, got 2)from sklearn.preprocessing import minmax_scale # minmax_scale歸一化,縮放到0-1 X_train = minmax_scale(X_train) X_test = minmax_scale(X_test) # Input contains NaN, infinity or a value too large for dtype('float64').

    4、數據歸一化

    from sklearn.preprocessing import minmax_scale # 歸一化,縮放到0-1 X_train = minmax_scale(X_train) X_test = minmax_scale(X_test)

    5、模型訓練

    log_reg = LogisticRegression() log_reg.fit(X_train, y_train) y_predict = log_reg.predict(X_test)

    6、輸出結果

    print("predict:",log_reg.score(X_test, y_test)) print("f1_score:",f1_score(y_test, y_predict)) print("r2_score:",r2_score(y_test, y_predict))

    最后我們得到的結果如下:

    六、【遇到的問題】

    1、對特征工程的分析不夠深入,在特征選擇上還可以更詳細更優化
    2、在用均值填充NAN時,進行歸一化出現了 Input contains NaN, infinity or a value too large for dtype(‘float64’),在使用眾數填充后避免了這個問題。
    3、劃分訓練集和測試集時可以選擇不同的比例和次數重復進行幾次,這樣得到的結果更具有統計意義。

    總結

    以上是生活随笔為你收集整理的逻辑回归实现客户逾期分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。