安然事件
你应该还对这件事有些印象吧?安然公司曾是一家超大型企业,有着千亿元的收入和两万名员工(微软只有220亿收入)。
由于管理体制的破败和受贿,包括人为制造能源危机致使加州大停电,安然公司最终面临破产,大批人员被判入狱。有一部名为“The Smartest Guys in the Room”的纪录片,读者可以到Netflix或亚马逊上观看。
安然事件的确挺有趣的,不过这和数据挖掘有什么关系呢?
在调查过程中,美国联邦能源管理委员会收获了60万封公司内部邮件。这些邮件可以从网络上下载:
我们来用其中的一小部分数据来举例,下表整理了一些公司人员互通邮件的次数:
可以在这里下载缩减后的数据集。完整的数据在这里,超过300MB。
动手实践
你能使用层次聚类算法将这些人分成若干类别吗?
解答
我们会通过两个人收发邮件的对象来计算相似度。比如我经常和Ann、Ben、Clara等人通信,你也一样,那么我俩就是相似的:
但如果将你我之间的通信也计算进去:
可以看到,你向我发送了190次邮件,而我只向自己发送了2封邮件。用欧几里得距离来计算的话,在不包含me和you这两列时,我们的距离是46,包含后距离是269!因此在计算两人的距离时需要排除这个因素:
def distance(self, i, j):
# 针对安然数据进行的修正
sumSquares = 0
for i in range(1, self.cols):
if k != i and k != j:
sumSquares += (self.data[k][i] - self.data[k][j]) ** 2
return math.sqrt(sumSquares)
得到的层次聚类结果是:
我还用k-means++算法进行了聚类,结果是:
这些结果很有趣,比如分类5中大都是贸易人员,分类7中则多是管理层。
安然数据中还能挖掘出很多有趣的模式,去下载完整的数据集进行尝试吧!
你也可以对其它数据集进行聚类,看看是否有新的发现。
最后,恭喜完成第八章的学习!