信用卡欺诈预测

Link: https://www.kaggle.com/mlg-ulb/creditcardfraud

题目描述

信用卡公司需要能够识别虚假的信用卡交易,以避免用户被骗。本题就是利用欧洲某段时间的信用卡交易记录,来判断某条交易是否属于信用卡欺诈。

数据描述

数据集为2013年9月里某两天欧元区的信用卡交易记录。在这两天中共有284807笔交易,其中的492笔是欺诈。把欺诈交易的类(class) 认为是1,非欺诈交易的类认为是0. 那么这个二元问题中,class为1的样本概率只有0.172%。可见在这个二元问题中,两个类所占的比重相差特别大。也就是说我们的数据集是特别不平衡的。因此同学们在本题中要思考如何处理这种失衡的数据。失衡数据很可能导致train出来的模型是无效模型,具体会在下面“小提示”部分详细说明。

数据集里面有从PCA转换得到的28个features。在下方我放了一点关于PCA转换的阅读材料,感兴趣的同学可以阅读了解一下。但是不了解不影响答题,不建议过多把时间花在上面。之所以进行了PCA转换是因为不能把原始的消费者信用卡记录暴露给公众,这样触犯了用户的隐私。所以做PCA转换处理。可以简单理解为加密。

Features V1, V2, ..., V28都是经过PCA转换后获得的features。没有被PCA转换的,保留了原始数据的是"Time"和"Amount"。"Time"记录了每笔交易和第一笔交易之间的时间间隔,以秒为单位。"Amount"是交易数额。"Class"就是这笔交易的最终分类。如果为1说明这是一笔欺诈交易,为0说明这不是一笔欺诈交易。

小提示

先修知识

输入格式

数据集共包含284807条数据。每条记录的第一列Id用作索引。你可能注意到索引并不是连续的。这是因为原始数据并没有区分训练集和测试集。在出题时,这个数据集被认为按照0.8, 0.2的比例分成了训练集和测试集。第二列为“时间”,是这条记录和第一笔记录之间的时间间隔。“时间”后面跟着V1-V28共28个由PCA转换得到features。PCA features后面是amount,代表本次交易的金额。最后的class是要预测的值。如果为0代表这条交易不是欺诈,为1则为欺诈。

如前所述,数据集已经按照0.8, 0.2的比例分成了训练集和测试集。

输出格式

  • 提交的csv文件应采用以下格式:一共包含两列,第一列Id代表测试集中对应的数列Id,第二列Class则代表预测出的该笔交易的分类。具体可看提供的sample_submission.csv

衡量标准

一般classification问题可能考虑准确率就够了。但是本题由于超过90%的分类都为非欺诈,即使直接“预测”成非欺诈也会有90%以上的正确率。因此precision在本题并不是最重要的指标。应当注意到,银行更关注的是欺诈交易有没有被都筛选出来,也是recall这个指标所表示的含义。因此本题为了兼顾precision和recall,选择F1 score作为模型好坏的衡量指标,计算方式为2/(1/P+1/R)。

代码与数据

  • 训练集creditcard_train.csv:
  • 测试集creditcard_test.csv:
  • 正确答案correct_class.csv:
  • 提交格式样例sample_submission.csv:
  • 测试代码

均已上传到OneDrive,地址https://1drv.ms/f/s!AptZ75iiJPpMgxpZjafOeNHBMQ45

如果打不开地址先下载OneDrive Mac/Window客户端

测评配置环境

python

pip install -U scikit-learn
pip install -U numpy
pip install -U pandas

从上面的github地址获得代码测试文件。命令行里跑

python3 scorer.py --predicted_file <predicted_file_path> --true_file <true_file_path>

results matching ""

    No results matching ""