スキルアップしたい

【kaggle入門】GBDTによる最もシンプルな分類モデル構築~目指せ文系データサイエンティスト~

2020年1月21日

  1. HOME >

【kaggle入門】GBDTによる最もシンプルな分類モデル構築~目指せ文系データサイエンティスト~

2020年1月21日

【kaggle入門】GBDTによる最もシンプルな分類モデル構築~目指せ文系データサイエンティスト~

 

精度うんぬんの前に、モデルができない!submitできない!!

 

kaggle初心者あるあるですよね。

まずは最低限、

  • 与えられたデータからモデルを構築する
  • 予測をして、submitする

事にトライしましょう。

 

本記事の信頼性

 

大手IT企業所属の、自称「ビジネス支援型データサイエンティスト」。

元営業という異色の経歴を活かしながら、金融・製造・流通業のお客様を中心にAI活用コンサルや定着支援・人材育成・講演活動など、幅広く活動しています。

ヤエリ(@yaesuri_man

普段のお客様との会話の中でよく話題に上る内容。

名だたるデータサイエンティストの先輩を差し置いてあまり大それたことは言えませんが、ド素人である文系営業出身の私ならではの視点での紹介は喜んで頂けることが多いです。

 

GBDTの特長

 

使い勝手の良さと精度の高さから、コンペで多用されているGBDT(Gradient Boosting Decision Tree)。

その特長について簡単にまとめます。

 

GBDTの特長

  • ハイパーパラメーターチューニングをしなくても精度が出やすい
  • 数値特徴量にさえすれば、欠損値の補完は不要
  • 各特徴量間の相互作用が反映される
  • 特徴量間のスケールを気にする必要がない

 

各コンペでも、とりあえず一回目を回すために利用されています。

いつも通り、kaggleの初心者向けチュートリアル問題で最も有名な「タイタニック」を利用してコーディングしています。

 

 

言語はpython。kaggle上で無料で利用できる環境「Notebook」を利用しています。

 

New Notebookの作成

 

上記タイタニックのリンクから「New Notebook」を選択し、「python」「New Notebook」を選択すると、まずは以下のコードが現れます。

 

 

これは機械学習でよく使われる計算ライブラリ「numpy」と、データ分析ライブラリ「pandas」を読み出し、使える状態にするコードです。

(「numpy」を「np」、「pandas」を「pd」という名前でインポートしています)

この

 

import numpy as np

import pandas as pd

 

は、機械学習のコードを書く上でのお約束のようなもので、ほぼ必ず出てきます。

「#」より右の文字列は、コメント行。

最後の4行は、タイタニックのコンペフォルダに格納されているデータを表示するコードとなります。

上記セルを実行すると、以下のようにファイルのパスとファイル名が表示されます。

 

  • train.csv・・・トレーニングデータ
  • test.csv・・・予測用データ
  • gender_submission.csv・・・結果投稿用のサンプルデータ

です。

 

必要なライブラリの読み込み

 

今回利用するライブラリをあらかじめ読み込んでおきます。

 

 

後から出てきますが、それぞれ以下です。

  • LabelEncoder・・・カテゴリ値をエンコードするためのライブラリ
  • XGBClassifier・・・GBDTのライブラリ「XGBoost」

 

データの読み込み

 

上記で表示されたデータを読み込みます。

 

 

このコード自体は実行しても何も起こりません(ウンともスンとも言わない)ですが、以下コードを実行すれば、ちゃんとデータが読み込まれていることが分かります。

 

 

学習データを分離する

 

学習データには、「説明変数」と「目的変数」両方が含まれています。

  • 「目的変数」・・・今回予測したい列(Survived)
  • 「説明変数」・・・上記以外の列

この2つを分離し、「説明変数」を「train_x」、「目的変数」を「train_y」としておきます。

テストデータには「目的変数」は含まれないので、そのまま。

これを「text_x」とします。

 

 

文字列をエンコードする

 

冒頭で説明した通りGBDTは欠損値の補完は不要ですので、ここでは文字列のエンコードのみを実行します。

今回使うのは「LabelEncoder」。

もっともシンプルなエンコード手法です。

LabelEncordingは、とりあえず手っ取り早くモデルを作る際によく利用される方法で、カテゴリの値の序列を全く無視して数値変換するというもの。

例として、市区町村別の平均年収を予測するようなデータモデルを作るケースで説明します。

  • 世田谷区
  • 品川区
  • 八王子市
  • 奥多摩町

という4つのテキスト(カテゴリ値)を数字に変換する場合、

  • 世田谷区→154
  • 品川区→140
  • 八王子市→192
  • 奥多摩町→198

というように、「世田谷区と品川区は近い」「八王子市と奥多摩町は近い」という特徴表現を失わないようなエンコードがベストです。

(この例は郵便番号の上3桁でエンコードした例)

しかしLabelEncordingの場合は

  • 世田谷区→1
  • 品川区→2
  • 八王子市→3
  • 奥多摩町→4

というように、各値の序列を無視してエンコーディングします。

上記のように特徴表現を失わない形でエンコードしたい場合は、LabelEncordingではなく、それぞれ明示的に指定してあげるのがベストです。

 

train,testそれぞれのデータフレームの列「Sex」をエンコーディングします。

列名の指定は大文字小文字も区別しますのでご注意下さい(「Sex」という列名なので、「sex」のように先頭が小文字だとエラーが出ます)

 

 

実行してもぱっと見何も起きていませんが、trainを実行すると、ちゃんとエンコーディングされているのが分かります。

 

 

 

Embarkedの列については、試しに明示的にエンコードしてみます。

 

 

Enbarkedの値を、S=0、C=1、Q=2と明示的に指定してあげた結果、以下のようになりました。

 

 

 

不要な列の削除

 

以下の列は不要である(生き残るかどうかには関係ない)と判断し、各データからごっそり削除します。

  • PassengerID
  • Name
  • Ticket
  • Cabin

 

 

以上の実行したデータを見てみると、

 

 

 

だいぶスッキリしてしまったものの、とりあえずモデリングに使えそうな前処理済みのデータが出来上がっていることが分かります。

 

モデリングする

 

モデルを作成し、学習データを加えて学習します。

 

 

後処理する

 

テストデータの予測値を確率で出力したうえ、0,1の二値に変換します。

※タイタニックコンペの場合、「生き残る確率=0.545」などの小数点だと受け付けてくれません

 

 

提出用ファイルを作成する

 

最後に提出用のcsvファイルを生成して完了です。

 

 

【kaggle入門】GBDTによる最もシンプルな分類モデル構築~目指せ文系データサイエンティスト~まとめ

 

一連の流れを一つのコードとしてまとめると以下です。

 

 

まずはとにかく上記コードを活用してsubmitを目指す。

無事submitができたら、前処理を工夫するなどしてデータモデルの精度向上に精進しましょう。

 

【参考文献】

 

その他、pythonやkaggle、AI・機械学習といった記事のまとめはこちらです。

【2020年版】プログラミング関連の記事まとめ~目指せ文系データサイエンティスト~

続きを見る

ここからは、実際に私が購入し、おすすめできると思った本やオンラインスクールを紹介します。

 

機械学習のための「前処理」入門


 

まずはこちら。「機械学習のための『前処理』入門」です。

  • これから機械学習を始めてみたい
  • kaggleやSIGNATEにチャレンジしてみたい

という方には最適な本で、個人的には一番のおすすめです。

 

データモデルの精度向上には特徴量エンジニアリングが不可欠、というよりこれが全てと言っても過言ではありません。

各種環境準備の方法やコーディングの詳細に至るまで、誰にでも分かりやすく書かれています。

この一冊さえあれば、とりあえずkaggleにトライすることができます。

 

 

Udemy「みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習」


 

ベネッセが主催する、プログラミング未経験者を対象にしたコース。

数学や統計的な知識はそこそこに、文字通り人工知能と機械学習をゼロから学習できます。

受講生2万人以上、4千人以上の評価者から、5段階中4.0の評価を得ている、万人におすすめできる優良講座。

定価15,000円と高価ですが、90%OFFといったキャンペーンを頻繁に行っていますので、それを狙うのがおすすめ。

 

人工知能は人間を超えるか


 

pythonのコーディングからは離れますが、もしこの本を読んでいない人がいたら必ず一度は目を通しておいた方が良いです。

 

この界隈では有名な、東大の松尾豊先生の著書「人工知能は人間を超えるか」。

 

いわゆるAI・人工知能、機械学習といった昨今のキーワードを中心に、過去の歴史からここ最近の動き、今後の動向に至るまでを、平易な表現で丁寧に解説されています。

 

また日本ディープラーニング協会が開催する「ディープラーニング ジェネラリスト検定(通称:G検定)」の推薦図書の一つでもあります。

 

全てのビジネスマンにおすすめできる一冊。中古でもkindleでも構いませんので、これだけは目を通しておいた方が良いです。

 

-スキルアップしたい

Copyright© 営業アップデート , 2020 All Rights Reserved.