スキルアップしたい

【kaggle入門】XGBoostによる最もシンプルな回帰モデル構築

2019年8月8日

【PR】この記事には広告が含まれています。

  1. HOME >
  2. スキルアップしたい >

【kaggle入門】XGBoostによる最もシンプルな回帰モデル構築

2019年8月8日

【kaggle用】XGBoostによる最もシンプルな回帰モデル構築

 

いくら検索しても、XGBoostによる「最もシンプルな」回帰モデル構築のコーディングが見つからなかったため、自身の備忘としてエントリーしておきます。

 

記事を書いた人

 

【kaggle入門】XGBoostによる最もシンプルな回帰モデル構築
大手IT企業でデータサイエンスを活用した分析業務に携わっています。

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

ヤエリ(@yaesuri_man

普段のお客様との会話の中でよく話題に出るこのテーマ。

技術畑ではないものの、長らく現場の実務に携わってきた視点は喜ばれることが多いです。

 

初めにお断りしておくと当記事は、XGBoostで回帰モデルを構築することのみに特化しており、最低限のハイパーパラメータチューニングのみで、モデル精度向上等については全く考慮していません。

上級者向けのエッセンスは全て削ぎ落しています。というより私にはそのエッセンスを盛り込む技術がありません。

プログラミング初心者である我々にとっては、submitできる状態に持っていくことが一つのハードル。

まずは最低限、

  • 与えられたデータからモデルを構築する
  • 構築したモデルで予測をして、submitするためのcsvを生成する

事に集中しましょう。

ちなみに表題にある「回帰」とは、平たく言うと数字(「連続値」という)を当てる問題です。

  • 売上がいくらになるか
  • 在庫がいくつになるか
  • どのくらいの発注量になるか

これら全て、1,2,3,4・・・という数字(連続値)で表せるので、「回帰問題」であると言えます。

他に良く出る単語で「分類」がありますが、こちらはYes/Noや、複数カテゴリを当てる問題です。

今回は数字(連続値)を当てる問題に的を絞ったものになります。

 

おやくそく(各種ライブラリの読み込み)

 

初めに、各種ライブラリを読み込んでおきます。

 

import numpy as np
import scipy as sp
import pandas as pd
from pandas import DataFrame, Series

import category_encoders as ce

import xgboost as xgb
from sklearn.model_selection import GridSearchCV

 

今回はXGBoostを使うので、それも読み込んでおきます。

最近のkaggleはXGBoostとLightGBM全盛ですね

 

データの読み込み

 

与えられているcsvデータを読み込みます。

 

df_train = pd.read_csv('../input/train.csv', index_col=0)
df_test = pd.read_csv('../input/test.csv', index_col=0)

 

ほとんどの場合、

  • 学習データ:train.csv
  • テストデータ:test.csv

なので、このままコピペすればokです。

「index_col=0」は、「左から1列目がindex」の意味です。

こちらもほとんどのコンペでこの形式なので、気にせずコピペで大丈夫だと思います。

 

学習データの分離

 

学習データを、ターゲット変数とそれ以外に分離する必要があります。

 

y_train = df_train.ターゲット変数
x_train = df_train.drop(['ターゲット変数'], axis=1)
x_test = df_test

 

これも、大抵はこのままコピペすればokです。

「ターゲット変数」の部分だけは、予測したい列名に置き換えて下さい。

 

文字列のエンコード

 

文字列(object)はそのままではモデリングできないため、数字に置き換え(エンコード)します。

ここでは何も考えずにOrdinalEncodingしています。

 

cats = []
for col in x_train.columns:
    if x_train[col].dtype == 'object':
        cats.append(col)

oe = ce.OrdinalEncoder(cols=cats, return_df=False)

x_train[cats] = oe.fit_transform(x_train[cats])
x_test[cats] = oe.transform(x_test[cats])

 

欠損値の補完

 

空白のカラムがあるとエラーが起きる可能性があるので、ここでは無難に中央値で埋めておきます。

 

x_train=x_train.fillna(x_train.median())
x_test=x_test.fillna(x_test.median())

 

学習データ(train)、テストデータ(test)両方とも処理をする必要があるのでご注意下さい。

と言ってもこれもこのままコピペで大丈夫だと思います。

 

モデリング

 

学習データを投入し、XGBoostのモデルを構築していきます。

 

xgb_model = xgb.XGBRegressor()
reg_xgb = GridSearchCV(xgb_model,
                   {'max_depth': [2,4,6],
                    'n_estimators': [50,100,200]}, verbose=1)
reg_xgb.fit(x_train, y_train)

 

予測

 

作ったモデルにテストデータを投入し、予測していきます。

ここでは予測した結果を「pred」と名付けています。

 

pred = pd.DataFrame( {'XGB': reg_xgb.predict(x_test)})

 

投稿用csvの生成

 

サンプル投稿データ(sample_submission)を読み込み、予測データに置き換えます。

 

submissionfile = pd.read_csv('../input/sample_submission.csv', index_col=0)

submissionfile['ターゲット変数'] = pred

submissionfile.to_csv('./submissionfile.csv')

 

「ターゲット変数」の部分は、予測したい列名に置き換えて下さい。

以上でモデリング~予測~投稿用csv生成は完了です。

 

【kaggle用】LightGBMによる最もシンプルな回帰モデル構築まとめ

 

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

注釈も入れてあります。

「ターゲット変数」と記載のある3か所だけ、予測したい列名に書き換えて下さい。

 

# おやくそく(各種ライブラリの読み込み)

import numpy as np
import scipy as sp
import pandas as pd
from pandas import DataFrame, Series

import category_encoders as ce

import xgboost as xgb
from sklearn.model_selection import GridSearchCV


# データの読み込み

df_train = pd.read_csv('../input/train.csv', index_col=0)
df_test = pd.read_csv('../input/test.csv', index_col=0)


# 学習データの分離

y_train = df_train.ターゲット変数
x_train = df_train.drop(['ターゲット変数'], axis=1)
x_test = df_test


# 文字列のエンコード

cats = []
for col in x_train.columns:
    if x_train[col].dtype == 'object':
        cats.append(col)

oe = ce.OrdinalEncoder(cols=cats, return_df=False)

x_train[cats] = oe.fit_transform(x_train[cats])
x_test[cats] = oe.transform(x_test[cats])


# 欠損値の補完

x_train=x_train.fillna(x_train.median())
x_test=x_test.fillna(x_test.median())


# モデリング

xgb_model = xgb.XGBRegressor()
reg_xgb = GridSearchCV(xgb_model,
                   {'max_depth': [2,4,6],
                    'n_estimators': [50,100,200]}, verbose=1)
reg_xgb.fit(x_train, y_train)


# 予測

pred = pd.DataFrame( {'XGB': reg_xgb.predict(x_test)})


# 投稿用csvの生成

submissionfile = pd.read_csv('../input/sample_submission.csv', index_col=0)
submissionfile['ターゲット変数'] = pred
submissionfile.to_csv('./submissionfile.csv')

 

以上です。

注意点はここまでに赤字で記載した3か所だけ。

「ターゲット変数」部分だけはコンペによって異なりますので、そのコンペの予測ターゲットとなる変数(列名)に書き換えて下さい。

 

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

【kaggle入門】XGBoostによる最もシンプルな回帰モデル構築
プログラミング関連の記事まとめ

続きを見る

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

 

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


 

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

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

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

 

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

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

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

 

 

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


 

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

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

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

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

 

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


 

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

 

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

 

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

 

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

 

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

 

-スキルアップしたい