你了解你的数据吗(化神篇):简易特征分析

0x00 前言

对于数据的使用,我们不管是需要了解数据质量、数据口径亦或是数据血缘,最终都将会走向对数据价值的探索上。因此,本篇尝试讨论数据挖掘中的特征分析。

本篇将会以一个具体的例子为主线,讨论一下特征分析的基本流程。

主题和数据是 Kaggle 中的入门级竞赛题《Titanic: Machine Learning from Disaster》。题目背景是预测一个人是否能够从灾难中存活。

0x01 特征总览

先整体看一下我们有哪些数据,给出的数据集如下表,总共 10 个字段,其中 survival 表明该乘客最终是否存活。

字段名

含义

描述

survival

Survival

0 = No, 1 = Yes

pclass

Ticket class

1 = 1st, 2 = 2nd, 3 = 3rd

sex

Sex

Age

Age in years

sibsp

# of siblings / spouses aboard the Titanic

parch

# of parents / children aboard the Titanic

ticket

Ticket number

fare

Passenger fare

cabin

Cabin number

embarked

Port of Embarkation

C = Cherbourg, Q = Queenstown, S = Southampton

接着看一下数据大致长什么样子:

train_df = pd.read_csv('../input/train.csv')
train_df.head()

使用pandas的内置函数可以很方便地看到数据的分布情况,比如说 Age 的平均值和最小值。

1

train_df.describe(include='all')

0x02 特征描述

接下来要做的内容会包括:

  1. 特征是否有意义:比如userid这种属于用户的唯一标识,并不具备分析的价值。
  2. 找出特征的数据类型:比如说该特征是否是 categorical features?
  3. 缺失值情况:缺失值占了多少,是否80%以上都是缺失值?

上面说的是一些基本的分析内容,分析完成之后会有相应的处理方式,比如说特征选择、特征变换、缺失值处理等,这里我们不再描述具体的步骤。

0x03 特征影响

在做各种特征工程之前,我们值得对不同特征的影响力做一些分析。

根据直觉,我们假设这些特征会对最终一个人是否获救有比较大的影响:

  1. Pclass(仓位):头等舱的人更容易被优先照顾?
  2. Sex(性别):女士优先,因此更容易先上船?
  3. Age(年龄):老人和小孩优先?

有了这些假设之后,我们分别对这些特征进行分析:

我们通过下面语句,先看一下不同 Pclass 获救的情况。

1

train_df[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean().sort_values(by='Survived', ascending=False)

Id

Pclass

Survived

0

1

0.629630

1

2

0.472826

2

3

0.242363

我们通过下面语句,看一下不同 Sex 获救的情况。

1

train_df[["Sex", "Survived"]].groupby(['Sex'], as_index=False).mean().sort_values(by='Survived', ascending=False)

Id

Sex

Survived

0

female

0.742038

1

male

0.188908

分析 Age 的时候,需要对 Age 做一个简单的分段,我们直接使用 Pandas 的函数将 Age 分为 7 段。(这样分不太合理,不错仅当说明。)

train_df['AgeBand'] = pd.cut(train_df['Age'], 7)
train_df[['AgeBand', 'Survived']].groupby(['AgeBand'], as_index=False).mean().sort_values(by='AgeBand', ascending=True)

Id

AgeBand

Survived

0

(0.34, 11.789]

0.573529

1

(11.789, 23.157]

0.359551

2

(23.157, 34.526]

0.399142

3

(34.526, 45.894]

0.417910

4

(45.894, 57.263]

0.411765

5

(57.263, 68.631]

0.346154

6

(68.631, 80.0]

0.142857

这些特征有影响吗

通过上面的分析,我们能够看出来一些现象:

  1. 仓位不同的乘客存活率差别较大,直观上来看,仓位越好,存活的越多。
  2. 女性存活率有74%,而男性只有18左右
  3. 儿童存活率较高,老人存活率低

也就是说,我们假设的三个特征都是有一定影响力的。当我们了解了不同特征对结果的影响之后,是不是可以进行了?

当然不是,还有特征组合的影响,比如说年龄的影响,目前看到的是20-50岁之间的存活率都差不多,但是会不会是说男性的其实很低,大部分存活的都是女性,然后女性拉高了整体的存活率?

0x04 特征组合

这就是特征组合了,我们以年龄和性别为组合特征来看一下影响

train_df['AgeBand'] = pd.cut(train_df['Age'], 7)
train_df[['AgeBand','Sex', 'Survived']].groupby(['AgeBand','Sex'], as_index=False).mean().sort_values(by='AgeBand', ascending=True)

Id

AgeBand

Sex

Survived

0

(0.34, 11.789]

female

0.593750

1

(0.34, 11.789]

male

0.555556

2

(11.789, 23.157]

female

0.753623

3

(11.789, 23.157]

male

0.110092

4

(23.157, 34.526]

female

0.772152

5

(23.157, 34.526]

male

0.207792

6

(34.526, 45.894]

female

0.764706

7

(34.526, 45.894]

male

0.204819

8

(45.894, 57.263]

female

0.826087

9

(45.894, 57.263]

male

0.200000

10

(57.263, 68.631]

female

1.000000

11

(57.263, 68.631]

male

0.105263

12

(68.631, 80.0]

female

NaN

13

(68.631, 80.0]

male

0.142857

从表中可以明显看出,同年龄段,女性的存活率明显高于男性,比如说(34.526, 45.894]这个年龄段,女性在76%左右,男性只有20%。

0xFF 总结

我们简单地将机器学习流程分为:数据获取、特征工程、模型训练、模型评估、模型上线这几部分。

其中特征工程是十分重要的的一环,而在做特征工程的时候又不能生搬硬套各种处理方式,应该先做特征的分析,只有对特征的分析和理解到位,才能挖掘更多的价值。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏智能算法

细数 20 世纪最伟大的十大算法

英文:Barry A. Cipra 译者:JULY 链接:blog.csdn.net/v_july_v/article/details/6127953 发明...

381100
来自专栏量子位

如何用卷积神经网络从歌曲中提取纯人声?这里有教程+代码

安妮 编译整理自 Madebyollin博客 量子位 报道 | 公众号 QbitAI 你应该对阿卡贝拉(Acapella)不陌生吧。这种无伴奏合唱的纯音乐起源于...

58470
来自专栏量子位

德国AI“算个球”:西班牙是冠军,只要别让德国进八强(严谨推理)

可能是由于人类(包括球王)预测不靠谱,前几届世界杯预测战况和冠军的任务,常常交给动物完成。

11520
来自专栏java一日一条

细数20世纪最伟大的10大算法

[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos S...

13010
来自专栏用户3246163的专栏

3.2 利率相关产品

CF(receive FRA) value = L * (FRA-R)*(T2-T1)

69330
来自专栏生信小驿站

文献翻译Complex integrated analysis of lncRNAs-miRNAs-mRNAs in oral squamous cell carcinoma(1)AbstractRe

本研究旨在通过基因表达数据揭示口腔鳞状细胞癌(OSCC)中lncRNAs-miRNAs-mRNA的调控网络。

9630
来自专栏Y大宽

Cytoscape插件3:Enrichment Map(1)

早期的基因列表解释依赖于选择一系列高得分的基因,然后建立相当主观奇怪的关系。富集分析是一个自动的,基于严格的统计学的方法来分析和解释很大的基因列表,使用的是先验...

56420
来自专栏算法channel

Kaggle最受欢迎的10个竞赛数据集

最近有人问有没有相关数据集,这几天抽时间整理了以下数据集,标题即是Kaggle竞赛题目,可以直接搜索获得赛题详细介绍,在此列出10个参赛队伍最多的竞赛题及标签...

6.3K120
来自专栏Python数据科学

【Kaggle入门级竞赛top5%排名经验分享】— 分析篇

Kaggle作为公认的数据挖掘竞赛平台,有很多公开的优秀项目,而其中作为初学者入门的一个好的项目就是:泰坦尼克号生还者预测。

41630
来自专栏专知

ICML2018论文公布!一文了解机器学习最新热议论文和研究热点

34310

扫码关注云+社区

领取腾讯云代金券