文章目录
【文章系列】
第一章 初探Kaggle竞赛————Kaggle竞赛系列_Titanic比赛
第二章 知识补充_随机森林————数学建模系列_随机森林
第三章 知识补充_LightGBM————集成学习之Boosting方法系列_LightGBM
第四章 再战Kaggle竞赛————Kaggle竞赛系列_SpaceshipTitanic比赛
第五章 重温回顾_学习金牌方法_数据分析————Kaggle竞赛系列_SpaceshipTitanic金牌方案分析_数据分析
第六章 重温回顾_学习金牌方法_数据处理————Kaggle竞赛系列_SpaceshipTitanic金牌方案分析_数据处理
【前言】
Spaceship Titanic比赛,类似Titanic比赛,只是增加了更多的属性以及更大的数据量,仍是一个二分类问题。
今天要分析的是一篇大神的解决方案,看完后觉得干货满满,由衷地敬佩他们对数据分析的细致程度,对比之下只觉得之前自己的分析仅仅是表面功夫,单纯靠着模型的强大能力去完成任务。看来以后还是得不断地向各位前辈大佬学习,完善自己的解决方案!!!
【比赛简介】
Spaceship Titanic比赛是一个在Kaggle上举办的机器学习挑战,参赛者的任务是预测Spaceship Titanic在与时空异常碰撞时,哪些乘客被传送到了另一个维度。这个比赛提供了从飞船损坏的计算机系统中恢复的一组个人记录,参赛者需要使用这些数据来进行预测。
【正文】
(一)数据获取
参考之前的Titanic比赛的数据获取操作 Kaggle_Titanic比赛
(二)数据分析
train.csv
- 用于训练数据的大约三分之二(约8700名)乘客的个人记录。PassengerId
- 每位乘客的唯一标识。每个标识的格式为gggg_pp,其中gggg表示乘客所在的团体,pp是他们在团体中的编号。一个团体中的人通常是家庭成员,但并不总是如此。HomePlanet
- 乘客出发的星球,通常是他们的永久居住星球。CryoSleep
- 表示乘客是否选择在航程期间被置于悬浮动状态。处于冷冻睡眠状态的乘客被限制在他们的舱房内。Cabin
- 乘客所住的舱房号码。格式为deck/num/side,其中side可以是P(港口)或S(舷侧)。Destination
- 乘客将要下船的星球。Age
- 乘客的年龄。VIP
- 乘客是否支付额外费用获得特殊的VIP服务。RoomService
,FoodCourt
,ShoppingMall
,Spa
,VRDeck
- 乘客在太空巨轮泰坦尼克号的许多豪华设施上的费用金额。Name
- 乘客的名字和姓氏。Transported
- 乘客是否被传送到另一个维度。这是目标,也就是您要预测的列。test.csv
- 剩余三分之一(约4300名)乘客的个人记录,用作测试数据。您的任务是预测这一集合中乘客的Transported值。sample_submission.csv
- 一个以正确格式的提交文件。PassengerId
- 测试集中每位乘客的标识。Transported
- 目标。对于每位乘客,预测True或False。
1. 缺失值
print('TRAIN SET MISSING VALUES:')
print(train.isna().sum())
print('')
print('TEST SET MISSING VALUES:')
print(test.isna().sum())
2. 重复值
print(f'Duplicates in train set: {
train.duplicated().sum()}, ({
np.round(100*train.duplicated().sum()/len(train),1)}%)')
print('')
print(f'Duplicates in test set: {
test.duplicated().sum()}, ({
np.round(100*test.duplicated().sum()/len(test),1)}%)')
3. 属性类型分析
train.nunique()
4. 类别分析
train.dtypes
一般而言,连续型属性被存储为float
和double
类型,离散型属性被存储为object
和int
类型。
- 6个连续性属性(
RoomService
,FoodCourt
,ShoppingMall
,Spa
,VRDeck
,Age
) - 4个离散属性(
HomePlanet
,CryoSleep
,Destination
,VIP
) - 剩余3个描述性/定性属性(
PassengerId
,Name
,Cabin
)
5. 分析目标数值占比
# 特征尺寸
plt.figure(figsize=(6,6))
# 饼状图
train['Transported'].value_counts().plot.pie(explode=[0.1,0.1], autopct='%1.1f%%', shadow=True, textprops={
'fontsize':16}).set_title("Target distribution")
分布平衡,因此不需要采用过采样、欠采样方法。
(三)属性分析
1. 对年龄Age分析
(1)直方图分析
直方图关键参数:hue=Target属性
# 特征尺寸
plt.figure(figsize=(10,4))
# 直方图
sns.histplot(data=train, x='Age', hue='Transported', binwidth=1, kde=True)
plt.title('Age distribution')
plt.xlabel('Age (years)')
注意到:
- 0-18岁的青少年更容易被转移。
- 18-25岁的人被转移的可能性比不被转移的可能性要小。
- 25岁以上的人被转移的可能性和没有被转移的可能性差不多。
(2)创建新属性
根据直方图False与True的高度关系,对年龄划分为多层,并依次建立一个新特征。
# 新特征-训练集
train['Age_group']=np.nan
train.loc[train['Age']<=12,'Age_group']='Age_0-12'
train.loc[(train['Age']>12) & (train['Age']<18),'Age_group']='Age_13-17'
train.loc[(train['Age']>=18) & (train['Age']<=25),'Age_group']='Age_18-25'
train.loc[(train['Age']>25) & (train['Age']<=30),'Age_group']='Age_26-30'
train.loc[(train['Age']>30) & (train['Age']<=50),'Age_group']='Age_31-50'
train.loc[train['Age']>50,'Age_group']='Age_51+'
# 新特征-测试集
test['Age_group']=np.nan
test.loc[test['Age']<=12,'Age_group']='Age_0-12'
test.loc[(test[