/Enron

机器学习建模分析 - 从安然公司邮件中发现欺诈证据

Primary LanguageJupyter Notebook

Enron

项目概述

安然曾是 2000 年美国最大的公司之一。2002 年,由于其存在大量的企业欺诈行为,这个昔日的大集团土崩瓦解。 在随后联邦进行的调查过程中,大量有代表性的保密信息进入了公众的视线,包括成千上万涉及高管的邮件和详细的财务数据。 根据安然丑闻中公开的财务和邮件数据来构建相关人士识别符,运用机器学习技能构建一个算法,通过公开的安然财务和邮件数据集,找出有欺诈嫌疑的安然雇员。

项目描述

此项目目标为找出安然公司可能存在欺诈的嫌疑人,机器学习在此过程中可以帮助我们根据特征找出这些人。在该数据集中数据点总数为146;特征总数为20;poi数量为18,非poi数量为128,该数据集非常不平衡,所以最终评估时应该使用Recall和Precision指标;有很多特征都存在缺失值。我在数据集中发现了异常值,如在‘salary’和‘bonus’中发现‘TOTAL’项,此项将所有数据汇总,所以造成一个非常大的值。通过可视化(散点图)的方式发现的,然后将其删除。此外还有“THE TRAVEL AGENCY IN THE PARK”,其不是一个人;“LOCKHART EUGENE E”,其值全为‘NaN’。

最终使用了'salary', 'bonus', 'exercised_stock_options', 'total_stock_value', 'fraction_to_poi'这5个特征,通过‘SelectKbest’来挑选,将K值设为5,既取表现最好的前5个特征,特征得分分别为‘24.8’、‘24.2’、 ‘20.8’、‘18.3’、‘16.4’。需要进行特征缩放,因为有的特征是10的6次方,有的则为3次方,差距较大,如不使用缩放可能会造成过大的数据将过小的数据挤得看不出。

我自己创建了两个特征'fraction_from_poi'和'fraction_to_poi'。目的是为了看出poi在该人的收发邮件中所占得比例。由于新建的特征并没有包含在最终特征当中,所以未对分类器造成影响。

最终使用了朴素贝叶斯。尝试了决策树算法,SVM。其中SVM性能最差,耗时最久且评估最低。由于样本较小,使用了GridSearchCV来调整参数。该方法会自动选择你所提供参数选项中的最优选项组合。并且使用了Kfold方法进行验证的,该方法会自动将数据集分为k份(我设定为2),然后进行k次运算,每次取k-1份数据作为训练集,剩下的1份作为验证集,因为会进行k次,所以理论上是用所有数据进行训练且用所有数据进行验证。

最后,Recall:0.30000 Precision:0.45558 Recall=TP(TP+FN),表示正确预测的数量占所有正确数量的比值; Precision=TP(TP+FP),表示正确预测的数量占所有预测为正确的比值。 在此项目中,被选择出来的POI中有45.6%是真正的POI;在真正的POI中有30.0%的POI被选出来。

总结

  • 处理数据集
  • 使用测试数据验证机器学习的结果
  • 使用定量指标评估机器学习的结果
  • 创建、选择和转换特征
  • 比较机器学习算法的性能
  • 为获得最大性能调整机器学习算法
  • 清楚表述机器学习算法