【python】銀行客戶流失預測預處理部分,獨熱編碼·標簽編碼·數據離散化處理·數據篩選·數據分割

數據預處理

通過網盤分享的文件:銀行流失預測數據和代碼
鏈接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwd=pfcs 提取碼: pfcs

非數值特征處理
  • 目的:將非數值特征轉換為數值型,以便模型能夠處理。
  • 方法
    • 地理位置:可以使用獨熱編碼(One-Hot Encoding)或標簽編碼(Label Encoding)將不同國家/地區轉換為數值。
    • 性別:可以使用標簽編碼,將“男”和“女”分別編碼為0和1。
  • 結果文件:保存為Churn-Modelling-newT.csv
數據離散化處理
  • 目的:將連續變量轉換為離散變量,簡化模型復雜度,提高模型的可解釋性。
  • 方法
    • 統計分析:對連續數據進行描述性統計分析,了解數據的分布情況。
    • 離散化方法
      • 等寬離散化:將數據分為等寬的區間。
      • 等頻離散化:將數據分為等頻的區間。
      • 基于聚類的離散化:使用聚類算法確定離散化的區間。
  • 結果文件:保存為Churn-Modelling-new-tree.csv
數據篩選
  • 目的:去除與模型訓練無關的特征列,保留有意義的數據,解決數據不均衡問題。
  • 方法
    • 特征篩選:舍去如行號、用戶編號、用戶姓名等無關特征。
    • 數據平衡
      • 過采樣:增加少數類別的樣本數量。
      • 欠采樣:減少多數類別的樣本數量。
  • 結果文件:保存為final.csv
數據分割
  • 目的:將數據集分為訓練集和測試集,用于模型訓練和評估。
  • 方法:按照4:1的比例分割數據集。
  • 結果文件
    • 訓練集:Churn-Modelling-train.csv
    • 測試集:Churn-Modelling-test.csv
數據集預覽

數據總覽

數據特征列描述

RowNumber:行號
CustomerID:用戶編號
Surname:用戶姓名
CreditScore:信用分數
Geography:用戶所在國家/地區
Gender:用戶性別
Age:年齡
Tenure:當了本銀行多少年用戶
Balance:存貸款情況
NumOfProducts:使用產品數量
HasCrCard:是否有本銀行信用卡
IsActiveMember:是否活躍用戶
EstimatedSalary:估計收入
Exited:是否已流失,作為標簽數據

代碼部分

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, KBinsDiscretizer
# 過采樣與欠采樣解決數據不均衡問題
from imblearn.over_sampling import RandomOverSampler
from imblearn.under_sampling import RandomUnderSampler# 讀取數據
df = pd.read_csv('Churn-Modelling.csv')# a) 非數值特征處理
# 地理位置 - 獨熱編碼
geography_dummies = pd.get_dummies(df['Geography'], prefix='Geography')
df = pd.concat([df, geography_dummies], axis=1)
df.drop('Geography', axis=1, inplace=True)# 性別 - 標簽編碼
label_encoder = LabelEncoder()
df['Gender'] = label_encoder.fit_transform(df['Gender'])# 保存處理后的文件
df.to_csv('Churn-Modelling-newT.csv', index=False)# b) 數據離散化處理
# 信用分數、年齡、存貸款情況、估計收入 - 等寬離散化
discretizer = KBinsDiscretizer(n_bins=5, encode='ordinal', strategy='uniform')
columns_to_discretize = ['CreditScore', 'Age', 'Balance', 'EstimatedSalary']
df[columns_to_discretize] = discretizer.fit_transform(df[columns_to_discretize])# 保存處理后的文件
df.to_csv('Churn-Modelling-new-tree.csv', index=False)# c) 數據篩選
# 去除無關特征列
df.drop(['RowNumber', 'Customerid', 'Surname'], axis=1, inplace=True)X = df.drop('Exited', axis=1)
y = df['Exited']# 過采樣
over_sampler = RandomOverSampler(sampling_strategy=0.5)
X_over, y_over = over_sampler.fit_resample(X, y)# 欠采樣
under_sampler = RandomUnderSampler(sampling_strategy=0.8)
X_resampled, y_resampled = under_sampler.fit_resample(X_over, y_over)# 保存篩選后的文件
final_df = pd.concat([X_resampled, y_resampled], axis=1)
final_df.to_csv('final.csv', index=False)# d) 數據分割
X_train, X_test, y_train, y_test = train_test_split(X_resampled, y_resampled, test_size=0.2, random_state=42)train_df = pd.concat([X_train, y_train], axis=1)
test_df = pd.concat([X_test, y_test], axis=1)train_df.to_csv('Churn-Modelling-train.csv', index=False)
test_df.to_csv('Churn-Modelling-test.csv', index=False)

預處理結果圖

小注

要查看LabelEncoder是如何將類別值映射到整數的,你可以使用LabelEncoder對象的classes_屬性。這個屬性是一個數組,包含了原始類別值的排序列表,其索引位置對應于轉換后的整數值。

以下是如何查看性別類別值映射的方法:

label_encoder = LabelEncoder()
df['Gender'] = label_encoder.fit_transform(df['Gender'])# 查看類別值的映射
print(label_encoder.classes_)

假設df['Gender']列包含兩個唯一值'Male''Female'LabelEncoder會根據它們在數據中出現的順序進行排序(通常是字典序),然后進行編碼。例如,如果輸出是:

['Female' 'Male']

這意味著'Female'被編碼為0,'Male'被編碼為1。如果順序相反,那么'Male'將被編碼為0,'Female'被編碼為1。

如果你想要明確地指定編碼方式,可以使用map函數手動設置映射:

# 假設我們想要將'Male'編碼為0,'Female'編碼為1
gender_mapping = {'Male': 0, 'Female': 1}
df['Gender'] = df['Gender'].map(gender_mapping)

這樣就可以確保'Male'總是被編碼為0,'Female'總是被編碼為1。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63978.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63978.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63978.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

回歸預測 | MATLAB實現CNN-LSSVM卷積神經網絡結合最小二乘支持向量機多輸入單輸出回歸預測

回歸預測 | MATLAB實現CNN-LSSVM卷積神經網絡結合最小二乘支持向量機多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現CNN-LSSVM卷積神經網絡結合最小二乘支持向量機多輸入單輸出回歸預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 回歸預測 | MATLAB實現CNN-LSSVM…

slam學習筆記7---狀態量求導相關數學公式

前言:本來打算只是歸納一下數學求導相關公式,后面也寫了旋轉求導相關內容,哈哈。感覺有點發散把握不住呀。水平有限,歡迎評論區點出。 一、基本初等函數求導公式 ( C ) ′ 0 , C (C)0,C (C)′0,C為常數 ( x μ ) ′ μ x μ ?…

32單片機串口數據接收、空閑IDLE中斷詳解

一、前提說明 一開始寫單片機程序的時候不太清楚空閑中斷這個東西,每次用串口接收數據,都要再開一個定時器,在定時器內進行倒計時,每次接收數據就重置計時時間,計時結束就觸發中斷,再判斷所有接收的數據&am…

深入探討 Go 中的高級表單驗證與翻譯:Gin 與 Validator 的實踐之道20241223

深入探討 Go 中的高級表單驗證與翻譯:Gin 與 Validator 的實踐之道 在現代后端開發中,表單驗證是保證數據完整性和服務穩定性的核心環節。如何優雅、高效地實現表單驗證,同時提供人性化的錯誤提示,是每位開發者的必修課。在本文中…

掌握 Ansys ACP 中的參考方向:簡化復雜的復合材料設計

概括 在復合材料分析領域,精度至關重要,尤其是在定義纖維方向和鋪層時。Ansys ACP(Ansys Composite PrepPost)提供了強大的工具來建立參考方向,這是實現精確結構模擬的關鍵步驟。在本博客中,我們將揭開在 …

Vue2學習(一)——Vue簡介、Vue指令與指令修飾符

一、Vue簡介 Vue是一套用于構建用戶界面的漸進式框架。 所謂漸進式就是循序漸進,不一定非得把Vue中的所有API都學完才能開發Vue,可以學一點開發一點。 Vue2官網地址:https://v2.cn.vuejs.org/ Vue3官網地址:https://cn.vuejs…

Redis--通用命令學習

目錄 一、引言 二、基礎命令 1.set 2.get 3.keys 3.1 keys ? 3.2 keys * 3.3 keys [abe] 3.4 keys [^] 3.5 keys [a-b] 4.exists 5.delete 6.expire 7.ttl 8.type 三、Redis中的過期策略(面試題) 1.惰性刪除 2.定期刪除 …

Linux程序設計(第四版)| 學習筆記

上次學習Linux相關內容還是上學的時候為了應付考試,最近有項目涉及Linux,重新學習以下。 很多年前關于Linux的總結 一、入門 1.概念 (1) UNIX 1)定義:指的是一種遵循特定規范的計算機操作系統。 2)特點:簡單性、集中性、可重用…

PostgreSQL 的歷史

title: PostgreSQL 的歷史 date: 2024/12/23 updated: 2024/12/23 author: cmdragon excerpt: PostgreSQL 是一款功能強大且廣泛使用的開源關系型數據庫管理系統。其歷史可以追溯到1986年,當時由加州大學伯克利分校的一個研究團隊開發。文章將深入探討 PostgreSQL 的起源、…

Ubuntu22.04 LTS 安裝nvidia顯卡驅動

準備跑老師給定的Github上的多模態源碼,但是用了這么久ubuntu還沒有嘗試過安裝nvidia驅動,好在也是一次成功,于是記錄下來。 借鑒的是Ubuntu22.04安裝顯卡驅動(高速、避錯版)-CSDN博客這篇文章,按照流程來基本沒有問題,不過個人覺得有些步驟比較冗余,所以記錄下來 主要…

WPS工具欄灰色怎么辦

WPS離線不登錄,開啟工具欄等相關功能 當你在使用WPS的過程中,若因網絡問題或其他特殊原因,導致無法登錄使用WPS時,可根據以下步驟開啟離線兼容模式,開啟此模式后,可在未登錄的狀態下,激活并使用…

國標GB28181-2022平臺EasyGBS:安防監控中P2P的穿透方法

在安防監控領域,P2P技術因其去中心化的特性而受到關注,尤其是在遠程視頻監控和數據傳輸方面。P2P技術允許設備之間直接通信,無需通過中央服務器,這在提高效率和降低成本方面具有明顯優勢。然而,P2P技術在實際應用中也面…

Mac Android studio 升級LadyBug 版本,所產生的bug

當Build 出現,這樣的文字以后: Your build is currently configured to use incompatible Java 21.0.3 and Gradle 7.3.3. Cannot sync the project. We recommend upgrading to Gradle version 8.9. The minimum compatible Gradle version is 8.5. …

com.google.common.collect.ImmutableList$SerializedForm

今天AndroidStudio安裝了個2021版本的,gradle用了7.3.3,創建項目后控制臺總是有這樣一個錯誤: Unable to load class com.google.common.collect.ImmutableList$SerializedForm. This is an unexpected error. Please file a bug containing…

Docker部署Sentinel

一、簡介 是什么:面向分布式、多語言異構化服務架構的流量治理組件 能干嘛:從流量路由、流量控制、流量整形、熔斷降級、系統自適應過載保護、熱點流量防護等多個維度來幫助開發者保障微服務的穩定性 官網地址:https://sentinelguard.io/zh-c…

HTMLCSSJavaScriptDOM 之間的關系?

一、HTML 中文名:超文本標記語言 英文名:HyperText Markup Language HTML是一種用來結構化Web網頁及其內容的標記語言。 HTML 由一系列的元素組成,這些元素可以用來包圍不同部分的內容,使其以某種方式呈現或者工作。 圖Ⅰ 每…

Hadoop集群(HDFS集群、YARN集群、MapReduce?計算框架)

一、 簡介 Hadoop主要在分布式環境下集群機器,獲取海量數據的處理能力,實現分布式集群下的大數據存儲和計算。 其中三大核心組件: HDFS存儲分布式文件存儲、YARN分布式資源管理、MapReduce分布式計算。 二、工作原理 2.1 HDFS集群 Web訪問地址&…

位運算符、標記位傳參

位運算符: 位運算符作用于操作數的位(bit)。 按位與(&)對應位都為1時結果為1 int a 5; // 0101 int b 3; // 0011 int result a & b; // 0001 按位或(|)對應位至少有一個為1時結…

施耐德變頻器ATV320系列技術優勢:創新與安全并重

在工業自動化領域,追求高效、安全與智能已成為不可阻擋的趨勢。施耐德變頻器ATV320系列憑借其強大的設計標準和全球認證,成為能夠幫助企業降低安裝成本,提高設備性能的創新解決方案。 【全球認證,品質保障】ATV320 系列秉持施耐德…

項目練習:element-ui的valid表單驗證功能用法

文章目錄 一、情景說明二、代碼實現 一、情景說明 一般表單提交的時候,都要對表單數據進行前段驗證。 比如登陸表單提交。 二、代碼實現 package.json "element-ui": "2.15.14",main.js 引用ElementUI import ElementUI from element-ui; i…