专栏首页数据STUDIO一个企业级数据挖掘实战项目|教育数据挖掘

一个企业级数据挖掘实战项目|教育数据挖掘

导读:大家好,我是云朵君!自从分享了一篇能够写在简历里的企业级数据挖掘实战项目,深受读者朋友们青睐,许多读者私信云朵君,希望多一些类似的数据挖掘实际案例。这就来了。 本项目旨在探讨影响学生学业表现的人口统计学和家庭特征。本项目中,使用多种不平衡数据处理方法以及各种分类器,如决策树,逻辑回归,k近邻,随机森林和多层感知器的分类机器。

👆点击关注|选择星标|干货速递👆


数据集描述

本案例数据集来自Balochistan的6000名学生。其基本情况:一共13个字段,其中RESULT为结果标签;

语言字段是经过独热编码后的四个字段,分别为Lang1, Lang2, Lang3, Lang4

另外性别、学校、是否残疾、宗教信仰四个字段为二分类离散字段;

其余如兄弟姐妹、在校兄弟姐妹数量为连续性变量。

本次数据为清洗过后"干净"数据,可以直接输入到机器学习模型中直接建模使用。

字段说明如下表所示

字段

解释

GenderCode

性别编码

IntBrothers

兄弟数量

IntSisters

姐妹数量

IntSchoolBrothers

在校兄弟数量

IntSchoolSisters

在校姐妹数量

ClassSchoolStatus

学校

Disability01

是否残疾

Lang1

语言1

Lang2

语言2

Lang3

语言3

Lang4

语言4

Religion

宗教信仰

RESULT

结果标签

数据样例

探索性数据分析

探索性数据分析有多种方法,这里直接通过绘制柱状图查看每个字段的分布状况。

了解更多:Python数据分析之数据探索分析(EDA)

从数据集特点来看,13个字段可以分为四大类。

  • 结果标签
  • 离散型变量
  • 连续型变量
  • 哑变量

结果标签

考试结果为PASS的共有4562名学生,而结果为FAIL 的共有1047名学生,从下图中也可以明显看出,该样本为不平衡数据集,因此本次案例重点在于不平衡数据分类方法。

离散型变量

性别有男女,学校有学校1和学校2,身体健康状况有是否残疾,宗教信仰分是否是穆斯林。

连续型变量

本次数据集中兄弟姐妹数量及在校兄弟姐妹数量分布情况可以由下面四张分布图很好地展示出来。

  • 大部分学生家中的兄弟姐妹有2-4个
  • 大部分学生家中的姐妹都不是在校生
  • 大部分学生家中的兄弟中也只有1-2个是在校生

哑变量

本次数据集共有四种语言,其数量分布由下图所示。接近一半的学生都是说的一种语言(Lang1)。

不平衡数据集处理方法

从上一步的探索性数据分析结果,本次学生成绩数据集为不平衡数据集,那么处理不平衡数据集处理方法都有哪些呢。这里可以参考云朵君之前的一篇机器学习中样本不平衡,怎么办?

在本文云朵君从三个方面总结了多种处理方法,见下面思维导图。

数据重采样

这里主要介绍下数据预处理层面的数据重采样方法。数据重采样主要分为上采样和下采样。

下采样,也称为欠采样(Under-Sampling),是一个为平衡数据类分布的移除大类数据的非启发式的方法。此方法的底层逻辑是平衡数据集进而克服算法的特异性。

常用的方法有随机欠采样(Random Under-Sampling, RUS),即随机排除大类的观察值,和聚焦欠采样(Focused Under-Sampling, FUS), 即移除两类边界处的大类数据。

上采样,也称为过采样(Over-Samplig),是通过复制小类观察值,从而增加小类比例的一个方法。类似的,过采样也有随机过采样和聚焦过采样两种方法。

来源:kaggle

上采样

过采样代表SMOTE方法,其主要概念也就是在少数样本位置近的地方,人工合成一些样本,整个算法的流程如下:

  1. 设定一个采样倍率N,也就是对每个样本需要生成几个合成样本
  2. 设定一个近邻值K ,针对该样本找出K 个最近邻样本并从中随机选一个
  3. 根据以下公式来创造 N 个样本
x_{new} = x_{chosen}+(x_{nearest}-x_{chosen})*\delta;\delta \in[0,1]

下采样

相对于过采样,欠采样是将多数样本按比例减少,使得模型的加权权重改变,少考虑一些多数样本,上图很好地展示了两种方法的差异 。

Tomek Link 算法

会针对所有样本去遍历一次,如有两个样本点x, y分属不同的class,即一个为多数样本而另一个为少数样本,则可以去计算它们之间的距离d(x , y) 。

此时如果找不到第三个样本点z,使得任一样本点到z 的距离比样本点之间的距离还小,则称为Tomek Link,一张图帮助理解 :

来源:Kaggle

Tomek Link 的关键思路在于,找出边界那些鉴别度不高的样本,认为这些样本点属于杂讯,应该剔除,因此可以见上图最右边,剔除以后两种类别的样本点可以更好地区分开来。

ENN算法(Edited Nearest Neighbor)

与上面Tomek Links的观念相同,ENN算法也是透过某种方式来剔除鉴别度低的样本,只是这边的方式改成了对多数类的样本寻找K个近邻点,如果有一半以上(当然,门槛可以自己设定)都不属于多数样本,就将该样本剔除,通常这些样本也会出现在少数样本之中。

混合采样

SMOTE + ENN、SMOTE + Tomek Links算法都是结合过采样与欠采样算法

SMOTEENN 使用 SMOTE 进行过采样,然后使用 Edited Nearest Neighbours 进行欠采样。

SMOTETomek 使用 SMOTE 进行过采样,然后使用 Tomek Links 进行欠采样。

不平衡数据集处理方法选择

控制变量法选择合适的处理方法。选用决策树为基分类器,并分别选择不使用数据重采样,使用SMOTE、SMOTEENN和SMOTETomek共三种数据重采样方法,比较这四种情况下的模型评价指标AUC得分情况。

最后分别选用五种不同分类器,且分别采用不同的数据重采样方法,绘制ROC曲线及得到的AUC得分情况。

ROC和AUC

ROC曲线绘制采用不同分类阈值的TPR和FPR,降低分类阈值会将更多的样本判为正类别,从而增加FP和TP的个数。为了绘制ROC曲线,需要使用不同的分类阈值多次评估回归模型,很麻烦。有一种基于排序的高效算法可以为我们提供此类信息,这种算法称为曲线下的面积(AUV,area under roc curve)。

ROC曲线的横轴为FPR,越低越好,纵轴为TPR,越高越好,故如果有两个不同的模型,曲线位于左上方的模型优于曲线位于右下方的模型,这一点可以拿曲线的面积(AUV)来量化。

完美的分类为TPR=1,FPR=0;ROC曲线过(0,0)和(1,1)点

  • AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
  • 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
  • AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
  • AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

AUC计算的物理意义为:任取一对(正、负)样本,正样本的score大于负样本的score的概率,也即是随机正类别样本位于随机负类别样本右侧的概率。

核心代码

将所有主要方法定义为函数,包括数据重采样、划分测试集和训练集、模型训练、模型评价和结果可视化。

此外,由于是比较不平衡数据集处理方法选择的优劣,这里所有的机器学习模型都采用默认参数。

def reSampler(X, y, samp):
   """不同的数据重采样策略"""
    if(samp == 'None'):
        return splitter(X, y, 0.1)    
    if(samp == 'SMOTE'):
        sm = SMOTE('auto', 42)
        X_resampled , y_resampled = sm.fit_resample(X, Y)
        return splitter(X_resampled , y_resampled, 0.1)   
    if(samp == 'SMOTEENN'):
        sm = SMOTEENN()
        X_resampled , y_resampled = sm.fit_resample(X, Y)
        return splitter(X_resampled , y_resampled, 0.1)   
    if(samp == 'SMOTETomek'):
        sm = SMOTEENN()
        X_resampled , y_resampled = sm.fit_resample(X, Y)
        return splitter(X_resampled , y_resampled, 0.1)

def splitter(X, y, test_Size):
   """划分测试集和训练集"""
    xtrain, xtest, ytrain, ytest = train_test_split(
    X, y, test_size = test_Size, random_state=12)
    return xtrain, xtest, ytrain, ytest

def rocPlotter(actu, pred, clf, samp):
   """AUC曲线绘图函数"""
    false_positive_rate, true_positive_rate, thresholds = roc_curve(actu, pred)
    roc_auc = auc(false_positive_rate, true_positive_rate)
    Title = str('ROC: ' + str(clf) + ' using ' + str(samp))
    plt.title(Title)
    plt.plot(false_positive_rate, true_positive_rate, 'b', 
    label='AUC = %0.2f'% roc_auc)
    plt.legend(loc='lower right')
    plt.plot([0,1],[0,1],'r--')
    plt.xlim([-0.1,1.2])
    plt.ylim([-0.1,1.2])
    plt.ylabel('True Positive Rate')
    plt.xlabel('False Positive Rate')
    plt.show()
    return roc_auc

def applyModel(clfr, X_, y_, xt, yt):
   """使用模型"""
    a = globals()[clfr]()
    a.fit(X_, y_)
    scor = a.score(xt, yt)*100
    pred = a.predict(xt)
    actu = yt
    return pred, actu, scor
    
def tryAll(clfList, sampList, Inputs, Outputs):
  """主函数"""
    rep = np.zeros( (len(clfList), len(sampList)), dtype=float)
    for clf, clfIndex in zip(clfList, range(len(clfList))):
      # 不同的分类器
        for samp, sampIndex in zip(sampList, range(len(sampList))):
          # 不同的重采样策略
            X_train, X_test, Y_train, Y_test = reSampler(Inputs, Outputs, samp)
            prediction , actual, score =applyModel(
            clf, X_train, Y_train, X_test, Y_test)
            currentAUC = rocPlotter(
            prediction, actual, clf, samp)
            print(clf, ' with ', samp, ' scored =  ', score, 
            ' on test set with AUC = ', currentAUC)
            rep[clfIndex, sampIndex] = currentAUC
    return rep

函数执行

Classifiers = ['DecisionTreeClassifier', 'KNeighborsClassifier', 
               'LogisticRegression', 'MLPClassifier', 
               'RandomForestClassifier']
Samplers = ['None', 'SMOTE', 'SMOTETomek', 'SMOTEENN']

report = tryAll(Classifiers, Samplers, X, Y)

结果可视化

下面以单个模型四种不同重采样策略,和五种模型单个重采样策略为例展示可视化结果。大家可以运行上述代码以得到完整的结果展示。

决策树模型在四种不同重采样策略下,得到的四种不同的结果。很明显地看到没有使用数据重采样的模型得分最差只有0.54,而使用混合采样算法的两个结果的得分都比较理想,分别是0.9732750.979196分。

接下来以上述结果中得分最高的混合采样算法SMOTETomek为例,将不平衡数据集经过SMOTETomek算法处理后,分别用 DecisionTreeClassifier决策树分类器KNeighborsClassifierK近邻分类器LogisticRegression逻辑回归MLPClassifier多层感知机, RandomForestClassifier随机森林分类器 五种机器学习模型训练和测试数据,并得到如下结果。

从结果可知道,并不是所有模型在使用混合采样算法SMOTETomek后都能达到令人满意的效果。

结果汇总

为方便查看所有结果,将所模型、所有重采样方法汇总到如下图所示的DataFrame中。从AUC结果看,使用混合采样算法SMOTEENN对数据集处理,并使用决策树模型对结果进行预测,将会得到最佳预测效果。其AUC=0.979

pd.DataFrame(report, columns = Samplers, index = Classifiers)

交叉验证

上节中选用五种不同分类器,三种不同的数据重采样方法,结合ROC曲线及AUC得分情况来确定重采样方法对选择。

本节可以理解为是上节的拓展。

核心代码

# 实例化五种分类器模型
dTree  = DecisionTreeClassifier()  
logReg = LogisticRegression()
knn    = KNeighborsClassifier(n_neighbors=5)
rF     = RandomForestClassifier()
MLP    = MLPClassifier()

# 实例化十种数据重采样模型
rmun = RandomUnderSampler()
cnn = CondensedNearestNeighbour()
nm = NearMiss()
enn = EditedNearestNeighbours()
renn = RepeatedEditedNearestNeighbours()
tkLink = TomekLinks()
rmov = RandomOverSampler()
sm = SMOTE()
sm_en = SMOTEENN()
sm_tk = SMOTETomek()
# 以SMOTEENN采样方法为例
sm_en = SMOTEENN()
X_resampled, Y_resampled = sm_en.fit_resample(X, Y)
# 分别使用10折交叉验证的方法得到平均得分
scores_dTree = cross_val_score(dTree, X_resampled, Y_resampled, cv = 10, scoring='roc_auc')
scores_dTree = scores_dTree.mean()
# 打印出每次的结果
print('After appling SMOTENN: ')
print('   dTree,       logReg   ,         KNN    ,       rF   ,           MLP')
print(scores_dTree, scores_logReg, scores_knn, scores_rF, scores_MLP)

将所有结果存储在一个DataFrame里

Classifiers = ['DecisionTreeClassifier', 'LogisticRegression', 
               'KNeighborsClassifier', 'RandomForestClassifier',  
               'MLPClassifier']
Samplers = ['None','Random Undersampling', 'CNN', 'NearMiss', 
            'ENN', 'RENN','Tomek Links','SMOTE', 
            'Random Oversampling', 'SMOTEENN','SMOTETomek']

pd.DataFrame(report, columns = Samplers, index = Classifiers)

并用热图可视化更加直观地展示出结果来

import seaborn as sns
plt.figure()
ax = sns.heatmap(report,xticklabels=Samplers, 
                 yticklabels=Classifiers, 
                 annot = True, vmin=0, 
                 vmax=1, linewidth=0.1, 
                 cmap="YlGnBu",)

从热图的特性可以看出,蓝色越深,模型效果越好。本案例中可以得到如下几个结论

  1. 随机森林分类器在使用RENN及SMOTEENN重采样处理后的数据时,模型效果均比较理想,AUC得分分别为0.940.98
  2. 采用SMOTEENN重采样处理后的数据,在所有模型中均表现良好,其次是RENN重采样策略
  3. 随机下采样,CNN及NearMiss等采样策略效果并不明显
  4. 逻辑回归模型对于所有的采样策略均不敏感

写在最后

本例采用的来自Balochistan的6000名学生不平衡数据集。本项目旨在探讨影响学生学业表现的人口统计学和家庭特征。

本例使用清洗后的数据集,以探索数据变量的分布特征开篇,重点介绍了数据不平衡处理的各种方法,以及演示如何通过交叉验证方法选择合适的数据不平衡处理以及选择合适的机器学习分类模型。

本文后续工作可以是通过正文中得到的结果,选择几个合适的模型,通过适当的模型调参方法选择恰当的参数,以确定本次数据挖掘的最终模型。

当然,机器学习模型等的选择并不仅限于本文中所提到的这几种方法,欢迎大家踊跃尝试,与云朵君一起学习成长。

本文分享自微信公众号 - 数据STUDIO(jim_learning),作者:云朵君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个企业级数据挖掘实战项目|客户细分模型(下)

    本次实战项目共分为上下两部分,上篇《一个企业级数据挖掘实战项目|客户细分模型(上)》包括数据探索性数据分析,缺失值等处理,各个关键变量的分析。最后通过聚类方法,...

    数据STUDIO
  • 一个企业级数据挖掘实战项目|客户细分模型(上)

    客户细分模型是将整体会员划分为不同的细分群体或类别,然后基于细分群体做管理、营销和关怀。客户细分模型常用于整体会员的宏观性分析以及探索性分析,通过细分建立初步认...

    数据STUDIO
  • 【工具】六大工具帮你做好大数据分析

    大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来...

    小莹莹
  • 分享一个能够写在简历里的企业级数据挖掘实战项目

    使用工具: python、pandas、numpy、matplotlib、seaborn、sklearn库

    数据STUDIO
  • 6个用于大数据分析的最好工具

    大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来...

    小莹莹
  • 6个用于大数据分析的最好工具

    大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来...

    华章科技
  • 6个用于大数据分析的最好工具

    大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来...

    华章科技
  • 大数据处理分析的六大工具

    下面请看详细介绍: Hadoop Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。...

    用户1410343
  • 10本书,从Python爬虫小白进阶数据分析大神(建议收藏)

    导读:吾日三省吾身,过年胖了吗?情人节过了吗?发际线还好吗?别想这么多啦,程序员和数据科学家的世界里,只有Python值得你费脑子!今天为大家准备了10本数据分...

    华章科技
  • 2017年中国国际大数据挖掘大赛落幕 大数据与产业融合是大势所趋

    近日,历时10个月的2017年中国国际大数据挖掘大赛在贵安落下帷幕,23个创业项目与投资团初步达成投资意向,金额高达3.24亿元。 ? 2017中国国际大数据挖...

    企鹅号小编
  • 链家与网易合作重塑房产交易市场,浪潮联合多家机构共建教育大数据实验室 | 大数据24小时

    数据猿导读 环境大数据公司“泛测环境”完成2000万元融资;用大数据重塑房产交易市场,链家网宣布与网易达成战略合作;物联网大数据公司“云基物宇”拟新三板挂牌上市...

    数据猿
  • 大数据24小时 | 电通安吉斯推出“数据实验室”,九次方与韩国The IMC共建舆情大数据平台

    海致BDP进军教育市场,与恒企教育合作打造O2O教育新模式;九次方大数据与韩国The IMC集团达成战略合作,将共建舆情大数据平台;Teradata发布物联网分...

    数据猿
  • 百应荣获GMTIC 2020年度最佳MarTech领军者和优秀人工智能技术平台两项大奖|腾讯SaaS加速器·学员动态

    ? 来源 |  腾讯SaaS加速器二期项目-百应科技 ---- 11月19日,历时数月的iDigital年度数字营销大赏在GMTIC全球营销技术及零售创新峰会...

    腾讯SaaS加速器
  • 【NLP】实践一个完整的数据挖掘项目

    大部分机器学习项目死在第1步和第2步,平时我们说的机器学习,指的是3、4、5这3步,实践中,其实最难的是业务理解这一步,业务理解OK了,后面的一切都有章可循。

    yuquanle
  • 我是如何收获了数据挖掘的人生?

    大数据文摘
  • 数据挖掘工作总结(职业篇)

    前面对数据挖掘相关资源等等进行了总结。但是,很多人不明白学习数据挖掘以后干什么,这个问题也经常被问到。记得刚学数据挖掘的时候,有一个老师说学数据...

    机器学习AI算法工程
  • 【活动回顾】成都理工信科院大数据技术讲座

    加米谷大数据
  • 面向行业信息化的商业智能产品推荐

    随着竞争的不断加剧,商业智能的应用已经在在企业的竞争中起到决定性的作用,通过商业智能,可以让企业的老板快速的对于市场信息做出敏捷的判断,及时掌握企业内部信息,以...

    逐月的天堂
  • 【数据挖掘】数据挖掘工作总结

    导读:很多人不明白学习数据挖掘以后干什么,这个问题也经常被问到。记得刚学数据挖掘的时候,有一个老师说学数据挖掘有什么用,你以后咋找工作。当时听了,觉得很诧异,不...

    陆勤_数据人网

扫码关注云+社区

领取腾讯云代金券