タイタニックの乗客生存予測モデルをFabricで作成してみた。(その3)

今回は、前回に引き続き、クレンジング済みデータを用いて機械学習モデルの作成を行い、、作成したモデルの精度評価の確認まで行います。

前回の記事「タイタニックの乗客生存予測モデルをFabricで作成してみた。(その2)」の続編となります。

blog.jbs.co.jp

機械学習モデルの作成準備

データセットの作成のために訓練データとテストデータを分ける作業を実施します。

前回作成した、df6['Survived']の欠損値(True)を基準に、訓練データ(train)とテストデータ(test)に分けます。

訓練データとテストデータが分けられたことを確認します。

テストデータに’Survived’カラムは必要ないので削除します。

以下のように目的変数と説明変数に分割していきます。

分割したデータが正しく分割されているか確認します。

これにより、モデル作成の準備が整いました。

モデルの作成

モデル作成には様々なアルゴリズムがあります。

今回は、実装が簡単で、イメージがしやすい「決定木」アルゴリズムを使用していきます。

※ 決定木とは、以下の画像のように条件分岐を繰り返すことで予測する機械学習モデルのことです。

モデル

scikit-learnライブラリを使って決定木モデルを作成し、訓練データにフィットさせていきます。

初めに最終モデルインスタンスを作成していきます。本記事の「機械学習モデルの作成前の準備」の章で作成した訓練データ(目的変数、説明変数)を使用し、random_state=42と設定し、モデルの内部的なランダム性を固定しています。

赤枠(DecisionTreeClassifier)のようにモデルインスタンスが作成されたことを確認できます。

以上がモデル作成となります。

このように、モデルは簡単に作成できますが、予測モデルが作成したデータを提出する前にモデルの性能を測る必要があります。

次に、作成したモデルの性能を測るための性能検証モデルを作成します。

性能検証モデルを使い精度の評価

モデル評価を行うには以下のような工程をこなす必要があります。

  • 訓練データを学習用と評価用に分割
  • 分割後の学習用データ、評価用データを使って性能検証モデルを作成
  • 作成した性能検証モデルの評価

訓練データを学習用と評価用に分割

以下の画像のように学習用、評価用に分割します。評価用データの割合をtest_size=0.2と20%に分割しています。

残りの学習用データが80%の割合にしているので、以下の画像のように約8:2の割合で分割できたことを確認します。

分割したデータを使って性能検証モデルを作成してきますが、学習用と評価用の目的変数の内訳を確認する必要があります。

まずは、学習用の目的変数y_trに含まれる値の数をカウントしています。

結果として、学習用データには非生存者(0.0)が約62.36%、生存者が約37.64(1.0)%含まれていることがわかります。

次の評価データ (y_va) における目的変数 (Survived) の内訳と割合を確認します。

計算結果として、評価用データ非生存者(0.0)が約58.66%、生存者(1.0)が約41.34%であることが確認できます。

ここでわかることが、学習用データ(y_tr)と評価用データ(y-va)の目的変数(=survived)に含まれる0(死亡)と1(生存)の割合が違うことがわかります。

  • 学習用データ(y_tr) = 0(死亡)62.36%:1(生存)37.64%
  • 評価用データ(y-va) = 0(死亡)58.66%:1(生存)41.34%

このまま性能検証用の機械学習モデルを作成できることができますが、正確にモデル評価するには0(死亡)と1(生存)の割合を統一したほうがいいです。

以下が統一する方法となります。

x_tr, x_va, y_tr, y_va = train_test_split(X_train, y_train, test_size=0.2, random_state=42)に‘stratify=y_train’を追加し、層化(データを分割する際に、特定のカテゴリやクラスの比率を保つ)します。

再度、学習用の目的変数y_trに含まれる値の数をカウントしています。

こちらも評価用の目的変数y_vaに含まれる値の数をカウントしています。

これで、学習用データ(y_tr)と評価用データ(y-va)の目的変数(=survived)に含まれる0(死亡)と1(生存)の割合ほぼ同じ形にすることができました。

  • 学習用データ(y_tr) = 0(死亡)61.66%:1(生存)38.34%
  • 評価用データ(y-va) = 0(死亡)61.45%:1(生存)38.55%

以上で、学習用と評価用のデータ分割ができました。

分割後の学習用データ、評価用データを使って性能検証モデルを作成

モデル作成では訓練データ(X_train, y_train)を使用しましたが、性能検証モデルでは分割して作成したデータ(x_tr, y_tr)を使用して作成していきます。

以上が性能検証モデルの作成となります。

作成した性能検証モデルの評価

モデルの精度評価をするには、先に機械学習モデルの予測値を計算しておく必要があります。

以下のようにモデルの予測値の生成を行い、それぞれの変数に格納していきます。

x_trの予測値を計算する理由としては、後ほど精度を確認する際に、学習用データと評価用データでどれぐらいの乖離があるか確認をするためです。

モデルの予測結果(y_tr_pred)と正解値(y-va)を比較し、予測が正しいかを視覚的に確認します。

確認をすると5人中4人は正しく予測できており、正解率は80%と確認できます。

scikit-learnのmetricsモジュールからインポートした関数で、モデルの予測精度を計算します。

各データの正解率は以下のようになりました。

  • 学習用:約90%
  • 評価用:約79%

一般的にモデルの精度を見るときには、評価用データを確認します。ここでは評価用データの精度が約79%の状態でKaggleに提出していきたいと思います。

まとめ

今回は、クレンジング済みデータを用いて機械学習モデルの作成を行い、作成したモデルの精度評価の確認まで行いました。

モデルの作成はとても簡単ですぐに終わりますが、重要になってくるのはモデルが読み込むクレンジングしたデータとなります。

次回は、精度検証したモデル(約79%)で予測値を作成し、Kaggleにデータを提出していきたいと思います。

執筆担当者プロフィール
廣川 太一

廣川 太一(日本ビジネスシステムズ株式会社)

クラウドテクノロジーサービス事業本部Data&AIプラットフォーム部Dataソリューション1グループ所属 Microsoft Fabric、SnowflakeのデータをAIに連携し誰でもデータ探索ができるよう活動中。 新潟出身の優しい筋肉。

担当記事一覧