目次
- イントロダクション
1.1 はじめに
1.2 今回のモチベーション - 準備
2.1 ライブラリのインストールとOpenAI APIの設定
2.2 データセットの準備
2.3 LangChainでエージェントを実装する - 試したこと1:特徴量エンジニアリング
- 試したこと2:ハイパーパラメータのチューニング
- まとめ
1. イントロダクション
1.1 はじめに
前回のブログでは、複数のモデルを実行して、最も精度の良いモデルを選択させることができました。
続いて、ChatGPTを使って予測モデルの精度改善を自動的に実行できないかを試してみます。具体的には、「特徴量エンジニアリング」「ハイパーパラメータのチューニング」を自動的に行えないかを試してみます。
1.2 今回のモチベーション
ChatGPTを用いて、予測モデルの精度改善を自動的に実行できれば、モデルの精度改善のための手間を省けるようになることが期待できます。モデルの改善のための特徴量エンジニアリング、ハイパーパラメータのチューニングなどは手作業で行うと非常に時間がかかります。そこで、これらのプロセスを自動化することで、時間を節約することができないかを試してみます。
2. 準備
2.1 ライブラリのインストールとOpenAI APIの設定
まずは、LangChainでOpenAIのAPIを使用する手順に従って、langchainのインストール、OpenAIのAPIキーの発行と設定を行います。
※ 以前に上記の設定をしている場合、この手順はスキップして構いません。
2.2 データセットの準備
今回は分類モデルを作成するため、タイタニックデータセットを使用します。
2.3 LangChainでエージェントを実装する
前回のブログと同様に、OpenAI APIキーの設定と、データの読み込みを行います。
■python
import pandas as pd from langchain.llms import OpenAI from langchain.agents import create_pandas_dataframe_agent from langchain.agents.agent_types import AgentType # メモリの追加 from langchain.memory import ConversationBufferMemory import os import openai # .envファイルからAPIキーを読み込む from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) openai.api_key = os.environ['OPENAI_API_KEY']
■python
# データの読み込み df = pd.read_csv('../data/titanic.csv') df.head()
■python
# データフレームを操作するエージェントの作成 agent = create_pandas_dataframe_agent( OpenAI(temperature=0, max_tokens=1000), df, verbose=True, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION, )
3. 試したこと1:特徴量エンジニアリング
予測精度を上げるために、どのような特徴量を追加するべきかを自動で調整できるかを試してみます。
■python
agent.run(""" タイタニック号の乗客が生存したかどうかを予測するlightGBMのモデルを作成します。予測精度を上げるため、このデータセットからどのような特徴量を作るべきかを考えて説明してください。 # 入力データの情報: - 入力データセットの変数名は、dfです。 - 生存したかどうかは、変数Survivedです。1なら生存、0なら死亡です。 # 以下の手順で考えてください。 1. dfを訓練用とテスト用に分割してください。データセットの70%を訓練用、30%をテスト用としてください。 2. 訓練用データセットを使って予測モデルを作成し、テスト用データセットを使って予測精度を計算してください。 3. 予測精度は、AUC_ROCを使って比較してください。 4. 予測結果を元に、このデータセットからどのような特徴量を作るべきかを考えてください。 # 結果 実行ログを用いて、プロセスと推論結果を説明してください。 タスクの完了後、あなたのワークフロー・使用したモデル・推論結果の詳細・予測精度を説明してください。 その後、予測精度を向上させるためにどのような特徴量を追加するべきかを考えて説明してください。 私のリクエストに関係のない情報はフィルタリングしてください。 """ )
結果、以下のように「追加するべき特徴量」に関する回答が返ってきました。しかし、予測結果を元にして回答しているわけではなさそうです。
「性別」「年齢」「チケット番号」「乗船した港」等のデータが含まれていることは、説明していません。そのため、予測結果を元に試行錯誤しているわけではなく、事前に学習したデータの中に含まれるタイタニックデータを参照していると思われます。
4. 試したこと2:ハイパーパラメータのチューニング
ハイパーパラメータのチューニングが自動実行できるかどうかも試してみます。
■python
agent.run(""" タイタニック号の乗客が生存したかどうかを予測するlightGBMのモデルを作成します。予測精度を上げるため、ハイパーパラメータを調整してください。 # 入力データの情報: - 入力データセットの変数名は、dfです。 - 生存したかどうかは、変数Survivedです。1なら生存、0なら死亡です。 # 以下の手順で考えてください。 1. dfを訓練用とテスト用に分割してください。データセットの70%を訓練用、30%をテスト用としてください。 2. 訓練用データセットを使って予測モデルを作成し、テスト用データセットを使って予測精度を計算してください。 3. 予測精度は、AUC_ROCを使って比較してください。 4. 予測結果を元に、ハイパーパラメータを調整して再度予測をしてください。 # 結果 タスクの完了後、実行ログを用いて、推論結果の詳細・予測精度を説明してください。 ハイパーパラメータをどのように調整したかを詳細に説明してください。 私のリクエストに関係のない情報はフィルタリングしてください。 """ )
結果、以下のように「最も精度の良いハイパーパラメータ」に関する回答が返ってきました。しかし、こちらも予測結果を元にして回答しているわけではなさそうです。
langchainの途中経過のログを見てみると、ハイパーパラメータの調整をしているようには見えません。単にモデルを実行した上で、ハイパーパラメータの調整に関する返答を考えているように見えます。そのため、こちらの場合も予測結果を元に試行錯誤しているわけではなく、事前に学習したデータの中に含まれるタイタニックデータを参照していると思われます。
5. まとめ
今回の実験では、ChatGPTを使って「特徴量エンジニアリング」「ハイパーパラメータのチューニング」を自動的に実行できないかを試してみました。
結果は、上手くいきませんでした。モデルの予測結果を使ってChatGPTに方針を決めてもらおうとしたものの、おそらく予測結果を使わない結果が帰ってきました。タイタニック号のデータは使い古されたデータのため、ChatGPTの訓練データ中に特徴量やハイパーパラメータの情報を含んでいると予想されます。
予測モデルの精度改善を自動実行できないか検証するため、別の指示の与え方を試してみたいと思います。