はじめに
こんにちは!昨年度に土木系の大学院を修了し、今年新卒で入社したK.Mと申します!現在は研修を終え、フロントエンドエンジニアとしてキャリアをスタートしました。今回はそんな私がKaggleのチュートリアルにチャレンジした事について記事にいたします!(ペーペーなんだからフロントの勉強しろよ!という声が聞こえてきそうですが・・・😅)
Kaggleとは?
Kaggleとは機械学習コンペティションプラットフォームです。企業や政府がコンペティション形式で課題を提示し、各参加者は課題に対する機械学習モデルを構築して予測精度を競い合います。競い合って楽しいだけでなく、コンペティションには賞金が設定されているものもあり、より競技性の高いコンペとなっています。
Kaggleを始めようと思ったきっかけ
今年度からの方針として、弊社ではAI資格の取得推進に取り組んでいます。その一環としてMicrosoft AI-900の勉強をしていたのですが・・・・
座学よりコーディングがしたい!!!!!
そんな思いから、実際にモデルの構築に取り組もう!となった次第です。本来一からモデルを構築しようと思ったらデータ収集が大変ですが、Kaggleであれば実行環境とデータが準備されているので、モデル構築に集中することができます。また、フォーラムで質問や議論が活発に行われていたり、QiitaやZennでもKaggleに関する記事が豊富だったりと、コミュニティが活発なのもうれしいポイントです!
いざ実践
ソースコード
説明を始める前に1点、今回は実行結果と合わせてコードを乗せたかったので画面のスクリーンショットを使って説明していきます。ですが、スクショだと文字が見にくいケースもありますので、そのような場合はこちらのソースコードを合わせて見てみてください!
参加コンペ
今回は初めてという事で、チュートリアルのTitanic Tutorial (以降タイタニック)にチャレンジしてみました!タイタニックは、かの有名なタイタニック号の沈没事故のデータセットを使用して、乗客が生存したかどうかを予測する問題です。チュートリアルとしては他にもいくつかコンペがありますが、今回はシンプルな2値分類問題であるタイタニックに取り組んでみます!
データの読み込み
それではデータを見ていきます!Kaggleアカウントを登録したら、自分のホーム画面がこちらのようになります。
こちらの左上にあるCreateボタンを押してnew NoteBookを選択すると、実行環境となるKaggleNoteBookが開きます!KaggleNoteBookは対話型コンソールという、各セルに書かれたコードを即時実行することができるファイルです。また、対話型コンソールの各セルに書かれた変数は他のセルでも実行することができるため、素早くデバッグを行えるのが大きなメリットとなっています!セルを実行するには、セルを選択した状態でShift + Enterを押すだけで実行でき、その実行結果は写真のようにセルの下部に表示されます!(写真はノートブック作成時にデフォルトで書かれているコードにprint(Hello kaggle!)
を書き足して実行しました)
これだけで環境構築はおしまいです
もはや環境構築といえないほどお手軽ですね笑。(業務で扱う環境もこれくらい簡単にできたらいいのにな・・・と思う新人エンジニアです😢)続いて学習に使うデータを見ていきます。データはKaggle上にcsv形式で保存されているのでそれを取得します。データの取得には右下にある小さな矢印ボタンを押すとサイドバーが開きます。サイドバーにあるAdd Inputを押すと検索バーが出てくるので、そこにtitanicと打ち込むとタイタニックのデータセットが出てきますので、プラスボタンを押すと取り込むことができます!
取り込みが完了すると①の画面にcsvファイルが3つ取り込まれているのが確認できます。ファイル名をダブルクリックするとプレビュー画面が出てきますが、今回は機械学習で必須のライブラリであるPandasをつかって確認していきます!pandasの細かい説明は公式ドキュメントに任せますが、簡単に説明するとデータの読み込みから加工、分析まで行うことのできるライブラリです!一番最初のセルに書かれていたimport pandas as pd
でインポートができているため、csvファイルの読み込みはtrain = pd.read_csv("/kaggle/input/titanic/train.csv")
で行うことができます。これを実行してデータを見てみると・・・
このようにきれいな表形式でデータを確認することができます!各項目は英語で書かれていますが、内容としては以下のようになっています!
- PassengerID : 乗客ID
- Survived : 生存か死亡か (目的変数)
- PClass : 乗船クラス
- Name : 乗客名
- Sex : 乗客の性別
- Age : 乗客の年齢
- SibSp : 一緒に乗船した兄弟姉妹・配偶者の数
- Parch : 一緒に乗船した両親・子供の数
- Ticket : チケット番号
- Fare : 料金
- Cabin : 船室番号
- Embarked : 搭乗港
これらのデータは機械学習モデルの構築に自由に使うことができます。本来であれば、ここからデータの考察を行ったり、考察をもとに特徴量エンジニアリングなどの工程を挟みますが、話すと書くのが大変長くなってしまうので次回以降の記事で行っていきたいと思います😅それでは、メインディッシュの機械学習モデルの構築作業を行っていきます!
モデルの学習
今回は説明変数として、乗船クラス・性別・年齢・料金の4つを使いたいと思います。この中で性別のみ数値データではないのでOnehotEncordingと呼ばれる変換を行います。また、年齢は一部データの欠損があるので中央値で埋めていきます。
続いてデータの分割を行います。データの分割についても今後の記事で取り上げますが、データを訓練用とテスト用に分割していると覚えておいてください!先程欠損値の補完と数値データへの変換を行ったtrain_input
と目的変数であるtrain_target
を、scikit-learnというライブラリのtrain_test_split()を用いて、元データを訓練用データと検証用データに8:2の比率で分割します。
最後に機械学習モデルを学習させていきたいと思います!今回はRandomForestと呼ばれるモデルを用いて学習を行います!RandomForestも同様にscikit-learnから簡単にインポートすることができます。modelとしてインスタンス化された機械学習モデルは、fit(X,y)
として実行するだけで学習を行ってくれます。学習にかかる時間はデータ数や学習モデルにもよりますが、今回はデータ数も少なく、学習させたモデルも比較的軽量なのですぐに学習が終わります!
最後に、先程分割した検証用データを用いて学習モデルの性能を見ていきます。学習モデルの性能評価指標は様々ありますが、今回はオーソドックスな正答率(Accuracy)を見ていきます。
検証用データに対する正答率は80%となりました!この結果をもとに再度モデルを構築しなおしてもよいですが、今回はこのモデルを使って提出用のデータを作っていきたいと思います!
結果の提出
今回行ったタイタニックでは、最終的に提出用のデータとその予測結果を含むsubmittion.csvを提出すれば終了となります!提出用のデータはtrain.csvと一緒にtest.csvとして読み込まれています。test.csvにはtrain.csvと同様の説明変数が含まれていますので、モデル訓練時と同じようにデータを整形してモデルに入力することで予測結果を得ることができます! 予測結果が得られたら、乗客IDと予測結果を合わせたデータをcsvファイルとして出力します! 保存しましてサイドバーのOutputを確認すると、workingディレクトリに提出データが格納されているのが確認できると思います。確認できましたら、下のSubmit to competitionからタイタニックのコンテストページへとsubmittion.csvを提出することができます! 提出が完了しますと、サイドバーやコンテストページで結果を確認することができます! 提出結果としては正答率75%となっており、検証用データの正答率と比較すると若干正答率が悪化してますね😅。また、コンテストページから確認したところ、今回提出した提出結果のランキングは13700位のようでした。ランキングを見てみると最上位のモデルでは正答率が100%となっており、まだまだ改善の余地がありそうですね・・・😭
感想
今回はKaggleやってみた!という事で、タイタニックにチャレンジした結果をまとめました!学部・院時代に機械学習と深層学習は触れていましたが、Kaggleはやったことがなかったので、どちらかというとデータの取り込みや結果の提出で苦戦しました(笑)。結果は芳しくないものの、今回は導入という事で雑に特徴量やモデルの構築を行ったので、次回以降はこの辺りをもう少しきちんとやって、より精度の良いモデルを構築していきたいと思います!その様子についても記事としてまとめていきたいと思いますので、ぜひぜひまた見に来てください!
おわりに
KENTEMでは、様々な拠点でエンジニアを大募集しています!
建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。
recruit.kentem.jp
career.kentem.jp