応用データ分析 機械学習

コピペで動くXGBoost |Pythonで最強予測モデルの実装

将来予測

Pythonで予測モデル作りたいけど、結局何を使うのがいいの?

高度なモデルって高スペックなPCじゃないと動かない?

今回はビジネスシーンで使うことが多い、予測モデルについて説明していきます!

施策の効果イベント販売の予測をする業務で過去実績から精度の高い数値予測をしたいシチュエーションは多いです。

今日で鉛筆をなめて作った効果予測から脱却しましょう!

機械学習の世界コンペ(Kaggleなど)でランキング上位を独占しているモデルのXGBoostの実装を紹介します。

身に付くスキル

  • 線形回帰モデルではない高度なモデルの実装
  • 高度なモデルを理解し、わかりやすく説明する力
  • 自信をもって分析結果から決断をするスキル

それではさっそく、本題を解説していきます!

この記事を書いた人

ふみと

ふみと

XGBoostによる予測モデルの実装

AI_機械学習

XGboostとは?

XGboostは、勾配ブースティングを実装するための強力な高性能機械学習ライブラリです。

大規模データから決定木を構築する際の速度と精度が最適化されているため、データサイエンス用途に広く利用されています。

XGboostは、弱い学習器をブーストして複雑なモデルに集約するという原則に基づいて動作し、最良の結果が得られるようにバイアスと分散のトレードオフを考慮します。

オープンソースであり、多くのインターフェイスライブラリで簡単に使用できるため、データサイエンスコミュニティで人気があります。

今回のシナリオとデータ

今回の分析シナリオは、

シナリオ

住宅の複数条件からボストンの住宅価格を予測するモデルを作成してください。

また影響の大きい説明変数を特定し、予測の根拠を説明してください。

です。

データの構成

データファイル
データセット
ボストン住宅データの構成
ボストン住宅データの構成
  • A列に目的変数の住宅価格が存在。
  • B列以降に説明変数が列挙されている。

利用するデータは、以下のボタンを押下するとダウンロードできます。

データをダウンロード

最終的に得られるモデルの精度

学習の見通しを立てるために、最終的に得られるモデルの精度を先に説明します。

最終的な構築モデルの精度

モデルの予測精度
モデルの予測精度
予測への説明変数の寄与
予測への説明変数の寄与
  • モデル予測した値と実際の住宅価格が、y=x上に分布しほぼ正確に予測できている。
  • 低所得人口の割合、平均部屋数、一酸化窒素濃度の順で住宅価格への影響度が強い。

こんな強力なモデルを驚くほど簡単なコードで実装することが可能です。

さっそく実践に移りましょう!

XGBoostのコード紹介

今回の予測モデルは、こちらのコードで実装が可能です。

#必要なモジュールのインストール
!pip install xgboost
import numpy as np
import pandas as pd
import xgboost as xgb
import matplotlib.pyplot as plt
import seaborn as sns

#データの読み込み
df = pd.read_csv('ボストン住宅価格データ.csv',encoding='shift-jis')

#予測ターゲットの格納(住宅価格:A列)
target_df = df[["住宅価格"]]
#特徴量の格納(説明変数:B列以降)
train_df = df.iloc[:,1:14]

#モデル学習のための、訓練データとテストデータを7:3で分割
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(train_df, target_df, test_size=0.3)

#XGBoostで学習するためのデータ形式に変換
dtrain = xgb.DMatrix(X_train, y_train)
dvalid = xgb.DMatrix(X_test, y_test)

#モデルパラメータの設定
params = {
"objective" : "reg:squarederror",
"eval_metric" : "rmse"
}
model = xgb.train(
params = params,
dtrain = dtrain,
evals = [(dtrain, "train"), (dvalid, "valid")],
num_boost_round = 100
)

#予測の実行と書き出し
pred = model.predict(xgb.DMatrix(X_test))
print(pred)

#散布図で予測の精度を描写
sns.set(font=['Meiryo','Yu Gothic'])
plt.scatter(y_test, pred, alpha = 0.5)
plt.plot(np.linspace(0, 50, 100), np.linspace(0, 50, 100), "red")
plt.xlabel('実際の住宅価格')
plt.ylabel('予測値')
plt.show()

# 性能向上に寄与する度合いで重要度をプロット
_, ax = plt.subplots(figsize=(12, 4))
xgb.plot_importance(model,
ax=ax,
importance_type='gain',
show_values=False)
plt.show()

先ほど紹介したものと同じ結果が出力されれば、予測モデルの完成です!

CSVデータを自身の業務データに置き換えて、コードをいじれば業務で即戦力になる予測モデルとしてそのまま活用いただけます。

なぜXGBoostが最強のモデルなのか?

XGBoostがコンペでも実業務でも最強のモデルである理由は、

  • ビジネスデータへの適用性が高い
    ⇒欠損値や外れ値があっても、関係なく学習できる
  • モデルが軽いので、高スペックなPCが不要
    ⇒専用の機器が不要で通常のPCで動く
  • 汎用的である程度の精度が簡単に出る
    ⇒初期パラメータで、ビジネス判断に十分な精度がでる

の3点にあります。

XGBoostのモデル理解

XGBoostのモデル構造を端的に説明すると、以下のイメージになります。

ポイント

分岐条件のツリーの作成と適用・修正を繰り返し、最高精度のツリーをモデルとして構築する。

ランダムフォレストイメージ
簡易図です。実際はもっと複雑で深い構成です。

アキネーターという「頭の中に思い描いた人物を見事に当てるサイト」をご存じでしょうか?

考え方の源泉は、かなりアキネーターに近く複雑な条件分岐を組み合わせることで高精度な予測モデルを構築しています。

更にこの予測モデルの力を感じたい方はアキネーターで遊んでみることもオススメです。

まとめ

今回は「XGBoostによる予測モデルの作成方法」について解説しました。

XGBoostはその利点から実際のビジネスシーンでの汎用性が高く、名がある分析の大会で頻繁に利用されているモデルです。

解釈もしやすいモデルですので、仕事でも活用することをオススメします。

数値の予測モデルではなく、XGBoostを用いた分類モデルに興味がある方はこちらの記事をご覧下さい。

俯瞰する
コピペで動くXGBoost |Pythonで最強分類モデルの実装

Pythonで分類モデル作りたいけど、結局何を使うのがいいの? 高度なモデルって高スペックなPCじゃないと動かない? 今回はビジネスシーンで必要になることが多い、分類モデルについて説明していきます! ...

データサイエンティストとして、キャリア形成を考えている人は以下の記事も参考になります。

オンラインスクール
【完全版】Python習得のロードマップ|初心者プログラミング知識0から年収800万円へ

年収上げたいけど、プログラマって稼げるの? プログラマって知識0からでもなれるの? という質問をもらいますが、「Python」と「データ分析」を武器にすれば6ヶ月で年収800万円以上を狙うことは十分可 ...

それでは、また次の記事でお会いしましょう。

最近のコメント

    • この記事を書いた人
    • 最新記事

    ふみと

    このブログでは、データサイエンティストとして市場価値を上げる方法を独自にまとめて発信しています。 もし記事を気に入っていただけたらサイトをブックマークもしくは、Twitterをフォローお願いします! 【経歴】
    日系大手企業勤務
    データサイエンティスト歴:7年
    【保有資格】
    JDLA E資格 , Advancesd Marketer , ビジネス統計スペシャリスト , 統計検定2級 , TOEIC 805点
    【スキル】
    Python/Tableau/SQL/HTML/CSS/機械学習/Deep Learning/RPA

    著書

    Pythonの独学専用pdf教材発売中!

    -応用データ分析, 機械学習