Kaggle项目实战-泰坦尼克号船员生存率预测

Kaggle是一个国际上的大数据竞赛的平台,上面有非常多的数据项目供全球的数据从业者们来挑战。一方面获得好的排名可以为自己的简历增添色彩,另外一方面通过真实项目的练习,是一种非常好的方式来学习Data Analysis,Machine Learning,Data Mining这些技能。它的slogan就是“challenge yourself with real-world machine learning problems”。

Kaggle

个人也是第一次做kaggle的项目,在平台的推荐下,选择了更适合初学者的项目“Predict survival on the Titanic and get familiar with ML basics”。(提示一下,Kaggle平台的项目类型非常多:有汽车领域,医疗领域,房地产领域,公共交通领域,医疗领域,商业领域,互联网领域等)

一,了解项目背景:

泰坦尼克号的沉没是历史上最臭名昭着的沉船之一。1912年4月15日,在首次航行中,泰坦尼克号在与冰山相撞后沉没,2224名乘客和机组人员中有1502人遇难。这场轰动的悲剧震撼了国际社会,并导致了更好的船舶安全条例。海难导致生命损失的原因之一是乘客和机组人员没有足够的救生艇。虽然幸存下来有一些运气因素,但一些人比其他人更有可能生存,比如妇女,儿童和上层阶级。在这个挑战中,我们要求你完成对哪类人可能生存的分析。我们特别要求你运用机器学习的工具来预测哪些乘客幸免于难。

原始数据:

Data

我们的数据分为两个部分,一个训练集一个测试集。训练集是部分船员的真实幸存数据,我们用它来训练我们的模型。测试集只有每位船员的特征,却没有最后的生存结果,我们要做的就是通过自己训练的模型来预测这些测试集里面的船员,哪些人才能真正活下来。

Data

上面就是我们数据集中包含的特征,从上到下分别是:幸存与否,票类(代表社会经济学地位1表示上层,2代表中层,3代表下层),性别,年龄,船上兄弟姐妹配偶的数量(对个人),船上父母孩子的数量(对个人),票号,票价,客舱号码,登船的港口。

二,数据探索分析:

首先我们得了解一下项目的数据到底是什么样子的:

data_begin

查看每个特征下的数据完整性:

为了统一数据的处理,我们将data_train与data_test连接为一个数据组。我们同时可以看一下data的描述性统计结果。

描述性统计

从之前的描述中,我们可以看到我们有的数据特征是数值型的数据,有的是分类型的数据,我们要对数据进行建模,就需要将数据进行归一化处理。我们首先来处理分类型的数据。

分类型的数据

分类数据主要有Name,Sex,Ticket,Cabin,Embarked。除此之外,还有Pclass已经在原始数据中处理好了。

我们来分别看一下这些数据和生存率之间的关系到底大不大。


票类

从票类(Pclass)与Survived(幸存)之间的关系看,高阶层的人生存率明显要高于低阶层的人。这里我们就可以做出 一个假设:

假设一:高阶层的人要比低阶层的人更容易生存下来。

性别

假设二:女性比男性更容易在灾难中生存。

父母儿女数量,兄弟姐妹配偶数量

从上面可以看出拥有兄弟姐妹配偶的总数量,父母儿女总数量和生存率之间是具有相关性的,但是他们没有明显的趋势性。因此在这里,我们只能这样假设:

假设三:家庭成员的数量和生存率相关。

年龄

关于年龄这个特征我们可以看见一个有趣的事,在20—40岁这个年龄区间内,出现了高死亡率,高生存率的现象。如果单看一个图表,就很有可能会对我们造成误导。而出现这种情况的原因,个人认为是由于年龄在20-40岁的用户量较多造成的。因此这里我们暂时不做假设,下面对不同年龄在不同特征进行细分。

Pclass和Age

从上面的途中我们可以看出来,处于上层阶级(Pclass=1)的情况下,年龄阶段在20-60岁的人生存力相对较高,而处于下层阶级20-40岁的人出现了高死亡率的现象。

性别,登船口,阶级

上面这张图展示的是性别,登船口,社会阶级不同情况下各自的生存率。我们看到一个有趣的现象,在C港口登陆的人男性的生存率是明显高于女性的生存率的。并且在Q港口,男性的生存率远低于其他港口的男性,并且上层阶层的人(Pclass=1)生存率竟然低于下层阶层(Pclass=3)。

加入了价格

加入票价之后,我们可以看到,幸存者的票价是远高于死亡者的票价的(在S,C港口),而在Q港口,生存和死亡的票价基本相等。

综合上面的数据探索我们可以发现,年龄(Age),性别(Sex),阶级(Pclass),登陆港口(Embarked),票价(Fare),拥有的兄弟姐妹配偶数量(SibSp),父母儿女而女数量(Parch)都和生存率(Survived)之间存在着显著的相关性。下面我们需要进行的就是对数据进行处理,便于后面建立模型。

三,数据清洗及处理:

首先我们需要将数据表中没有用处的数据全部剔除掉,这里我们首先剔除的是Ticket(票号)和Cabin(船舱号)这两个没有任何价值信息的数据。

剔除Ticket和Cabin

再次剔除训练集中的PassengerId,只保留特征数据。并且我将Name也理解为无用的数据,个人认为它和生存率之间不存在太大的关联性。因此删除数据集中的Name列。

剔除Name

性别替换:女性为1,男性为0,并将它们设置为数值型。

性别替换

下面我们对年龄的缺失值进行处理,一般意义上我们处理缺失值有以下几种方式:

    1.对于确实量占到总体数量一半以上的特征,我们可以将其删除。

    2.对于部分缺失的数据,我们可以直接用中位数,众数或平均数来替换,但往往会丢失数据的敏感性。

3.用机器学习的方式建立模型,然后对缺失值进行预测。

这里我们选取了第二种方式,为了避免数据大面积失真,我们用联合了Sex和Pclass针对每一种组合都取出他们的年龄中位数,最后再根据缺失值的组合,将计算的值放进去。

填充年龄的缺失数据

年龄本身是一个连续型数值型的数据,现在我们将年龄变成分类化的数据。我们新建一个特征来表示年龄分组,不同年龄分组下的人生存率也是不同的。

年龄分组

对年龄进行分组操作,分组完成后将分组特征剔除,只保留年龄特征。

年龄

我们新建一个特征来联合表示SibSp和Parch,他们都是家庭成员,我么用一个特征FamilySize来表示。从下面的图中我们可见家庭人数的数量和生存率相关度还是比较高的。

家庭成员

我们再创建一个特征表示这样的一个人他是独自来的或者是跟家人一起来的。用这样一个特征来替代家庭成员。

Alone or Not

删除家庭成员的其他特征,哟isAlone来代替。

isAlone

新建一个联合了年龄和Pclass的人工特征。

联合特征

在登陆港口(Embarked)这个特征中,有两个缺失数据,我们用最简单的方式将其填充即可。

填充缺失值

将Embarked也变成数值型的数据,便于后面建立模型。

Embarked

下面要处理的特征就是Fare,我先将其缺失值用中位数的方式进行填充,然后将其变为由范围表示的FareBrand。

FareBrand

我们对Fare进行替换后,我们就可以删掉新建的FareBrand特征,然后我们整个数据清洗的工作就结束了。

Fare

四,建立模型:

在开始建立模型之前,我们先要对训练集,测试集中的数据做一个概览。

处理后的数据

我们将训练数据集中除去Survived的部分作为最终训练数据,而把训练集中的Survived作为结果值,将其称为验证集。而把测试集中除去passengerId的数据作为测试数据输入值。

数据分组建模

泰坦尼克号船员生存率问题是一个分类预测问题,为了找到最优模型。我们导入多个数据挖掘算法来建立模型。从上到下依次是:逻辑回归,支持向量机,随机森林,K近临,朴素贝叶斯,感知器,决策树。

导入相应的算法包

首先用逻辑回归来拟合,最后的准确率为78.9%:

逻辑回归

再试试决策树和随机森林:

决策树,随机森林

其他算法的拟合过程就不一一列举了,拟合的得分如下表所示,其中随机森林和决策树的准确度最高为86.87%。

各种算法拟合结果

最后我选择随机森林算法模型的预测结果作为最终结果,将其最终结果导出csv文件。

预测结果

最后我们的结果就是下图所示的样子,对不同id的用户它是否能生存给出了结论。

最终结果

最终平台给的评分为0.773分,Top62%。算是第一次项目的一个评价吧。

项目评价

五,回顾与总结

1.整个项目过程中,最为主要的部分其实就是在数据的处理与特征的建立这一块,尤其是对于缺失值的处理,特征的转化,新特征的转化等等。自己得分不高,也是在这一块没有优势,后面可以多研究一下特征工程相关的内容。

2.对数据的理解同样也是影响我们模型准确率很大的一部分,比如说,我认为Name这个特征是无用的,就将其删除了,而有的同学则认为它是一个必要特征,应该保留。这就是对数据的理解不同了,最终导致的结果也肯定不同。因此后面在做数据分析的时候,我们首先应该做的就是去理解业务,理解数据,避免自己不了解业务,然后瞎分析一通,这就是典型的为了分析二分析,应当极力避免。

3.只有练习,才能真正提高,之前也看过一些关于数据挖掘,机器学习的书,但对于这些东西也只是知道,想要去做点东西,确实无从下手。通过这一次的练习,感觉对Data Mining的过程清晰多了,后面要做的就是不断地练习,将技能强化为能力。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容