見出し画像

#36 品質リスクを分析する「XGBoost」、チャレンジ AI×100業務(製造業)

今回は「XGBoost」です。

#08で取り上げた「ランダムフォレスト」は、実装の手軽さと安定した性能で広く使われる機械学習アルゴリズムです。しかし、精度が求められる製造現場の課題においては、もう一歩先の性能を引き出したいケースも存在します。そんな時に有力な選択肢となるのが、勾配ブースティングを発展させたXGBoostです。

前回同様ChatGPTを会話しつつ、Pythonにてコードを生成し分析していきます。


*それでは、スタートです。
*執筆者は以下を参照してください。


使ったツール・準備したこと

  • ChatGPT 4o

  • Visual Studio Code環境下でのPython

やってみたこと|コード・ステップ紹介

実行した内容の簡単な流れ

以前にランダムフォレストを実施したチャットがあるので、以下のプロンプトで実施しました。

次に同様にcsvファイルを読み込みXGboostを実行するコードを生成してください。

コードを実行すると、下には、各因子の重要度が表示され、C因子が寄与率が高いことがわかります。下に分析したデータのイメージを掲載していますが、#8の時とYを変えています。

各因子の重要度がアウトプットされた
分析に用いたデータ

■ 解説サイトはこちら

今後の展開・アイデア

次回取り組みたいこと;

・少しデータを加工します。


*今回のコードです。

# XGBoostを使ってCSVデータから回帰モデルを実行するサンプルコード
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import os

# CSVファイルの読み込み
file_path = "ここはファイルを指定してください"
if not os.path.exists(file_path):
    raise FileNotFoundError(f"CSVファイルが見つかりません: {file_path}")

# データの読み込み
df = pd.read_csv(file_path)

# 必要な列がすべてあるか確認
required_columns = ["lot", "A", "B", "C", "Y"]
for col in required_columns:
    if col not in df.columns:
        raise ValueError(f"必要な列が見つかりません: {col}")

# カテゴリ列(lot)を数値に変換
df["lot"] = df["lot"].astype("category").cat.codes

# 説明変数と目的変数に分ける
X = df[["lot", "A", "B", "C"]]  # 説明変数
y = df["Y"]  # レスポンス

# データ分割(学習用とテスト用)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# XGBoost回帰モデルの作成と学習
model = xgb.XGBRegressor(objective='reg:squarederror', n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 予測と評価
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.4f}")

# モデルを使った予測例(任意の新データ)
# sample_input = pd.DataFrame({"lot": [0], "A": [10.5], "B": [5.2], "C": [9.8]})
# prediction = model.predict(sample_input)
# print(f"予測されたYの値: {prediction[0]:.3f}")


いいなと思ったら応援しよう!