【Kaggle】タイタニック号乗客の生存予測(Fareの欠損値を修正 その3)[Python]

  • URLをコピーしました!
目次

Kaggle

前回は機械学習・データサイエンスのプラットフォーム「Kaggle(カグル)」の「タイタニック号乗客の生存予測」のデータセットのFareの修正値を決めました。

今回は欠損値を修正し、機械学習、予想、そしてkaggelへ提出・スコアの取得を行っていきます。

ということでまずはデータの読み込みから。

<セル1>

import pandas as pd

train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")

train.loc[train["Sex"] == "male", "Sex"] = 0
train.loc[train["Sex"] == "female", "Sex"] = 1
test.loc[test["Sex"] == "male", "Sex"] = 0
test.loc[test["Sex"] == "female", "Sex"] = 1

test.isnull().sum()

実行結果
PassengerId      0
Pclass           0
Name             0
Sex              0
Age             86
SibSp            0
Parch            0
Ticket           0
Fare             1
Cabin          327
Embarked         0
dtype: int64

今回、値が欠損していたのはテスト用データのFare(料金)の1つの値でした。

そこで「test.isnull().sum()」でそれぞれの特徴量の欠損値の数を確認してみると、確かにFareで欠損値が一つとなっています。

今回はこの欠損値を「7.8875」に修正します。

Fareの欠損値を修正する

ということで早速値を修正していきます。

<セル2>

test.loc[test["Fare"].isnull() == True, "Fare"] = 7.8875

test.isnull().sum()

実行結果
PassengerId      0
Pclass           0
Name             0
Sex              0
Age             86
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          327
Embarked         0
dtype: int64

「test.isnull().sum()」で確認してみると、確かに欠損値は「0」になりました。

さらにちゃんとFareの値が「7.8875」になっているか、乗客No.1044のデータを確認してみます。

<セル3>

print(test[test["PassengerId"] == 1044])

実行結果
     PassengerId  Pclass                Name Sex   Age  SibSp  Parch Ticket  \
152         1044       3  Storey, Mr. Thomas   0  60.5      0      0   3701   

       Fare Cabin Embarked  
152  7.8875   NaN        S  

間違いなく修正されていることが確認できました。

機械学習して、生存予想をしてみる

次に機械学習をして、それぞれの乗客の生存予想をしていきましょう。

前に予想をした時とほぼ同じですが、変数x(使用する特徴量)に「Fare」を追加します。

ちなみに前に予想を行った時の記事はこちらです。

ということでこんな感じです。

<セル4>

from sklearn.svm import LinearSVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

x = train.loc[:, ["Pclass", "Sex", "SibSp", "Parch", "Fare"]]
y = train["Survived"]

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, train_size=0.8)

model = LinearSVC(max_iter=10000000)
model.fit(x_train, y_train)
pred = model.predict(x_test)

print(accuracy_score(y_test, pred))

実行結果
0.8044692737430168

前回、ここでのスコアは「0.7932960893854749」だったので、少し良くなっている…でしょうか。

それではテスト用データセットの予想をしてみます。

こちらでも変数x_testsetに「Fare」を追加するのを忘れないようにしてください。

<セル5>

x_testset = test.loc[:, ["Pclass", "Sex", "SibSp", "Parch", "Fare"]]

pred = model.predict(x_testset)
print(pred)

実行結果
[0 1 0 0 1 0 1 0 1 0 0 0 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 0 1 1 0 0 1
 1 0 0 0 0 0 1 1 0 0 0 1 1 0 0 1 1 0 0 0 0 0 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0
 1 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 0 0 0
 1 1 1 1 0 0 1 0 1 1 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0
 0 0 1 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 1 0 1
 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0
 1 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 1
 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0
 1 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0
 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 0 1 1 0 1 0 0 1 1 0
 0 1 0 0 1 1 1 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 0 0 0
 0 1 1 1 1 1 0 1 0 0 0]

そして提出用ファイルを出力します。

<セル6>

submit_data = pd.DataFrame()

submit_data["PassengerId"] = test["PassengerId"]
submit_data["Survived"] = pred

submit_data = submit_data.set_index("PassengerId")

submit_data.to_csv("./submit_data_fare.csv")

出力された「submit_data_fare.csv」をKaggleに提出します。

提出方法はこちらの記事で解説していますので、良かったらご覧ください。

で、今回の結果は…

前のスコアが「0.77272」だったのに対し、今回は「0.77511」とほんの少し良くなりました。

機械学習にブレはあるので、スコアが良くなった要因がモデルが良くなったからなのか、たまたまなのか分かりませんが、まぁよしとしましょう。

次回からは訓練用データセットに2つの欠損値がある「Embarked(乗船地)」のデータを修正していきます。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次