Pythonで分類モデル作りたいけど、結局何を使うのがいいの?
高度なモデルって高スペックなPCじゃないと動かない?
今回はそんな疑問を解決する、LightGBMによる分類モデルの実装を解説していきます!
この記事で身に付く力
- 線形回帰モデルではない高度なモデルの実装力
- 高度なモデルを理解し、わかりやすく説明する力
- 自信をもって分析結果から決断をする力
この記事を書いた人
LightGBMによる分類モデルの実装
LightGBMとは?
LightGBMは、勾配ブースティングを実装するためMicrosoft社が開発した強力な高性能機械学習ライブラリです。
機械学習の世界コンペ(Kaggleなど)でランキング上位を独占しており、信頼性が高い上に動作も軽いため人気を集めています。
LightGBMが支持される理由は、下記の特徴にあります。
LightGBMの特徴
- ビジネスデータへの適用性が高い
⇒データに欠損値や外れ値があっても、関係なく学習できる - モデルが軽いので、高スペックなPCが不要
⇒専用の機器が不要で通常のPCで動く - 汎用的である程度の精度が簡単に出る
⇒初期パラメータで、ビジネス判断に十分な精度がでる - 学習の実行速度が速い
どんな場面で活用できる?
業務活用事例としては、以下のようなものが考えられます。
- 顧客のセグメンテーション:
多クラス分類モデルを使用して、顧客を複数のセグメントに分類することができます。
たとえば、年齢、性別、収入、購入履歴などの特徴量を分析して、高収入層、若年層、購買意欲の高い層などに分類することができます。これは、マーケティング戦略の策定や広告のターゲティングに使用されます。 - 顧客の嗜好の予測:
多クラス分類モデルを用いて、顧客の嗜好を予測することができます。
たとえば、ECサイトでの購入履歴やクリック履歴から、その顧客が好む商品やサービスのジャンルを予測することができます。これにより、個別の商品やサービスの提供に役立てることができます。 - チャットボットの自動応答:
多クラス分類モデルを使用して、顧客の質問を自動的に分類し、最適な回答を提供するチャットボットを作成することができます。
例えば、顧客の問い合わせ内容に応じて、返信する内容を自動的に切り替えることができます。
さっそく動かして、分類の力を体感していきましょう!
今回のシナリオとデータ
今回の学習シナリオは、下記のとおりです。
シナリオ
・アヤメのがく片と花びらの長さと幅から品種を分類するモデルを作成してください。
・分類に影響の大きい説明変数を特定してください。
シナリオで利用するデータは、こちらからダウンロードできます。
データの構成
- 目的変数のアヤメの品種が0-2でE列に記録されている。
- 説明変数のアヤメのがく片と花びらの長さと幅がA~D列に記録されている。
最終的に得られるモデルの精度
学習の見通しを立てるために、最終的に得られるモデルの精度を先にお見せします。
花びらとがく片の長さと幅から、かなり正確にアヤメの品種を分類できるモデルが構築されました。
最終的な構築モデルの精度
- 97.8%の精度で品種が予測できている。
- 花びらの長さとがく片の幅が品種予測の重要なファクターである。
では、コード実装に移りましょう。
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
from sklearn.metrics import accuracy_score
import seaborn as sns
#データの読み込み
df = pd.read_csv('アヤメの品種分類.csv',encoding='shift-jis')
#予測ターゲットの格納(品種:E列)
target_df = df[["品種"]]
#特徴量の格納(説明変数:A~D列)
train_df = df.iloc[:,0:4]
#モデル学習のための、訓練データとテストデータを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 = {'objective':'multiclass','num_class':3,'metric' : {'multi_error'}}
model = lgb.train(params,dtrain)
#予測の実行と書き出し
pred_prob = model.predict(X_test)
pred = np.argmax(pred_prob,axis = 1)
print(pred)
#日本語対応
sns.set(font=['Meiryo','Yu Gothic'])
#モデル評価
acc = accuracy_score(y_test,pred)
print('Acc :', acc)
# 性能向上に寄与する度合いで重要度をプロット
lgb.plot_importance(model, height = 0.5, figsize = (8,16))
先ほど紹介したものと同じような結果が出力されれば、分類モデルの完成です!
完成したモデルを使って予測をするときは、このように適当なデータを与えてることで予測ができます。
#適当なデータを入れて予測(model.predict([[?,?,?,?]]))
pred_prob = model.predict([[5,3,1,0.2]])
pred = np.argmax(pred_prob,axis = 1)
print(pred)
#出力結果:[0] → ヒオウギアヤメである可能性が97.8%
LightGBMのコードを編集して業務で使う方法
LightGBMによる分類コードを業務に応用するために、編集が必要な箇所を説明します!
変更すべき点は、全部で3箇所(赤字)です。
修正点①:モデルの学習に使うデータを業務のCSVデータに置き換える。
#データの読み込み
df = pd.read_csv('アヤメの品種分類.csv',encoding='shift-jis')
修正点②:目的変数と説明変数が格納されている列を取り込むCSVに合わせる。
#予測ターゲットの格納(品種:E列)
target_df = df[["品種"]]
#特徴量の格納(説明変数:A~D列)
train_df = df.iloc[:,0:4]
修正点③:分類したいクラスの数を目的変数にあわせて指定する。
#モデルパラメータの設定
params = {'objective':'multiclass','num_class':3,'metric' : {'multi_error'}}
model = lgb.train(params,dtrain)
上記のコードを修正することで、業務ですぐに活用いただけます!
【参考】XGboostとの違い
同じ勾配ブースティング決定木のライブラリにXGboostがあります。
LightGBMとの一番の違いは「Level-wise」か「Leaf-wise」かの決定木生成の手法にあります。
学習データの特性に依存するところが大きく、どちらの精度が優れているかは一概言えないです。
ビジネスで利用する際は、両方試して精度が高い方を採用するのがオススメです!
XGBoostはこちら↓
>>コピペで動くXGBoost |Pythonで最強分類モデルの実装
まとめ
今回は「LightGBMによる分類モデルの作成方法」について解説しました。
LightGBMはその利点から実際のビジネスシーンでの汎用性が高く、名がある分析の大会で頻繁に利用されているモデルです。
結果の解釈もしやすいので、仕事ですぐにでも活用することをオススメします。
LightGBMによる、数値予測モデルを利用してみたい場合はこちらの記事もご覧ください。
-
コピペで動くLightGBM |Pythonで最強予測モデルの実装
Pythonで予測モデル作りたいけど、結局何を使うのがいいの? 高度なモデルって高スペックなPCじゃないと動かない? 今回はそんな疑問を解決する、LightGBMによる予測モデルの実装を解説していきま ...
本記事のLightGBMを使いたかったけど、Pythonスキルが足りずうまくできなかったというかたはこちらを確認ください!
1週間で自分で考え開発するPythonスキルをマスターさせて見せます!
それでは、また次の記事でお会いしましょう。
最近のコメント