4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

kaggleコンペに参加してみた

Last updated at Posted at 2017-12-30

#この記事は
機械学習を始めたばかりの素人がkaggleのcompetisionに参加するまでの記事です。
実際に参加してどういったことが学べたのか、書きたいと思います。

#kaggleとは
データサイエンティストが登録している世界最大のデータ解析コンペサイトです。
https://www.kaggle.com/
賞金も出ます。リクルートさんやメルカリさんもコンペ開催して一時期話題になってました。

#なんのコンペに参加するか
有名なタイタニック号の事故の生存率に参加します。
https://www.kaggle.com/c/titanic
データもここからダウンロードします。

#分析環境
MacBook Air (13-inch, Mid 2012) ←買い換えたい
python version3.6.3

##手順

###用意されてるデータ
ライブラリのimportとデータの中身を見ます。

import pandas as pd
from pandas import Series,DataFrame
import numpy as np
import matplotlib.pyplot  as plt
import seaborn as sns
%matplotlib inline

df = pd.read_csv('train.csv')
df.head()

スクリーンショット 2017-12-29 16.36.32.png

df.info()

スクリーンショット 2017-12-29 16.42.09.png

df.describe()

スクリーンショット 2017-12-29 16.45.06.png
countが列の数、meanが中央値、stdが標準偏差を表しています。
Ageの欠損値が多いよう。

↓以下は参考にデータの中身を可視化。

sns.countplot('Sex',data=df)

スクリーンショット 2017-12-29 16.51.08.png
男性多し

sns.countplot('Pclass',data=df)

スクリーンショット 2017-12-29 16.51.57.png
3等の乗客が一番多い。

sns.countplot('Pclass',data= df,hue='Sex')

スクリーンショット 2017-12-29 16.52.23.png
特に3等には男性が多い。女性は基本男性の配偶者の立場で乗船していたんだろうと推測。

df['Age'].hist(bins=80)

スクリーンショット 2017-12-29 16.54.23.png
ヒストグラムで見ると20代〜30代の若者が多い。

plt.figure(figsize=(10,5))
sns.pointplot(x='Embarked', y='Survived',data=df, color='g')  

スクリーンショット 2018-01-04 12.32.40.png
乗船した港と生存率。S港とC港では1.5倍の生存率の差がある。

sns.factorplot('Embarked','Survived', col='Pclass',data=df)

スクリーンショット 2018-01-04 12.29.16.png
乗船した港と客室グレード、それに対する生存率。

###特徴量の設計
やっていることは
・Ageの欠損値を中央値に
・文字列を数値に変換
・予測値に関係なさそうな値を削除

df.Age = df.Age.fillna(df.Age.mean())
df = df.replace('male',0).replace('female',1).replace('C',0).replace('Q',1).replace('S',2)
df.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
df = df.dropna()
df_data = df.values
df.head(10)

スクリーンショット 2017-12-29 16.56.57.png

corrmat = df.corr()
corrmat

スクリーンショット 2017-12-29 16.59.38.png
Pclass,Sex,Fareが特に相関ありそう。

##モデル作成
random forestを使います。
####random Forestとは?
多様なたくさん作り、それぞれ個別の木のアウトプットの多数決を取るアルゴリズムです。
下記図は決定木のイメージです。これの木の数と木の深さが予測精度を決める重要な要素になってきます。
image.png

以下はモデル作成とkaggle提出用のcsv作成。

from sklearn.ensemble import RandomForestClassifier 
forest = RandomForestClassifier(n_estimators =90)
forest = forest.fit(df_data[0::,1::],df_data[0::,0])

test = pd.read_csv('test.csv')
ids = test["PassengerId"].values
test.Age = test.Age.fillna(test.Age.mean())
test.Fare = test.Fare.fillna(test.Fare.mean())
test = test.replace("male",0).replace("female",1).replace("C",0).replace("Q",1).replace("S",2)
test = test.drop(["Name", "Ticket", "Cabin", "PassengerId"], axis=1)
test_data = test.values
submit = forest.predict(test_data)

import csv
submit_file = open("submit.csv", "w")
file = csv.writer(submit_file)
file.writerow(["PassengerId","Survived"])
file.writerows(zip(ids, submit.astype(np.int64)))
output_file.close()

これで出来ました。投稿出来ます。

##気になる順位は?
結果は、、、
予測精度0.75598
順位は9716中8713位でした!
低い!特徴量の設計とモデルも見直します。

#所感
・順位が表示されてやる気が出る。
・特徴量の設計からモデル作成して実際に予測するところまで出来て、データサイエンスの一通りの手順を学べる。
・色々なデータサイエンティストが投稿していて刺激を受ける。
・普通に楽しい

#参考
https://towardsdatascience.com/enchanted-random-forest-b08d418cb411

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?