数据分析实战45讲
陈旸
清华大学计算机博士
立即订阅
17314 人已学习
课程目录
已完结 48 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 你为什么需要数据分析能力?
免费
第一模块:数据分析基础篇 (16讲)
01丨数据分析全景图及修炼指南
02丨学习数据挖掘的最佳路径是什么?
03丨Python基础语法:开始你的Python之旅
04丨Python科学计算:用NumPy快速处理数据
05丨Python科学计算:Pandas
06 | 学数据分析要掌握哪些基本概念?
07 | 用户画像:标签化就是数据的抽象能力
08 | 数据采集:如何自动化采集数据?
09丨数据采集:如何用八爪鱼采集微博上的“D&G”评论
10丨Python爬虫:如何自动化下载王祖贤海报?
11 | 数据科学家80%时间都花费在了这些清洗任务上?
免费
12 | 数据集成:这些大号一共20亿粉丝?
13 | 数据变换:考试成绩要求正态分布合理么?
14丨数据可视化:掌握数据领域的万金油技能
15丨一次学会Python数据可视化的10种技能
16丨数据分析基础篇答疑
第二模块:数据分析算法篇 (20讲)
17 丨决策树(上):要不要去打篮球?决策树来告诉你
18丨决策树(中):CART,一棵是回归树,另一棵是分类树
19丨决策树(下):泰坦尼克乘客生存预测
20丨朴素贝叶斯分类(上):如何让机器判断男女?
21丨朴素贝叶斯分类(下):如何对文档进行分类?
22丨SVM(上):如何用一根棍子将蓝红两色球分开?
23丨SVM(下):如何进行乳腺癌检测?
24丨KNN(上):如何根据打斗和接吻次数来划分电影类型?
25丨KNN(下):如何对手写数字进行识别?
26丨K-Means(上):如何给20支亚洲球队做聚类?
27丨K-Means(下):如何使用K-Means对图像进行分割?
28丨EM聚类(上):如何将一份菜等分给两个人?
29丨EM聚类(下):用EM算法对王者荣耀英雄进行划分
30丨关联规则挖掘(上):如何用Apriori发现用户购物规则?
31丨关联规则挖掘(下):导演如何选择演员?
32丨PageRank(上):搞懂Google的PageRank算法
33丨PageRank(下):分析希拉里邮件中的人物关系
34丨AdaBoost(上):如何使用AdaBoost提升分类器性能?
35丨AdaBoost(下):如何使用AdaBoost对房价进行预测?
36丨数据分析算法篇答疑
第三模块:数据分析实战篇 (7讲)
37丨数据采集实战:如何自动化运营微博?
38丨数据可视化实战:如何给毛不易的歌曲做词云展示?
39丨数据挖掘实战(1):信用卡违约率分析
40丨数据挖掘实战(2):信用卡诈骗分析
41丨数据挖掘实战(3):如何对比特币走势进行预测?
42丨当我们谈深度学习的时候,我们都在谈什么?
43丨深度学习(下):如何用Keras搭建深度学习网络做手写数字识别?
第四模块:数据分析工作篇 (2讲)
44丨如何培养你的数据分析思维?
45丨求职简历中没有相关项目经验,怎么办?
加餐 (1讲)
加餐丨在社交网络上刷粉刷量,技术上是如何实现的?
结束语 (1讲)
结束语丨当大家都在讲知识和工具的时候,我更希望你重视思维和实战
数据分析实战45讲
登录|注册

40丨数据挖掘实战(2):信用卡诈骗分析

陈旸 2019-03-15
上一篇文章中,我们用随机森林以及之前讲过的 SVM、决策树和 KNN 分类器对信用卡违约数据进行了分析,这节课我们来研究下信用卡欺诈。
相比于信用卡违约的比例,信用卡欺诈的比例更小,但是危害极大。如何通过以往的交易数据分析出每笔交易是否正常,是否存在盗刷风险是我们这次项目的目标。
通过今天的学习,你需要掌握以下几个方面:
了解逻辑回归分类,以及如何在 sklearn 中使用它;
信用卡欺诈属于二分类问题,欺诈交易在所有交易中的比例很小,对于这种数据不平衡的情况,到底采用什么样的模型评估标准会更准确;
完成信用卡欺诈分析的实战项目,并通过数据可视化对数据探索和模型结果评估进一步加强了解。

构建逻辑回归分类器

逻辑回归虽然不在我们讲解的十大经典数据挖掘算法里面,但也是常用的数据挖掘算法。
逻辑回归,也叫作 logistic 回归。虽然名字中带有“回归”,但它实际上是分类方法,主要解决的是二分类问题,当然它也可以解决多分类问题,只是二分类更常见一些。
在逻辑回归中使用了 Logistic 函数,也称为 Sigmoid 函数。Sigmoid 函数是在深度学习中经常用到的函数之一,函数公式为:
函数的图形如下所示,类似 S 状:
你能看出 g(z) 的结果在 0-1 之间,当 z 越大的时候,g(z) 越大,当 z 趋近于无穷大的时候,g(z) 趋近于 1。同样当 z 趋近于无穷小的时候,g(z) 趋近于 0。同时,函数值以 0.5 为中心。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《数据分析实战45讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(20)

  • 白夜
    试了下SVM
    精确率: 0.843
    召回率: 0.717
    F1值: 0.775

    可以通过人的行为(反动言论,购物情况,日常行为)分析预测人群的标签,比如反社会人格,小众爱好者
    也可以,反过来通过人的标签(爱喝酒程度,注意力集中度,运动量等)分析人的行为(车祸,罕见疾病的发生)
    2019-03-15
    4
  • 西湖晨曦
    继续上面的问题。就是,我就是银行信用卡部的工作人员。假设我通过fit()方法得到了信用卡诈骗分析的逻辑回归。假设特征是:性别、收入、是否有房子、是否有车子、是否有助学贷款、是否有公积金这几个特征。我通过fit()方法得到了这个有这些特征的逻辑回归曲线。我如何找到每一个特征前面的系数呢?-----说得直白点,我作为银行信用控制部门工作人员,希望知道上面的特征,哪一个是最重要的,哪一个次重要?哪一个不重要?这样我才能对我的信控工作作出调整。比如我假如知道了是否有助学贷款这个特征不重要,那么我就可以在未来工作中,在银行客户是否允许开信用卡的条件中,取消这个是否有助学贷款的条件,从而给银行信用卡开卡工作带来业务效益。

    作者回复: 很好的问题,你可以进行分类之后,查看下分类器中特征向量的重要程度,然后进行可视化的呈现,比如我们的分类器是clf,使用matplotlib进行可视化,具体代码如下:
    # 显示特征向量的重要程度
    coeffs = clf.feature_importances_
    df_co = pd.DataFrame(coeffs, columns=["importance_"])
    # 下标设置为Feature Name
    df_co.index = train_features.columns
    df_co.sort_values("importance_", ascending=True, inplace=True)
    df_co.importance_.plot(kind="barh")
    plt.title("Feature Importance")
    plt.show()

    2019-09-14
    2
    3
  • 王彬成
    1、使用LinearSVC输出的结果:
    精确率:0.846
    召回率:0.733
    F1值:0.786
    2、结果代码,把

    # 逻辑回归分类
    clf=LogisticRegression()
    clf.fit(train_x,train_y)
    predict_y=clf.predict(test_x)

    更换为:
    #线性SVM分类
    from sklearn import svm
    model=svm.LinearSVC()
    model.fit(train_x,train_y)
    predict_y=model.predict(test_x)
    2019-03-15
    3
  • 一语中的
    用SVM的LinearSVC算法进行分类
    精确率:0.846
    召回率:0.733
    F1 值:0.786
    如果F1值越大,代表的模型的结果越好,那么SVM应该是优于逻辑回归,但是,从计算时间上来看,用逻辑回归算法比用SVM要节约50多秒(在我本地环境,其他条件不变的情况下)
    2019-03-19
    2
  • 西湖晨曦
    对本期的信用卡诈骗分析中,涉及逻辑回归(LogisticRegression)有几点问题,我在网上找了大量资料都找不到答案。特地求助~
    1. 逻辑回归数学公式中,求出的值,是介于(0,1)之间。LogisticRegreesion的predict()方法,会设定一个阈值,比如是0.5,把大于0.5的逻辑回归值,设为1,相反小于0.5的,设置为0。那么我的问题是,为什么要设置0.5?是固定的吗?如果我希望把阈值(threshold)提高到0.6,如何设置?---我看了无数遍API,就是找不到如何设置这个阈值。
     2. 如何看逻辑回归的各个参数。假设我通过fit()这个方法对训练集进行训练,得到了逻辑回归的各个target的值,即我已经得到了这个逻辑回归的各个参数了。假设有10个特征。我如何知道每一个特征前面的变量呢?
    2019-09-14
    1
    1
  • third
    0、所有的小概率事件都属于不平衡数集,比如得某种病,出现车祸或者意外

    1、LinearSVC结果:
    精确率:0.845
    召回率:0.732
    F1值:0.778
    2、结果代码,把

    # 逻辑回归分类
    clf=LogisticRegression()
    clf.fit(train_x,train_y)
    predict_y=clf.predict(test_x)

    更换为:
    #线性SVM分类
    from sklearn import svm
    model=svm.LinearSVC()
    model.fit(train_x,train_y)
    predict_y=model.predict(test_x)
    2019-03-21
    1
  • 王彬成
    逻辑回归混淆矩阵对应的TP、FP、TN、FN的位置,以输出的混淆矩阵图为例,
    1)首先这四个概念的定义
    1. TP:预测为正,判断正确;
    2. FP:预测为正,判断错误;
    3. TN:预测为负,判断正确;
    4. FN:预测为负,判断错误。
    2)回归原图
    1、predicted=1,True=1,代表预测为正,判断正确,所以TP=37
    2、predicted=1,true=0,代表预测为正,判断错误,所以FP=7
    3、predicted=0,true=1,代表预测为负,判断错误,所以FN=23

    2019-03-15
    1
  • Sam.张朝
    我以为程序是判断一笔交易,是否是不正常的。
    2019-08-09
  • 陈锦榕

    ***********The evaluation of split test data.*************
    Accuracy-Test data: 0.9601
    ************************************************************************************************************************
    Kappa: 0.07924493469331251
    ************************************************************************************************************************
    Confusion matrix,↓real laebl, →predict label”
          0 1
    0 9583 397
    1 2 18
    ************************************************************************************************************************
                  precision recall f1-score support

               0 1.00 0.96 0.98 9980
               1 0.04 0.90 0.08 20

        accuracy 0.96 10000
       macro avg 0.52 0.93 0.53 10000
    weighted avg 1.00 0.96 0.98 10000
    2019-07-30
  • 东东哥
    (0, 0)格子真实值和预测值都为0,称为预测Negative正确,记作True Negative,简写为TN。
    (0, 1)格子真实值为0,但预测值为1,称为预测Positive错误,记作False Positive,简写为FP。
    (1, 0)格子真实值为1, 但预测值为0,称为预测Negative错误,记作False Negative,简写为FN。
    (1, 1)格子真实值和预测值都为1,称为预测Positive正确,记作True Positive,简写为TP。
    2019-07-18
  • 挠头侠
    老师 为什么只依靠查准率无法判断模型的好坏呢?我试过很多情况,让我感觉是基本上都可以通过查准率判断模型好坏
    2019-06-05
  • 挠头侠
    老师 X = np.array(data.as_matrix()) ,将dataframe转化成ndarray格式不是必须步骤吧,转化之后是有什么性能上的提升吗?
    2019-06-01
  • 老师FN应该是28414吧?
    2019-04-11
  • Lee
    好神奇,我之前也做过这个kaggle项目,这个是样本不平衡数据集,我当时没做处理的时候误判率好高,后来才有SMOTE处理之后才好点,但是看老师这个也没做处理,和我之前的差距好大,还要继续琢磨比对看看我之前错在哪了,当然也希望陈老师能指点一下
    2019-03-24
  • digitarts
    老师,我看到,在预测比特币走势的最后一张图表上,实际值与预测值尽管趋势类似,但是在发生的时间上,测试值比实际值晚了一段时间,请问有什么方法尽量缩短这个时间序列的间隙么?多谢🙏
    2019-03-24
  • Destroy、
    model = svm.SVC()
    model.fit(train_x, train_y)
    predict_y = model.predict(test_x)
    cm = confusion_matrix(test_y, predict_y)
    show_metrics()

    精确率:0.953
    召回率:0.683
    F1值:0.796
    2019-03-19
  • 白夜
    好奇问一下,老师你制作分析图的这个软件是什么?
    2019-03-15
    1
  • 一语中的
    不平衡数据:
    1.欺诈预测(欺诈的数量远远小于真实交易的数量)
    比如,本节内容的信用卡欺诈交易
    2.自然灾害预测(不好的事情远远小于好的事情)
    3.买彩票中奖(小概率)
    4.在图像分类中识别恶性肿瘤(训练样本中含有肿瘤的图像远比没有肿瘤的图像少)
    2019-03-15
  • 王彬成
    不均衡数据集是指,数据集中每个类别下的样本数目相差很大。
    比如,在客户流失的数据集中,绝大部分的客户是会继续享受其服务的(非流失对象),只有极少数部分的客户不会再继续享受其服务(流失对象)
    又如,检查出厂冰箱的合格率,本来合格率就高达了96%。如果对样本进行检测,准确率也是很高的,那么将会无法判断次品。
    再如,检查邮件中的垃圾邮件,因为垃圾邮件占全部邮件极少的部分,所以也是属于不平衡数据集
    2019-03-15
  • 王彬成
    不均衡数据集是指,数据集中每个类别下的样本数目相差很大。
    比如,在客户流失的数据集中,绝大部分的客户是会继续享受其服务的(非流失对象),只有极少数部分的客户不会再继续享受其服务(流失对象)
    又如,检查出厂冰箱的合格率,本来合格率就高达了96%。如果对样本进行检测,准确率也是很高的,那么将会无法判断次品。
    2019-03-15
收起评论
20
返回
顶部