【數據挖掘】數據挖掘綜合案例—銀行精準營銷

要求:

1、根據相關的信息預測通過電話推銷,用戶是否會在銀行進行存款

2、數據bank.csv,約4520條數據,17個屬性值 提示: 17個屬性,分別是年齡,工作類型,婚姻狀況,受教育背景,信用情況,房貸,個人貸款,聯系電話是手機還是固定電話,最后聯系月份,最后聯系日,通話持續時間,本次活動中聯系的次數,最后一次接觸距離上一次接觸的時間,以前的活動中聯系的次數,上一次活動成功與否,是否會進行存款

代碼實現:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, f1_score, confusion_matrix, roc_auc_score
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']  
plt.rcParams['axes.unicode_minus'] = False    #加載本地的數據
file_path = r'D:\課程\數據挖掘\實驗八\實驗8-bank.csv'
df = pd.read_csv(file_path, sep=';', quotechar='"')#進行數據預處理
df = df.replace('unknown', np.nan)
for col in ['default', 'housing', 'loan', 'y']:df[col] = df[col].map({'yes': 1, 'no': 0, 'unknown': np.nan})#處理缺失值
mode_values = {'job': df['job'].mode()[0] if not df['job'].mode().empty else 'unknown','education': df['education'].mode()[0] if not df['education'].mode().empty else 'unknown','contact': df['contact'].mode()[0] if not df['contact'].mode().empty else 'unknown','poutcome': df['poutcome'].mode()[0] if not df['poutcome'].mode().empty else 'unknown'
}
df = df.fillna(mode_values)
#標識特征
df['pdays'] = df['pdays'].replace(-1, 999)  #未聯系過的特殊標記
df['contacted_before'] = np.where(df['pdays'] != 999, 1, 0)  #是否曾經聯系過#檢查并處理目標變量中的NaN
print(f"目標變量y中的缺失值數量: {df['y'].isna().sum()}")
df = df.dropna(subset=['y']) #特征編碼
categorical_features = ['job', 'marital', 'education', 'contact', 'month', 'poutcome']
numeric_features = ['age', 'balance', 'day', 'duration', 'campaign', 'pdays', 'previous']preprocessor = ColumnTransformer(transformers=[('num', StandardScaler(), numeric_features),('cat', OneHotEncoder(handle_unknown='ignore', sparse_output=False), categorical_features)])X = df.drop('y', axis=1)
y = df['y']#進行數據集劃分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y
)#模型訓練
rf = RandomForestClassifier(n_estimators=100, max_depth=8,min_samples_split=5,class_weight='balanced',random_state=42
)X_train_processed = preprocessor.fit_transform(X_train)
rf.fit(X_train_processed, y_train)#模型評估
X_test_processed = preprocessor.transform(X_test)
y_pred = rf.predict(X_test_processed)
y_proba = rf.predict_proba(X_test_processed)[:, 1]print(f"準確率: {accuracy_score(y_test, y_pred):.4f}")
print(f"F1分數: {f1_score(y_test, y_pred):.4f}")
print(f"AUC: {roc_auc_score(y_test, y_proba):.4f}")#混淆矩陣可視化
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['不會存款', '會存款'], yticklabels=['不會存款', '會存款'])
plt.xlabel('預測標簽')
plt.ylabel('真實標簽')
plt.title('混淆矩陣')
plt.show()#獲取特征名稱
cat_encoder = preprocessor.named_transformers_['cat']
cat_features = cat_encoder.get_feature_names_out(categorical_features)
all_features = np.concatenate([numeric_features, cat_features])#繪制特征重要性
importances = rf.feature_importances_
indices = np.argsort(importances)[::-1][:15]plt.figure(figsize=(12, 8))
plt.title("Top 15 特征重要性")
plt.barh(range(15), importances[indices][::-1], align='center')
plt.yticks(range(15), all_features[indices][::-1])
plt.xlabel('重要性')
plt.tight_layout()
plt.show()#精準營銷建議
def marketing_recommendation(model, preprocessor, customer_data):processed_data = preprocessor.transform(customer_data)proba = model.predict_proba(processed_data)[0][1]return proba > 0.4 
#客戶數據
sample_customer = pd.DataFrame({'age': [42],'job': ['management'],'marital': ['married'],'education': ['tertiary'],'default': [0],'balance': [1500],'housing': [1],'loan': [0],'contact': ['cellular'],'day': [15],'month': ['may'],'duration': [300],'campaign': [2],'pdays': [100],'previous': [3],'poutcome': ['success']
})if marketing_recommendation(rf, preprocessor, sample_customer):print("推薦對該客戶進行存款營銷")
else:print("不建議對該客戶進行存款營銷")

運行結果:

混淆矩陣:

Top15特征重要性

控制臺輸出,推薦對該客戶進行存款營銷

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

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

相關文章

postgresql查看鎖的sql語句

發現一個查看postgresql鎖比較好的sql語句,參考鏈接地址如下 鏈接地址 查看鎖等待sql witht_wait as(select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.trans…

JSON 格式詳解

JSON 格式詳解 隨著互聯網的發展和各種 Web 應用程序的普及,數據交換已經成為了我們日常開發中的重要環節。而在各種數據交換格式中,JSON(JavaScript Object Notation)作為一種輕量級的數據交換格式,以其簡潔、易于閱…

原型設計Axure RP網盤資源下載與安裝教程共享

對于初學者來說,我們熟悉一下其定義:?Axure RP是一款常用的快速原型設計工具?,主要用于創建應用軟件或Web網站的線框圖、流程圖、原型和規格說明文檔,廣泛應用于產品經理、UI/UX設計師等專業領域。?? 主要用戶群體&#xff1…

iframe嵌套 redirect中轉頁面 route跳轉

需求是項目A要使用iframe內嵌項目B的頁面, 由于需要嵌套的頁面很多,每個頁面路徑和參數又各不相同, 所以我們在項目B里做了一個中轉頁面,這樣就能自己掌控項目A傳遞過來的東西了; routes.js 增加一個菜單:…

IP數據報 封裝成 MAC幀 ( 目的MAC地址6B 源MAC地址6B 類型2B 數據部分 FCS校驗和4B )

將 IP 數據報(Internet Protocol Datagram)封裝成 MAC 幀 需要在數據鏈路層添加適當的頭部信息,以便在局域網內進行傳輸。這個過程涉及將網絡層(IP 層)的數據通過數據鏈路層(MAC 層)封裝成適合物…

Note2.4 機器學習:Batch Normalization Introduction

Batch Normalization(批標準化,BN)通過標準化數據的操作,使得損失函數的優化地形(optimization landscape)更加平滑,從而達到更好地訓練效果。BN常用于卷積神經網絡(CNN)…

IDEA在AI時代的智能編程實踐:從工蜂到通義靈碼的效能躍遷??

引言? 在騰訊云工作期間,我曾使用?工蜂的AI代碼補全功能,結合IntelliJ IDEA(以下簡稱IDEA)極大提升了開發效率。如今離開騰訊云,面對外部開發環境,如何繼續利用AI提升編碼效率?本文將系統梳理…

MySQL 慢查詢日志詳解

慢查詢日志(Slow Query Log)是 MySQL 提供的一種核心性能優化工具,用于記錄執行時間超過指定閾值的 SQL 語句。通過分析這些日志,可以定位數據庫性能瓶頸,優化低效查詢,提升系統整體效率。 一、慢查詢日志的…

UV安裝Python指南總結

UV安裝Python指南總結 UV是一個Python包管理工具,它可以幫助我們安裝和管理Python版本。以下是關于UV安裝Python的主要功能和用法總結。 基本使用 安裝最新版Python uv python install注意:UV使用Astral的python-build-standalone項目提供的Python發行版,而不是…

運維基礎-MYSQL數據庫-筆記

序 欠10年前自己的一份筆記,獻給今后的自己。 數據庫介紹 數據的時代 涉及的數據量大數據不隨程序的結束而消失數據被多個應用程序共享大數據 數據庫的發展史 萌芽階段:文件系統 使用磁盤文件來存儲數據初級階段:第一代數據庫 出現了網狀…

從GPTs到Real智能體:目前常見的幾種創建智能體方式

文章目錄 智能體的三個發展階段低階智能體(面向過程) VS 高階智能體(面向目標)主流智能體創建平臺實踐基礎型平臺cherry-studio豆包訊飛星火騰訊元器 高階智能體開發體系cline開發套件Coze平臺Dify開源框架Manus突破性方案 技術演進趨勢總結 智能體的三個發展階段 當前智能體技…

WPF 實現自定義數字輸入彈窗

1.前端代碼實現 <Grid><Grid.RowDefinitions><RowDefinition Height"100" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0…

基于yolo海洋垃圾物品識別系統flask

查看完整項目包點擊文末名片 項目簡介 本項目 基于YOLO的海洋垃圾物品識別系統 旨在利用深度學習中的YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;實現對海洋垃圾的自動識別與分類。通過構建一個基于Flask的Web應用&#xff0c;用戶可以方便地上傳圖片&…

從數據到決策:UI前端如何利用數字孿生技術提升管理效率?

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型的深水區&#xff0c;企業管理者正面臨數據過載與決策滯后的雙重挑戰 ——IDC 研…

Spring Boot高并發 鎖的使用方法

Spring Boot高并發 鎖的使用方法 在高并發場景中&#xff08;比如電商秒殺、搶票系統、轉賬交易&#xff09;&#xff0c;多個線程/用戶會同時操作同一共享資源&#xff08;如庫存、賬戶余額、訂單號&#xff09;。如果不做控制&#xff0c;會導致數據錯誤&#xff08;如庫存超…

二十九:Dynamic Prompts插件動態提示詞講解

引言:可變化提示詞,隨機抽取不固定 使用方式一:{提示詞1|提示詞2|。。。。}------從提示詞種隨機抽取生成 方式二:{25::提示詞1|75::提示詞2}------數字為每個提示詞的占比,相當于權重 方式三:{2$$提示詞1|提示詞2|提示詞3|提示詞4|。。。}從中選區2個搭配生成(可以換 比…

vscode 改注釋的顏色,默認是灰色的,想改成紅色

修改VScode編輯器默認注釋的顏色_databricks代碼中怎么設置讓注釋是灰色的-CSDN博客 //改變注釋顏色"editor.tokenColorCustomizations": {"comments": "#009933" // 注釋}, //如果后面還加內容&#xff0c;記得塊末用逗號隔開我自己用的vscdoe.…

chili3d筆記22 正交投影3d重建筆記3 面構建

雙視圖重建3d solid import { FaceNode } from "chili"; import {IDocument,IEdge,Logger,ShapeNode,XYZ } from "chili-core"; import { Graph } from "graphlib"; function pointToString(point: XYZ): string {return ${point.x.toFixed(0)}-…

Kotlin 協程使用與通信

一、協程基礎使用 1. 協程的三種創建方式 (1) launch - 啟動后臺作業 val job CoroutineScope(Dispatchers.IO).launch {// 后臺操作delay(1000)println("任務完成 ${Thread.currentThread().name}")// 輸出&#xff1a;任務完成 DefaultDispatcher-worker-1 } j…

Ubuntu服務器(公網)- Ubuntu客戶端(內網)的FRP內網穿透配置教程

以下是為Ubuntu服務器&#xff08;公網&#xff09;- Ubuntu客戶端&#xff08;內網&#xff09;的FRP內網穿透配置教程&#xff0c;基于最新版本&#xff08;2025年6月&#xff0c;使用frp_0.61.1_linux_amd64&#xff09;整理&#xff1a; 一、服務端配置&#xff08;公網Ubu…