Pythonで予測モデル作りたいけど、結局何を使うのがいいの?
高度なモデルって高スペックなPCじゃないと動かない?
今回はそんな疑問を解決する、LightGBMによる予測モデルの実装を解説していきます!
この記事で身に付く力
- 線形回帰モデルではない高度なモデルの実装力
- 高度なモデルを理解し、わかりやすく説明する力
- 自信をもって分析結果から決断をする力
この記事を書いた人
LightGBMによる予測モデルの実装
LightGBMとは?
LightGBMは、勾配ブースティングを実装するためMicrosoft社が開発した強力な高性能機械学習ライブラリです。
機械学習の世界コンペ(Kaggleなど)でランキング上位を独占しており、信頼性が高い上に動作も軽いため人気を集めています。
LightGBMが支持される理由は、下記の特徴にあります。
LightGBMの特徴
- ビジネスデータへの適用性が高い
⇒データに欠損値や外れ値があっても、関係なく学習できる - モデルが軽いので、高スペックなPCが不要
⇒専用の機器が不要で通常のPCで動く - 汎用的である程度の精度が簡単に出る
⇒初期パラメータで、ビジネス判断に十分な精度がでる - 学習の実行速度が速い
どんな場面で活用できる?
業務活用事例としては、以下のようなものが考えられます。
- 株価の予測:
株価の予測に回帰モデルを使用することができます。過去の株価データを学習し、企業の業績や経済指標などの特徴量を入力として、将来の株価を予測することができます。 - 顧客満足度の予測:
顧客満足度の予測に回帰モデルを使用することができます。顧客のアンケート調査結果を学習し、顧客属性や取引履歴などの特徴量を入力として、将来の顧客満足度を予測することができます。 - 不動産価格の予測:
不動産価格の予測に回帰モデルを使用することができます。過去の不動産取引データを学習し、地域、面積、築年数、駅からの距離、周辺環境などの特徴量を入力として、不動産価格を予測することができます。 - 製品の需要予測:
製品の需要予測に回帰モデルを使用することができます。過去の販売データを学習し、季節性や広告費などの特徴量を入力として、将来の需要を予測することができます。
さっそく動かして、予測の力を体感していきましょう!
今回のシナリオとデータ
今回の学習シナリオは、下記のとおりです。
シナリオ
・住宅の複数条件からボストンの住宅価格を予測するモデルを作成してください。
・予測に影響の大きい説明変数を特定してください。
シナリオで利用するデータは、こちらからダウンロードできます。
データの構成
- 目的変数の住宅価格がA列に記録されている。
- 説明変数の住宅の情報がB列以降に記録されている。
最終的に得られるモデルの精度
学習の見通しを立てるために、最終的に得られるモデルの精度を先にお見せします。
ボストンの住宅条件から、かなり精度の高い住宅価格の予測モデルが構築されました。
最終的な構築モデルの精度
- モデル予測した価格と実際の住宅価格が、y=x上に分布しほぼ正確に予測できている。
- 主要施設への距離、犯罪率、低所得人口の割合、平均部屋数、の順で住宅価格への影響度が強い。
では、コード実装に移りましょう。
LightGBMのコード紹介(コピペ)
下記のPythonコードをコピぺして、実行しましょう!
Pythonの実行環境がない方は、以下の記事を参考にインストールください。(所要時間:15分)
>>Anaconda Navigatorのインストールに関する究極のガイド
#必要なモジュールのインストール
!pip install LightGBM
import numpy as np
import pandas as pd
import lightgbm as lgb
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 = lgb.Dataset(X_train, y_train)
dvalid = lgb.Dataset(X_test, y_test)
#モデルパラメータの設定
params = {'metric' : 'rmse'}
model = lgb.train(params,dtrain)
#予測の実行と書き出し
pred = model.predict(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()
# 性能向上に寄与する度合いで重要度をプロット
lgb.plot_importance(model, height = 0.5, figsize = (8,16))
先ほど紹介したものと同じような結果が出力されれば、予測モデルの完成です!
完成したモデルを使って予測をするときは、このように適当なデータを与えてることで予測ができます。
#適当なデータを入れて予測(model.predict([[?,?,?,?,?,?,?,?,?,?,?,?]]))
pred = model.predict([[0.003,12.5,2,0,0.6,12,60,4,1,222,17,9]])
print(pred)
#出力結果:[36.59843639] → 好きな条件で住宅価格のシュミレーションができた
精度が高い住宅価格がシュミレーションを使えば、有利な賃貸契約や不動産売買が可能になるかもしれませんね。
LightGBMのコードを編集して業務で使う方法
LightGBMによる予測コードを業務に応用するために、編集が必要な箇所を説明します!
変更すべき点は、全部で3箇所(赤字)です。
修正点①:モデルの学習に使うデータを業務のCSVデータに置き換える。
#データの読み込み
df = pd.read_csv('ボストン住宅価格データ.csv',encoding='shift-jis')
修正点②:目的変数と説明変数が格納されている列を取り込むCSVに合わせる。
#予測ターゲットの格納(住宅価格:A列)
target_df = df[["住宅価格"]]
#特徴量の格納(説明変数:B列以降)
train_df = df.iloc[:,1:14]
修正点③:予測精度を測定するための散布図(x軸、y軸の幅と名称の修正)。
#散布図で予測の精度を描写
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()
上記のコードを修正することで、業務ですぐに活用いただけます!
【参考】XGboostとの違い
同じ勾配ブースティング決定木のライブラリにXGboostがあります。
LightGBMとの一番の違いは「Level-wise」か「Leaf-wise」かの決定木生成の手法にあります。
学習データの特性に依存するところが大きく、どちらの精度が優れているかは一概言えないです。
ビジネスで利用する際は、両方試して精度が高い方を採用するのがオススメです!
XGBoostはこちら↓
>>コピペで動くXGBoost |Pythonで最強予測モデルの実装
LightGBMのツリー構造をのぞいてみる
下記のコードを実行することで、LightGBM の決定木が「Leaf-wise」となっていることが確認可能です。
# 決定木の分岐の可視化
lgb.create_tree_digraph(model, 1)
構造理解のために実行してみましょう。
まとめ
今回は「LightGBMによる予測モデルの作成方法」について解説しました。
LightGBMはその利点から実際のビジネスシーンでの汎用性が高く、名がある分析の大会で頻繁に利用されているモデルです。
結果の解釈もしやすいので、仕事ですぐにでも活用することをオススメします。
LightGBMによる、分類モデルを利用してみたい場合はこちらの記事もご覧ください。
-
コピペで動くLightGBM |Pythonで最強分類モデルの実装
Pythonで分類モデル作りたいけど、結局何を使うのがいいの? 高度なモデルって高スペックなPCじゃないと動かない? 今回はそんな疑問を解決する、LightGBMによる分類モデルの実装を解説していきま ...
これからPythonスキルを身に着けてLightGBMを使いこなしたい方は、以下の記事もご覧ください!
-
【1週間で完結】知識0から独学でPythonを習得する教材
Pythonに興味があるけど、初めてだから何から始めていいかわからない 過去に独学でPythonに挑戦したけど挫折しちゃったよ。。 という人に向けて、独学でPython基礎から副業スキルまでを最短ルー ...
それでは、また次の記事でお会いしましょう。
最近のコメント