文章目录
引言
数据分析在银行中的应用有如下:
投资风险分析
客户终身价值预测
客户细分
客户流失率预测
个性化营销
客户情绪分析
虚拟助理和聊天机器人
……
这里是一个常见的数据分析用例
欺诈检测是为识别和防止欺诈活动以及财务损失而采取的一种主动措施
一般的做法有:
- 统计学:统计参数计算、回归、概率分布、数据匹配;
- 人工智能:数据挖掘、机器学习、深度学习
机器学习是欺诈检测的重要支柱,其工具包提供了两种方法:
- 监督方法:K-近邻、逻辑回归、支持向量机、决策树、随机森林、时间序列分析、神经网络等。
- 无监督方法:聚类分析、链接分析、自组织地图、主成分分析、异常识别等。
目前没有通用的机器学习算法用于欺诈检测。相反,对于现实世界的数据科学用例,通常会选择几种方法,通过测试比较,选择最佳的。
数据集
Credit Card Fraud Detection | Kaggle数据集:
https://www.kaggle.com/mlg-ulb/creditcardfraud
该数据集是Kaggle信用卡欺诈检测数据集的一个修改样本,持卡人拥有信用卡的交易情况
下载以后保存在Jupyter notebook默认目录下
分析
1. 读入数据并快速浏览
import pandas as pd
creditcard_data = pd.read_csv('creditcard.csv', index_col=0)
print(creditcard_data.info())
print('\n')
pd.options.display.max_columns = len(creditcard_data)
print(creditcard_data.head(3))
结果如下:
<class 'pandas.core.frame.DataFrame'>
Index: 284807 entries, 0.0 to 172792.0
Data columns (total 30 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 V1 284807 non-null float64
1 V2 284807 non-null float64
2 V3 284807 non-null float64
3 V4 284807 non-null float64
4 V5 284807 non-null float64
5 V6 284807 non-null float64
6 V7 284807 non-null float64
7 V8 284807 non-null float64
8 V9 284807 non-null float64
9 V10 284807 non-null float64
10 V11 284807 non-null float64
11 V12 284807 non-null float64
12 V13 284807 non-null float64
13 V14 284807 non-null float64
14 V15 284807 non-null float64
15 V16 284807 non-null float64
16 V17 284807 non-null float64
17 V18 284807 non-null float64
18 V19 284807 non-null float64
19 V20 284807 non-null float64
20 V21 284807 non-null float64
21 V22 284807 non-null float64
22 V23 284807 non-null float64
23 V24 284807 non-null float64
24 V25 284807 non-null float64
25 V26 284807 non-null float64
26 V27 284807 non-null float64
27 V28 284807 non-null float64
28 Amount 284807 non-null float64
29 Class 284807 non-null int64
dtypes: float64(29), int64(1)
memory usage: 67.4 MB
None
V1 V2 V3 V4 V5 V6 V7 \
Time
0.0 -1.359807 -0.072781 2.536347 1.378155 -0.338321 0.462388 0.239599
0.0 1.191857 0.266151 0.166480 0.448154 0.060018 -0.082361 -0.078803
1.0 -1.358354 -1.340163 1.773209 0.379780 -0.503198 1.800499 0.791461
V8 V9 V10 V11 V12 V13 V14 \
Time
0.0 0.098698 0.363787 0.090794 -0.551600 -0.617801 -0.991390 -0.311169
0.0 0.085102 -0.255425 -0.166974 1.612727 1.065235 0.489095 -0.143772
1.0 0.247676 -1.514654 0.207643 0.624501 0.066084 0.717293 -0.165946
V15 V16 V17 V18 V19 V20 V21 \
Time
0.0 1.468177 -0.470401 0.207971 0.025791 0.403993 0.251412 -0.018307
0.0 0.635558 0.463917 -0.114805 -0.183361 -0.145783 -0.069083 -0.225775
1.0 2.345865 -2.890083 1.109969 -0.121359 -2.261857 0.524980 0.247998
V22 V23 V24 V25 V26 V27 V28 \
Time
0.0 0.277838 -0.110474 0.066928 0.128539 -0.189115 0.133558 -0.021053
0.0 -0.638672 0.101288 -0.339846 0.167170 0.125895 -0.008983 0.014724
1.0 0.771679 0.909412 -0.689281 -0.327642 -0.139097 -0.055353 -0.059752
Amount Class
Time
0.0 149.62 0
0.0 2.69 0
1.0 378.66 0
这个数据集共有284807条记录。
数据集包含30个列,其中29个列是float64类型(浮点数),1个列是int64类型(整数)。
每一列的数据都是非空的(没有缺失值)。
通过creditcard_data.head(3),我们查看数据集的前3行:
Time:表示交易时间。
V1 到 V28:这些是经过PCA(主成分分析)转换后的特征
Amount:表示交易金额。
Class:目标变量,表示交易是否为欺诈(1表示欺诈,0表示正常)。
数据集非常大且没有缺失值,适合进行机器学习模型的训练。
通过初步的浏览,我们对数据有了一个基本的了解,可以进一步进行数据分析和建模工作。
2.计算欺诈交易占数据集中交易总数的百分比
# 计算欺诈交易数量
fraud_count = creditcard_data[creditcard_data['Class'] == 1].shape[0]
# 计算总交易数量
total_count = creditcard_data.shape[0]
# 计算百分比
fraud_percentage = (fraud_count / total_count) *