大数据背景下的银行智能销售体系建设——基于XGBoost算法的银行产品销售情况分析

编程入门 行业动态 更新时间:2024-10-10 01:21:37

大数据背景下的<a href=https://www.elefans.com/category/jswz/34/1770221.html style=银行智能销售体系建设——基于XGBoost算法的银行产品销售情况分析"/>

大数据背景下的银行智能销售体系建设——基于XGBoost算法的银行产品销售情况分析

概要

一个数据科学项目。通过对客户的信息分析、客户与银行的通话信息分析、经济情况分析和相关其它信息分析,来判断最有可能购买银行存款产品的群体,从而对其做出智能的推荐。

1.问题分析

1.1.相关背景

该数据与葡萄牙银行机构的直接营销活动(电话)有关,我们的最终目标是预测客户是否将会定期存款(变量y),为了访问产品(银行定期存款)是否被订阅,通常需要与同一客户进行多次联系。

1.2.属性信息

1.2.1.银行客户信息:bank_client
1.age:int类型,代表年龄
2.job:string类型,代表职业,共12种(‘admin.’, ‘blue-collar’, ‘entrepreneur’, ‘housemaid’, ‘management’, ‘retired’,
‘self-employed’, ‘services’, ‘student’, ‘technician’, ‘unemployed’, ‘unknown’)
3.marital:string类型,代表婚姻情况,共4种(‘divorced’, ‘married’, ‘single’, ‘unknown’)
4.education:string类型,代表教育情况,共8种(‘illiterate’,‘basic.4y’,‘basic.6y’,‘basic.9y’,‘high.school’,‘professional.course’,
‘university.degree’,‘unknown’)
5.default:string类型,代表是否有违约信用(‘no’, ‘yes’, ‘unknown’)
6.housing:string类型,代表是否有房(‘no’, ‘yes’, ‘unknown’)
7.loan:string类型,代表是否有个人贷款(‘no’, ‘yes’, ‘unknown’)

1.2.2.最后一次与相关人员联系的信息:bank_contact
8.contact:string类型,代表联系方式(‘cellular’,‘telephone’)
9.month:string类型,代表月份(‘jan’, ‘feb’, ‘mar’, …, ‘nov’, ‘dec’)
10.day_of_week:string类型,代表最后联系的天,周末不上班(‘mon’,‘tue’,‘wed’,‘thu’,‘fri’)
11.duration:double类型,代表最后一次联系的持续时间,以秒为单位
注:duration对结果的影响度非常高,如果duration=0那么y=’no’。

1.2.3.社交和经济背景信息:bank_economical
12.emp.var.rate:double类型,代表就业变动率-季度
13.cons.price.idx:double类型,代表消费物价指数-月
14.cons.conf.idx:double类型,代表消费者信心指数-月
15.euribor3m:double类型,代表欧元3个月利率-日
16.nr.employed:double类型,代表员工人数-季度

1.2.4.其它信息:bank_another
17.campaign:int类型,代表此客户与相关人员的通话数量
18.pdays:int类型,距离最后一次联系相关人员的天数(999代表没有联系过)
19.previous:int类型,代表在此产品上线之前和客户联系的次数
20.poutcome:string类型,代表营销的结果(‘failure’,‘nonexistent’,‘success’)

1.2.5.结果
y:string类型,代表是否订阅定期存款产品


2.数据预处理 pre_process.py

2.1.文件总览

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pandas as pddef generate_file():result = []with open('bank-additional-full.csv', encoding='utf-8') as fp:for line in fp:line = line.replace('"', '').replace('\n', '').replace(' ', '').split(';')result.append(line)del (result[0])df = pd.DataFrame(result, columns=['age', 'job', 'marital', 'education', 'default', 'housing', 'loan', 'contact','month', 'day_of_week', 'duration', 'campaign', 'pdays', 'previous', 'poutcome','emp.var.rate', 'cons.price.idx', 'cons.conf.idx', 'euribor3m', 'nr.employed','y'])df.to_csv('dataset.csv', index=0)def show_information():fp = pd.read_csv('dataset.csv')print('types:')print(fp.dtypes, '\n')print('null:')print(fp.isnull().any())if __name__ == '__main__':# generate_file()# show_information()

处理前的数据形式

处理后的数据形式

2.1.1.generate_file()
通过python原生的函数来处理文件,将文件转化为一个DataFrame结构,之所以不用pandas包下的read_csv()函数是因为python原生函数对文件中某行的字符处理要更为友善。

2.1.2.show_information()
展示所生成文件每个特征的数据类型和是否有缺失值,可以看出,数据为object,int64和float64类型,同时数据完整,没有缺失值

2.2. 使用SPSS将数据可视化

通过生成的dataset.csv将数据导入SPSS依次生成堆积图,结果如下
2.2.1.银行客户信息分析(7个特征)

age:由直方图可知,年龄的分布是离散化的,仅仅看这个图表我们不能得出结论如果年龄对y有很大影响。与此同时,年龄在偏高的地方呈断崖式下跌,若不经过处理则会影响模型准确性。
job:由直方图可知,退休人员和学生的订阅率最高,这两类人员种缺乏相关理财知识的人占比较高,所以大多会选择风险低的定期存款。因此可以多向这两类人群投送广告,同时其他相同工作层次的人订阅率相差不大。

marital:由直方图可知,单身人群存款比例更高。
education:由直方图可知,大学生的存款比例最高。

default:由直方图可推断,有违约信用的几乎不存款。
housing:由直方图可知,是否有房存款的比例差别不大。
loan:由直方图可知,是否贷款与是否存款比例差距不大。

2.2.2.最后一次与相关人员联系的信息分析(4个特征)

contact:由直方图可知,使用手机联系的存款比例较高,推测使用手机的可能家庭较富裕
month:由直方图可知,五月的存款比例最低

day_of_week: 由直方图可知,在每个工作日存款人数比例接近
duration: 由直方图可知,数据分布过于离散,需要进行进一步的处理

2.2.3.社交和经济背景信息分析(5个特征)



由直方图可得,经济类的五个特征表现出相似的行为。

2.2.4.其它信息分析(4个特征)

campaign:由直方图可得,银行工作人员跟客户联系持续的时间越长,客户订阅产品的概率越大。
pdays:由直方图可得,客户在产品出来前如果联系相关人员,订阅率几乎为百分之百,这说明了产品宣传的重要性。

previous:由直方图可得,联系次数越多,存款的几率越大
poutcome:由直方图可得,营销结果成功的情况下,存款几率很高
2.2.5.综合分析
去掉离群样本的特征:age, duration, campaign,共3个
手动编码的特征:education,共1个
LabelEncoder编码的特征:job, marital, default, loan, contact, month, poutcome,共6个
放缩的特征:age, duration, euribor3m, pdays,共5个
不需要处理的特征:previous,emp.var.rate, cons.price.idx, cons.conf.idx, nr.emplyed,共6个
意义不大的特征:housing, day_of_week,共2个


3.特征工程 feature_engineer.py

3.1.代码概览

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from pandas import DataFrame as dF
from sklearn.preprocessing import LabelEncoder# 20 columns + y
# ['age', 'job', 'marital', 'education', 'default', 'housing', 'loan'] 'housing' is useless
# ['contact', 'month', 'day_of_week', 'duration'] 'day_of_week' is useless
# ['campaign', 'pdays', 'previous', 'poutcome']
# ['emp.var.rate', 'cons.price.idx', 'cons.conf.idx', 'euribor3m', 'nr.employed']
def process():filename = 'dataset.csv'bank = pd.read_csv(filename)label_encoder = LabelEncoder()bank.drop('housing', axis=1, inplace=True)bank.drop('day_of_week', axis=1, inplace=True)bank = remove_outliers(bank, 'age', low=True, high=True)bank = remove_outliers(bank, 'campaign', low=False, high=True)bank = remove_outliers(bank, 'duration', low=False, high=True)# 6 columns of 7bank_client = bank.loc[:, ['age', 'job', 'marital', 'education', 'default', 'loan']]process_bank_client(bank_client, label_encoder)# 3 columns of 4bank_contact = bank.loc[:, ['contact', 'month', 'duration']]process_bank_contact(bank_contact, label_encoder)# 5 columnsbank_economy = bank.loc[:, ['emp.var.rate', 'cons.price.idx', 'cons.conf.idx', 'euribor3m', 'nr.employed']]process_bank_economy(bank_economy, label_encoder)# 4 columnsbank_another = bank.loc[:, [

更多推荐

大数据背景下的银行智能销售体系建设——基于XGBoost算法的银行产品销售情况分析

本文发布于:2024-02-16 17:44:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1690953.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:银行   体系建设   算法   销售情况   智能

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!