总结:不平衡数据的分类,(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制。过采样后模型选择RF、xgboost、神经网络能够取得非常不错的效果。(2)模型层面:使用模型集成,样本不做处理,将各个模型进行特征选择、参数调优后进行集成,通常也能够取得不错的结果。(3)其他方法:偶尔可以使用异常检测技术,主要有IsolationForest,OneClassSVM,LocalOutlierFactor,KMeans,其中IsolationForest效果最好。但是不及前两种方法。很少使用数据欠采样手法,因为数据无法反映整体特征而导致高误报。

从信用卡欺诈模型看不平衡数据分类:

https://www.kaggle.com/joparga3/in-depth-skewed-data-classif-93-recall-acc-now 说明了欠采样不会太好,整体精度难以上去 文中欠采样思路 np.random.choice(normal_indices, number_records_fraud, replace = False) 最后精度 134/(134+11090) = 0.011

https://www.kaggle.com/vincentlugat/votingclassifier-f1-score-0-88-data-viz 直接用原始数据训练,然后集成三个模型来做,效果也不错 VotingClassifier (
estimators = [('xgb', xgb_cfl), ('lt', log_cfl), ('rf', rf_cfl)],
voting='soft', weights = [1, 1, 1.33]) 最后效果Precision = 0.950
Recall = 0.826
F1_score = 0.884

https://www.kaggle.com/currie32/predicting-fraud-with-tensorflow 直接用原始数据进行训练,特征工程选择最有用特征,然后使用神经网络进行训练 t-SNE画图 最后效果 召回率82.93% 误报率 0.10% 也还是不错 特征选择使用distplot绘图人眼看 另外提取了一些额外特征 df['V1_'] = df.V1.map(lambda x: 1 if x < -3 else 0)

https://www.kaggle.com/janiobachmann/credit-fraud-dealing-with-imbalanced-datasets 非常非常好的文章 里面将过采样、欠采样、不做数据处理的几种方法都提到了,并且pca、tsne用到。其中,过采样是+神经网络处理,过采样使用的注意事项也提到了,必须要先split data再过采样。模型:undersample_model = Sequential([
Dense(n_inputs, input_shape=(n_inputs, ), activation='relu'),
Dense(32, activation='relu'),
Dense(2, activation='softmax')
])最后效果Confusion matrix, without normalization
[[56864 0]
[ 0 98]]还是非常不错的!

https://www.kaggle.com/bonovandoo/fraud-detection-with-smote-and-xgboost-in-r 使用smote+xgboost来做,最后效果:Precision 0.999841017488076,Recall 0.995497476124312。

https://www.kaggle.com/gargmanish/how-to-handle-imbalance-data-study-in-detail 过采样和欠采样都讨论了,其中欠采样+RF比较好,acc和recall都是0.86。

https://www.kaggle.com/kamathhrishi/detecting-credit-card-frauds 讲得比较全,Supervised Learning Algorithms(SVM、RF,注意RandomForestClassifier(max_depth=2, random_state=0) depth=2)和Anomaly Detection Algorithms,后者有One Class SVM(Acc 32%),Isolation Forest(Acc 89%还不错)。另外使用了过采样技术,评估隔离森林和RF,不过由于RF的depth=2,Acc和Recall是0.23、0.83。

https://www.kaggle.com/shelars1985/anomaly-detection-using-gaussian-distribution 直接使用Gaussian Distribution to detect Anamolous transactions.最终效果:Precision of around 60% with Recall of 74% 算是一个探索性的思路吧,可能不太适合实际工程项目。

https://www.kaggle.com/matheusfacure/semi-supervised-anomaly-detection-survey 探索了一些半监督的技术使用异常检测来做,分别为(1)Gaussian Model Based,Test Recall Score: 0.793 Test Precision Score: 0.701 Test F2 Score: 0.773(2)Histogram Based,不知道是啥原理,反正最后精度不咋的(3)聚类 GaussianMixture,Test Recall Score: 0.809 Test Precision Score: 0.726 Test F2 Score: 0.791(4)聚类IsolationForest,Test Recall Score: 0.760 Test Precision Score: 0.482 Test F2 Score: 0.681(5)神经网络,neural network named the autoencoder,Test Recall Score: 0.813 Test Precision Score: 0.294 Test F2 Score: 0.601效果也不咋的啊!

https://www.kaggle.com/rgaddati/unsupervised-fraud-detection-isolation-forest 也探索了使用异常检测思路,主要有IsolationForest,OneClassSVM,LocalOutlierFactor,KMeans综合看IF是效果最好的。

https://www.kaggle.com/lct14558/imbalanced-data-why-you-should-not-use-roc-curve 结论就是Handling highly imbalance classes and why Receiver Operating Characteristics Curve (ROC Curve) should not be used, and Precision/Recall curve should be preferred in highly imbalanced situations,对于不平衡数据训练模型,最重要的指标是Precision/Recall。

https://www.kaggle.com/cherzy/visualization-on-a-2d-map-with-t-sne 使用tsne做数据可视化,非常主流的方法!比PCA用得多。

https://www.kaggle.com/dstuerzer/optimized-logistic-regression 讨论了如何做LR的参数优化。

从信用卡欺诈模型看不平衡数据分类(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制。过采样后模型选择RF、xgboost、神经网络能够取得非常不错的效果。(2)模型层面:使用模型集成,样本不做处理,将各个模型进行特征选择、参数调优后进行集成,通常也能够取得不错的结果。(3)其他方法:偶尔可以使用异常检测技术,IF为主的更多相关文章

  1. 评价指标的局限性、ROC曲线、余弦距离、A/B测试、模型评估的方法、超参数调优、过拟合与欠拟合

    1.评价指标的局限性 问题1 准确性的局限性 准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷.比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率.所以,当 ...

  2. 【深度学习篇】--神经网络中的调优一,超参数调优和Early_Stopping

    一.前述 调优对于模型训练速度,准确率方面至关重要,所以本文对神经网络中的调优做一个总结. 二.神经网络超参数调优 1.适当调整隐藏层数对于许多问题,你可以开始只用一个隐藏层,就可以获得不错的结果,比 ...

  3. XGBoost模型的参数调优

    XGBoost算法在实际运行的过程中,可以通过以下要点进行参数调优: (1)添加正则项: 在模型参数中添加正则项,或加大正则项的惩罚力度,即通过调整加权参数,从而避免模型出现过拟合的情况. (2)控制 ...

  4. 看MySQL的参数调优及数据库锁实践有这一篇足够了

    史上最强MySQL参数调优及数据库锁实践 1. 应用优化 1.2 减少对MySQL的访问 1.2.1 避免对数据进行重复检索 1.2.2 增加cache层 1.3 负载均衡 1.3.1 利用MySQL ...

  5. JVM内存模型及参数调优

    堆.栈.方法区概念区别 1.堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.根据垃圾回收机制的不同, Java堆有可能拥有不同的结构,最为常见的就是 ...

  6. Spark机器学习——模型选择与参数调优之交叉验证

    spark 模型选择与超参调优 机器学习可以简单的归纳为 通过数据训练y = f(x) 的过程,因此定义完训练模型之后,就需要考虑如何选择最终我们认为最优的模型. 如何选择最优的模型,就是本篇的主要内 ...

  7. Spark2.0机器学习系列之2:基于Pipeline、交叉验证、ParamMap的模型选择和超参数调优

    Spark中的CrossValidation Spark中采用是k折交叉验证 (k-fold cross validation).举个例子,例如10折交叉验证(10-fold cross valida ...

  8. 【Spark调优】内存模型与参数调优

    [Spark内存模型] Spark在一个executor中的内存分为3块:storage内存.execution内存.other内存. 1. storage内存:存储broadcast,cache,p ...

  9. MySQL数据库参数调优方法

    怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一段时间后运行,根据 ...

随机推荐

  1. 第一次接触solr的过程记录

    1.以solr-4.6.0.tgz为例进行学习 2.第一步,看的是 tutorial.html(位于solr-4.6.0/docs目录),默认solr以jetty作为servlet容器 3.但是,如果 ...

  2. Dockerfile安装KOD可道云

    [root@docker01 base2]# cat Dockerfile FROM centos:6.8 RUN yum install openssh-server -y RUN /etc/ini ...

  3. 如何落地全球最大 Kubernetes 生产集群

        鲍永成   京东基础架构部技术总监,   DevOps 标准核心编写专家   前言   JDOS 就是京东数据中心操作系统,随着数据中心规模不断的扩大,我们需要对数据中心做综合的考虑.所以一开 ...

  4. AliRedis性能

    引言:         如今redis凭借其高性能的优势, 以及丰富的数据结构作为cache已越来越流行, 逐步取代了memcached等cache产品, 在Twitter,新浪微博中广泛使用,阿里巴 ...

  5. #region的作用和注释快捷键

    让函数在编辑器中收起来,简洁 #region All MenuItems [@MenuItem("xxx")] public static void Init() { XXXXX; ...

  6. hiho一下 第115周:网络流一•Ford-Fulkerson算法 (Edmond-Karp,Dinic,SAP)

    来看一道最大流模板水题,借这道题来学习一下最大流的几个算法. 分别用Edmond-Karp,Dinic ,SAP来实现最大流算法. 从运行结过来看明显SAP+当前弧优化+gap优化速度最快.   hi ...

  7. android 自定义 listView

    目录: 1.主布局 ListView <?xml version="1.0" encoding="utf-8"?><RelativeLayou ...

  8. RabbitMQ与Redis做队列比较

    本文仅针对RabbitMQ与Redis做队列应用时的情况进行对比 具体采用什么方式实现,还需要取决于系统的实际需求简要介绍RabbitMQRabbitMQ是实现AMQP(高级消息队列协议)的消息中间件 ...

  9. 记录-MySQL中的事件调度Event Scheduler

    下面是自己的实例 /*查询event是否开启(查询结果Off为关闭 On为开启)*/show variables like '%sche%'; /*开启/关闭命令(1开启--0关闭)*/set glo ...

  10. php本周、本月的第一天 / 最后一天的时间

    //week $time1 = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1, ...