本文研究的是大数据量(284807条数据)下模型选择的问题,也参考了一些文献,但大多不够清晰,因此吐血整理本文,希望对大家有帮助;
本文试着从数据分析师的角度,设想“拿到数据该如何寻找规律、选哪种模型来构建反欺诈模型?”的角度来分析,以业务导向为主,不深究算法原理;
下一篇文章会说明数据结构极度不平衡的情况下,该如何修正数据集、如何调整参数。
数据来源及项目概况
数据是从kaggle上看到的项目,具体链接如下:
https://www.kaggle.com/mlg-ulb/creditcardfraud
获取本例数据的,可在上述项目详情链接中下载数据。
数据集包含欧洲持卡人于2013年9月通过信用卡进行的交易。该数据集提供两天内发生的交易,其中在284,807笔交易中有492起欺诈行为。
数据集非常不平衡,负面类别(欺诈)占所有交易的0.172%。
它只包含数值输入变量,这是PCA变换的结果。不幸的是,由于保密问题,我们无法提供有关数据的原始特征和更多背景信息。特征V1,V2,… V28是用PCA获得的主要组件,唯一没有用PCA转换的特征是’Time’和’Amount’。
- “时间”包含每个事务与数据集中第一个事务之间经过的秒数。
- '金额’是交易金额,该特征可以用于依赖于例子的成本敏感性学习。
- “Class”是响应变量,在欺诈的情况下其值为1,否则为0。
2、准备并初步查看数据集
1. # 导入包
2. import numpy as np
3. import pandas as pd
4. import matplotlib.pyplot as plt
5. import matplotlib.gridspec as gridspec
6. import seaborn as sns; plt.style.use('ggplot')
7. import sklearn
8. from sklearn.preprocessing import StandardScaler
9. from sklearn.model_selection import train_test_split
10. from sklearn.utils import shuffle
11. from sklearn.metrics import confusion_matrix
12. from sklearn.manifold import TSNE
13. pass
14. # 倒入并查看数据
15. crecreditcard_data=pd.read_csv('./creditcard.csv')
16. crecreditcard_data.shape,crecreditcard_data.info()
17. <class 'pandas.core.frame.DataFrame'>
18. RangeIndex: 284807 entries, 0 to 284806
19. Data columns (total 31 columns):
20. Time 284807 non-null float64
21. V1 284807 non-null float64
22. V2 284807 non-null float64
23. V3 284807 non-null float64
24. V4 284807 non-null float64
25. V5 284807 non-null float64
26. V6 284807 non-null float64
27. V7 284807 non-null float64
28. V8 284807 non-null float64
29. V9 284807 non-null float64
30. V10 284807 non-null float64
31. V11 284807 non-null float64
32. V12 284807 non-null float64
33. V13 284807 non-null float64
34. V14 284807 non-null float64
35. V15 284807 non-null float64
36. V16 284807 non-null float64
37. V17 284807 non-null float64
38. V18 284807 non-null float64
39. V19 284807 non-null float64
40. V20 284807 non-null float64
41. V21 284807 non-null float64
42. V22 284807 non-null float64
43. V23 284807 non-null float64
44. V24 284807 non-null float64
45. V25 284807 non-null float64
46. V26 284807 non-null float64
47. V27 284807 non-null float64
48. V28 284807 non-null float64
49. Amount 284807 non-null float64
50. Class 284807 non-null int64
51. dtypes: float64(30), int64(1)
52. memory usage: 67.4 MB
53. ((284807, 31), None)
54. crecreditcard_data.describe()
55. pass
56. crecreditcard_data.head()
57. pass
58. # 看看欺诈与非欺诈的比例如何
59. count_classes=pd.value_count